<?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>94240</bug_id>
          
          <creation_ts>2012-08-16 12:52:08 -0700</creation_ts>
          <short_desc>[chromium] Implement deferred image decoding for WebKit Chromium</short_desc>
          <delta_ts>2012-10-27 11:57:03 -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>Images</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>94241</dependson>
    
    <dependson>95121</dependson>
    
    <dependson>96135</dependson>
          <blocked>99785</blocked>
    
    <blocked>99790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>dpranke</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>johnme</cc>
    
    <cc>nduca</cc>
    
    <cc>nick</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>ojan</cc>
    
    <cc>peter+ews</cc>
    
    <cc>pkasting</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>697385</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-16 12:52:08 -0700</bug_when>
    <thetext>Objective of this feature is to record a page rendering into a SkPicture without having to decode all images. Decoding is done in a later and decoded image is consumed on impl thread during rasterization phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713740</commentid>
    <comment_count>1</comment_count>
      <attachid>162595</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-06 14:55:40 -0700</bug_when>
    <thetext>Created attachment 162595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713744</commentid>
    <comment_count>2</comment_count>
      <attachid>162596</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-06 14:59:17 -0700</bug_when>
    <thetext>Created attachment 162596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713747</commentid>
    <comment_count>3</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-06 15:01:15 -0700</bug_when>
    <thetext>I have uploaded a temporary patch to show current progress of deferred image decoding. Patch is incomplete and still pretty rough. I haven&apos;t updated it for 2 weeks. I&apos;m focused in fixing 95121 which is a blocking issue for this change as it will simplifies scaled image caching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715389</commentid>
    <comment_count>4</comment_count>
      <attachid>162971</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-08 17:55:45 -0700</bug_when>
    <thetext>Created attachment 162971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715391</commentid>
    <comment_count>5</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-08 17:57:16 -0700</bug_when>
    <thetext>The latest patch is closer to review with all major problems solved. I have also added unit tests and layout tests. This change still depends on 95121 and 96135.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715633</commentid>
    <comment_count>6</comment_count>
      <attachid>162971</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-09 16:39:39 -0700</bug_when>
    <thetext>Comment on attachment 162971
Patch

Could you move the settings / initialization code out of CC / WebCompositor?  This is a concern of how an image is painted into the SkCanvas, which isn&apos;t really a concern of the compositor - WebCore is responsible for painting stuff.  The system doing the raster doesn&apos;t need to know about this directly - does it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716580</commentid>
    <comment_count>7</comment_count>
      <attachid>163224</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-10 15:15:27 -0700</bug_when>
    <thetext>Created attachment 163224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716588</commentid>
    <comment_count>8</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-10 15:19:49 -0700</bug_when>
    <thetext>Updated patch without use of CCSettings. One step closer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723867</commentid>
    <comment_count>9</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-09-19 15:13:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=163224) [details]
&gt; Patch

Hi, Alpha. It&apos;s a great work.

Deffered image decoding seems not to need a callback like ImageSourceObserver. I think this approach is good. There may be two key points.
1. ImageDecoderChromium::frameBufferAtIndex does not decode and return a ImageFrame including LazyDecodingPixelRef.
2. When LazyDecodingPixelRef::onLockPixels is called (i.e. replay SkPicture), we decode an image lazily.

This approach is so reasonable to me.

However, I have some questions.

1. Why do we need ImageDecodingStore? I think it is ok for ImageDecoderChromium::frameBufferAtIndex just to create SkBitmap including LazyDecodingPixelRef.
2. This prototype is not thread safe. I think Chrome need to play SkPicture off the main thread. Do you have plan to make it thread-safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725665</commentid>
    <comment_count>10</comment_count>
      <attachid>165161</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-21 11:41:58 -0700</bug_when>
    <thetext>Created attachment 165161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725666</commentid>
    <comment_count>11</comment_count>
      <attachid>165162</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-21 11:42:56 -0700</bug_when>
    <thetext>Created attachment 165162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725668</commentid>
    <comment_count>12</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-21 11:44:57 -0700</bug_when>
    <thetext>James: This patch is good for review. It depends on 95121 before this can land, 95121 depends on skia change but otherwise is good and stable. Since this is a big patch I would like to start the process for this while waiting for skia fix to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725673</commentid>
    <comment_count>13</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-21 11:50:53 -0700</bug_when>
    <thetext>Thanks for looking. 

This patch is the first of a series of changes to enable deferred image decoding. This patch intends to land the basic structure and do just deferring while lazily decoding on the main thread. Answers to your questions are below.

&gt; 
&gt; However, I have some questions.
&gt; 
&gt; 1. Why do we need ImageDecodingStore? I think it is ok for ImageDecoderChromium::frameBufferAtIndex just to create SkBitmap including LazyDecodingPixelRef.

We plan to centralize the job dispatching and caching of bitmap images in ImageDecodingStore. I think it can do a better job than MemoryCache because it knows what images and which portion is needs once it is operated on the impl thread together with the compositor. Later on there will be a lot of features built into the ImageDecodingStore.

&gt; 2. This prototype is not thread safe. I think Chrome need to play SkPicture off the main thread. Do you have plan to make it thread-safe?

Yes. Chrome now only playback SkPicture on the main thread so this is safe.

The plan is to:
1. Create an instance of ImageDecodingStore on the impl thread.
2. Synchronize ImageDecodingStore on the main thread and impl thread. More like a push model from main thread to impl thread.
3. Push encoded data from main thread to impl thread. This is the first step though we want to share SharedBuffer on both threads but that will need some extra effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725676</commentid>
    <comment_count>14</comment_count>
      <attachid>165165</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-21 11:53:58 -0700</bug_when>
    <thetext>Created attachment 165165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726214</commentid>
    <comment_count>15</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-09-22 21:00:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; The plan is to:
&gt; 1. Create an instance of ImageDecodingStore on the impl thread.
&gt; 2. Synchronize ImageDecodingStore on the main thread and impl thread. More like a push model from main thread to impl thread.
&gt; 3. Push encoded data from main thread to impl thread. This is the first step though we want to share SharedBuffer on both threads but that will need some extra effort.

Thanks for answers.

All sounds good!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729277</commentid>
    <comment_count>16</comment_count>
      <attachid>165165</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-27 00:20:37 -0700</bug_when>
    <thetext>Comment on attachment 165165
Patch

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

Sorry it&apos;s taken so long to get to this.  I&apos;ve left a bunch of comments, mostly about style and sticking to WebKit conventions.  There are also some layering violations to address.

The one big design question I have is the design of ImageDecoderChromium.  It closely mirrors ImageDecoder&apos;s interface and embeds an ImageDecoder but otherwise has no relationship to ImageDecoder in the type system.  All of the public functions on ImageDecoderChromium mimic public virtual functions on ImageDecoder AFAICT.  What is the plan here?  Do you intend to make ImageDecoderChromium a subclass of ImageDecoder?  If so, why doesn&apos;t this patch do that?  If not, why does it look so closely related?

&gt; Source/WebKit/chromium/ChangeLog:39
&gt; +2012-09-07  Alpha Lam  &lt;hclam@chromium.org&gt;

you have a double changelog here

&gt; Source/WebCore/page/Settings.h:435
&gt; +#if PLATFORM(CHROMIUM)

if you have a setting that&apos;s only used in chromium, put it on WebKit::WebSettings (which is chromium-specific) not WebCore::Settings (which is not)

&gt; Source/WebCore/platform/graphics/ImageSource.h:56
&gt; +#if USE(SKIA) &amp;&amp; PLATFORM(CHROMIUM)

USE(SKIA) &amp;&amp; PLATFORM(CHROMIUM) is redundant. chromium always sets USE(SKIA)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:30
&gt; +#include &quot;Settings.h&quot;

this is a layering violation.  Settings is a WebCore/page concept and this is in WebCore/platform - the rule for /platform is it can only depend on WTF and other things in WebCore/platform but shouldn&apos;t know about anything above that

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:53
&gt; +    ImageDecoder* actualDecoder = ImageDecoder::create(data, alphaOption, gammaAndColorOption);
&gt; +    if (!actualDecoder)
&gt; +        return 0;
&gt; +    return new ImageDecoderChromium(actualDecoder);

use OwnPtr&lt;&gt; / PassOwnPtr&lt;&gt; for the ImageDecoder here, not raw. When using WebCore objects it&apos;s extremely rare (and extremely suspicious) to be dealing with raw pointers unless there is no ownership transfer taking place

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:64
&gt; +    if (m_actualDecoder.get())

why are we null checking m_actualDecoder in this function? it seems that it can&apos;t be null, looking at the ::create()

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:110
&gt; +    } else {
&gt; +        ASSERT(!m_data.get());

i don&apos;t see how we could get into this branch

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:119
&gt; +    if (m_actualDecoder.get())

no .get() needed here or on any of the other m_actualDecoder null checks

&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.h:44
&gt; +    // Used in test only. Ownership of decoder is transferred.
&gt; +    static ImageDecoderChromium* create(ImageDecoder*);

If ownership is transfered encode that in the type i.e. use a PassOwnPtr&lt;ImageDecoder&gt; instead of a raw one

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:63
&gt; +    WTF::deleteAllValues(m_frameGenerators);
&gt; +    WTF::deleteAllValues(m_frameCache);

instead of these, why not make m_frameGenerators and m_frameCache have OwnPtr&lt;&gt;s as values?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:66
&gt; +// static

we don&apos;t typically use this type of comment in WebKit code

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:92
&gt; +SkBitmap ImageDecodingStore::createLazyDecodedSkBitmap(WTF::PassOwnPtr&lt;ImageDecoder&gt; decoder)

no WTF:: needed. &lt;wtf/PassOwnPtr.h&gt; has a using statement to put PassOwnPtr&lt;&gt; in the global namespace - that&apos;s the common pattern for all WTF types

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:107
&gt; +    bitmap.pixelRef()-&gt;setURI(labelLazyDecoded);

this seems odd - in what sense is &quot;lazy&quot; a URI?  why do pixelrefs have URIs?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:123
&gt; +    // Note: Because row bytes is fixed to SkBitmap this means we have to scale the
&gt; +    // entire image.

I can&apos;t quite follow what this comment is saying

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:199
&gt; +    if (this == instanceOnMainThread() &amp;&amp; WTF::isMainThread())

no WTF::

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:200
&gt; +        return true;

why not just &quot;return this == instanceOnMainThread &amp;&amp; isMainThread();&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:204
&gt; +void ImageDecodingStore::createFrameGenerator(WTF::PassOwnPtr&lt;ImageDecoder&gt; decoder)

no WTF:: - I won&apos;t comment on the rest but please find+remove them all

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:208
&gt; +    ImageFrameGenerator* generator = new ImageFrameGenerator(decoder);
&gt; +    ++m_nextId;
&gt; +    m_frameGenerators.add(m_nextId, generator);

what&apos;s the ownership of the ImageFrameGenerator?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:237
&gt; +            delete m_frameCache[i];

if m_frameCache had OwnPtr values you wouldn&apos;t need this explicit delete. smart pointers are great, use &apos;em!

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:53
&gt; +    if (m_decoder.get())

just if (m_decoder) - WTF smart pointers all have operator bool()s implementations that do the right thing

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.h:41
&gt; +    ImageFrameGenerator(PassOwnPtr&lt;ImageDecoder&gt;);

explicit

&gt; Source/WebCore/platform/graphics/chromium/LazyDecodingPixelRef.cpp:32
&gt; +SK_DECLARE_GLOBAL_MUTEX(gLazyDecodingImageRefMutex);

this looks like it creates a static initializer and destructor. double-yuck!  why do we have to use a skia macro here?

we don&apos;t name globals with &quot;gFooBar&quot; in webkit - if it&apos;s a static member variable do s_fooBar, otherwise just fooBar

&gt; Source/WebCore/platform/graphics/chromium/LazyDecodingPixelRef.h:39
&gt; +class LazyDecodingPixelRef : public SkPixelRef {

SkPixelRef means it&apos;s implicit SkRefCnt&apos;d.  Could we try to keep it in SkAutoTUnref&apos;s when it&apos;s not owned by another object?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:150
&gt; +#if PLATFORM(CHROMIUM)
&gt; +        void setSkBitmap(const SkBitmap&amp; bitmap)

it feels a bit weird to make ImageDecoder even more aware of skia, but i guess it already knows about SkBitmap in a few ways</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729918</commentid>
    <comment_count>17</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-27 15:28:01 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 165165 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165165&amp;action=review
&gt; 
&gt; Sorry it&apos;s taken so long to get to this.  I&apos;ve left a bunch of comments, mostly about style and sticking to WebKit conventions.  There are also some layering violations to address.
&gt; 
&gt; The one big design question I have is the design of ImageDecoderChromium.  It closely mirrors ImageDecoder&apos;s interface and embeds an ImageDecoder but otherwise has no relationship to ImageDecoder in the type system.  All of the public functions on ImageDecoderChromium mimic public virtual functions on ImageDecoder AFAICT.  What is the plan here?  Do you intend to make ImageDecoderChromium a subclass of ImageDecoder?  If so, why doesn&apos;t this patch do that?  If not, why does it look so closely related?

Thanks for looking!

I&apos;ll cleanup the style and layering violations later and focus on ironing the bigger design questions around ImageDecoderChromium.

Here&apos;s some background information.

A platform image decoder is accessed through a NativeImageSourcePtr type (defined as a typedef), CG and other platforms have different implementations.

ImageDecoder interface is used by all non-CG ports and currently:
typedef ImageDecoder* NativeImageSourcePtr; // for non-CG
typedef CGImageSourceRef NativeImageSourcePtr; // for CG

ImageSource is used by BitmapImage to utilize an image decoder. ImageSource access this NativeImageSourcePtr not through a type system but method names, which are implemented by CGImageSourceRef and ImageDecoder.

The design here for Chromium is to have ImageDecoderChromium NOT inherits from ImageDecoder. The objective of having this extra type is to:

1. Be a bridge to delicate calls to the actual image decoder, i.e. subclasses of ImageDecoder
2. Be a bridge to delicate calls to the deferred image decoding system, i.e. ImageDecodingStore
3. Provide a factory method for ImageSource to construct a NativeImageSourcePtr

I specifically do not want ImageDecoderChromium to inherit from ImageDecoder because there&apos;s too many other things (member variables and methods) defined in ImageDecoder not related to the above objectives. I also want to avoid ImageDecoderChromium being a subclass of ImageDecoder and keeps a reference to another subclass of ImageDecoder (the actual image decoder say for JPEG, GIF, etc). So I concluded that I want to have bridge layer be its own type.

The name of ImageDecoderChromium seems to be confusing and I can rename it to ImageDecodingBridge so it is not confused with ImageDecoder.

I also do not want to pack the functionalities of ImageDecoderChromium into ImageSource, This avoids having a duplicate implementation of ImageSource and again have a clear bridge layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731129</commentid>
    <comment_count>18</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-09-28 18:50:05 -0700</bug_when>
    <thetext>James: Any comments on the suggestions I posted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734221</commentid>
    <comment_count>19</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-03 16:59:39 -0700</bug_when>
    <thetext>James: Would like to get more feedback before fixing the patch with style. More specifically about the design of ImageDecoderChromium. Do you think the rationale on comments #17 makes sense? Should I rename the class to ImageDecodingBridge to avoid confusion? Please advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734239</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-03 17:16:55 -0700</bug_when>
    <thetext>That plan sounds OK I suppose.  I can look in detail when there&apos;s a patch to look at.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735256</commentid>
    <comment_count>21</comment_count>
      <attachid>167232</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-04 19:35:03 -0700</bug_when>
    <thetext>Created attachment 167232
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735257</commentid>
    <comment_count>22</comment_count>
      <attachid>165165</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-04 19:37:27 -0700</bug_when>
    <thetext>Comment on attachment 165165
Patch

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

Address comments from James. Patch won&apos;t compile because it needs to roll DEPS on chromium that I&apos;ll do separately. Otherwise it builds locally and ran all webkit_unit_tests and layout tests without failures.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:30
&gt;&gt; +#include &quot;Settings.h&quot;
&gt; 
&gt; this is a layering violation.  Settings is a WebCore/page concept and this is in WebCore/platform - the rule for /platform is it can only depend on WTF and other things in WebCore/platform but shouldn&apos;t know about anything above that

Removed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:53
&gt;&gt; +    return new ImageDecoderChromium(actualDecoder);
&gt; 
&gt; use OwnPtr&lt;&gt; / PassOwnPtr&lt;&gt; for the ImageDecoder here, not raw. When using WebCore objects it&apos;s extremely rare (and extremely suspicious) to be dealing with raw pointers unless there is no ownership transfer taking place

There&apos;s a bug filed about making ImageDecoder::create() return PassOwnPtr&lt;&gt; but that not in the scope of this patch. See: https://bugs.webkit.org/show_bug.cgi?id=97039
 
ImageDecoder now returns a raw pointer already so this factory method does the same to match. It needs a separate refactoring to clean that up.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:64
&gt;&gt; +    if (m_actualDecoder.get())
&gt; 
&gt; why are we null checking m_actualDecoder in this function? it seems that it can&apos;t be null, looking at the ::create()

See line 82. When an image is deferred the ownership of ImageDecoder is transfered to ImageDecodingStore and is not referenced by this object any more.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecoderChromium.cpp:110
&gt;&gt; +        ASSERT(!m_data.get());
&gt; 
&gt; i don&apos;t see how we could get into this branch

See line 82. When an image is deferred the ownership of ImageDecoder is transfered to ImageDecodingStore and is not referenced by this object any more. In that case we set data to ImageDecodingStore.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:107
&gt;&gt; +    bitmap.pixelRef()-&gt;setURI(labelLazyDecoded);
&gt; 
&gt; this seems odd - in what sense is &quot;lazy&quot; a URI?  why do pixelrefs have URIs?

This is used as an identifier that the SkPixelRef referenced by SkBitmap is of  type LazyDecodingPixelRef. URI is optional and is generally not used, we use it here as type identifier. Added comments to explain this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:123
&gt;&gt; +    // entire image.
&gt; 
&gt; I can&apos;t quite follow what this comment is saying

Removed this comments to avoid confusion. This means that SkBitmap has the row bytes of the entire scaled image and thus when we prepare a SkPixelRef we can&apos;t just scale a portion but have to provide the full scaled image.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:208
&gt;&gt; +    m_frameGenerators.add(m_nextId, generator);
&gt; 
&gt; what&apos;s the ownership of the ImageFrameGenerator?

Changed it to OwnPtr in m_frameGenerators. They are owned by this object.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:237
&gt;&gt; +            delete m_frameCache[i];
&gt; 
&gt; if m_frameCache had OwnPtr values you wouldn&apos;t need this explicit delete. smart pointers are great, use &apos;em!

Done! :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/LazyDecodingPixelRef.cpp:32
&gt;&gt; +SK_DECLARE_GLOBAL_MUTEX(gLazyDecodingImageRefMutex);
&gt; 
&gt; this looks like it creates a static initializer and destructor. double-yuck!  why do we have to use a skia macro here?
&gt; 
&gt; we don&apos;t name globals with &quot;gFooBar&quot; in webkit - if it&apos;s a static member variable do s_fooBar, otherwise just fooBar

We don&apos;t really need this actually, removed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LazyDecodingPixelRef.h:39
&gt;&gt; +class LazyDecodingPixelRef : public SkPixelRef {
&gt; 
&gt; SkPixelRef means it&apos;s implicit SkRefCnt&apos;d.  Could we try to keep it in SkAutoTUnref&apos;s when it&apos;s not owned by another object?

Good catch! This class is never referenced by objects other than SkBitmap but I did find I forgot to call setPixelRef(new LazyDecodingPixelRef(...))-&gt;unref().

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:150
&gt;&gt; +        void setSkBitmap(const SkBitmap&amp; bitmap)
&gt; 
&gt; it feels a bit weird to make ImageDecoder even more aware of skia, but i guess it already knows about SkBitmap in a few ways

You&apos;re right ImageDecoder does know about SkBitmap, in fact look at ImageDecoderSkia.cpp for Skia port this class is written around SkBitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735260</commentid>
    <comment_count>23</comment_count>
      <attachid>167233</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-04 19:42:31 -0700</bug_when>
    <thetext>Created attachment 167233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735262</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 19:46:52 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735270</commentid>
    <comment_count>25</comment_count>
      <attachid>167233</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 19:58:04 -0700</bug_when>
    <thetext>Comment on attachment 167233
Patch

Attachment 167233 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14181212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735273</commentid>
    <comment_count>26</comment_count>
      <attachid>167233</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-04 20:17:12 -0700</bug_when>
    <thetext>Comment on attachment 167233
Patch

Attachment 167233 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14152776</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735278</commentid>
    <comment_count>27</comment_count>
      <attachid>167233</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 20:29:58 -0700</bug_when>
    <thetext>Comment on attachment 167233
Patch

Attachment 167233 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14175361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735285</commentid>
    <comment_count>28</comment_count>
      <attachid>167233</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 21:06:54 -0700</bug_when>
    <thetext>Comment on attachment 167233
Patch

Attachment 167233 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14152796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735409</commentid>
    <comment_count>29</comment_count>
      <attachid>167262</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-04 23:41:43 -0700</bug_when>
    <thetext>Created attachment 167262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735417</commentid>
    <comment_count>30</comment_count>
      <attachid>167262</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 23:57:09 -0700</bug_when>
    <thetext>Comment on attachment 167262
Patch

Attachment 167262 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14171601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735428</commentid>
    <comment_count>31</comment_count>
      <attachid>167262</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-05 00:09:12 -0700</bug_when>
    <thetext>Comment on attachment 167262
Patch

Attachment 167262 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14176406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735460</commentid>
    <comment_count>32</comment_count>
      <attachid>167262</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-05 00:50:54 -0700</bug_when>
    <thetext>Comment on attachment 167262
Patch

Attachment 167262 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14152852

New failing tests:
platform/chromium/virtual/deferred/fast/images/paletted-png-with-color-profile.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735491</commentid>
    <comment_count>33</comment_count>
      <attachid>167262</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 01:40:10 -0700</bug_when>
    <thetext>Comment on attachment 167262
Patch

Attachment 167262 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14180362</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735841</commentid>
    <comment_count>34</comment_count>
      <attachid>167362</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 11:50:42 -0700</bug_when>
    <thetext>Created attachment 167362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735842</commentid>
    <comment_count>35</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 11:52:09 -0700</bug_when>
    <thetext>Fixed compile warnings and marked a test with missing results. Bots should be green now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735852</commentid>
    <comment_count>36</comment_count>
      <attachid>167362</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-05 12:05:39 -0700</bug_when>
    <thetext>Comment on attachment 167362
Patch

Attachment 167362 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14171837</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735857</commentid>
    <comment_count>37</comment_count>
      <attachid>167364</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 12:07:47 -0700</bug_when>
    <thetext>Created attachment 167364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735858</commentid>
    <comment_count>38</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 12:08:09 -0700</bug_when>
    <thetext>Fixed Mac CG port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735935</commentid>
    <comment_count>39</comment_count>
      <attachid>167377</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 13:49:51 -0700</bug_when>
    <thetext>Created attachment 167377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735936</commentid>
    <comment_count>40</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 13:50:17 -0700</bug_when>
    <thetext>Merged again... touching too many files.. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735987</commentid>
    <comment_count>41</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-05 14:53:04 -0700</bug_when>
    <thetext>Woohoo all green now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740973</commentid>
    <comment_count>42</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-12 09:34:44 -0700</bug_when>
    <thetext>Any updates on this patch? It is difficult to move forward without this patch reviewed and landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741021</commentid>
    <comment_count>43</comment_count>
      <attachid>167377</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-12 10:46:33 -0700</bug_when>
    <thetext>Comment on attachment 167377
Patch

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

Preliminary comments; more to come.

&gt; Source/WebCore/ChangeLog:14
&gt; +        When used in conjunction with per-tile painting this feature defer

Grammar nits:

defer -&gt; defers

&gt; Source/WebCore/ChangeLog:15
&gt; +        image decoding until SkCanvas referencing the image is rasterized.

until SkCanvas -&gt; until the SkCanvas

&gt; Source/WebCore/ChangeLog:23
&gt; +        drawing BitmapImage into a GraphicsContext it makes a request to

drawing BitmapImage -&gt; drawing a BitmapImage

&gt; Source/WebCore/ChangeLog:24
&gt; +        create NativeImageSkia. We substitute the content in NativeImageSkia

create NativeImageSkia -&gt; create a NativeImageSkia.

&gt; Source/WebCore/ChangeLog:27
&gt; +        ImageDecodingBridge

&lt;bikeshed&gt;Would it make sense to call this DeferredImageDecoder instead?  (I realize it may not always defer).&lt;/bikeshed&gt;

&gt; Source/WebCore/ChangeLog:29
&gt; +        This is the platform implementation of a image decoder for Chromium.

a image decoder -&gt; an image decoder

&gt; Source/WebCore/ChangeLog:31
&gt; +        ImageDecoder or create a lazily decoded SkBitmap and delegates calls

or create a lazily decoded -&gt; or creates a lazily-decoded

&gt; Source/WebCore/ChangeLog:37
&gt; +        data and corresponding ImageDecoder for doing actual decoding. It is

and corresponding -&gt; and the corresponding

&gt; Source/WebCore/platform/graphics/ImageSource.h:51
&gt; +#elif !USE(SKIA) || !PLATFORM(CHROMIUM)

These #ifdefs don&apos;t match the ones used below.  IIRC, Blackberry uses #USE(SKIA), but not PLATFORM(CHROMIUM).  Will the below code still work?  (Sadly, there is no EWS bot for Blackberry AFAIK).

&gt; Source/WebCore/platform/graphics/ImageSource.h:58
&gt; +typedef ImageDecodingBridge NativeImageSourceFactory;

&lt;bikeshed&gt; It seems that NativeImageSourceFactory is really more an image decoder (or wrapper that defers decoding).  Perhaps it should be called NativeImageDecoder instead?&lt;/bikeshed&gt;

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingBridge.cpp:92
&gt; +    return &amp;m_lazyDecodedFrame;

This seems dangerous.  Are you always certain that the returned frame is destroyed or copied before the ImageDecodingBridge?  OTOH, it looks like the regular decoders do this too, since they serve ImageFrame*&apos;s out of cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741735</commentid>
    <comment_count>44</comment_count>
      <attachid>167377</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-14 22:00:08 -0700</bug_when>
    <thetext>Comment on attachment 167377
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +        ImageDecodingBridge
&gt; 
&gt; &lt;bikeshed&gt;Would it make sense to call this DeferredImageDecoder instead?  (I realize it may not always defer).&lt;/bikeshed&gt;

I went back and forth with this and settled with this at the end. If needed we can rename this in a later patch.

&gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:51
&gt;&gt; +#elif !USE(SKIA) || !PLATFORM(CHROMIUM)
&gt; 
&gt; These #ifdefs don&apos;t match the ones used below.  IIRC, Blackberry uses #USE(SKIA), but not PLATFORM(CHROMIUM).  Will the below code still work?  (Sadly, there is no EWS bot for Blackberry AFAIK).

I changed this to !PLATFORM(CHROMIUM) this should work for all non-chromium and non-cg platforms.

&gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:58
&gt;&gt; +typedef ImageDecodingBridge NativeImageSourceFactory;
&gt; 
&gt; &lt;bikeshed&gt; It seems that NativeImageSourceFactory is really more an image decoder (or wrapper that defers decoding).  Perhaps it should be called NativeImageDecoder instead?&lt;/bikeshed&gt;

Note that &quot;NativeImageSourceFactory&quot; is just a factory it doesn&apos;t need to be a decoder. See ImageSource.cpp:85. Also the native image decoder is called &quot;NativeImageSourcePtr&quot; so I think NativeImageSource + Factory is a better name.

We can rename all these to be better, e.g. NativeImageDecoderPtr and NativeImageDecoderFactory but that can be done afterwards.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingBridge.cpp:92
&gt;&gt; +    return &amp;m_lazyDecodedFrame;
&gt; 
&gt; This seems dangerous.  Are you always certain that the returned frame is destroyed or copied before the ImageDecodingBridge?  OTOH, it looks like the regular decoders do this too, since they serve ImageFrame*&apos;s out of cache.

ImageFrame is never cached by caller. All usage of ImageFrame looks like this:
ImageFrame *frame = decoder-&gt;frameBufferAtIndex(0);
frame-&gt;asNewNativeImage();

So I think this is safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741737</commentid>
    <comment_count>45</comment_count>
      <attachid>168622</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-14 22:08:31 -0700</bug_when>
    <thetext>Created attachment 168622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741745</commentid>
    <comment_count>46</comment_count>
      <attachid>168622</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-14 22:24:41 -0700</bug_when>
    <thetext>Comment on attachment 168622
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingBridge.h:44
&gt; +    // Use only in test.
&gt; +    static PassOwnPtr&lt;ImageDecodingBridge&gt; create(PassOwnPtr&lt;ImageDecoder&gt;);

Please rename this function to something that indicates that it should only be used during testing.  For example, &quot;createForTesting&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741746</commentid>
    <comment_count>47</comment_count>
      <attachid>168622</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-14 22:27:36 -0700</bug_when>
    <thetext>Comment on attachment 168622
Patch

I&apos;m sorry if I missed this in the discussion, but can you include information in the ChangeLog about which benchmarks get faster any by how much?  Do any benchmarks get slower?  (I&apos;m assuming the goal here is to improve performance---if there are other goals, it would be helpful to explain them in the ChangeLog as well.)

I&apos;m marking this patch R- for now because this patch doesn&apos;t explain the relative benefits and costs of this patch.  I haven&apos;t reviewed the actual code change in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741765</commentid>
    <comment_count>48</comment_count>
      <attachid>168629</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-14 23:26:27 -0700</bug_when>
    <thetext>Created attachment 168629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741766</commentid>
    <comment_count>49</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-14 23:28:42 -0700</bug_when>
    <thetext>Thanks for looking.

I have updated the ChangeLog to include the rationale of this change.

This change does not improve (or degrade) performance but an architectural change to enable impl-side painting, which will improve performance by doing rasterization on multiple threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741776</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-14 23:43:34 -0700</bug_when>
    <thetext>Thanks.  It sounds like we might want to review this change in two parts:

1) jamesr or enne should provide feedback as to whether we want to make this architectural change and as to whether this particular design integrates well with other impl-side processing.

2) If the reviewer for (1) doesn&apos;t feel comfortable reviewing the image decoding details, we can ask an image decoding expert, such as Noel Gordon or pkasting, to review that aspect of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741777</commentid>
    <comment_count>51</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-14 23:45:40 -0700</bug_when>
    <thetext>Stephen, I certainly don&apos;t mean to exclude you.  It sounds like you&apos;re interested in providing feedback as well.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742180</commentid>
    <comment_count>52</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-15 10:56:01 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Thanks.  It sounds like we might want to review this change in two parts:
&gt; 
&gt; 1) jamesr or enne should provide feedback as to whether we want to make this architectural change and as to whether this particular design integrates well with other impl-side processing.

Yes we do and it does.

&gt; 
&gt; 2) If the reviewer for (1) doesn&apos;t feel comfortable reviewing the image decoding details, we can ask an image decoding expert, such as Noel Gordon or pkasting, to review that aspect of the change.

That would be excellent - I don&apos;t know all that much about the specifics of the image decoder guts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742184</commentid>
    <comment_count>53</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 10:59:48 -0700</bug_when>
    <thetext>&gt; &gt; 2) If the reviewer for (1) doesn&apos;t feel comfortable reviewing the image decoding details, we can ask an image decoding expert, such as Noel Gordon or pkasting, to review that aspect of the change.
&gt; 
&gt; That would be excellent - I don&apos;t know all that much about the specifics of the image decoder guts.

Let me ping pkasting to look at the image decoder part and Stephen to look at the Skia (SkPixelRef) part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742190</commentid>
    <comment_count>54</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-10-15 11:05:12 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Let me ping pkasting to look at the image decoder part and Stephen to look at the Skia (SkPixelRef) part.

At a glance it looks like most code is new rather than a modification of existing code.  So I&apos;m not sure what all you want me to look at.  Tell me specifically and I&apos;ll take a look.

Note that I am not a WebKit reviewer so my signoff doesn&apos;t mean anything official.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742201</commentid>
    <comment_count>55</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 11:14:04 -0700</bug_when>
    <thetext>pkasting: Please look at these two files:

1. ImageDecodingBridge.cpp

This file implements a bridge to generate defer-decoded images from ImageDecodingStore.

2. ImageDecodingStore.cpp

This file is where the image decoding happens using a WebKit ImageDecoder.

They are in fact new implementation that is based on existing image decoding architecture in WebKit. I think your experience with this area is very useful for the review of this patch.


senorblanco: Please look at these two files:

1. LazyDecodingPixelRef.cpp

Implementation of SkPixelRef which calls ImageDecodingStore to lazily to decode an image.

2. ImageDecodingStore.cpp

Please look at how lazy decoding is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742202</commentid>
    <comment_count>56</comment_count>
      <attachid>168629</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-10-15 11:14:18 -0700</bug_when>
    <thetext>Comment on attachment 168629
Patch

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

&gt; Source/WebCore/ChangeLog:38
&gt; +        Both recording and rasterization happen on the main thread.

How does this line jive with &quot;This feature enables ... on multiple threads&quot;. ?

&gt; Source/WebCore/ChangeLog:45
&gt; +        This feature is disabled by default.

Is it important that this detail have an on/off switch? Is it just this way for while, til we&apos;re sure it works, or are there times when we really don&apos;t want this?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:105
&gt; +    // Use URI to identify this is a lazily decoded SkPixelRef of type LazyDecodingPixelRef.

The intent (but not enforced) is for the URI to try to identify the specific image (e.g. the web-address for this image). This use is fine, but if we have the url somewhere, that would be more meaningful.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:107
&gt; +    bitmap.setImmutable(); // Prevents SkPicture from recording pixels.

setImmutable(); // Inform the bitmap that we will never change the pixels. This is a performance hint subsystems that may try to cache this bitmap (e.g. pictures, pipes, gpu, pdf, etc.)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:108
&gt; +    return bitmap;

Can we also mark the bitmap as opaque (if it is)? setIsOpaque(). This is a big perf win, but only if the bitmap is flagged. See ImageFrameSkia.cpp for sites that make this call.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:125
&gt; +    return resizedBitmap;

Similar comments here about setImmutable and setIsOpaque (see createLazyDecodedSkBitmap).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742218</commentid>
    <comment_count>57</comment_count>
      <attachid>167377</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-15 11:29:10 -0700</bug_when>
    <thetext>Comment on attachment 167377
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt;&gt; +        ImageDecodingBridge
&gt;&gt; 
&gt;&gt; &lt;bikeshed&gt;Would it make sense to call this DeferredImageDecoder instead?  (I realize it may not always defer).&lt;/bikeshed&gt;
&gt; 
&gt; I went back and forth with this and settled with this at the end. If needed we can rename this in a later patch.

No, I&apos;d prefer we get the name correct now.  You describe it as &quot;the platform implementation of a image decoder for Chromium.&quot;  That suggests to me it would be better described as a DeferredImageDecoder, no?  I&apos;m open to other suggestions (DeferredImageDecodingBridge?), I just find the &quot;Bridge&quot; name alone to be close to meaningless.

&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:58
&gt;&gt;&gt; +typedef ImageDecodingBridge NativeImageSourceFactory;
&gt;&gt; 
&gt;&gt; &lt;bikeshed&gt; It seems that NativeImageSourceFactory is really more an image decoder (or wrapper that defers decoding).  Perhaps it should be called NativeImageDecoder instead?&lt;/bikeshed&gt;
&gt; 
&gt; Note that &quot;NativeImageSourceFactory&quot; is just a factory it doesn&apos;t need to be a decoder. See ImageSource.cpp:85. Also the native image decoder is called &quot;NativeImageSourcePtr&quot; so I think NativeImageSource + Factory is a better name.
&gt; 
&gt; We can rename all these to be better, e.g. NativeImageDecoderPtr and NativeImageDecoderFactory but that can be done afterwards.

As above, I&apos;d prefer you get the names right before landing.  It&apos;ll save you doing SCM/gyp file renames later too.

I still think what both classes have in common is decoding.  Yes, all decoders are factories, but we don&apos;t have any factories yet which aren&apos;t decoders, so my preference would be to stick to existing concepts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742242</commentid>
    <comment_count>58</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 11:52:10 -0700</bug_when>
    <thetext>Upload a new patch to address your comments in a bit.

&gt; How does this line jive with &quot;This feature enables ... on multiple threads&quot;. ?
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:45
&gt; &gt; +        This feature is disabled by default.
&gt; 
&gt; Is it important that this detail have an on/off switch? Is it just this way for while, til we&apos;re sure it works, or are there times when we really don&apos;t want this?

This is the same for other WebKit features. On top of that this feature is incomplete so turned off by default now and only run with layout tests.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:105
&gt; &gt; +    // Use URI to identify this is a lazily decoded SkPixelRef of type LazyDecodingPixelRef.
&gt; 
&gt; The intent (but not enforced) is for the URI to try to identify the specific image (e.g. the web-address for this image). This use is fine, but if we have the url somewhere, that would be more meaningful.

It requires significant plumbing to get the actual URI here so I put a FIXME there. Right now this is just to identify the type is LazyDecodingPixelRef.

I&apos;m open to suggestions for better ways to identify types of SkPixelRef.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:107
&gt; &gt; +    bitmap.setImmutable(); // Prevents SkPicture from recording pixels.
&gt; 
&gt; setImmutable(); // Inform the bitmap that we will never change the pixels. This is a performance hint subsystems that may try to cache this bitmap (e.g. pictures, pipes, gpu, pdf, etc.)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:108
&gt; &gt; +    return bitmap;
&gt; 
&gt; Can we also mark the bitmap as opaque (if it is)? setIsOpaque(). This is a big perf win, but only if the bitmap is flagged. See ImageFrameSkia.cpp for sites that make this call.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:125
&gt; &gt; +    return resizedBitmap;
&gt; 
&gt; Similar comments here about setImmutable and setIsOpaque (see createLazyDecodedSkBitmap).

It doesn&apos;t know until the image is actually decoded.

There are cases that we can guess but I&apos;ll leave this optimization for later. Left a FIXME in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742251</commentid>
    <comment_count>59</comment_count>
      <attachid>168629</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-15 12:02:04 -0700</bug_when>
    <thetext>Comment on attachment 168629
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        This feature enables playback and decoding strategy that runs on
&gt; +        multiple threads.

Out of curiosity, does this mean that we might be decoding the same image on different playback threads?  Does the current design make that safe (and performant)?

&gt; Source/WebCore/ChangeLog:33
&gt; +        An image decoding operation is recorded as a SkPixelRef object
&gt; +        implemented by LazyDecodingPixelRef. This object references raw encoded
&gt; +        data, regions to be decoded and scaling information.

Another design question (apologies if this is addressed by the code; I haven&apos;t grokked it all yet):  how does this handle the same image drawn at multiple scale factors?  Will that cause multiple re-decodes in some circumstances?  Something like the Flying Images demo might be a good performance benchmark for this use case.

&gt; Source/WebCore/ChangeLog:74
&gt; +        This object manages all encoded images. It keeps track of encoded
&gt; +        data and the corresponding ImageDecoder for doing actual decoding. It
&gt; +        is also responsible for generating lazily decoded SkBitmaps. This
&gt; +        SkBitmap contains a LazyDecodingPixelRef object which references to an
&gt; +        image entry in ImageDecodingStore.

Ugh.  Is it really necessary to add yet another layer of cacheing?  Is there a way this could be combined with (or subsume) the single layer of &quot;cache&quot; instead NativeImageSkia?

(My longer-term hope was that we could make good quality resizing fast enough that we don&apos;t need to do any cacheing at all, although it&apos;s not fair to make you wait for that.  It also might be incompatible with the goal of reducing memory usage in the resize-once-to-small-size use case.)

In the interim, I wonder if we could decouple the resize cacheing from the decode cacheing, so that we could use your new cache in place of the NativeImageSkia &quot;cache&quot;, irrespective of whether deferred decoding was on or off.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:67
&gt; +ImageDecodingStore* ImageDecodingStore::instanceOnMainThread()

Should this function also be asserting that it&apos;s called on the main thread?  It&apos;s public, and I see that NativeImageSkia and ImageDecodingBridge both call it without asserts.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:72
&gt; +void ImageDecodingStore::initializeOnMainThread()

Same here.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:103
&gt; +    bitmap.setPixelRef(new LazyDecodingPixelRef(m_nextId, fullSize, fullRect))-&gt;unref();

Note that there&apos;s already a generation ID in SkPixelRef (getGenerationID()) which seems to do exactly what m_nextId does here.  You might consider using that instead of rolling your own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742264</commentid>
    <comment_count>60</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-10-15 12:21:01 -0700</bug_when>
    <thetext>duh -- good point about isopaqueness : we don&apos;t know (at least for some image types) until we actually decode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742268</commentid>
    <comment_count>61</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-10-15 12:22:49 -0700</bug_when>
    <thetext>un-duh -- we should definitely mark as TODO to consider decoding just enough to know if the image has per-pixel alpha (e.g. jpeg never does, etc.). If we wait until drawing, then it may be too late to influence which blitter we choose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742289</commentid>
    <comment_count>62</comment_count>
    <who name="Nick Carter">nick</who>
    <bug_when>2012-10-15 12:39:10 -0700</bug_when>
    <thetext>If we know the width and height (a prereq for having pixel data), then we know the image format, and in many cases we can predict that the bitmap will be opaque. But it&apos;s important to remember that a half-received and half-decoded JPEG image may have a transparent bottom half, even though JPEG doesn&apos;t support alpha. I&apos;m a fan of eventually moving to an approach where the decoder tracks the &quot;valid region&quot; of an image, in which case we treat the image as opaque even sooner (it also might speed up pixel buffer initialization).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742293</commentid>
    <comment_count>63</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 12:40:23 -0700</bug_when>
    <thetext>&gt; Out of curiosity, does this mean that we might be decoding the same image on different playback threads?  Does the current design make that safe (and performant)?

We are probably not doing this. Decode task is per image and we haven&apos;t implemented the multithreading part yet.

&gt; Another design question (apologies if this is addressed by the code; I haven&apos;t grokked it all yet):  how does this handle the same image drawn at multiple scale factors?  Will that cause multiple re-decodes in some circumstances?  Something like the Flying Images demo might be a good performance benchmark for this use case.

This code handles same-image-multiple-scale multiple scale by caching the decoded image in original size and scale on demand.

We need some data to back the best caching scheme / strategy and as you can see this patch doesn&apos;t have a complete caching scheme. I intentionally leave it blank for later patches.
 
&gt; Ugh.  Is it really necessary to add yet another layer of cacheing?  Is there a way this could be combined with (or subsume) the single layer of &quot;cache&quot; instead NativeImageSkia?
&gt; 
&gt; (My longer-term hope was that we could make good quality resizing fast enough that we don&apos;t need to do any cacheing at all, although it&apos;s not fair to make you wait for that.  It also might be incompatible with the goal of reducing memory usage in the resize-once-to-small-size use case.)
&gt; 
&gt; In the interim, I wonder if we could decouple the resize cacheing from the decode cacheing, so that we could use your new cache in place of the NativeImageSkia &quot;cache&quot;, irrespective of whether deferred decoding was on or off.

When this is turned on NativeImageSkia doesn&apos;t do caching and caching is handled centrally by ImageDecodingStore.

I noticed that NativeImageSkia does caching itself, my plan is to obsolete that when this feature is ready. This feature doesn&apos;t need to depend on impl thread and operate just as well on the main thread. Which means we can &quot;defer&quot; decoding on the main thread and use the new cache in place of caching in NativeImageSkia.

One goal for this feature is to centralize all image cache (in ImageDecodingStore), give it all the interesting information (i.e. image, scaling info, regions) such that we can come up with the best caching / decoding scheme. 

&gt; 
&gt; Should this function also be asserting that it&apos;s called on the main thread?  It&apos;s public, and I see that NativeImageSkia and ImageDecodingBridge both call it without asserts.
&gt; Same here.

Done.
 
&gt; Note that there&apos;s already a generation ID in SkPixelRef (getGenerationID()) which seems to do exactly what m_nextId does here.  You might consider using that instead of rolling your own.

ID in ImageDecodingStore identifies an image while SkPixelRef identifies (image, scale, region).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742305</commentid>
    <comment_count>64</comment_count>
      <attachid>168759</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 12:45:30 -0700</bug_when>
    <thetext>Created attachment 168759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742318</commentid>
    <comment_count>65</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 12:48:21 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; un-duh -- we should definitely mark as TODO to consider decoding just enough to know if the image has per-pixel alpha (e.g. jpeg never does, etc.). If we wait until drawing, then it may be too late to influence which blitter we choose.

I&apos;ve added FIXME for this. Yes when an image is deferred we already what image format it is and whether it is fully loaded and can make a good guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742323</commentid>
    <comment_count>66</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-10-15 12:51:42 -0700</bug_when>
    <thetext>Skia isn&apos;t ready to allow a given pixelref (marked immutable) to change its mind about opaqueness. However, I don&apos;t think that will be a problem for us...

If we know the width/height, then we can know the opaqueness.
We also know if we have all of the data or not.

Given these two, it seems we can set the opaque bit as follows:

bitmap.setPixelRef(data);
if (format_is_opaque &amp;&amp; we_have_all_the_data)
    bitmap.setIsOpaque(true);

If we don&apos;t have all the data, we won&apos;t mark it opaque. When we finally do get all the data, we *have* to make a new pixelRef, at which time we can mark its opaqueness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742332</commentid>
    <comment_count>67</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 12:58:40 -0700</bug_when>
    <thetext>&gt; Given these two, it seems we can set the opaque bit as follows:
&gt; 
&gt; bitmap.setPixelRef(data);
&gt; if (format_is_opaque &amp;&amp; we_have_all_the_data)
&gt;     bitmap.setIsOpaque(true);

Agreed. I left a FIXME in the code that describes just this.

&gt; When we finally do get all the data, we *have* to make a new pixelRef, at which time we can mark its opaqueness.

When we have all the data and image is recorded to SkPixelRef the image is not yet fully decoded. So for PNG, GIF, WebP+alpha we need to wait until the image is decoded (rasterized) and only during next record that we can make a new PixelRef and mark it opaqueness safely. This is also noted in the FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742334</commentid>
    <comment_count>68</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 13:02:53 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; &gt; Out of curiosity, does this mean that we might be decoding the same image on different playback threads?  Does the current design make that safe (and performant)?
&gt; 
&gt; We need some data to back the best caching scheme / strategy and as you can see this patch doesn&apos;t have a complete caching scheme. I intentionally leave it blank for later patches.
&gt; 

By blank I mean a simple implementation: cache the full size, scale on demand, no eviction. This is left for later patches to implement a better scheme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742380</commentid>
    <comment_count>69</comment_count>
      <attachid>168773</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 13:52:01 -0700</bug_when>
    <thetext>Created attachment 168773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742382</commentid>
    <comment_count>70</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-15 13:53:09 -0700</bug_when>
    <thetext>Patch updated with Mike and Stephen&apos;s comments addressed. Renamed ImageDecodingBridge to DeferredImageDecoder and NativeImageSouceFactory to NativeImageDecoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742543</commentid>
    <comment_count>71</comment_count>
      <attachid>168773</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-10-15 15:58:06 -0700</bug_when>
    <thetext>Comment on attachment 168773
Patch

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

I don&apos;t really feel like I understand what&apos;s going on here, partly since I haven&apos;t taken the time to really look at and think about the entire change as opposed to just a couple of files.  If you need a serious, in-depth review, I&apos;ll need to think longer and harder about everything the patch does.  (And probably learn more about how Skia works too.)

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:49
&gt; +    if (!actualDecoder)

Nit: Or just

    return actualDecoder ? new DeferredImageDecoder(actualDecoder) : 0;

(Similar comment applies numerous other places in this file)

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:69
&gt; +    // because a multiframe is usually animated GIF. Animation is handled by

Sometimes it&apos;s an ICO, which can probably be deferred successfully.  Perhaps we should try to distinguish these, or be more aggressive here, or something?

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:70
&gt; +    // BitmapImage which uses some metadata functions that does synchronous

Nit: does -&gt; do

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:86
&gt; +        // the value doesn&apos;t matter.

Nit: This comment is confusing.  &quot;predict this correct&quot; -&gt; &quot;correct&quot; should be &quot;correctly&quot;, and what is &quot;this&quot; referring to?  Then the last sentence says this doesn&apos;t matter anyway??

Maybe you meant something like:

  // Don&apos;t mark the frame as completely decoded until the underlying decoder has really decoded it.  Until then, our data and metadata may be incorrect, so callers can&apos;t rely on them.

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:98
&gt; +        // Keep a reference to data until WebLazyDecodingImage is created, at

What class is this?  I don&apos;t see this in this patch...

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:107
&gt; +        // thread here.

I have absolutely no idea what this comment means.

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:115
&gt; +    return true;

Shouldn&apos;t this be false?

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:131
&gt; +    // uniform size.

What does &quot;and have uniform size&quot; mean?  A single frame&apos;s size is inherently &quot;uniform&quot;.  But the image size and the frame size could in theory differ (I think... e.g. for an ICO with one image, whose size is marked as different from the overall image size?  Test this).

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h:38
&gt; +class DeferredImageDecoder {

It seems like this is implementing most of the public API on ImageDecoder.  This suggests that perhaps we ought to have some (partly?-)abstract interface that looks about like this class, which this and ImageDecoder both implement.  That makes callers able to use either via polymorphism and ensures the actual functions exposed on each stay in sync.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:54
&gt; +    s_instanceOnMainThread = imageDecodingStore;

This leaks if someone calls setInstanceOnMainThread() with non-NULL more than once.  Either delete unconditionally or assert that |imageDecodingStore| is only non-NULL when |s_instanceOnMainThread| is NULL.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:89
&gt; +        &amp;&amp; !memcmp(bitmap.pixelRef()-&gt;getURI(), labelLazyDecoded, sizeof(labelLazyDecoded));

This seems like a hack.  Should we mark such bitmaps some other way, e.g. by keeping a set of all the live lazy bitmap*s, or by adding a field on some relevant object to directly reflect if decoding is lazy?

Or perhaps we can get by without this by reworking how resizing works?  I dunno.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:136
&gt; +    // Inform the bitmap that we will never change the pixels. This is a performance hint

Nit: Avoid copy/paste, just say:

    // See comments in createLazyDecodedSkBitmap().
    resizedBitmap.setImmutable();
    return resizedBitmap;

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:154
&gt; +    ASSERT(calledOnValidThread());

If your header comments say you can only lock one thing at a time, you should ASSERT that that&apos;s true here, e.g. by checking that m_lockedSkBitmap is NULL.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:187
&gt; +        m_lockedSkBitmap.lockPixels();

Nit: Factor this call out to below the conditional

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:205
&gt; +    return this == instanceOnMainThread() &amp;&amp; isMainThread();

Nit: Checking that we&apos;re the instanceOnMainThread() seems unnecessary given the API in the header.  Why don&apos;t callers here just ASSERT(isMainThread)?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:61
&gt; +    // Lock and unlock supports only one image at a time so call them i pair.

Nit: Maybe this should be:

  // You may only lock one set of pixels at a time; overlapping lock calls are not allowed.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:75
&gt; +    Vector&lt;OwnPtr&lt;ImageFrameCache&gt; &gt; m_frameCache;

Given how lookup and delete work, is a vector really the right structure here?  Maybe a map from (id, size) -&gt; ImageFrameCache would be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742925</commentid>
    <comment_count>72</comment_count>
      <attachid>168882</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 01:06:20 -0700</bug_when>
    <thetext>Created attachment 168882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742928</commentid>
    <comment_count>73</comment_count>
      <attachid>168773</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 01:08:42 -0700</bug_when>
    <thetext>Comment on attachment 168773
Patch

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

Thanks for reviewing. I think your expertise with image decoders is certainly very helpful. I mostly wanted to have your input on the use of ImageDecoder and the interface with ImageSource. Stephen will review the Skia portion and. The latest patch I uploaded has addressed your comments.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:49
&gt;&gt; +    if (!actualDecoder)
&gt; 
&gt; Nit: Or just
&gt; 
&gt;     return actualDecoder ? new DeferredImageDecoder(actualDecoder) : 0;
&gt; 
&gt; (Similar comment applies numerous other places in this file)

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:69
&gt;&gt; +    // because a multiframe is usually animated GIF. Animation is handled by
&gt; 
&gt; Sometimes it&apos;s an ICO, which can probably be deferred successfully.  Perhaps we should try to distinguish these, or be more aggressive here, or something?

We never animate a ICO though, DeferredImageDecoder is only accessed through BitmapImage which only animates GIF.

The problem is that frameIsCompleteAtIndex() does synchronous decoding which is only called on GIF, ICO is not a problem here.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:98
&gt;&gt; +        // Keep a reference to data until WebLazyDecodingImage is created, at
&gt; 
&gt; What class is this?  I don&apos;t see this in this patch...

Nice catch corrected the comments.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:107
&gt;&gt; +        // thread here.
&gt; 
&gt; I have absolutely no idea what this comment means.

Remove the comments, that&apos;s just a reminder for later patches.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:115
&gt;&gt; +    return true;
&gt; 
&gt; Shouldn&apos;t this be false?

Explained in the comments.  m_actualDecoder is NULL only if image decoding is deferred and that means image header decoded successfully and size is available.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:131
&gt;&gt; +    // uniform size.
&gt; 
&gt; What does &quot;and have uniform size&quot; mean?  A single frame&apos;s size is inherently &quot;uniform&quot;.  But the image size and the frame size could in theory differ (I think... e.g. for an ICO with one image, whose size is marked as different from the overall image size?  Test this).

I removed the entire comments. This comments is to explain why there is a single value for frame size while parameter for the function has &quot;size_t index&quot;. The reason is we don&apos;t defer image decoding for ICO and multiframe GIF so there is only one size and |index| is always 0.

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h:38
&gt;&gt; +class DeferredImageDecoder {
&gt; 
&gt; It seems like this is implementing most of the public API on ImageDecoder.  This suggests that perhaps we ought to have some (partly?-)abstract interface that looks about like this class, which this and ImageDecoder both implement.  That makes callers able to use either via polymorphism and ensures the actual functions exposed on each stay in sync.

The function of this class is to only defer decoding to the actual decoder implementing ImageDecoder. That&apos;s why it&apos;s interface looks so much like ImageDecoder, but it is not an ImageDecoder. I intentionally choose not to extend from ImageDecoder because I want to avoid a subclass of ImageDecoder (say DeferredImageDecoder extends ImageDecoder) to reference other subclasses of ImageDecoder (e.g. JpegImageDecoder extends ImageDecoder). I chose to start a clean implementation and interface for doing this job of deferring.

Compiler makes sure the interface matches what is required by ImageSource (Only ImageSource calls this class).

Another way to look at it is:
a. ImageDecoder = Platform image decoders used by all ports except CG
b. DeferredImageDecoder = Platform image decoder used only by Chromium that is composed by (a), but does not extend from (a).

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:89
&gt;&gt; +        &amp;&amp; !memcmp(bitmap.pixelRef()-&gt;getURI(), labelLazyDecoded, sizeof(labelLazyDecoded));
&gt; 
&gt; This seems like a hack.  Should we mark such bitmaps some other way, e.g. by keeping a set of all the live lazy bitmap*s, or by adding a field on some relevant object to directly reflect if decoding is lazy?
&gt; 
&gt; Or perhaps we can get by without this by reworking how resizing works?  I dunno.

Thanks for the suggestion I avoided using the URI and instead keep a set of SkBitmap generation IDs to check if a SkBitmap is in the set.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:205
&gt;&gt; +    return this == instanceOnMainThread() &amp;&amp; isMainThread();
&gt; 
&gt; Nit: Checking that we&apos;re the instanceOnMainThread() seems unnecessary given the API in the header.  Why don&apos;t callers here just ASSERT(isMainThread)?

There will be another instance on impl thread so I have this method to verify call to this object is on the right thread.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:75
&gt;&gt; +    Vector&lt;OwnPtr&lt;ImageFrameCache&gt; &gt; m_frameCache;
&gt; 
&gt; Given how lookup and delete work, is a vector really the right structure here?  Maybe a map from (id, size) -&gt; ImageFrameCache would be better?

I try to keep the caching scheme and lookup simple, I&apos;m going to extend this in later patches to include region and scale so use a simple data structure at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743310</commentid>
    <comment_count>74</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-10-16 11:02:30 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:69
&gt; &gt;&gt; +    // because a multiframe is usually animated GIF. Animation is handled by
&gt; &gt; 
&gt; &gt; Sometimes it&apos;s an ICO, which can probably be deferred successfully.  Perhaps we should try to distinguish these, or be more aggressive here, or something?
&gt; 
&gt; We never animate a ICO though, DeferredImageDecoder is only accessed through BitmapImage which only animates GIF.
&gt; 
&gt; The problem is that frameIsCompleteAtIndex() does synchronous decoding which is only called on GIF, ICO is not a problem here.

We might be talking past each other.  It sounds like you are telling me that ICOs could in theory be deferred successfully.  I thought so too; what I was saying is that the current patch avoids deferring their decoding, which is overly conservative.  I was hoping we could distinguish between animated GIFs and ICOs.

Blue-skying a bit... it seems like with some effort we ought to be able to eventually defer animated GIFs too.  frameIsCompleteAtIndex() doesn&apos;t have to synchronously decode, maybe it could simply trigger async decoding and we could have some sort of callback that pushes the animation forward once that happens.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h:38
&gt; &gt;&gt; +class DeferredImageDecoder {
&gt; &gt; 
&gt; &gt; It seems like this is implementing most of the public API on ImageDecoder.  This suggests that perhaps we ought to have some (partly?-)abstract interface that looks about like this class, which this and ImageDecoder both implement.  That makes callers able to use either via polymorphism and ensures the actual functions exposed on each stay in sync.
&gt; 
&gt; The function of this class is to only defer decoding to the actual decoder implementing ImageDecoder. That&apos;s why it&apos;s interface looks so much like ImageDecoder, but it is not an ImageDecoder. I intentionally choose not to extend from ImageDecoder because I want to avoid a subclass of ImageDecoder (say DeferredImageDecoder extends ImageDecoder) to reference other subclasses of ImageDecoder (e.g. JpegImageDecoder extends ImageDecoder). I chose to start a clean implementation and interface for doing this job of deferring.

Yeah, I didn&apos;t want to extend from ImageDecoder either, at least not the concrete ImageDecoder that exists.  But I wasn&apos;t sure it was totally worthless to create a simple base class that both ImageDecoder and DeferredImageDecoder could subclass.  I guess it depends on to what degree you want these objects to be substitutable at callsites.  If the only people who&apos;d ever use DeferredImageDecoder are always going to want to explicitly refer to DeferredImageDecoder, then it doesn&apos;t matter.  But the base class would help you if you have some caller that you want to not know about these concepts and just make deferred decoding &quot;hot-pluggable&quot;.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:205
&gt; &gt;&gt; +    return this == instanceOnMainThread() &amp;&amp; isMainThread();
&gt; &gt; 
&gt; &gt; Nit: Checking that we&apos;re the instanceOnMainThread() seems unnecessary given the API in the header.  Why don&apos;t callers here just ASSERT(isMainThread)?
&gt; 
&gt; There will be another instance on impl thread so I have this method to verify call to this object is on the right thread.

Might want some header comments about where and how this class can be instantiated.  It at least looked like we only allowed access via a singleton on the main thread.

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:75
&gt; &gt;&gt; +    Vector&lt;OwnPtr&lt;ImageFrameCache&gt; &gt; m_frameCache;
&gt; &gt; 
&gt; &gt; Given how lookup and delete work, is a vector really the right structure here?  Maybe a map from (id, size) -&gt; ImageFrameCache would be better?
&gt; 
&gt; I try to keep the caching scheme and lookup simple, I&apos;m going to extend this in later patches to include region and scale so use a simple data structure at the moment.

Might want some comments about your plans.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743404</commentid>
    <comment_count>75</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 12:13:38 -0700</bug_when>
    <thetext>&gt; We might be talking past each other.  It sounds like you are telling me that ICOs could in theory be deferred successfully.  I thought so too; what I was saying is that the current patch avoids deferring their decoding, which is overly conservative.  I was hoping we could distinguish between animated GIFs and ICOs.
&gt; 
&gt; Blue-skying a bit... it seems like with some effort we ought to be able to eventually defer animated GIFs too.  frameIsCompleteAtIndex() doesn&apos;t have to synchronously decode, maybe it could simply trigger async decoding and we could have some sort of callback that pushes the animation forward once that happens.

Correct I think both ICOs and GIFs (animated or not) can be deferred. I think the tightest condition we can do now is when the image is non-animated, which includes non-animated ICOs and GIFs. 

Only GIFs do animation and I have a pending change to defer it too, by changing GIF image decoders. But that&apos;s a separate review.

&gt; Yeah, I didn&apos;t want to extend from ImageDecoder either, at least not the concrete ImageDecoder that exists.  But I wasn&apos;t sure it was totally worthless to create a simple base class that both ImageDecoder and DeferredImageDecoder could subclass.  I guess it depends on to what degree you want these objects to be substitutable at callsites.  If the only people who&apos;d ever use DeferredImageDecoder are always going to want to explicitly refer to DeferredImageDecoder, then it doesn&apos;t matter.  But the base class would help you if you have some caller that you want to not know about these concepts and just make deferred decoding &quot;hot-pluggable&quot;.

Good point. DeferredImageDecoder is only going to be called by ImageSource so I don&apos;t think an extra interface shared between DeferredImageDecoder and ImageDecoder is necessary at this point.

&gt; Might want some header comments about where and how this class can be instantiated.  It at least looked like we only allowed access via a singleton on the main thread.

Added comments to describe this and intention.

&gt; Might want some comments about your plans.

What and how to cache is undecided (We need some data to back the decision). However this architecture allows a centralized cache for images in original size and scaled size. The key for cache lookup can be a mixed of {image id, scaled size, scaled subset} so I decided to use a simple data structure at the moment (i.e. vector).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743409</commentid>
    <comment_count>76</comment_count>
      <attachid>168994</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 12:19:03 -0700</bug_when>
    <thetext>Created attachment 168994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743416</commentid>
    <comment_count>77</comment_count>
      <attachid>168994</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-16 12:23:44 -0700</bug_when>
    <thetext>Comment on attachment 168994
Patch

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

&gt; Source/WebCore/ChangeLog:79
&gt; +

I see no documentation for the ImageFrameGenerator class here.  (That&apos;s one downside to documenting the other classes, which is much appreciated BTW!)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743455</commentid>
    <comment_count>78</comment_count>
      <attachid>169006</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 13:06:15 -0700</bug_when>
    <thetext>Created attachment 169006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743457</commentid>
    <comment_count>79</comment_count>
      <attachid>169008</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 13:08:03 -0700</bug_when>
    <thetext>Created attachment 169008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743459</commentid>
    <comment_count>80</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-16 13:09:29 -0700</bug_when>
    <thetext>&gt; I see no documentation for the ImageFrameGenerator class here.  (That&apos;s one downside to documenting the other classes, which is much appreciated BTW!)).

I&apos;ve updated ChangeLog and explains what ImageFrameGenerator and ImageFrameCache do. (gosh I hate that TestExpectations does not merge... )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743547</commentid>
    <comment_count>81</comment_count>
      <attachid>169006</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-16 14:11:00 -0700</bug_when>
    <thetext>Comment on attachment 169006
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:143
&gt; +    ASSERT(m_lockedSkBitmap.isNull());

As discussed, this assert (and the singleton itself) will make multithreaded playback of SkPictures containing LazyDecodingPixelRefs impossible, since only a single bitmap can be locked into m_lockedSkBitmap.  I realize that isn&apos;t a problem today, I just wanted to note it for posterity.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:198
&gt; +    m_frameGenerators.add(m_nextId, ImageFrameGenerator::create(decoder));

It doesn&apos;t look like ImageFrameGenerators are ever destroyed, since they&apos;re never removed from this hash map.  Is that correct?  If so, I&apos;m a little concerned about this, since it looks like they&apos;ll grow without bound.  I&apos;m also not fond of the fact that they&apos;re connected to the pixelrefs only by ID.

Could we instead have the LazyDecodedPixelRef have a RefPtr&lt;ImageFrameGenerator&gt;?  That would limit the growth of the ImageFrameGenerators, and also remove the necessity for a unique ID.  (alpha tells me that the ID is also to future-proof against impl-side decoding, but that&apos;s not yet an issue in this patch -- we will discuss this more offline).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745054</commentid>
    <comment_count>82</comment_count>
      <attachid>169363</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 00:55:30 -0700</bug_when>
    <thetext>Created attachment 169363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745063</commentid>
    <comment_count>83</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 01:04:28 -0700</bug_when>
    <thetext>As discussed I have made ImageFrameGenerator refcounted and referenced by LazyDecodingPixelRef.

However in this patch I have to keep an ID around. Because of the following reasons:
1. ImageFrameGenerator is uniquely identified by an ID to represent an image file. This ID is used to index decoded image cache.

2. I want ImageFrameGenerator and ImageFrameCache to be loosely coupled. This means ImageFrameGenerator does not hold a reference to ImageFrameCache but just an ID. ImageDecodingStore can decide whether to evict the cache or not without telling ImageFrameGenerator.

In order to prevent the number ImageFrameCache goes unbounded, in the destructor of ImageFrameGenerator we&apos;ll remove all associated ImageFrameCache from ImageDecodingStore.

Please let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745489</commentid>
    <comment_count>84</comment_count>
      <attachid>169363</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-18 12:59:02 -0700</bug_when>
    <thetext>Comment on attachment 169363
Patch

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

I still find this design more confusing than it needs to be, although perhaps I&apos;m just not getting it.  It seems you&apos;ve just pushed the imageID problem to another class.  Instead of a unique ID, perhaps you could consider using a hash of the original SkBitmap (or perhaps the NativeImageSkia) and the requested size?  This might help you avoid the O(N) lookups in the frame cache as well, and allow you to get rid of the static s_nextImageId, which I think is going to be problematic for impl-side playback.

All that said, it is behind a flag, and I don&apos;t want to slow you down, so I&apos;m setting this r+ for now.  You can consider my bikeshedding suggestions of names for a future patch.

&gt; Source/WebCore/ChangeLog:76
&gt; +        ImageFrameCache
&gt; +
&gt; +        A container for a scaled image fragment. In addition to bitmap pixels
&gt; +        it contains information about the ID of the image, scale and clipping.

This is not really a cache, but more of a cache entry, no?  It could be named ImageFrameCacheEntry, but I find that a bit unwieldy.  ImageFragment, or ScaledImageFragment, maybe?

&gt; Source/WebCore/ChangeLog:81
&gt; +        ImageFrameGenerator
&gt; +
&gt; +        This object is responsible for generating decoded pixels. It is also
&gt; +        a container for encoded image data and corresponding image decoder.

Would it be strange to call this class ImageFrameDecoder?  Generator is kind of a generic name.

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:79
&gt; +    HashMap&lt;int, OwnPtr&lt;ImageFrameGenerator&gt; &gt; m_frameGenerators;

Nit:  This appears to be unused.

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:46
&gt; +    m_size = SkISize::Make(m_decoder-&gt;size().width(), m_decoder-&gt;size().height());

Is this always the original size of the bitmap?  If so, perhaps this could be named m_fullSize instead to make it clear.  Just a suggestion, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745513</commentid>
    <comment_count>85</comment_count>
      <attachid>169459</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 13:38:02 -0700</bug_when>
    <thetext>Created attachment 169459
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745514</commentid>
    <comment_count>86</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 13:38:12 -0700</bug_when>
    <thetext>&gt; I still find this design more confusing than it needs to be, although perhaps I&apos;m just not getting it.  It seems you&apos;ve just pushed the imageID problem to another class.  Instead of a unique ID, perhaps you could consider using a hash of the original SkBitmap (or perhaps the NativeImageSkia) and the requested size?  This might help you avoid the O(N) lookups in the frame cache as well, and allow you to get rid of the static s_nextImageId, which I think is going to be problematic for impl-side playback.

This is a good point. The requirement is that there is a unique identifier for ImageFrameGenerator and a quick way to locate the cached fragment in ImageDecodingStore.

These two are separate problems.

I think the URI for the resource is a good way to replace s_imageId for this job and we&apos;re going to do this in a separate patch.

We should have a more efficient way to locate the cached fragment and let&apos;s discuss that afterwards.

&gt; This is not really a cache, but more of a cache entry, no?  It could be named ImageFrameCacheEntry, but I find that a bit unwieldy.  ImageFragment, or ScaledImageFragment, maybe?
&gt;

Yes renamed this to ScaledImageFragment.
 
&gt; Would it be strange to call this class ImageFrameDecoder?  Generator is kind of a generic name.

I find there&apos;s too many XXXDecoder so punt the renaming for later.

&gt; Nit:  This appears to be unused.

Removed.

&gt; Is this always the original size of the bitmap?  If so, perhaps this could be named m_fullSize instead to make it clear.  Just a suggestion, though.

Renamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745517</commentid>
    <comment_count>87</comment_count>
      <attachid>169459</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 13:40:57 -0700</bug_when>
    <thetext>Comment on attachment 169459
Patch for landing

Rejecting attachment 169459 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t_tests/port/chromium.py
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/platform/chromium/TestExpectations
Hunk #1 FAILED at 4227.
1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/platform/chromium/TestExpectations.rej
patching file LayoutTests/platform/chromium/virtual/deferred/fast/images/README.txt

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14465104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745521</commentid>
    <comment_count>88</comment_count>
      <attachid>169461</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 13:43:33 -0700</bug_when>
    <thetext>Created attachment 169461
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745523</commentid>
    <comment_count>89</comment_count>
      <attachid>169461</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 13:45:11 -0700</bug_when>
    <thetext>Comment on attachment 169461
Patch for landing

Had problems landing it with merging TestExpectations.. marking this review? again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745529</commentid>
    <comment_count>90</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 13:48:30 -0700</bug_when>
    <thetext>Attachment 169461 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
LayoutTests/platform/chromium/TestExpectations:4236:  Path does not exist.  [test/expectations] [5]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745531</commentid>
    <comment_count>91</comment_count>
      <attachid>169465</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 13:51:45 -0700</bug_when>
    <thetext>Created attachment 169465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745536</commentid>
    <comment_count>92</comment_count>
      <attachid>169465</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-18 13:55:48 -0700</bug_when>
    <thetext>Comment on attachment 169465
Patch

Looks good (bots willing).  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745591</commentid>
    <comment_count>93</comment_count>
      <attachid>169465</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 14:41:00 -0700</bug_when>
    <thetext>Comment on attachment 169465
Patch

Clearing flags on attachment: 169465

Committed r131810: &lt;http://trac.webkit.org/changeset/131810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745592</commentid>
    <comment_count>94</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 14:41:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745620</commentid>
    <comment_count>95</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 15:15:36 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 99762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745624</commentid>
    <comment_count>96</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-10-18 15:17:28 -0700</bug_when>
    <thetext>Sorry for the revert. Locally ran debug webkit_unit_tests and I got this:

[----------] 2 tests from DeferredImageDecoderTest
[ RUN      ] DeferredImageDecoderTest.drawIntoSkPicture
./out/Debug/webkit_unit_tests: symbol lookup error: /usr/local/google/home/danakj/s/c/src/out/Debug/lib/libwebkit.so: undefined symbol: _ZN8SkString3setEPKc

Here&apos;s the crash log for the unit tests:
http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20%28dbg%29/builds/280/steps/webkit_unit_tests/logs/stdio

It also was crashing in layout tests for the linux debug bot:
http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Linux%20(dbg)/builds/280/steps/webkit_tests/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745626</commentid>
    <comment_count>97</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-10-18 15:18:47 -0700</bug_when>
    <thetext>Windows build errors here:

http://build.chromium.org/p/chromium.webkit/builders/WebKit%20Win%20Builder%20%28dbg%29/builds/30061/steps/compile/logs/stdio#error1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745635</commentid>
    <comment_count>98</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-18 15:26:37 -0700</bug_when>
    <thetext>SkString isn&apos;t marked with SK_API, so I suspect it isn&apos;t exported in the component build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745637</commentid>
    <comment_count>99</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 15:27:33 -0700</bug_when>
    <thetext>Yeah it does look like a component build problem. I&apos;ll try it locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745657</commentid>
    <comment_count>100</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 15:45:48 -0700</bug_when>
    <thetext>James: do you how to solve the problem of int32_t with Skia? I think I&apos;m missing an include file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745692</commentid>
    <comment_count>101</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 16:06:15 -0700</bug_when>
    <thetext>I think I need to include SkTypes.h before SkSize.h, oh well..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745792</commentid>
    <comment_count>102</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 17:45:14 -0700</bug_when>
    <thetext>Change is Skia to add SK_API to SkString is landed. Will roll tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746291</commentid>
    <comment_count>103</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-19 07:30:19 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; 
&gt; I still find this design more confusing than it needs to be ...

Concur.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746302</commentid>
    <comment_count>104</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-19 08:00:28 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; &gt; Given these two, it seems we can set the opaque bit as follows:
&gt; &gt; 
&gt; &gt; bitmap.setPixelRef(data);
&gt; &gt; if (format_is_opaque &amp;&amp; we_have_all_the_data)
&gt; &gt;     bitmap.setIsOpaque(true);
&gt; 
&gt; Agreed. I left a FIXME in the code that describes just this.
&gt; 
&gt; &gt; When we finally do get all the data, we *have* to make a new pixelRef, at which time we can mark its opaqueness.
&gt; 
&gt; When we have all the data and image is recorded to SkPixelRef the image is not yet fully decoded. So for PNG, GIF, WebP+alpha we need to wait until the image is decoded (rasterized) and only during next record that we can make a new PixelRef and mark it opaqueness safely. This is also noted in the FIXME.

&quot;opaqueness&quot; has been mentioned a few times on this thread, and I&apos;m not sure what that means when decoding is deferred.

The paint algorithm must paint from back to front per CSS3 Appendix E, Section E.2 Painting order.  When we paint an image, the background of an image element is painted before its foreground.  The background paint phase asks renderImage if the image frameHasAlphaAtIndex().  Since frameHasAlphaAtIndex is now deferred (decoding is prevented) the answer is true, so renderImage paints the image background.  When the paint phase reaches foreground, decoding is allowed.  Provided we decode all the image, the opaqueness is now know, we can set bitmap.setIsOpaque ok, but frameHasAlphaAtIndex can change state.

Decoding deferral can result is over-painting (a needless background paint) and that can produce image rendering artifacts in some cases. A test case might help ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746306</commentid>
    <comment_count>105</comment_count>
      <attachid>169621</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-10-19 08:11:26 -0700</bug_when>
    <thetext>Created attachment 169621
test-background.html

1. Load the test case in Chrome canary.
2. Two ~black circles should be shown (reload the page if the are not shown).
3. Resize the page to force a repaint.

Result: The black circles disappear.

Expected result: There should be no black circles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746493</commentid>
    <comment_count>106</comment_count>
      <attachid>169664</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-19 11:41:00 -0700</bug_when>
    <thetext>Created attachment 169664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746494</commentid>
    <comment_count>107</comment_count>
      <attachid>169664</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-19 11:41:42 -0700</bug_when>
    <thetext>Comment on attachment 169664
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746500</commentid>
    <comment_count>108</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-19 11:44:23 -0700</bug_when>
    <thetext>Attachment 169664 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746503</commentid>
    <comment_count>109</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-19 11:48:33 -0700</bug_when>
    <thetext>Don&apos;t worry about the style check, SkTypes.h has to be included before SkSize.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746515</commentid>
    <comment_count>110</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-19 12:07:12 -0700</bug_when>
    <thetext>Committed r131928: &lt;http://trac.webkit.org/changeset/131928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752809</commentid>
    <comment_count>111</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-27 11:31:25 -0700</bug_when>
    <thetext>This patch might have caused http://code.google.com/p/chromium/issues/detail?id=158182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752811</commentid>
    <comment_count>112</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-27 11:57:03 -0700</bug_when>
    <thetext>Looking now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162595</attachid>
            <date>2012-09-06 14:55:40 -0700</date>
            <delta_ts>2012-09-06 14:59:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120906145521.patch</filename>
            <type>text/plain</type>
            <size>42087</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwaSBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCmluZGV4IDdhYjA4
MjYyYWZlNzYwNzE0NmU3Y2U0YmE2NGJmNGU1ZjQ3ZjY5MDUuLjY3YTRkM2FiYzYxMzliOTliMWYy
NjgzNjhlZmU4YmQ1Zjg2NDFiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9y
bS5neXBpCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCkBAIC03OSw2ICs3OSw3
IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgnLAogICAgICAgICAg
ICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgnLAorICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJMYXp5RGVjb2RpbmdJbWFnZS5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViTG9jYWxpemVkU3RyaW5nLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJNZWRpYUhpbnRzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJNZWRpYVN0cmVhbUNlbnRlci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViTGF6eURlY29kaW5nSW1hZ2UuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViTGF6eURlY29kaW5nSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzFhYjdiM2Y4
ZmZlODQ3MjFlNjRjNWRkYjA1NTEwNWFmNzRlOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXp5RGVjb2RpbmdJbWFnZS5oCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJMYXp5RGVjb2RpbmdJbWFnZV9oCisjZGVmaW5lIFdl
YkxhenlEZWNvZGluZ0ltYWdlX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYlByaXZhdGVQdHIuaCIKKworI2luY2x1ZGUgPFNrQml0bWFwLmg+CisKKyNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEltYWdlRGVjb2RlcjsK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgewordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsKK30gIC8vIG5hbWVzcGFjZSBXVEYKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF6eURlY29kaW5nSW1hZ2VQ
cml2YXRlOworCitjbGFzcyBXZWJMYXp5RGVjb2RpbmdJbWFnZSB7CitwdWJsaWM6CisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgZXhwbGljaXQgV2ViTGF6eURlY29kaW5nSW1hZ2UoY29u
c3QgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4mKTsKKyAgICB2b2lkIHNl
dERhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisjZW5kaWYKKworICAgIH5XZWJMYXp5RGVjb2RpbmdJbWFnZSgpOworICAgIGNvbnN0IFNrQml0
bWFwJiBnZXRMYXp5RGVjb2RpbmdTa0JpdG1hcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFdl
YlByaXZhdGVQdHI8V2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlPiBtX3ByaXZhdGU7CisgICAg
U2tCaXRtYXAgbV9sYXp5RGVjb2RpbmdTa0JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxODQwNDlhNTU0NTlhNGE0NGUwNWMz
MzYxOTVhZGIxYjIwOTkyOTAxLi5kZjNiYTc3YTk0YjMzM2Q4YWYyYjU2MTI5NzgwMTNjYjM4ZWYy
N2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjUyLDYgKzM2NTIsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lh
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21p
dW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGNh
MGY5NWQ3NzIyMDhiNzc0MWY4ZDI0NDFlZDAwNTI5MjY4YzYyN2IuLmZhMjFlMDgzNjc2MGMwNTll
NDQ0OWZmNDk2ODE4YjI0NDQ3MzVjYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTMwLDEwICszMCwxNSBAQAogI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkBAIC03OCw3
ICs4Myw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2
YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdp
bGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVj
b2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFnZURlY29kZXI6OmNy
ZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikp
OworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4o
TmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1f
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVj
b2RlZEltYWdlKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQ
aXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgKaW5kZXggN2M4YjBhNzAzZTMwNzhhOGVkYjg3YmViNjgzYWI5NGVk
ZWM5ZjliMi4uMTY3MzEyZDZhNzFkMmEzODRiYTI5MGVmNjgwN2I5NWE3NTBkNDU4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00OCwx
MSArNDgsMTkgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBD
R0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2Vsc2UKKyNlbGlmICFVU0Uo
U0tJQSkgfHwgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRl
ZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwogI2VuZGlmCiAKKyNpZiBVU0Uo
U0tJQSkgJiYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBJbWFnZURlY29kZXJDaHJvbWl1bTsK
K3R5cGVkZWYgSW1hZ2VEZWNvZGVyQ2hyb21pdW0gTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5Owor
dHlwZWRlZiBJbWFnZURlY29kZXJDaHJvbWl1bSogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisjZWxz
ZQordHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OworI2VuZGlm
CisKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1h
dCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0
aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJ
RnMgaGF2ZSBhbiBvcHRpb25hbCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2Ny
aWJlcyBob3cgYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zM2ZmMTU1ZDJhYWMyMzE2MWY5YzdhYWY5ZWI5NjgxODU2YTk2OWYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViTGF6eURlY29kaW5nSW1hZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRGVjb2RlckNocm9taXVtOjpJbWFnZURl
Y29kZXJDaHJvbWl1bShJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERh
dGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxE
ZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFnZURlY29kZXJDaHJv
bWl1bSgpCit7Cit9CisKKy8vIHN0YXRpYworSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIEltYWdlRGVj
b2RlckNocm9taXVtOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJj
ZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAgIEltYWdlRGVjb2RlciogYWN0
dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yT3B0aW9uKTsKKyAgICBpZiAoIWFjdHVhbERlY29kZXIpIHsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHJldHVybiBuZXcgSW1hZ2VEZWNvZGVyQ2hyb21pdW0oYWN0dWFs
RGVjb2Rlcik7Cit9CisKK1N0cmluZyBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJu
IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdlRnJhbWUqIEltYWdlRGVjb2RlckNocm9t
aXVtOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChtX2FjdHVh
bERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBPbmx5IGRlZmVyIGltYWdlIGRlY29kaW5nIGlm
IHRoaXMgaXMgYSBzaW5nbGUgZnJhbWUgaW1hZ2UuIFRoZSByZWFzb24gaXMKKyAgICAvLyBiZWNh
dXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVkIEdJRi4gQW5pbWF0aW9uIGlzIGhh
bmRsZWQgYnkKKyAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1c2VzIHNvbWUgbWV0YWRhdGEgZnVu
Y3Rpb25zIHRoYXQgZG9lcyBzeW5jaHJvbm91cworICAgIC8vIGltYWdlIGRlY29kaW5nLgorICAg
IGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50
KCkgPT0gMSAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAg
IG1fc2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAgICBtX2ZpbGVuYW1lRXh0
ZW5zaW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgICAgICBt
X2xhenlEZWNvZGluZ0ltYWdlID0gYWRvcHRQdHIobmV3IFdlYktpdDo6V2ViTGF6eURlY29kaW5n
SW1hZ2UobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSkpOworICAgICAgICBtX2xhenlEZWNvZGlu
Z0ltYWdlLT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworICAgICAg
ICBtX2RhdGEgPSAwOworICAgICAgICBtX2xhenlEZWNvZGluZ0ZyYW1lLnNldFNrQml0bWFwKG1f
bGF6eURlY29kaW5nSW1hZ2UtPmdldExhenlEZWNvZGluZ1NrQml0bWFwKCkpOworCisgICAgICAg
IC8vIFRPRE8oaGNsYW0pOiBGaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzLiBTaG91bGQgbWFrZSBz
dXJlIEltYWdlU291cmNlIGRvZXNuJ3QgcXVlcnkgdGhpcy4KKyAgICAgICAgbV9sYXp5RGVjb2Rp
bmdGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9CisKKyAg
ICAvLyBUT0RPKGhjbGFtKTogTmVlZCB0byBzeW5jaHJvbml6ZSBzdGF0ZXMgZnJvbSBXZWJMYXp5
RGVjb2RpbmdJbWFnZSB3aXRoIG1fbGF6eURlY29kaW5nRnJhbWUuIFRoZXNlIHN0YXRlcyBpbmNs
dWRlIGFscGhhLCBmcmFtZUlzQ29tcGxldGUgYW5kIGR1cmF0aW9uLgorICAgIHJldHVybiAmbV9s
YXp5RGVjb2RpbmdGcmFtZTsKK30KKwordm9pZCBJbWFnZURlY29kZXJDaHJvbWl1bTo6c2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpIHsKKyAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBk
YXRhIHVudGlsIFdlYkxhenlEZWNvZGluZ0ltYWdlIGlzIGNyZWF0ZWQsIGF0IHdoaWNoIHBvaW50
IG1fZGF0YSBpcyB0cmFuc2ZlcmVkLgorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBt
X2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNv
ZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2RhdGEuZ2V0KCkpOworICAgICAgICBtX2xhenlEZWNvZGluZ0ltYWdlLT5z
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfQorfQorCitib29sIEltYWdlRGVj
b2RlckNocm9taXVtOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2FjdHVhbERlY29k
ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJs
ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2RlckNocm9taXVt
OjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAg
ICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30K
KworSW50U2l6ZSBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisKKyAgICAv
LyBEZWZlcnJlZCBpbWFnZSBkZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFn
ZXMgYW5kIGhhdmUKKyAgICAvLyB1bmlmb3JtIHNpemUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30K
Kworc2l6ZV90IEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5m
cmFtZUNvdW50KCk7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kZXJDaHJvbWl1
bTo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsK
KyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21p
dW06OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAg
ICAvLyBJZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBpcyBtYW5hZ2VkIGJ5CisgICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBp
Z25vcmVkLgorICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fYWN0dWFs
RGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworCisgICAg
Ly8gVE9ETyhoY2xhbSk6IE5lZWQgdG8gbWFrZSBzdXJlIHdoZW4gSW1hZ2VTb3VyY2UgdG8gaW5z
dHJ1Y3RlZCB0bworICAgIC8vIGNsZWFyIGNhY2hlIHRoaXMgb2JqZWN0IGRvZXNuJ3QgZ2V0IGRl
bGV0ZWQuIE90aGVyd2lzZSB0aGVyZSB3aWxsCisgICAgLy8gdHdvIGVudHJpZXMgb2YgU2tQaXhl
bFJlZiBmb3IgdGhlIHNhbWUgaW1hZ2UgY3JlYXRlZC4KK30KKworYm9vbCBJbWFnZURlY29kZXJD
aHJvbWl1bTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAg
IGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29k
ZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKworICAgIC8vIFRPRE8oaGNsYW0pOiBT
eW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggV2ViTGF6eURlY29kaW5nSW1hZ2UuCisgICAgLy8g
UmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGluIHRlcm1zIG9mIHJlbmRlcmluZyBidXQgbWF5
IG5vdAorICAgIC8vIGdvIHRocm91Z2ggc29tZSBvcHRpbWl6ZWQgcmVuZGVyaW5nIGNvZGUgcGF0
aC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06
OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1
YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBJZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJl
ZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJu
IDAgaGVyZS4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmMyZmE5MzczMDczMTIxMzdk
NmMyMzI5MTJjY2ZkNmU1NTg3NWEzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmgKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGVyQ2hyb21pdW1faAorI2Rl
ZmluZSBJbWFnZURlY29kZXJDaHJvbWl1bV9oCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYkxhenlEZWNvZGluZ0ltYWdlOworfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0geworICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZURlY29kZXJDaHJv
bWl1bSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIH5JbWFnZURlY29k
ZXJDaHJvbWl1bSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kZXJDaHJvbWl1bSogY3JlYXRlKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisgICAgU3RyaW5nIGZpbGVuYW1l
RXh0ZW5zaW9uKCkgY29uc3Q7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKKworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3Q7CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRp
dGlvbkNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
KTsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBJbWFnZURlY29kZXJDaHJvbWl1bShJbWFnZURlY29kZXIqIGFj
dHVhbERlY29kZXIpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29s
IG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVj
b2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9z
aXplOworCisgICAgT3duUHRyPFdlYktpdDo6V2ViTGF6eURlY29kaW5nSW1hZ2U+IG1fbGF6eURl
Y29kaW5nSW1hZ2U7CisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGluZ0ZyYW1lOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggNTZiZDFlOWZl
MWQ0YTUwNTRiZDY3NmZhYzAzNjA0NWE0ZDIwZmI1Ny4uYTQ1ZmNiNDc3YjdkMGFkZDNhNjg0ODgx
MjllMTllYTVmOTY3YWQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpZiBVU0Uo
U0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJp
di5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjZW5kaWYKIAogI2lmIFVTRShRQ01TTElCKQpA
QCAtMTMyLDYgKzEzMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0
RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1l
dGhvZCA9IG1ldGhvZDsgfQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBw
cmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7
IH0KIAorI2lmIFVTRShTS0lBKQorICAgICAgICB2b2lkIHNldFNrQml0bWFwKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApOworI2VuZGlmCisKICAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwg
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0ltYWdlRGVjb2RlclNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAppbmRleCA1Y2MxMzJjNGQ0ODQwMGI4
MTUyZWU1ZjRmZWYyMjQyYzQyOWRiNmI2Li42ZTA2NjM1YWU0ZWYxZjE2OTNkMDlkNjJjN2YyODQ3
OTUxMjcyMmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKQEAgLTEyMCw2ICsx
MjAsMTEgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQog
ICAgICAgICBtX2JpdG1hcC5zZXREYXRhQ29tcGxldGUoKTsgIC8vIFRlbGwgdGhlIGJpdG1hcCBp
dCdzIGRvbmUuCiB9CiAKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXAoY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCkKK3sKKyAgICBtX2JpdG1hcCA9IE5hdGl2ZUltYWdlU2tpYShiaXRtYXAsIDEp
OworfQorCiBpbnQgSW1hZ2VGcmFtZTo6d2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2Jp
dG1hcC5iaXRtYXAoKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDM2
ZWNmODBmNTk4NTJjMGQ2NWE1MDY1NDY2MjJmYzU5MTAxNDcxN2QuLmFhNzgyNjk3OTFiNzhhNWE0
MzUzYmYzYWZiODBjOWViZGY3M2UyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTQyOSw4ICs0MjksMTIgQEAKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3Rv
cnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYlN1YnN0cmluZ1V0aWwubW0nLAor
ICAgICAgICAgICAgICAgICdzcmMvTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0xv
Y2FsaXplZFN0cmluZ3MuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01haW5UaHJlYWRJbWFn
ZURlY29kZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL01haW5UaHJlYWRJbWFnZURlY29k
ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKQEAg
LTU4MCw2ICs1ODQsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlldy5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTGF6eURlY29kaW5nSW1hZ2UuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRp
YVBsYXllckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0cmVh
bVJlZ2lzdHJ5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklt
YWdlRGVjb2Rlci5oCmluZGV4IDU4NDBjNjcyYjRmNmVlZjVhZTRiZmViZmEyMTBmY2QzNzE1Nzg2
NTQuLjQ3YzllZDQ1ZGRiYTBhMzI5Nzk4YmU1ZmY4NWY2NzQ1MjA0ZDE2MmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rlci5oCkBAIC01Miw2ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB+V2ViSW1hZ2VEZWNvZGVyKCkgeyByZXNldCgpOyB9CiAKICAg
ICBleHBsaWNpdCBXZWJJbWFnZURlY29kZXIoVHlwZSB0eXBlKSB7IGluaXQodHlwZSk7IH0KKyAg
ICBleHBsaWNpdCBXZWJJbWFnZURlY29kZXIoV2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZSogZGVjb2Rl
cikgeyBpbml0KGRlY29kZXIpOyB9CiAKICAgICAvLyBTZXRzIGRhdGEgY29udGVudHMgZm9yIHVu
ZGVybHlpbmcgZGVjb2Rlci4gQWxsIHRoZSBBUEkgbWV0aG9kcwogICAgIC8vIHJlcXVpcmUgdGhh
dCBzZXREYXRhKCkgaXMgY2FsbGVkIHByaW9yIHRvIHRoZWlyIHVzZS4KQEAgLTgxLDYgKzgyLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBDcmVhdGVzIHR5cGUtc3BlY2lmaWMgZGVjb2Rl
ci4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdChUeXBlIHR5cGUpOworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBpbml0KFdlYkltYWdlRGVjb2RlclByaXZhdGUqIGRlY29kZXIpOwogCiAgICAg
V2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9wcml2YXRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxhenlEZWNvZGluZ0ltYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXp5RGVjb2RpbmdJbWFnZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIxMDAyMDMwNGFkM2Q5OWZjMWQ3MTcxOTMwMmUwZWYwNWRkZjAzYmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXp5RGVjb2RpbmdJbWFnZS5o
CkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYkxhenlEZWNvZGluZ0ltYWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNiOWM4MzE1ZmJh
MzgyMjhiMzdkNjY2YTQ1NmJkYzg2YTQ4NjJmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1Bp
eGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTa1RocmVh
ZC5oIgorI2luY2x1ZGUgIldlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5oIgorCitTS19ERUNM
QVJFX0dMT0JBTF9NVVRFWChnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCk7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYo
V1RGOjpQYXNzUmVmUHRyPFdlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZT4gaW1hZ2VQcml2YXRl
KQorICAgIDogU2tQaXhlbFJlZigmZ0xhenlEZWNvZGluZ0ltYWdlUmVmTXV0ZXgpCisgICAgLCBt
X3ByaXZhdGUoaW1hZ2VQcml2YXRlKQoreworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxh
enlEZWNvZGluZ1BpeGVsUmVmKCkKK3sKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6
Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5s
b2NrUGl4ZWxzKCk7Cit9CisKK3ZvaWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4
ZWxzKCkKK3sKKyAgICBtX3ByaXZhdGUtPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlE
ZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ODI0ZmQ2YzhjOTE4ZmYzOTk4NWI0NGYxMDAyZjlmMDkzOTE1NWRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVm
aW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlOwor
CitjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKKyAgcHVi
bGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6Oldl
YkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZT4pOworICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1Bp
eGVsUmVmKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIC8vIFNrUGl4ZWxSZWYgaW1wbGVtZW50YXRp
b24uCisgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopOworICAg
IHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOworICAgIHZpcnR1YWwgYm9vbCBvbkxvY2tQ
aXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGZsYXRlbmFibGUuCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxFX09CSkVDVCgpOworCisg
IHByaXZhdGU6CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpXZWJMYXp5RGVjb2RpbmdJbWFnZVBy
aXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
ICAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTWFpblRocmVhZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9NYWluVGhyZWFkSW1hZ2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWU3Mzcz
ZTg2NWMyMGNjYzhmMmViNDhhOWM4MWIzNjY0MWMzODI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWFpblRocmVhZEltYWdlRGVjb2Rlci5jcHAKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWluVGhy
ZWFkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworTWFpblRocmVhZElt
YWdlRGVjb2Rlcjo6TWFpblRocmVhZEltYWdlRGVjb2RlcihXVEY6OlBhc3NPd25QdHI8V2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyPiBpbWFnZURlY29kZXIpCisgICAgOiBtX2RlY29kZXIoaW1hZ2VEZWNv
ZGVyKQorICAgICwgbV9mcmFtZUlzQ29tcGxldGUoZmFsc2UpCisgICAgLCBtX2JpdG1hcExvY2tl
ZChmYWxzZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Cit9CisKK01haW5U
aHJlYWRJbWFnZURlY29kZXI6On5NYWluVGhyZWFkSW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBBU1NF
UlQoV1RGOjppc01haW5UaHJlYWQoKSk7Cit9CisKK3ZvaWQgTWFpblRocmVhZEltYWdlRGVjb2Rl
cjo6c2V0RGF0YShXZWJDb3JlOjpTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBtX2RlY29kZXIt
PnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCogTWFpblRocmVhZElt
YWdlRGVjb2Rlcjo6bG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9iaXRtYXBMb2NrZWQpOworCisgICAgaWYgKCFtX2ZyYW1lSXND
b21wbGV0ZSkgeworICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IG1fZGVjb2Rlci0+ZnJhbWVC
dWZmZXJBdEluZGV4KDApOworICAgICAgICBtX2RlY29kZWRCaXRtYXAgPSBmcmFtZS0+YXNOZXdO
YXRpdmVJbWFnZSgpLT5iaXRtYXAoKTsKKyAgICAgICAgbV9mcmFtZUlzQ29tcGxldGUgPSBmcmFt
ZS0+c3RhdHVzKCkgPT0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsKKyAgICB9
CisgICAgbV9kZWNvZGVkQml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICBtX2JpdG1hcExvY2tlZCA9
IHRydWU7CisgICAgcmV0dXJuIG1fZGVjb2RlZEJpdG1hcC5nZXRQaXhlbHMoKTsKK30KKwordm9p
ZCBNYWluVGhyZWFkSW1hZ2VEZWNvZGVyOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIG1fZGVjb2RlZEJpdG1hcC51bmxvY2tQaXhlbHMo
KTsKKyAgICBtX2JpdG1hcExvY2tlZCA9IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL01haW5UaHJlYWRJbWFn
ZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL01haW5UaHJlYWRJbWFnZURl
Y29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lNjI4MGRmNTUxNWI1NDIzN2RmMGU4YmYyYzcyMmE1ZjRiNmY5
YWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWFpblRo
cmVhZEltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1haW5U
aHJlYWRJbWFnZURlY29kZXJfaAorI2RlZmluZSBNYWluVGhyZWFkSW1hZ2VEZWNvZGVyX2gKKwor
I2luY2x1ZGUgIlNrQml0bWFwLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW1hZ2VE
ZWNvZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1haW5UaHJlYWRJbWFnZURlY29kZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRJbWFnZURlY29kZXI+IGNyZWF0
ZShXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6SW1hZ2VEZWNvZGVyPiBpbWFnZURlY29kZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRJbWFnZURlY29kZXIo
aW1hZ2VEZWNvZGVyKSk7CisgICAgfQorCisgICAgfk1haW5UaHJlYWRJbWFnZURlY29kZXIoKTsK
KworICAgIC8vIFNhdmVzIGEgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgdm9pZCBzZXREYXRhKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZv
aWQqIGxvY2tQaXhlbHMoKTsKKyAgICB2b2lkIHVubG9ja1BpeGVscygpOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IE1haW5UaHJlYWRJbWFnZURlY29kZXIoV1RGOjpQYXNzT3duUHRyPFdlYkNv
cmU6OkltYWdlRGVjb2Rlcj4gaW1hZ2VEZWNvZGVyKTsKKworICAgIFdURjo6T3duUHRyPFdlYkNv
cmU6OkltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIGJvb2wgbV9mcmFtZUlzQ29tcGxldGU7
CisgICAgYm9vbCBtX2JpdG1hcExvY2tlZDsKKworICAgIFNrQml0bWFwIG1fZGVjb2RlZEJpdG1h
cDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgIC8vIE1haW5UaHJlYWRJ
bWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVj
b2Rlci5jcHAKaW5kZXggYWQwYTY3ZTUxNTU3YzEzYTA3YTU3OGEwZDJiMWVmYTRjYWUzNzUzMi4u
NDdlMjkwZmQ5YjM3YmQ0ZmQ0ZmRkYWQxMTY5ZmY5ODg4ZTU5ZGJiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwCkBAIC02NSw2ICs2NSwxMSBA
QCB2b2lkIFdlYkltYWdlRGVjb2Rlcjo6aW5pdChUeXBlIHR5cGUpCiAgICAgfQogfQogCit2b2lk
IFdlYkltYWdlRGVjb2Rlcjo6aW5pdChXZWJJbWFnZURlY29kZXJQcml2YXRlKiBkZWNvZGVyKQor
eworICAgIG1fcHJpdmF0ZSA9IGRlY29kZXI7Cit9CisKIHZvaWQgV2ViSW1hZ2VEZWNvZGVyOjpz
ZXREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAg
IEFTU0VSVChtX3ByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF6eURlY29kaW5nSW1hZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF6eURlY29kaW5nSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1MTQxOTdhZDZhYmM4MmY5YzAz
NGY3N2IzZmMxNmQwNmM1MDY2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXp5RGVjb2RpbmdJbWFnZS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViTGF6eURlY29kaW5n
SW1hZ2UuaD4KKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkxhenlEZWNv
ZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlLmgi
CisKKyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViTGF6eURlY29kaW5nSW1hZ2U6OldlYkxhenlEZWNv
ZGluZ0ltYWdlKGNvbnN0IFdURjo6UGFzc093blB0cjxXZWJDb3JlOjpJbWFnZURlY29kZXI+JiBp
bWFnZURlY29kZXIpCit7CisgICAgbV9sYXp5RGVjb2RpbmdTa0JpdG1hcC5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBpbWFnZURlY29kZXItPnNpemUoKS53aWR0aCgpLCBp
bWFnZURlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9wcml2YXRlID0gV2ViTGF6eURl
Y29kaW5nSW1hZ2VQcml2YXRlOjpjcmVhdGUoaW1hZ2VEZWNvZGVyKTsKKyAgICBtX2xhenlEZWNv
ZGluZ1NrQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihhZG9wdFJl
ZihtX3ByaXZhdGUuZ2V0KCkpKSk7Cit9CisKK1dlYkxhenlEZWNvZGluZ0ltYWdlOjp+V2ViTGF6
eURlY29kaW5nSW1hZ2UoKQoreworICAgIC8vIFRlbGwgV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2
YXRlIHRvIGRlc3RydWN0IHJlc291cmNlcyB0aGF0IGxpdmUgb24gdGhlIG1haW4gdGhyZWFkLgor
ICAgIG1fcHJpdmF0ZS0+ZGV0YWNoT25NYWluVGhyZWFkKCk7CisgICAgbV9wcml2YXRlLnJlc2V0
KCk7Cit9CisKK3ZvaWQgV2ViTGF6eURlY29kaW5nSW1hZ2U6OnNldERhdGEoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldERhdGFPbk1haW5UaHJlYWQoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworY29uc3Qg
U2tCaXRtYXAmIFdlYkxhenlEZWNvZGluZ0ltYWdlOjpnZXRMYXp5RGVjb2RpbmdTa0JpdG1hcCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF6eURlY29kaW5nU2tCaXRtYXA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA3NjhhZTEw
ZWUzYTQzMDkwOGRlYmVmYjQ1MDcxMjg3Y2VmZWY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5jcHAKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJM
YXp5RGVjb2RpbmdJbWFnZVByaXZhdGUuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
I2luY2x1ZGUgIk1haW5UaHJlYWRJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFn
ZVNraWEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJMYXp5RGVj
b2RpbmdJbWFnZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJMYXp5RGVjb2RpbmdJ
bWFnZVByaXZhdGU6OldlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZShXVEY6OlBhc3NPd25QdHI8
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyPiBpbWFnZURlY29kZXIpCisgICAgOiBtX21haW5UaHJlYWRE
ZWNvZGVyKE1haW5UaHJlYWRJbWFnZURlY29kZXI6OmNyZWF0ZShpbWFnZURlY29kZXIpKQorewor
fQorCitXZWJMYXp5RGVjb2RpbmdJbWFnZVByaXZhdGU6On5XZWJMYXp5RGVjb2RpbmdJbWFnZVBy
aXZhdGUoKQoreworfQorCit2b2lkIFdlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZTo6c2V0RGF0
YU9uTWFpblRocmVhZChXZWJDb3JlOjpTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIG1fbWFp
blRocmVhZERlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8v
IEZJWE1FOiBEaXNwYXRjaCBkYXRhIHRvIG90aGVyIHRocmVhZC4KK30KKwordm9pZCBXZWJMYXp5
RGVjb2RpbmdJbWFnZVByaXZhdGU6OmRldGFjaE9uTWFpblRocmVhZCgpCit7CisgICAgQVNTRVJU
KFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIG1fbWFpblRocmVhZERlY29kZXIuY2xlYXIoKTsK
K30KKwordm9pZCogV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlOjpsb2NrUGl4ZWxzKCkKK3sK
KyAgICBpZiAoV1RGOjppc01haW5UaHJlYWQoKSkgeworICAgICAgICByZXR1cm4gbV9tYWluVGhy
ZWFkRGVjb2Rlci0+bG9ja1BpeGVscygpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChm
YWxzZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBXZWJMYXp5RGVjb2Rp
bmdJbWFnZVByaXZhdGU6OnVubG9ja1BpeGVscygpCit7CisgICAgaWYgKFdURjo6aXNNYWluVGhy
ZWFkKCkpIHsKKyAgICAgICAgcmV0dXJuIG1fbWFpblRocmVhZERlY29kZXItPnVubG9ja1BpeGVs
cygpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxZDk0OThk
MzViNzQ1NmM0MDFjOTQxNzRlZDQyNWU4NDk1ZDczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZS5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZV9o
CisjZGVmaW5lIFdlYkxhenlEZWNvZGluZ0ltYWdlUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJTa0Jp
dG1hcC5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWFpblRocmVhZEltYWdlRGVj
b2RlcjsKKworY2xhc3MgV2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlIDogcHVibGljIFdURjo6
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTGF6eURlY29kaW5nSW1hZ2VQcml2YXRlPiBj
cmVhdGUoV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4gaW1hZ2VEZWNvZGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJMYXp5RGVjb2RpbmdJbWFn
ZVByaXZhdGUoaW1hZ2VEZWNvZGVyKSk7CisgICAgfQorCisgICAgfldlYkxhenlEZWNvZGluZ0lt
YWdlUHJpdmF0ZSgpOworCisgICAgdm9pZCBzZXREYXRhT25NYWluVGhyZWFkKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQgZGV0YWNo
T25NYWluVGhyZWFkKCk7CisKKyAgICB2b2lkKiBsb2NrUGl4ZWxzKCk7CisgICAgdm9pZCB1bmxv
Y2tQaXhlbHMoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJMYXp5RGVjb2RpbmdJbWFn
ZVByaXZhdGUoV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4gaW1hZ2VEZWNv
ZGVyKTsKKworICAgIC8vIENvbnRydWN0IGFuZCBkZXN0cm95IG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICBXVEY6Ok93blB0cjxNYWluVGhyZWFkSW1hZ2VEZWNvZGVyPiBtX21haW5UaHJlYWREZWNv
ZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAgLy8gV2ViTGF6eURl
Y29kaW5nSW1hZ2VQcml2YXRlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162596</attachid>
            <date>2012-09-06 14:59:17 -0700</date>
            <delta_ts>2012-09-08 17:55:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120906145857.patch</filename>
            <type>text/plain</type>
            <size>50705</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTg0MDQ5YTU1
NDU5YTRhNDRlMDVjMzM2MTk1YWRiMWIyMDk5MjkwMS4uMjI3ZjViOTQxNmVjMzg3ZGFiZWU5NzEy
ZDU3NjllY2FjYjM1YTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzY1Miw2ICszNjUyLDE2IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5k
cm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
QnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNo
ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVDYWNoZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0
ZUNocm9taXVtLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJDb21wb3NpdG9ySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcAppbmRleCBlNzU3YzQwNzYx
NDQyNmVmY2IzMTZmNzM1Y2NmYjU1YjFiNzA5OGY0Li5mNjdmOTRhNTUxMjFlZDNmYWMwODViNTk1
ZTEzZTRhOGM2YzA2MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0ND
UHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1NldHRpbmdzLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIApAQCAtODYsNiArODcsMTAgQEAgdm9pZCBXZWJDb21w
b3NpdG9ySW1wbDo6aW5pdGlhbGl6ZShXZWJUaHJlYWQqIGltcGxUaHJlYWQpCiAgICAgaWYgKGlt
cGxUaHJlYWQpIHsKICAgICAgICAgc19pbXBsVGhyZWFkID0gQ0NUaHJlYWRJbXBsOjpjcmVhdGUo
aW1wbFRocmVhZCkubGVha1B0cigpOwogICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKHNf
aW1wbFRocmVhZCk7CisKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgdXNlIEltYWdlRGVjb2RpbmdT
dG9yZSB3aGVuIHBlci10aWxlIHJlbmRlcmluZyBpcyB1c2VkLgorICAgICAgICBJbWFnZURlY29k
aW5nU3RvcmU6OnNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3Jl
YXRlKCkubGVha1B0cigpKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXRJbnN0YW5j
ZU9uSW1wbFRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoMCk7CiB9CkBAIC0xMTMs
NiArMTE4LDggQEAgdm9pZCBXZWJDb21wb3NpdG9ySW1wbDo6c2h1dGRvd24oKQogICAgIHNfbWFp
blRocmVhZCA9IDA7CiAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZCgwKTsKICAgICBDQ1Byb3h5
OjpzZXRNYWluVGhyZWFkKDApOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0SW5zdGFuY2VP
bk1haW5UaHJlYWQoMCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXRJbnN0YW5jZU9uSW1w
bFRocmVhZCgwKTsKICAgICBzX2luaXRpYWxpemVkID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBjYTBmOTVk
NzcyMjA4Yjc3NDFmOGQyNDQxZWQwMDUyOTI2OGM2MjdiLi5mYTIxZTA4MzY3NjBjMDU5ZTQ0NDlm
ZjQ5NjgxOGIyNDQ0NzM1Y2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zMCwxMCArMzAsMTUgQEAKICNpbmNsdWRlICJJbWFn
ZVNvdXJjZS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyArODMs
NyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFi
bGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJl
CiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIg
PSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
KmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAg
ICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KE5hdGl2
ZUltYWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJ
bWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxz
UGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oCmluZGV4IDdjOGIwYTcwM2UzMDc4YThlZGI4N2JlYjY4M2FiOTRlZGVjOWY5
YjIuLjE2NzMxMmQ2YTcxZDJhMzg0YmEyOTBlZjY4MDdiOTVhNzUwZDQ1OGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDgsMTEgKzQ4
LDE5IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKIHR5cGVkZWYgQ0dJbWFn
ZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCisjZWxpZiAhVVNFKFNLSUEp
IHx8ICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1h
Z2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKICNlbmRpZgogCisjaWYgVVNFKFNLSUEp
ICYmIFBMQVRGT1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGVyQ2hyb21pdW07Cit0eXBl
ZGVmIEltYWdlRGVjb2RlckNocm9taXVtIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKK3R5cGVk
ZWYgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vsc2UKK3R5
cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAv
LyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhh
dCBzdXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNv
bnN0YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhh
dmUgYW4gb3B0aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMg
aG93IGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y3
MjkxYTQ2NDY1YjM3M2JiOTg4Mjk3ZmYzYjk5MDJmYmQ5MTY1NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNo
cm9taXVtLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZURlY29kZXJDaHJvbWl1bTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW0o
SW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFs
c2UpCisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9
CisKK0ltYWdlRGVjb2RlckNocm9taXVtOjp+SW1hZ2VEZWNvZGVyQ2hyb21pdW0oKQoreworfQor
CisvLyBzdGF0aWMKK0ltYWdlRGVjb2RlckNocm9taXVtKiBJbWFnZURlY29kZXJDaHJvbWl1bTo6
Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9u
IGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2Ft
bWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIgPSBJ
bWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvck9wdGlv
bik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RlckNocm9taXVtKGFjdHVhbERlY29kZXIpOworfQor
CitTdHJpbmcgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QK
K3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1
YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0
ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICAvLyBPbmx5IGRlZmVyIGltYWdlIGRlY29k
aW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJhbWUgaW1hZ2UuIFRoZSByZWFzb24gaXMKKyAgICAv
LyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVkIEdJRi4gQW5pbWF0aW9u
IGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1c2VzIHNvbWUgbWV0YWRh
dGEgZnVuY3Rpb25zIHRoYXQgZG9lcyBzeW5jaHJvbm91cworICAgIC8vIGltYWdlIGRlY29kaW5n
LgorICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAg
ICAgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci5nZXQoKQorICAgICAgICAgICAgJiYgbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUNvdW50KCkgPT0gMQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgeworICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29k
ZXItPnNpemUoKTsKKyAgICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rl
ci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKworICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNr
Qml0bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVh
dGVMYXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAg
ICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisK
KyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXRE
YXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEuZ2V0KCksIG1fYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICAgICAgc2VuZERhdGFUb0ltcGxUaHJlYWQobV9kYXRhLmdldCgp
LCBtX2FsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIG1fZGF0YSA9IDA7CisKKyAgICAgICAgLy8g
VE9ETyhoY2xhbSk6IEZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMuIFNob3VsZCBtYWtlIHN1cmUg
SW1hZ2VTb3VyY2UgZG9lc24ndCBxdWVyeSB0aGlzLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJh
bWUuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgaWYg
KG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKworICAgIC8vIFRPRE8oaGNsYW0pOiBOZWVkIHRv
IHN5bmNocm9uaXplIHN0YXRlcyBmcm9tIFdlYkxhenlEZWNvZGluZ0ltYWdlIHdpdGggbV9sYXp5
RGVjb2RlZEZyYW1lLiBUaGVzZSBzdGF0ZXMgaW5jbHVkZSBhbHBoYSwgZnJhbWVJc0NvbXBsZXRl
IGFuZCBkdXJhdGlvbi4KKyAgICByZXR1cm4gJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9p
ZCBJbWFnZURlY29kZXJDaHJvbWl1bTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpIHsKKyAg
ICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxhenlEZWNvZGluZ0lt
YWdlIGlzIGNyZWF0ZWQsIGF0IHdoaWNoIHBvaW50IG1fZGF0YSBpcyB0cmFuc2ZlcmVkLgorICAg
ICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFS
ZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEuZ2V0KCkpOwor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERh
dGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7CisgICAgICAgIHNlbmREYXRhVG9JbXBsVGhyZWFkKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgfQorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjppc1NpemVBdmFpbGFibGUo
KQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitJ
bnRTaXplIEltYWdlRGVjb2RlckNocm9taXVtOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXpl
KCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kZXJDaHJvbWl1
bTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVT
aXplQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFnZSBkZWNvZGluZyBvbmx5
IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAgICAvLyB1bmlmb3JtIHNp
emUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVjb2RlckNocm9taXVt
OjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAg
ICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAgcmV0dXJuIDE7Cit9
CisKK2ludCBJbWFnZURlY29kZXJDaHJvbWl1bTo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sK
KyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9
CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZl
cnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5CisgICAgLy8gdGhlIGNv
bXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmIChtX2FjdHVhbERlY29k
ZXIuZ2V0KCkpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KGNsZWFyQmVmb3JlRnJhbWUpOworCisgICAgLy8gVE9ETyhoY2xhbSk6IE5lZWQgdG8gbWFrZSBz
dXJlIHdoZW4gSW1hZ2VTb3VyY2UgdG8gaW5zdHJ1Y3RlZCB0bworICAgIC8vIGNsZWFyIGNhY2hl
IHRoaXMgb2JqZWN0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQuIE90aGVyd2lzZSB0aGVyZSB3aWxsCisg
ICAgLy8gdHdvIGVudHJpZXMgb2YgU2tQaXhlbFJlZiBmb3IgdGhlIHNhbWUgaW1hZ2UgY3JlYXRl
ZC4KK30KKworYm9vbCBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4
KTsKKworICAgIC8vIFRPRE8oaGNsYW0pOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggV2Vi
TGF6eURlY29kaW5nSW1hZ2UuCisgICAgLy8gUmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGlu
IHRlcm1zIG9mIHJlbmRlcmluZyBidXQgbWF5IG5vdAorICAgIC8vIGdvIHRocm91Z2ggc29tZSBv
cHRpbWl6ZWQgcmVuZGVyaW5nIGNvZGUgcGF0aC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5z
aWduZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBJ
ZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1l
bW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJuIDAgaGVyZS4KKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBJbWFnZURlY29kZXJDaHJvbWl1bTo6c2VuZERhdGFUb0ltcGxUaHJlYWQoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoIW1fYWN0dWFs
RGVjb2Rlci5nZXQoKSk7CisgICAgLy8gQVNTRVJUKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2VPbkltcGxUaHJlYWQoKSk7CisKKyAgICAvLyBUT0RPKGhjYWxtKTogSW1wbG1lbnQgdGhpcyBm
b3IgaW1wbCB0aHJlYWQgZGVjb2RpbmcuCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RGVjb2RlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMTc3MGI1OWUxMmExMmY1
Nzg4ODU1MWNkNTE1ZDY3NDE2MTJhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RlckNocm9taXVtX2gKKyNk
ZWZpbmUgSW1hZ2VEZWNvZGVyQ2hyb21pdW1faAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RlckNocm9taXVtIHsK
KyAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VEZWNvZGVyQ2hyb21pdW0pOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGVyQ2hyb21pdW0oKTsKKyAg
ICBzdGF0aWMgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXIm
IGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisK
KyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Owor
ICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0
OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7CisgICAgYm9vbCBmcmFt
ZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgSW1hZ2VEZWNvZGVyQ2hyb21pdW0oSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsKKyAg
ICB2b2lkIHNlbmREYXRhVG9JbXBsVGhyZWFkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJv
b2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9hY3R1YWxE
ZWNvZGVyOworCisgICAgU3RyaW5nIG1fZmlsZW5hbWVFeHRlbnNpb247CisgICAgSW50U2l6ZSBt
X3NpemU7CisKKyAgICBJbWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42M2IyNTM3NjkxYjVlMzZlZmQ2MmU4ZTQ2YjlhNjgzOTc0M2Y2NzIyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKworI2lu
Y2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorI2luY2x1ZGUgIkltYWdlRnJh
bWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorI2luY2x1
ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSB7CitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQgPSBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKTsgLy8gaGFjayB0
byBydW4gdGhpcyB3aXRob3V0IGltcGwgc2lkZSBwYWludGluZy4KK0ltYWdlRGVjb2RpbmdTdG9y
ZSogc19pbnN0YW5jZU9uSW1wbFRocmVhZCA9IDA7CisKK2Jvb2wgaGFzU2NhbGluZyhjb25zdCBT
a0lSZWN0JiBzcmNSZWN0LCBjb25zdCBTa0lTaXplJiBkZXN0U2l6ZSkKK3sKKyAgICByZXR1cm4g
c3JjUmVjdC53aWR0aCgpICE9IGRlc3RTaXplLndpZHRoKCkgfHwgc3JjUmVjdC5oZWlnaHQoKSAh
PSBkZXN0U2l6ZS5oZWlnaHQoKTsKK30KKworYm9vbCBoYXNTcmNDbGlwcGluZyhjb25zdCBTa0Jp
dG1hcCYgc3JjQml0bWFwLCBjb25zdCBTa0lSZWN0JiBzcmNSZWN0KQoreworICAgIHJldHVybiBz
cmNCaXRtYXAud2lkdGgoKSAhPSBzcmNSZWN0LndpZHRoKCkgfHwgc3JjQml0bWFwLmhlaWdodCgp
ICE9IHNyY1JlY3QuaGVpZ2h0KCk7Cit9CisKK2Jvb2wgaGFzRGVzdENsaXBwaW5nKGNvbnN0IFNr
SVNpemUmIGRlc3RTaXplLCBjb25zdCBTa0lSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICByZXR1cm4g
ZGVzdFNpemUud2lkdGgoKSAhPSBkZXN0UmVjdC53aWR0aCgpIHx8IGRlc3RTaXplLmhlaWdodCgp
ICE9IGRlc3RSZWN0LmhlaWdodCgpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAgIDogbV9uZXh0SWQoMCkKK3sKK30K
KworSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKKyAgICBXVEY6
OmRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lR2VuZXJhdG9ycyk7CisgICAgV1RGOjpkZWxldGVBbGxW
YWx1ZXMobV9mcmFtZUNhY2hlKTsKK30KKworLy8gc3RhdGljCitJbWFnZURlY29kaW5nU3RvcmUq
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQoreworICAgIHJldHVy
biBzX2luc3RhbmNlT25NYWluVGhyZWFkOworfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RpbmdT
dG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uSW1wbFRocmVhZCgpCit7CisgICAg
cmV0dXJuIHNfaW5zdGFuY2VPbkltcGxUaHJlYWQ7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OnNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9y
ZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQoreworICAgIGlmICghaW1hZ2VEZWNvZGluZ1N0b3JlKQor
ICAgICAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAgICBzX2luc3RhbmNlT25N
YWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3JlOworfQorCisvLyBzdGF0aWMKK3ZvaWQgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpzZXRJbnN0YW5jZU9uSW1wbFRocmVhZChJbWFnZURlY29kaW5nU3Rv
cmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sKKyAgICBpZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkK
KyAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2VPbkltcGxUaHJlYWQ7CisgICAgc19pbnN0YW5jZU9u
SW1wbFRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsKK30KKworLy8gc3RhdGljCitib29sIElt
YWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYgYml0bWFwKQor
eworICAgIHJldHVybiAhIWJpdG1hcC5waXhlbFJlZigpOworfQorCitTa0JpdG1hcCBJbWFnZURl
Y29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoV1RGOjpQYXNzT3duUHRyPElt
YWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKKyAgICBTa0lTaXplIHNpemUgPSBTa0lTaXplOjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0
aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5
KCkpOworCisgICAgY3JlYXRlRnJhbWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0
IHJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShzaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXpp
bHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdp
dGhvdXQgc2NhbGluZy4KKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZp
ZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CisgICAgYml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihtX25l
eHRJZCwgcmVjdCwgc2l6ZSwgcmVjdCkpOworICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0
bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBT
a0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrSVNpemUm
IGRlc3RTaXplLCBjb25zdCBTa0lSZWN0JiBkZXN0U3Vic2V0KSBjb25zdAoreworICAgIEFTU0VS
VChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgLy8gVGhpcyBjaGVjayBtYWtlIHN1cmUg
dGhlIG9yaWdpbiBsYXp5IGRlY29kaW5nIFNrQml0bWFwIHRha2VzIGVudGlyZSBpbWFnZSB3aXRo
b3V0IHNjYWxpbmcuCisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGlj
X2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNT
RVJUKCFwaXhlbFJlZi0+aGFzU2NhbGluZygpICYmICFwaXhlbFJlZi0+aGFzRGVzdENsaXBwaW5n
KCkpOworICAgIEFTU0VSVCghaGFzU3JjQ2xpcHBpbmcoYml0bWFwLCBwaXhlbFJlZi0+c3JjU3Vi
c2V0KCkpKTsKKworICAgIGludCByb3dCeXRlcyA9IDA7CisgICAgaWYgKGhhc1NjYWxpbmcoc3Jj
U3Vic2V0LCBkZXN0U2l6ZSkpCisgICAgICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVS
b3dCeXRlcyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGRlc3RTaXplLndpZHRoKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgcm93Qnl0ZXMgPSBiaXRtYXAucm93Qnl0ZXMoKTsKKworICAgIFNr
Qml0bWFwIHJlc2l6ZWRCaXRtYXA7CisgICAgcmVzaXplZEJpdG1hcC5zZXRDb25maWcoU2tCaXRt
YXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBkZXN0U3Vic2V0LndpZHRoKCksIGRlc3RTdWJzZXQuaGVp
Z2h0KCksIHJvd0J5dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5
RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+aWQoKSwgc3JjU3Vic2V0LCBkZXN0U2l6ZSwgZGVz
dFN1YnNldCkpOworICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQorCit2b2lkIEltYWdlRGVj
b2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlk
VGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERhdGEoZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmFkZERh
dGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBs
b29rdXBGcmFtZUdlbmVyYXRvcihiaXRtYXApLT5hZGREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7Cit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyhpbnQgaWQsIGNv
bnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3QgU2tJU2l6ZSYgZGVzdFNpemUsIGNvbnN0IFNr
SVJlY3QmIGRlc3RTdWJzZXQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IgPSBsb29rdXBGcmFtZUdlbmVy
YXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IGdlbmVyYXRvci0+c2l6ZSgpOworICAg
IFNrSVJlY3QgZnVsbFJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShmdWxsU2l6ZSk7CisKKyAgICAv
LyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIHdpdGhvdXQgY2xpcHBp
bmcuCisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShp
ZCwgZnVsbFJlY3QsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisKKyAgICBpZiAo
IWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IE93bmVyc2hpcCBvZiB0aGUgcGl4ZWxz
IGlzIG93bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlCisgICAgICAgIC8vIGdlbmVyYXRv
ci4gRmluZCBhIHdheSB0byB0cmFuc2ZlciBvZiB0aGUgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4K
KyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0b3ItPmRlY29kZXIoKS0+ZnJhbWVC
dWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVzIHRoZSBmcmFtZSBpbiBjYWNoZSBp
ZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAgIGZyYW1lQ2FjaGUgPSBuZXcgSW1h
Z2VGcmFtZUNhY2hlKGlkLCBmdWxsUmVjdCwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUpOwor
ICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChmcmFtZUNhY2hlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAg
ICAgICAgICAgLy8gVE9ETyhoY2xhbSk6IEhhbmRsZSB0aGlzIGNhc2UhIENvdWxkIHRoaXMgYmUg
ZGVjb2RpbmcgZXJyb3I/CisgICAgICAgICAgICAvLyBPUiBqdXN0IHRoZXJlJ3Mgbm90IGVub3Vn
aCBieXRlcyBmb3IgaW1hZ2U/CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAgICBiaXRtYXAgPSBm
cmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoaGFzU2NhbGluZyhzcmNTdWJz
ZXQsIGRlc3RTaXplKSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24tdGhl
LWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1c2Uu
CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6
ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0U2l6
ZS53aWR0aCgpLCBkZXN0U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAu
bG9ja1BpeGVscygpOworICAgICAgICByZXR1cm4gbV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKGRl
c3RTdWJzZXQueCgpLCBkZXN0U3Vic2V0LnkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9s
b2NrZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4
ZWxzKCk7CisgICAgICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc3JjU3Vic2V0
LngoKSArIGRlc3RTdWJzZXQueCgpLCBzcmNTdWJzZXQueSgpICsgZGVzdFN1YnNldC55KCkpOwor
ICAgIH0KK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscygpCit7Cisg
ICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBtX2xvY2tlZFNrQml0bWFw
LnVubG9ja1BpeGVscygpOworICAgIG1fbG9ja2VkU2tCaXRtYXAucmVzZXQoKTsKK30KKworYm9v
bCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdAoreworICAg
IGlmICh0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgV1RGOjppc01haW5UaHJlYWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gVE9ETyhoY2xhbSk6IGNoZWNrIGltcGwg
dGhyZWFkLgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6
OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKFdURjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29k
ZXIpCit7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEltYWdlRnJh
bWVHZW5lcmF0b3IoZGVjb2Rlcik7CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJh
dG9ycy5hZGQobV9uZXh0SWQsIGdlbmVyYXRvcik7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3Iq
IEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAor
eworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IG1fZnJhbWVHZW5lcmF0b3Jz
LmdldChpZCk7CisgICAgQVNTRVJUKGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGdlbmVyYXRvcjsK
K30KKworSW1hZ2VGcmFtZUdlbmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChp
c0xhenlEZWNvZGVkKGJpdG1hcCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihz
dGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQo
KSk7Cit9CisKK0ltYWdlRnJhbWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUNhY2hlKGludCBpZCwgY29uc3QgU2tJUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tJU2l6ZSYgZGVz
dFNpemUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+ZXF1YWxzKGlkLCBz
cmNSZWN0LCBkZXN0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hlW2ldOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0
ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lSZWN0JiBzcmNSZWN0LCBjb25zdCBTa0lTaXpl
JiBkZXN0U2l6ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5lcXVhbHMoaWQsIHNy
Y1JlY3QsIGRlc3RTaXplKSkgeworICAgICAgICAgICAgZGVsZXRlIG1fZnJhbWVDYWNoZVtpXTsK
KyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGYxMDFmZGY3YWY4ODE0MmQ2NzVjYjJiMmJk
ZTdjZmM1ZDMzNjYyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5lIEltYWdlRGVj
b2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5o
IgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7
CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGU7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIElt
YWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFdURjo6UGFzc093blB0cjxJ
bWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURl
Y29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3RhdGlj
IEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqKTsKKworICAg
IHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25JbXBsVGhyZWFkKCk7CisgICAg
c3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbkltcGxUaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKik7
CisKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisKKyAg
ICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFdURjo6UGFzc093blB0cjxJbWFn
ZURlY29kZXI+KTsKKyAgICBTa0JpdG1hcCByZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0
IFNrQml0bWFwJiwgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBjb25zdCBTa0lTaXplJiBkZXN0
U2l6ZSwgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERh
dGEoY29uc3QgU2tCaXRtYXAmLCBTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgdm9pZCBhZGREYXRhKGNvbnN0IFNrQml0bWFwJiwgU2hhcmVkQnVmZmVyKiwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9jayBhbmQgdW5sb2NrIHN1cHBvcnRzIG9ubHkg
b25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRoZW0gaW4gcGFpci4KKyAgICB2b2lkKiBsb2Nr
UGl4ZWxzKGludCBpZCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBjb25zdCBTa0lTaXplJiBk
ZXN0U2l6ZSwgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCk7CisgICAgdm9pZCB1bmxvY2tQaXhl
bHMoKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9y
KFdURjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIEltYWdlRnJhbWVHZW5l
cmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAg
SW1hZ2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJUmVjdCYg
c3JjUmVjdCwgY29uc3QgU2tJU2l6ZSYgZGVzdFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRl
RnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVJlY3QmIHNyY1JlY3QsIGNvbnN0IFNrSVNpemUm
IGRlc3RTaXplKTsKKworICAgIFdURjo6SGFzaE1hcDxpbnQsIEltYWdlRnJhbWVHZW5lcmF0b3Iq
PiBtX2ZyYW1lR2VuZXJhdG9yczsKKyAgICBXVEY6OlZlY3RvcjxJbWFnZUZyYW1lQ2FjaGUqPiBt
X2ZyYW1lQ2FjaGU7CisKKyAgICBpbnQgbV9uZXh0SWQ7CisgICAgU2tCaXRtYXAgbV9sb2NrZWRT
a0JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTBlMDViNjFjMjEyYjI2YTFiNTM2NzY3ZTEw
MDMyMmEyNjliNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFt
ZUNhY2hlKCkKK3sKK30KKworSW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUoaW50IGlk
LCBjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0
IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3NyY1N1YnNldChzcmNT
dWJzZXQpCisgICAgLCBtX2JpdG1hcChiaXRtYXApCisgICAgLCBtX2lzQ29tcGxldGUoaXNDb21w
bGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmVxdWFscyhpbnQgaWQsIGNvbnN0
IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3QgU2tJU2l6ZSYgZGVzdFNpemUpCit7CisgICAgcmV0
dXJuIGlkID09IG1faWQgJiYgc3JjU3Vic2V0ID09IG1fc3JjU3Vic2V0ICYmIGRlc3RTaXplLndp
ZHRoKCkgPT0gbV9iaXRtYXAud2lkdGgoKSAmJiBkZXN0U2l6ZS5oZWlnaHQoKSA9PSBtX2JpdG1h
cC5oZWlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2Fj
aGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNWE4ODljNDU0ZmY3Mjg3Y2YxOTBkNTJmMGZjNmMzYWVmM2UyMzJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSW1hZ2VGcmFtZUNhY2hlX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hlX2gKKworI2luY2x1
ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIHsKK3B1Ymxp
YzoKKyAgICAvLyBJbWFnZUZyYW1lQ2FjaGUgaXMgYSBmcmFnbWVudCBvZiBhIGltYWdlLiBJdCBp
cyBpZGVudGlmaWVkIGJ5IHRocmVlCisgICAgLy8gdGhpbmdzOgorICAgIC8vIDEuIEltYWdlIElE
LiBUaGUgb3JpZ2luYWwgaW1hZ2UgdGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20uCisgICAg
Ly8gMi4gU291cmNlIHJlY3RhbmdsZS4gVGhlIHJlY3RhbmdsZSBpbiB0aGUgc291cmNlIGltYWdl
LgorICAgIC8vIDMuIERlc3RpbmF0aW9uIHNpemUuIFNjYWxlZCBzaXplIG9mIHRoZSBzb3VyY2Ug
aW1hZ2Ugc3Vic2V0LgorICAgIEltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVJlY3Qm
IHNyY1N1YnNldCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKTsKKyAg
ICB+SW1hZ2VGcmFtZUNhY2hlKCk7CisKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4g
bV9iaXRtYXA7IH0KKworICAgIGJvb2wgZXF1YWxzKGludCBpZCwgY29uc3QgU2tJUmVjdCYgc3Jj
U3Vic2V0LCBjb25zdCBTa0lTaXplJiBkZXN0U2l6ZSk7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7
CisgICAgU2tJUmVjdCBtX3NyY1N1YnNldDsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBi
b29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzZDY0YTA3MTFl
ZTk2MWY1YTBlOGUwNWFiMmNhY2ViY2IzYjI0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1h
Z2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNvZGVyKQoreworICAgIG1fc2l6ZSA9
IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXpl
KCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVy
YXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2Rl
cigpCit7CisgICAgaWYgKCFtX2RlY29kZXIuZ2V0KCkpCisgICAgeworICAgICAgICAvLyBJbXBs
ZW1lbnQuCisgICAgfQorICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIGlm
IChtX2RlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0
KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6YWRk
RGF0YShXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCkKK3sKKyAgICAvLyBJbXBsZW1lbnQuCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODAyNzkwZjIzZDRmNjFl
MGQyNzExMTk3NTRiNmM1OGUxMDg3ZTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorI2Rl
ZmluZSBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29k
ZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3Igewor
cHVibGljOgorICAgIEltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+
IGRlY29kZXIpOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVz
IHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIo
KTsKKyAgICB2b2lkIHNldERhdGEoV1RGOjpQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIGFkZERhdGEoV1RGOjpQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6Ok93blB0
cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBXVEY6OlJlZlB0cjxTaGFyZWRCdWZmZXI+
IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDA3MTlhYzdlNmI3MjYwODViMDhmN2I3MDJjMTBjMzE3MTBhYTJhZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFn
ZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitTS19ERUNM
QVJFX0dMT0JBTF9NVVRFWChnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCk7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworTGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVm
KGludCBpZCwgY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0LCBjb25zdCBTa0lTaXplJiBkZXN0U2l6
ZSwgY29uc3QgU2tJUmVjdCYgZGVzdFN1YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoJmdMYXp5RGVj
b2RpbmdJbWFnZVJlZk11dGV4KQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fc3JjU3Vic2V0KHNy
Y1N1YnNldCkKKyAgICAsIG1fZGVzdFNpemUoZGVzdFNpemUpCisgICAgLCBtX2Rlc3RTdWJzZXQo
ZGVzdFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQ
aXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Omhhc1NjYWxpbmco
KSBjb25zdAoreworICAgIHJldHVybiBtX3NyY1N1YnNldC53aWR0aCgpICE9IG1fZGVzdFNpemUu
d2lkdGgoKSB8fCBtX3NyY1N1YnNldC5oZWlnaHQoKSAhPSBtX2Rlc3RTaXplLmhlaWdodCgpOwor
fQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpoYXNEZXN0Q2xpcHBpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2Rlc3RTaXplLndpZHRoKCkgIT0gbV9kZXN0U3Vic2V0LndpZHRoKCkg
fHwgbV9kZXN0U2l6ZS5oZWlnaHQoKSAhPSBtX2Rlc3RTdWJzZXQuaGVpZ2h0KCk7Cit9CisKK3Zv
aWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCit7
CisgICAgaWYgKFdURjo6aXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVscyhpZCgpLCBtX3Ny
Y1N1YnNldCwgbV9kZXN0U2l6ZSwgbV9kZXN0U3Vic2V0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQoZmFsc2UpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIGlmIChXVEY6OmlzTWFpblRo
cmVhZCgpKSB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKS0+dW5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZhbHNl
KTsKKyAgICB9Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0Fy
ZVdyaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkx
MmRkODg0ZmM3NTc5YTRhMTM3ZjY4MTliYzQxZTVlYzc3ZmI3ZjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlEZWNvZGluZ1Bp
eGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tQ
aXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMg
U2tQaXhlbFJlZiB7CisgIHB1YmxpYzoKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQs
IGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwgY29uc3QgU2tJU2l6ZSYgZGVzdFNpemUsIGNvbnN0
IFNrSVJlY3QmIGRlc3RTdWJzZXQpOworICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVm
KCk7CisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9vbCBoYXNT
Y2FsaW5nKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEZXN0Q2xpcHBpbmcoKSBjb25zdDsKKyAgICBj
b25zdCBTa0lSZWN0JiBzcmNTdWJzZXQoKSBjb25zdCB7IHJldHVybiBtX3NyY1N1YnNldDsgfQor
CisgIHByb3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVmIGltcGxlbWVudGF0aW9uLgorICAgIHZp
cnR1YWwgdm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgb25VbmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3Jp
dGFibGUoKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBmbGF0ZW5hYmxl
LgorICAgIFNLX0RFQ0xBUkVfVU5GTEFUVEVOQUJMRV9PQkpFQ1QoKTsKKworICBwcml2YXRlOgor
ICAgIGludCBtX2lkOworICAgIFNrSVJlY3QgbV9zcmNTdWJzZXQ7CisgICAgU2tJU2l6ZSBtX2Rl
c3RTaXplOworICAgIFNrSVJlY3QgbV9kZXN0U3Vic2V0OworfTsKKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmICAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4
IGEwYWYzZDY0YTFhZjY2NzQxYmMyNTk2ODMwNzAzMTEzZjE2Y2FjMjcuLjc0NDMwNTQ0OTZmNmQw
NDYxMWViNTYwNzI4MDY1MGQxYzZkNmJkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNp
bmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKIAogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKICNlbmRpZgogCkBAIC02OCw2ICs2OSwxMCBAQCBlbnVtIFJlc2FtcGxpbmdNb2RlIHsK
IAogICAgIC8vIEhpZ2ggcXVhbGl0eSByZXNhbXBsaW5nLgogICAgIFJFU0FNUExFX0FXRVNPTUUs
CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBSRVNBTVBMRV9MQVpZLAorI2VuZGlmCiB9
OwogCiBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnN0IFNr
TWF0cml4JiBtYXRyaXgsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBpbnQgc3JjV2lk
dGgsIGludCBzcmNIZWlnaHQsIGZsb2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKQEAg
LTEyMCw3ICsxMjUsNyBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdN
b2RlKGNvbnN0IFNrTWF0cml4JiBtYXRyaXgsIGNvbnN0IE5hdGl2ZQogICAgICAgICAvLyBpcyBz
bG93IGFuZCBkb2Vzbid0IGdpdmUgdXMgdmVyeSBtdWNoIHdoZW4gZ3Jvd2luZyBhIGxvdC4KICAg
ICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKICAgICB9Ci0KKyAgICAKICAgICBpZiAoKGZh
YnMoZGVzdFdpZHRoIC0gc3JjV2lkdGgpIC8gc3JjV2lkdGggPCBrRnJhY3Rpb25hbENoYW5nZVRo
cmVzaG9sZCkKICAgICAgICAgJiYgKGZhYnMoZGVzdEhlaWdodCAtIHNyY0hlaWdodCkgLyBzcmNI
ZWlnaHQgPCBrRnJhY3Rpb25hbENoYW5nZVRocmVzaG9sZCkpIHsKICAgICAgICAgLy8gSXQgaXMg
ZGlzYXBwb2ludGluZ2x5IGNvbW1vbiBvbiB0aGUgd2ViIGZvciBpbWFnZSBzaXplcyB0byBiZSBv
ZmYgYnkKQEAgLTEyOSw2ICsxMzQsMTMgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVS
ZXNhbXBsaW5nTW9kZShjb25zdCBTa01hdHJpeCYgbWF0cml4LCBjb25zdCBOYXRpdmUKICAgICAg
ICAgcmV0dXJuIFJFU0FNUExFX05PTkU7CiAgICAgfQogCisgICAgYm9vbCBoYXNBZmZpbmVPclBl
cnNwZWN0aXZlVHJhbnNmb3JtID0gbWF0cml4LmdldFR5cGUoKSAmIChTa01hdHJpeDo6a0FmZmlu
ZV9NYXNrIHwgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKTsKKworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIGlmICghaGFzQWZmaW5lT3JQZXJzcGVjdGl2ZVRyYW5zZm9ybSAmJiBJbWFn
ZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQoYml0bWFwLmJpdG1hcCgpKSkKKyAgICAgICAg
cmV0dXJuIFJFU0FNUExFX0xBWlk7CisjZW5kaWYKKwogICAgIC8vIFdoZW4gdGhlIGltYWdlIGlz
IG5vdCB5ZXQgZG9uZSBsb2FkaW5nLCB1c2UgbGluZWFyLiBXZSBkb24ndCBjYWNoZSB0aGUKICAg
ICAvLyBwYXJ0aWFsbHkgcmVzYW1wbGVkIGltYWdlcywgYW5kIGFzIHRoZXkgY29tZSBpbiBpbmNy
ZW1lbnRhbGx5LCBpdCBjYXVzZXMKICAgICAvLyB1cyB0byBoYXZlIHRvIHJlc2FtcGxlIHRoZSB3
aG9sZSB0aGluZyBldmVyeSB0aW1lLgpAQCAtMTM3LDcgKzE0OSw3IEBAIHN0YXRpYyBSZXNhbXBs
aW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29uc3QgU2tNYXRyaXgmIG1hdHJpeCwgY29u
c3QgTmF0aXZlCiAKICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgZ2V0cyByZXNhbXBsZWQuCiAgICAg
Ly8gSGlnaCBxdWFsaXR5IGludGVycG9sYXRpb24gb25seSBlbmFibGVkIGZvciBzY2FsaW5nIGFu
ZCB0cmFuc2xhdGlvbi4KLSAgICBpZiAoIShtYXRyaXguZ2V0VHlwZSgpICYgKFNrTWF0cml4Ojpr
QWZmaW5lX01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2spKSkKKyAgICBpZiAoIWhh
c0FmZmluZU9yUGVyc3BlY3RpdmVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybiBSRVNBTVBMRV9B
V0VTT01FOwogICAgIAogICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7CkBAIC0yMTIsMTAgKzIy
NCwxNiBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52YXMs
IFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbQogICAgICAgICAgICAgMCwgMCwgZGVzdFJl
Y3RUcmFuc2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RUcmFuc2Zvcm1lZFJvdW5kZWQu
aGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47IC8vIEltYWdlIGlzIG5vdCB2aXNpYmxlLgogCi0g
ICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoc3JjSVJlY3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3RUcmFu
c2Zvcm1lZFJvdW5kZWQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0
VHJhbnNmb3JtZWRSb3VuZGVkKTsKKyAgICBTa0JpdG1hcCByZXNhbXBsZWQ7CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChi
aXRtYXAuYml0bWFwKCkpKSB7CisgICAgICAgIHJlc2FtcGxlZCA9IEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChiaXRt
YXAuYml0bWFwKCksIHNyY0lSZWN0LCBTa0lTaXplOjpNYWtlKGRlc3RSZWN0VHJhbnNmb3JtZWRS
b3VuZGVkLndpZHRoKCksIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpKSwgZGVz
dEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7CisgICAgfSBlbHNlCisjZW5kaWYKKyAg
ICByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1hcChzcmNJUmVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zvcm1lZFJvdW5kZWQpOwogICAgIGNhbnZhcy5kcmF3
Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0VmlzaWJsZVN1YnNldCwgJnBhaW50KTsK
IH0KIApAQCAtMjM5LDkgKzI1Nyw5IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZv
cm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgU2tD
YW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAKICAgICBSZXNhbXBs
aW5nTW9kZSByZXNhbXBsaW5nOwotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmlzQWNjZWxlcmF0
ZWQoKSkKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpIHsKICAgICAg
ICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKLSAgICBlbHNlIGlmIChwbGF0Zm9ybUNv
bnRleHQtPnByaW50aW5nKCkpCisgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUNvbnRleHQtPnByaW50
aW5nKCkpCiAgICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9OT05FOwogICAgIGVsc2Ugewog
ICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzY2FsZSBhcHBsaWVkIHRvIHRoZSBjYW52YXMg
d2hlbiBjb21wdXRpbmcgc2FtcGxpbmcgbW9kZSAoZS5nLiBDU1Mgc2NhbGUgb3IgcGFnZSBzY2Fs
ZSkuCkBAIC0yNjEsNyArMjc5LDExIEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZv
cm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgfQog
ICAgIHJlc2FtcGxpbmcgPSBsaW1pdFJlc2FtcGxpbmdNb2RlKHBsYXRmb3JtQ29udGV4dCwgcmVz
YW1wbGluZyk7CiAgICAgcGFpbnQuc2V0RmlsdGVyQml0bWFwKHJlc2FtcGxpbmcgPT0gUkVTQU1Q
TEVfTElORUFSKTsKLSAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKQorICAg
IGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICAgICAgfHwgcmVzYW1wbGluZyA9PSBSRVNBTVBMRV9MQVpZCisjZW5kaWYKKyAgICAg
ICAgKQogICAgICAgICBkcmF3UmVzYW1wbGVkQml0bWFwKCpjYW52YXMsIHBhaW50LCBiaXRtYXAs
IHNyY1JlY3QsIGRlc3RSZWN0KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gTm8gcmVzYW1wbGlu
ZyBuZWNlc3NhcnksIHdlIGNhbiBqdXN0IGRyYXcgdGhlIGJpdG1hcC4gV2Ugd2FudCB0bwpAQCAt
MzQ5LDYgKzM3MSw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwKICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVyblRyYW5zZm9ybSk7CiAKICAgICBT
a1NoYWRlciogc2hhZGVyOworICAgIC8vIFRPRE8oaGNsYW0pOiBIYW5kbGUgbGF6eSBkZWNvZGVk
IGltYWdlcyBmb3IgZHJhdyBwYXR0ZXJuLgogICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExF
X0FXRVNPTUUpIHsKICAgICAgICAgLy8gRG8gbmljZSByZXNhbXBsaW5nLgogICAgICAgICBpbnQg
d2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RCaXRtYXBXaWR0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4
IDU2YmQxZTlmZTFkNGE1MDU0YmQ2NzZmYWMwMzYwNDVhNGQyMGZiNTcuLjdmOWU3ZDAzMDczOGNm
YzI0ZTlkZTAwYzRhNmJiZGY3ZDU4NDY5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1LDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkg
KiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFwLCAx
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsKKyAg
ICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25z
dDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162971</attachid>
            <date>2012-09-08 17:55:45 -0700</date>
            <delta_ts>2012-09-10 15:15:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120908175523.patch</filename>
            <type>text/plain</type>
            <size>86103</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4ODRiMjBkZjgwZDli
M2YzOTQ4ZDliZDAwZTQ1OGRkZWE0OGZjY2NkLi45MTZhMTY1YzNmMzVhNjVlNTZkZWJjNGZhMTNh
YWZlNTRiMWU2Nzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOS0wOCAg
QWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtZXRob2QgdG8gZW5hYmxlIGRlZmVycmVkIGltYWdl
IGRlY29kaW5nLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3IuaDoK
KyAgICAgICAgKFdlYkNvbXBvc2l0b3IpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJD
b21wb3NpdG9yU3VwcG9ydC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yU3VwcG9y
dDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisKIDIwMTItMDktMDYgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEV4
cG9ydCBwdWJsaWMgZnVuY3Rpb25zIG9uIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNvIHRoZXkg
Y2FuIGJlIHVzZWQgb3V0c2lkZSBvZiBXZWJLaXQuZGxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ2YTFlMDYy
NTEzYTI3MGVlYjExN2I3MTQ5MmFkOTQ0NzdlZWY2ZC4uYjU3ZGEwZWNmNmU5M2M4ZmU0ZWMwZTJj
ZGJkZTM4OWUxZTAyMDliMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MyBAQAorMjAxMi0wOS0w
OCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJp
dG1hcEltYWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4g
cGVyLXRpbGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMg
YmFja2VkIGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29y
ZHMgZHJhd2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQg
YWxzbyBiZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKwor
ICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0
aGlzIGZlYXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMg
cmVmZXJlbmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3Jk
aW5nIGFuZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAg
ICAgRGVzaWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2Ug
aXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAg
ICAgICBkcmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMg
YSByZXF1ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1
dGUgdGhlIGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBp
cyBsYXppbHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kZXJDaHJvbWl1bQorCisgICAg
ICAgIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIGEgaW1hZ2UgZGVjb2Rl
ci4gVGhpcyBpcworICAgICAgICBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgaXQgZ2VuZXJhdGVzIGEg
bGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgdGhyb3VnaAorICAgICAgICBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3Qg
bWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAg
ICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVh
bCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGlu
ZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRtYXAKKyAgICAgICAgY29udGFp
bnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbiBp
bWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBh
IFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFw
IG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJ
dAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNj
YWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIElt
YWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlv
dXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBz
dWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKwor
ICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisK
KyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0IHRvIHZl
cmlmeSBkZWZlcnJlZAorICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YkNvbXBvc2l0b3JJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2V0
RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb21wb3NpdG9ySW1wbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBvc2l0b3JJbXBsOjpzaHV0ZG93bik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNl
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFnZURlY29kZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpmaWxlbmFtZUV4dGVuc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVCdWZmZXJB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lU2l6ZUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OnJlcGV0aXRpb25Db3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6Y2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUhhc0Fs
cGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJh
bWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChJbWFnZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2VPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpz
ZXRJbnN0YW5jZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OnNldEluc3RhbmNlT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmFkZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1l
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0VxdWFsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRnJhbWVDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lQ2FjaGU6OmlzQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VG
cmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpk
ZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6YWRkRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNv
ZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmZsYXR0ZW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvci5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5n
czo6ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Nl
dHRpbmdzOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6cmVzZXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2V0dGluZ3MuaDoKKyAgICAgICAgKENDU2V0
dGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZXNhbXBsaW5nTW9kZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEltYWdlRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKwog
MjAxMi0wOS0wMyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtz
a2lhXSBEcmF3aW5nIGEgc3VicmVjdCBvZiBiaXRtYXAgaW1hZ2UgaXMgbWlzYWxpZ25lZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4YzU0ODQ2ZGE2MDk3MmNmNDNiNzAzYzUyYThlZjI2
OTdmZTdiNGNmLi44OWE2NDcxMjRkZjcxMmFmMjk3M2EwZTQ5NDVlMzEyZmU0YThjMzM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA5LTA4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
aGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAg
ICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURl
Y29kZXJDaHJvbWl1bVRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIEltYWdl
RGVjb2RlckNocm9taXVtVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICog
V2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RlckNocm9t
aXVtVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bVRlc3Q6OlNl
dFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtVGVzdDo6VGVhckRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9Nb2NrSW1h
Z2VEZWNvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29tcG9zaXRvci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2NrSW1hZ2VE
ZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6Ok1vY2tJbWFnZURl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KToKKwogMjAxMi0wOS0wNyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gV2ViSW1hZ2Ugc2hvdWxkIHVzZSBJbWFnZURlY29k
ZXIgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29tcG9zaXRvci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21w
b3NpdG9yLmgKaW5kZXggNmE4YTEzZWE1Njc5MzAxMjAyYzcwNjliMGZmYjJhMGJjNmE1Zjg2NC4u
ZTllNGY1NmFkOTMzNDdlOWIyODkxNmQyM2E1MzIzMGY4MDE1NGNjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yLmgKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yLmgKQEAgLTU1LDYgKzU1LDcg
QEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgc2V0UGVyVGlsZVBhaW50
aW5nRW5hYmxlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFBhcnRp
YWxTd2FwRW5hYmxlZChib29sKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFj
Y2VsZXJhdGVkQW5pbWF0aW9uRW5hYmxlZChib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCk7CiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5XZWJDb21wb3NpdG9yKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmggYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0LmgKaW5kZXggOTA4
OGJhOWI0ZmM0ZjU2ZjdkZDRjNmNlZDk5Nzc0MzA2YTg3NzMyOS4uZDdkZTZkMDgzNGZiOWI4MWY5
ODI1YWI2MmNjMmZhZjAxNWU3MmU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaApAQCAtNzAsNiArNzAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFBhcnRpYWxTd2FwRW5hYmxlZChib29sKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRBbmltYXRpb25FbmFibGVkKGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpIHsg
fQogCiAgICAgLy8gTWF5IHJldHVybiAwIGlmIGluaXRpYWxpemF0aW9uIGZhaWxzLgogICAgIHZp
cnR1YWwgV2ViTGF5ZXJUcmVlVmlldyogY3JlYXRlTGF5ZXJUcmVlVmlldyhXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6
OlNldHRpbmdzJikgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGUzYjlmMzY2MjM1
ZmE3YzFjZDVmNjM2MDVmMzVkNTk1YWM4MWNmZmMuLjc0Nzg1MzA0ZDM1ZDUwOTdjMmZkOTdiZTE3
YmYwZTJmZTM2YjA3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ4OTAsNiArNDg5MCwxNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJv
aWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1
ZmZlckRhdGFTa2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
Q2FjaGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1
bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRl
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJDb21wb3NpdG9ySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcAppbmRleCA0MzU3OWNlMTU2ODVkOWU2OTUz
NzQyZGZhNzRlMThkOGExZTJlNmE1Li43MDQ2MDhhNTE3NDU5Nzk1NjU0YWYxMmYwMTFlZDg1MTcx
NTQwNDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYkNvbXBvc2l0b3JJbXBsLmNwcApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNsdWRlICJDQ1NldHRpbmdzLmgiCiAjaW5jbHVkZSAi
Q0NUaHJlYWRJbXBsLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVk
ZSA8cHVibGljL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMu
aD4KIApAQCAtNzYsNiArNzcsMTIgQEAgdm9pZCBXZWJDb21wb3NpdG9yOjpzZXRBY2NlbGVyYXRl
ZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIENDU2V0dGluZ3M6OnNldEFjY2Vs
ZXJhdGVkQW5pbWF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJDb21wb3NpdG9y
OjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBB
U1NFUlQoIVdlYkNvbXBvc2l0b3JJbXBsOjppbml0aWFsaXplZCgpKTsKKyAgICBDQ1NldHRpbmdz
OjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdl
YkNvbXBvc2l0b3JJbXBsOjppbml0aWFsaXplKFdlYlRocmVhZCogaW1wbFRocmVhZCkKIHsKICAg
ICBBU1NFUlQoIXNfaW5pdGlhbGl6ZWQpOwpAQCAtODgsNiArOTUsOSBAQCB2b2lkIFdlYkNvbXBv
c2l0b3JJbXBsOjppbml0aWFsaXplKFdlYlRocmVhZCogaW1wbFRocmVhZCkKICAgICAgICAgQ0NQ
cm94eTo6c2V0SW1wbFRocmVhZChzX2ltcGxUaHJlYWQpOwogICAgIH0gZWxzZQogICAgICAgICBD
Q1Byb3h5OjpzZXRJbXBsVGhyZWFkKDApOworCisgICAgaWYgKENDU2V0dGluZ3M6OnBlclRpbGVQ
YWludGluZ0VuYWJsZWQoKSAmJiBDQ1NldHRpbmdzOjpkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKCkpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0SW5zdGFuY2VPbk1haW5UaHJl
YWQoSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOwogfQogCiBib29sIFdl
YkNvbXBvc2l0b3JJbXBsOjppc1RocmVhZGluZ0VuYWJsZWQoKQpAQCAtMTEzLDYgKzEyMyw3IEBA
IHZvaWQgV2ViQ29tcG9zaXRvckltcGw6OnNodXRkb3duKCkKICAgICBzX21haW5UaHJlYWQgPSAw
OwogICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoMCk7CiAgICAgQ0NQcm94eTo6c2V0TWFpblRo
cmVhZCgwKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNldEluc3RhbmNlT25NYWluVGhyZWFk
KDApOwogICAgIHNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGNhMGY5NWQ3NzIyMDhi
Nzc0MWY4ZDI0NDFlZDAwNTI5MjY4YzYyN2IuLjg2MDU3ODkxMGJkYmMwMDU5M2NlM2RhZjlkM2M2
YTZmNTEzYzM3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRh
dGlvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CkBAIC00Nyw2ICs1MSwyNSBAQCBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbQogewogfQogCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKIEltYWdlU291cmNlOjp+SW1hZ2VTb3Vy
Y2UoKQogewogICAgIGNsZWFyKHRydWUpOwpAQCAtNzgsNyArMTAxLDcgQEAgdm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0
aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCiAg
ICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0
aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0
aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CisgICAgICAgIG1fZGVjb2RlciA9
IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihOYXRpdmVJbWFnZVNvdXJjZUZhY3Rv
cnk6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAg
IGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCiAgICAgICAgICAg
ICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRl
eCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2NjlhMTViLi43MjYyOWVmOGVhOTk2
OGMwYzI0NjUxNGQxMzBhMDRmMTU1NTA3OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ4LDExICs0OCwxOSBAQCBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZl
SW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQorI2VsaWYgIVVTRShTS0lBKSB8fCAhUExBVEZPUk0oQ0hS
T01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZl
SW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYKIAorI2lmIFVTRShTS0lBKSAmJiBQTEFURk9STShDSFJP
TUlVTSkKK2NsYXNzIEltYWdlRGVjb2RlckNocm9taXVtOwordHlwZWRlZiBJbWFnZURlY29kZXJD
aHJvbWl1bSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBlZGVmIEltYWdlRGVjb2RlckNo
cm9taXVtKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKKyNlbHNlCit0eXBlZGVmIEltYWdlRGVjb2Rl
ciBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7CisjZW5kaWYKKwogLy8gUmlnaHQgbm93IEdJRnMg
YXJlIHRoZSBvbmx5IHJlY29nbml6ZWQgaW1hZ2UgZm9ybWF0IHRoYXQgc3VwcG9ydHMgYW5pbWF0
aW9uLgogLy8gVGhlIGFuaW1hdGlvbiBzeXN0ZW0gYW5kIHRoZSBjb25zdGFudHMgYmVsb3cgYXJl
IGRlc2lnbmVkIHdpdGggdGhpcyBpbiBtaW5kLgogLy8gR0lGcyBoYXZlIGFuIG9wdGlvbmFsIDE2
LWJpdCB1bnNpZ25lZCBsb29wIGNvdW50IHRoYXQgZGVzY3JpYmVzIGhvdyBhbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjMTFkNjkwNTEyODNiMTlmMjYw
ODcyMDNhMTUwZTM4MTk1NmY4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAKQEAgLTAs
MCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VEZWNvZGVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1h
Z2VEZWNvZGVyQ2hyb21pdW06OkltYWdlRGVjb2RlckNocm9taXVtKEltYWdlRGVjb2RlciogYWN0
dWFsRGVjb2RlcikKKyAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9hY3R1
YWxEZWNvZGVyKGFkb3B0UHRyKGFjdHVhbERlY29kZXIpKQoreworfQorCitJbWFnZURlY29kZXJD
aHJvbWl1bTo6fkltYWdlRGVjb2RlckNocm9taXVtKCkKK3sKK30KKworLy8gc3RhdGljCitJbWFn
ZURlY29kZXJDaHJvbWl1bSogSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNyZWF0ZShjb25zdCBTaGFy
ZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1h
Z2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24p
Cit7CisgICAgSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVh
dGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JPcHRpb24pOworICAgIGlmICghYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29k
ZXJDaHJvbWl1bShhY3R1YWxEZWNvZGVyKTsKK30KKworLy8gc3RhdGljCitJbWFnZURlY29kZXJD
aHJvbWl1bSogSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNyZWF0ZShJbWFnZURlY29kZXIqIGRlY29k
ZXIpCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29kZXJDaHJvbWl1bShkZWNvZGVyKTsKK30K
KworU3RyaW5nIEltYWdlRGVjb2RlckNocm9taXVtOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAgICByZXR1cm4gbV9maWxlbmFtZUV4
dGVuc2lvbjsKK30KKworSW1hZ2VGcmFtZSogSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBpbWFnZSBkZWNv
ZGluZyBpZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29uIGlzCisgICAg
Ly8gYmVjYXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlv
biBpcyBoYW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFk
YXRhIGZ1bmN0aW9ucyB0aGF0IGRvZXMgc3luY2hyb25vdXMKKyAgICAvLyBpbWFnZSBkZWNvZGlu
Zy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCisg
ICAgICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIuZ2V0KCkKKyAgICAgICAgICAgICYmIG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpID09IDEKKyAgICAgICAgICAgICYmIG1fYWN0dWFsRGVj
b2Rlci0+aXNTaXplQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNv
ZGVyLT5zaXplKCk7CisgICAgICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29k
ZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRT
a0JpdG1hcCA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3Jl
YXRlTGF6eURlY29kZWRTa0JpdG1hcChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAg
ICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOwor
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0
RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRhLmdldCgpLCBtX2Fs
bERhdGFSZWNlaXZlZCk7CisgICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVjb2RlZCBv
biBpbXBsIHRocmVhZCB0aGlzIHNob3VsZCBzdWJtaXQgdGhlCisgICAgICAgIC8vIGRhdGEgdG8g
aW1wbCB0aHJlYWQuCisgICAgICAgIG1fZGF0YSA9IDA7CisKKyAgICAgICAgLy8gVE9ETzogRmln
dXJlIG91dCBob3cgdG8gZG8gdGhpcy4gU2hvdWxkIG1ha2Ugc3VyZSBJbWFnZVNvdXJjZSBkb2Vz
bid0IHF1ZXJ5IHRoaXMuCisgICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1h
Z2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9CisKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVy
LmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5k
ZXgoaW5kZXgpOworCisgICAgLy8gVE9ETzogTmVlZCB0byBzeW5jaHJvbml6ZSBzdGF0ZXMgZnJv
bSBXZWJMYXp5RGVjb2RpbmdJbWFnZSB3aXRoIG1fbGF6eURlY29kZWRGcmFtZS4gVGhlc2Ugc3Rh
dGVzIGluY2x1ZGUgYWxwaGEsIGZyYW1lSXNDb21wbGV0ZSBhbmQgZHVyYXRpb24uCisgICAgcmV0
dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAg
ICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVu
Y2UgdG8gZGF0YSB1bnRpbCBXZWJMYXp5RGVjb2RpbmdJbWFnZSBpcyBjcmVhdGVkLCBhdCB3aGlj
aCBwb2ludCBtX2RhdGEgaXMgdHJhbnNmZXJlZC4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAg
ICAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1fYWN0
dWFsRGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVCghbV9kYXRhLmdldCgpKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5n
ZXRTa0JpdG1hcCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBOT1RFOiBX
aGVuIGltYWdlIGlzIGRlY29kZWQgb24gaW1wbCB0aHJlYWQgc3VibWl0cyBkYXRhIHRvIGltcGwg
dGhyZWFkIGhlcmUuCisgICAgfQorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjppc1Np
emVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0
cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2RlckNocm9taXVtOjpzaXplKCkgY29uc3QKK3sK
KyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6ZSBJbWFnZURl
Y29kZXJDaHJvbWl1bTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAgICAv
LyB1bmlmb3JtIHNpemUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVj
b2RlckNocm9taXVtOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kZXJDaHJvbWl1bTo6cmVwZXRpdGlvbkNvdW50
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1h
dGlvbk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5Cisg
ICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworCisgICAgLy8gVE9ETzogTmVlZCB0byBt
YWtlIHN1cmUgd2hlbiBJbWFnZVNvdXJjZSB0byBpbnN0cnVjdGVkIHRvCisgICAgLy8gY2xlYXIg
Y2FjaGUgdGhpcyBvYmplY3QgZG9lc24ndCBnZXQgZGVsZXRlZC4gT3RoZXJ3aXNlIHRoZXJlIHdp
bGwKKyAgICAvLyB0d28gZW50cmllcyBvZiBTa1BpeGVsUmVmIGZvciB0aGUgc2FtZSBpbWFnZSBj
cmVhdGVkLgorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgo
aW5kZXgpOworCisgICAgLy8gVE9ETzogU3luY2hyb25pemUgdGhpcyBzdGF0ZSB3aXRoIFdlYkxh
enlEZWNvZGluZ0ltYWdlLgorICAgIC8vIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0
ZXJtcyBvZiByZW5kZXJpbmcgYnV0IG1heSBub3QKKyAgICAvLyBnbyB0aHJvdWdoIHNvbWUgb3B0
aW1pemVkIHJlbmRlcmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2ln
bmVkIEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYg
ZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1v
cnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY5MDRjMDI2ZTczMTNmNjFhOTdkOTExMDE0NjI1N2YxNzdlOGY1ZjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElt
YWdlRGVjb2RlckNocm9taXVtX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVyQ2hyb21pdW1faAorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1h
cC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xh
c3MgSW1hZ2VEZWNvZGVyQ2hyb21pdW0geworcHVibGljOgorICAgIH5JbWFnZURlY29kZXJDaHJv
bWl1bSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kZXJDaHJvbWl1bSogY3JlYXRlKGNvbnN0IFNo
YXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisgICAgLy8gVXNlZCBpbiB0ZXN0IG9ubHku
IE93bmVyc2hpcCBvZiBkZWNvZGVyIGlzIHRyYW5zZmVycmVkLgorICAgIHN0YXRpYyBJbWFnZURl
Y29kZXJDaHJvbWl1bSogY3JlYXRlKEltYWdlRGVjb2RlciopOworCisgICAgU3RyaW5nIGZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KTsKKworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Cisg
ICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNp
emVfdCBpbmRleCkgY29uc3Q7CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVw
ZXRpdGlvbkNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90KTsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7
CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBJbWFnZURlY29kZXJDaHJvbWl1bShJbWFnZURlY29kZXIq
IGFjdHVhbERlY29kZXIpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAg
IGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9hY3R1
YWxEZWNvZGVyOworCisgICAgU3RyaW5nIG1fZmlsZW5hbWVFeHRlbnNpb247CisgICAgSW50U2l6
ZSBtX3NpemU7CisKKyAgICBJbWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3Jl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYmRhY2QxMGNlM2Y4Mzk3NjZiNDZiM2U0Y2QwMDkwNDAwYjMzYjkw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKwor
I2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkltYWdl
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorI2luY2x1ZGUgIkltYWdl
RnJhbWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorI2lu
Y2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSB7CitzdGF0aWMgY29uc3QgY2hhciBsYWJlbExhenlEZWNvZGVk
W10gPSAibGF6eSI7CitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQg
PSAwOworSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25JbXBsVGhyZWFkID0gMDsKK30g
Ly8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkK
KyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVj
b2RpbmdTdG9yZSgpCit7CisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMobV9mcmFtZUdlbmVyYXRv
cnMpOworICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVzKG1fZnJhbWVDYWNoZSk7Cit9CisKKy8vIHN0
YXRpYworSW1hZ2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25N
YWluVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKK30KKwor
Ly8gc3RhdGljCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2VPbkltcGxUaHJlYWQoKQoreworICAgIHJldHVybiBzX2luc3RhbmNlT25JbXBsVGhyZWFkOwor
fQorCisvLyBzdGF0aWMKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXRJbnN0YW5jZU9uTWFp
blRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sKKyAgICBp
ZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsK
K30KKworLy8gc3RhdGljCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0SW5zdGFuY2VPbklt
cGxUaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCit7CisgICAg
aWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlT25JbXBs
VGhyZWFkOworICAgIHNfaW5zdGFuY2VPbkltcGxUaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7
Cit9CisKKy8vIHN0YXRpYworYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQo
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKK3sKKyAgICByZXR1cm4gYml0bWFwLnBpeGVsUmVmKCkK
KyAgICAgICAgICAgICYmIGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKQorICAgICAgICAgICAg
JiYgIW1lbWNtcChiaXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQs
IHNpemVvZihsYWJlbExhenlEZWNvZGVkKSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdT
dG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGVyPiBkZWNvZGVyKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisg
ICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNrSVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndpZHRo
KCksIGRlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0Vt
cHR5KCkpOworCisgICAgY3JlYXRlRnJhbWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lS
ZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3Jl
YXRlcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRp
cmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5nLgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRt
YXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgo
KSwgZnVsbFNpemUuaGVpZ2h0KCkpOworICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURl
Y29kaW5nUGl4ZWxSZWYobV9uZXh0SWQsIGZ1bGxTaXplLCBmdWxsUmVjdCkpOworICAgIGJpdG1h
cC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7CisgICAgYml0bWFwLnNldElt
bXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgor
ICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVz
aXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICAvLyBUaGlzIGNoZWNrIG1h
a2Ugc3VyZSB0aGUgb3JpZ2luIGxhenkgZGVjb2RpbmcgU2tCaXRtYXAgdGFrZXMgZW50aXJlIGlt
YWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYg
PSBzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsK
KyAgICBBU1NFUlQoIXBpeGVsUmVmLT5pc1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhl
bFJlZi0+aWQoKSktPnNpemUoKSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBp
bnQgcm93Qnl0ZXMgPSAwOworICAgIFNrSVNpemUgaW1hZ2VTaXplID0gU2tJU2l6ZTo6TWFrZShi
aXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNv
ZGUgbGltaXRzIHdlIGhhdmUgdG8gc2NhbGUgdGhlIGVudGlyZSBpbWFnZS4KKyAgICByb3dCeXRl
cyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
LCBzY2FsZWRTaXplLndpZHRoKCkpOworCisgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKKyAg
ICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNj
YWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKKyAg
ICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihwaXhl
bFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSk7CisgICAgcmVzaXplZEJpdG1h
cC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZyb20gcmVjb3JkaW5nIHBp
eGVscy4KKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29kaW5n
U3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKKyAgICBsb29rdXBGcmFtZUdlbmVyYXRvcihiaXRtYXApLT5zZXREYXRhKGRhdGEsIGFs
bERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjphZGREYXRhKGNv
bnN0IFNrQml0bWFwJiBiaXRtYXAsIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9va3Vw
RnJhbWVHZW5lcmF0b3IoYml0bWFwKS0+YWRkRGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwor
fQorCit2b2lkKiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAg
QVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBnZW5lcmF0b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxs
U2l6ZSA9IGdlbmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2ZXMg
dGhlIGZ1bGwgc2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNoZSog
ZnJhbWVDYWNoZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1h
cCBiaXRtYXA7CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IE93
bmVyc2hpcCBvZiB0aGUgcGl4ZWxzIGlzIG93bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhl
CisgICAgICAgIC8vIGdlbmVyYXRvci4gRmluZCBhIHdheSB0byB0cmFuc2ZlciBvZiB0aGUgb3du
ZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0
b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVz
IHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJh
bWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAg
IGZyYW1lQ2FjaGUgPSBuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdl
dFNrQml0bWFwKCksIHRydWUpOworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChmcmFt
ZUNhY2hlKTsKKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2Uu
IENvdWxkIHRoaXMgYmUgZGVjb2RpbmcgZXJyb3I/CisgICAgICAgICAgICAvLyBvciBqdXN0IHRo
ZXJlJ3Mgbm90IGVub3VnaCBieXRlcyB0byBkZWNvZGUgaW1hZ2U/CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkp
OworICAgICAgICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBp
ZiAoZnVsbFNpemUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlz
IGRvbmUgb24tdGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAv
LyBhZnRlciB1c2UuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNjYWxlcyB0aGUgZW50aXJlIGlt
YWdlIGluc3RlYWQgb2YganVzdCBleHRyYWN0aW5nCisgICAgICAgIC8vIHRoZSByZXF1ZXN0ZWQg
ZnJhZ21lbnQuIEZpeCB0aGlzLgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0la
RV9MQU5DWk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9sb2NrZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5s
b2NrUGl4ZWxzKCk7CisgICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIo
c2NhbGVkU3Vic2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhy
ZWFkKCkpOworCisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xv
Y2tlZFNrQml0bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxs
ZWRPblZhbGlkVGhyZWFkKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBpbnN0YW5jZU9uTWFp
blRocmVhZCgpICYmIFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZy
YW1lR2VuZXJhdG9yKFdURjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7Cisg
ICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEltYWdlRnJhbWVHZW5lcmF0
b3IoZGVjb2Rlcik7CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQo
bV9uZXh0SWQsIGdlbmVyYXRvcik7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVj
b2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAgIElt
YWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7
CisgICAgQVNTRVJUKGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGdlbmVyYXRvcjsKK30KKworSW1h
Z2VGcmFtZUdlbmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRv
cihjb25zdCBTa0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNv
ZGVkKGJpdG1hcCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2Fz
dDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisK
K0ltYWdlRnJhbWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGlu
dCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9m
cmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBtX2ZyYW1lQ2FjaGVbaV07CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2Nh
bGVkU2l6ZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ2FjaGVbaV07CisgICAgICAg
ICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjYWQ4YWZhMDY0NDYxODI4ZTc3MjMwOTM2N2Y3MTBiYmI4
YTlhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3Rv
cmVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNs
dWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3Mg
SW1hZ2VGcmFtZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29k
aW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0
b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURl
Y29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2V0
SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKik7CisKKyAgICBzdGF0aWMg
SW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5jZU9uSW1wbFRocmVhZCgpOworICAgIHN0YXRpYyB2
b2lkIHNldEluc3RhbmNlT25JbXBsVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZSopOworCisgICAg
c3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tCaXRt
YXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVy
Pik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1h
cCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNl
dCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBTaGFyZWRCdWZm
ZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCBhZGREYXRhKGNvbnN0IFNrQml0
bWFwJiwgU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9j
ayBhbmQgdW5sb2NrIHN1cHBvcnRzIG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRo
ZW0gaW4gcGFpci4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9j
a1BpeGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOworICAgIGJv
b2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlRnJhbWVHZW5l
cmF0b3IoV1RGOjpQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIEltYWdlRnJhbWVHZW5l
cmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3Q7CisgICAgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogbG9va3VwRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tCaXRtYXAmKSBjb25zdDsK
KyAgICBJbWFnZUZyYW1lQ2FjaGUqIGxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKworICAgIFdURjo6SGFzaE1hcDxpbnQsIElt
YWdlRnJhbWVHZW5lcmF0b3IqPiBtX2ZyYW1lR2VuZXJhdG9yczsKKyAgICBXVEY6OlZlY3RvcjxJ
bWFnZUZyYW1lQ2FjaGUqPiBtX2ZyYW1lQ2FjaGU7CisKKyAgICBpbnQgbV9uZXh0SWQ7CisgICAg
U2tCaXRtYXAgbV9sb2NrZWRTa0JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2VjYjZhYTYw
ZDNjMmIyN2Y0MWQwODA4ZmRlYzNjZmY4N2QxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFt
ZUNhY2hlOjp+SW1hZ2VGcmFtZUNhY2hlKCkKK3sKK30KKworSW1hZ2VGcmFtZUNhY2hlOjpJbWFn
ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUpCisgICAgOiBtX2lkKGlkKQorICAg
ICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX2JpdG1hcChiaXRtYXApCisgICAg
LCBtX2lzQ29tcGxldGUoaXNDb21wbGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZyYW1lQ2FjaGU6
OmlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAg
IHJldHVybiBpZCA9PSBtX2lkICYmIHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZk
ZWI2ZDdkMTQ4MmU3MjI2OWUyM2ZiNjc1NzY1ZTg2ZjcwODMxMDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2Fj
aGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lQ2FjaGVf
aAorI2RlZmluZSBJbWFnZUZyYW1lQ2FjaGVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNp
bmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgeworcHVibGljOgorICAgIC8vIEltYWdlRnJh
bWVDYWNoZSBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQK
KyAgICAvLyBieSB0d28gdGhpbmdzOgorICAgIC8vIDEuIEltYWdlIElELiBUaGUgb3JpZ2luYWwg
aW1hZ2UgdGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20uCisgICAgLy8gMi4gU2NhbGVkIGlt
YWdlIHNpemUuCisgICAgSW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZy
YW1lQ2FjaGUoKTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVy
biBtX2JpdG1hcDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsg
fQorCisgICAgYm9vbCBpc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3Q7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRl
OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7
CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZTcxMjQ4NGVhZjAzOTkzMDc5ZGZkMjhhYTkxOWI0MDVjNDU4
MjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3Iu
aCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJh
bWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2Rl
Y29kZXIoZGVjb2RlcikKK3sKKyAgICBtX3NpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+
c2l6ZSgpLndpZHRoKCksIG1fZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKK30KKworSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworfQorCitJbWFnZURlY29k
ZXIqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29k
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShXVEY6OlBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAg
ICBtX2RhdGEgPSBkYXRhOworICAgIGlmIChtX2RlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fZGVj
b2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQg
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6YWRkRGF0YShXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWE4MzE4MzhlM2RkMThjNWU4ZWY5NjAwNjc1ZWJlYWM4ZWM5OTQ5NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9o
CisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOwor
CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgfkltYWdlRnJhbWVHZW5lcmF0
b3IoKTsKKworICAgIC8vIENyZWF0ZXMgdGhlIGltYWdlIGRlY29kZXIgaWYgbmVlZGVkLgorICAg
IEltYWdlRGVjb2RlciogZGVjb2RlcigpOworICAgIHZvaWQgc2V0RGF0YShXVEY6OlBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQgYWRkRGF0
YShXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwor
CisgICAgY29uc3QgU2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitw
cml2YXRlOgorICAgIFdURjo6T3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIFdU
Rjo6UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIFNrSVNpemUgbV9zaXplOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTIyNWZhMjZlMzM5ODJjNzhlZTBlNjBjNDJiOGVh
YWRkN2RiMDRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0wLDAgKzEsOTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxS
ZWYuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK1NLX0RFQ0xBUkVfR0xPQkFMX01VVEVYKGdMYXp5RGVjb2RpbmdJbWFn
ZVJlZk11dGV4KTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJl
Zjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
LCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCisgICAgOiBTa1BpeGVsUmVmKCZnTGF6eURl
Y29kaW5nSW1hZ2VSZWZNdXRleCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUo
c2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKwor
TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jv
b2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXpl
KSBjb25zdAoreworICAgIHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jv
b2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2Fs
ZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5sb2NrUGl4ZWxzKGlkKCksIG1fc2NhbGVkU2l6
ZSwgbV9zY2FsZWRTdWJzZXQpOworfQorCit2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVu
bG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+dW5sb2NrUGl4ZWxzKCk7
Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVm
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZihTa0ZsYXR0ZW5hYmxlUmVhZEJ1ZmZlciYgYnVmZmVyKQor
ICAgIDogU2tQaXhlbFJlZihidWZmZXIsICZnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCkKK3sK
KyAgICBtX2lkID0gYnVmZmVyLnJlYWRJbnQoKTsKKyAgICBtX3NjYWxlZFNpemUuZldpZHRoID0g
YnVmZmVyLnJlYWRJbnQoKTsKKyAgICBtX3NjYWxlZFNpemUuZkhlaWdodCA9IGJ1ZmZlci5yZWFk
SW50KCk7CisgICAgYnVmZmVyLnJlYWRJUmVjdCgmbV9zY2FsZWRTdWJzZXQpOworICAgIEFTU0VS
VChmYWxzZSk7Cit9CisKK3ZvaWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmZsYXR0ZW4oU2tGbGF0
dGVuYWJsZVdyaXRlQnVmZmVyJiBidWZmZXIpIGNvbnN0Cit7CisgICAgdGhpcy0+U2tQaXhlbFJl
Zjo6ZmxhdHRlbihidWZmZXIpOworICAgIC8vIEZJWE1FOiBTaG91bGQgc2F2ZSB0aGUgZW5jb2Rl
ZCBieXRlcyBoZXJlIGluc3RlYWQgb2YgYW4gSUQuCisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gU2tQaWN0dXJlIGlzIGZsYXR0ZW5lZCBzdWNoIHRoYXQgaXQgY2FuIGJlCisgICAg
Ly8gZGVzZXJpYWxpemVkIGluIGFub3RoZXIgcHJvY2VzcyBzbyBqdXN0IGFuIElEIGlzIG5vdCBt
ZWFuaW5nZnVsLgorICAgIGJ1ZmZlci53cml0ZUludChtX2lkKTsKKyAgICBidWZmZXIud3JpdGVJ
bnQobV9zY2FsZWRTaXplLndpZHRoKCkpOworICAgIGJ1ZmZlci53cml0ZUludChtX3NjYWxlZFNp
emUuaGVpZ2h0KCkpOworICAgIGJ1ZmZlci53cml0ZUlSZWN0KG1fc2NhbGVkU3Vic2V0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OGMwNzY0YzQwMzI2ZjhmYzU1YTIwMzk0MWMxNTVmMTYyNTZhZDYxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
YXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKwor
I2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5o
IgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJl
ZiB7CisgIHB1YmxpYzoKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdmly
dHVhbCB+TGF6eURlY29kaW5nUGl4ZWxSZWYoKTsKKworICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZM
QVRURU5BQkxFX0RFU0VSSUFMSVpBVElPTl9QUk9DUyhMYXp5RGVjb2RpbmdQaXhlbFJlZikKKwor
ICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29sIGlzU2NhbGVkKGNv
bnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0
OworCisgIHByb3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVmIGltcGxlbWVudGF0aW9uLgorICAg
IHZpcnR1YWwgdm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgb25VbmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb25Mb2NrUGl4ZWxzQXJl
V3JpdGFibGUoKSBjb25zdDsKKworICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKFNrRmxhdHRlbmFi
bGVSZWFkQnVmZmVyJik7CisgICAgdmlydHVhbCB2b2lkIGZsYXR0ZW4oU2tGbGF0dGVuYWJsZVdy
aXRlQnVmZmVyJikgY29uc3QgU0tfT1ZFUlJJREU7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbV9p
ZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5n
UGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTZXR0aW5ncy5jcHAKaW5kZXggMWJjYWI3NDYwZjZmNWY4ZTlh
ZGJjNjZhYWMzZmNhYTRiNTFiNzA0Zi4uMWUyZTcwNzVjNDBlZDFlMzkxZTEzYmZkYWIyYzQ0ZDRl
M2ZjNWJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTZXR0aW5ncy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAgbmFtZXNw
YWNlIHsKIHN0YXRpYyBib29sIHNfcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogc3Rh
dGljIGJvb2wgc19wYXJ0aWFsU3dhcEVuYWJsZWQgPSBmYWxzZTsKIHN0YXRpYyBib29sIHNfYWNj
ZWxlcmF0ZWRBbmltYXRpb25FbmFibGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKIH0gLy8gbmFtZXNwYWNlCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQzLDExICs0NCwxNSBAQCB2b2lkIENDU2V0dGluZ3M6OnNldFBhcnRp
YWxTd2FwRW5hYmxlZChib29sIGVuYWJsZWQpIHsgc19wYXJ0aWFsU3dhcEVuYWJsZWQgPSBlbgog
Ym9vbCBDQ1NldHRpbmdzOjphY2NlbGVyYXRlZEFuaW1hdGlvbkVuYWJsZWQoKSB7IHJldHVybiBz
X2FjY2VsZXJhdGVkQW5pbWF0aW9uRW5hYmxlZDsgfQogdm9pZCBDQ1NldHRpbmdzOjpzZXRBY2Nl
bGVyYXRlZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IHNfYWNjZWxlcmF0ZWRBbmlt
YXRpb25FbmFibGVkID0gZW5hYmxlZDsgfQogCitib29sIENDU2V0dGluZ3M6OmRlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoKSB7IHJldHVybiBzX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQ7IH0KK3ZvaWQgQ0NTZXR0aW5nczo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgc19kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsg
fQorCiB2b2lkIENDU2V0dGluZ3M6OnJlc2V0KCkKIHsKICAgICBzX3BlclRpbGVQYWludGluZ0Vu
YWJsZWQgPSBmYWxzZTsKICAgICBzX3BhcnRpYWxTd2FwRW5hYmxlZCA9IGZhbHNlOwogICAgIHNf
YWNjZWxlcmF0ZWRBbmltYXRpb25FbmFibGVkID0gZmFsc2U7CisgICAgc19kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2V0dGluZ3MuaAppbmRleCA4OGY4YzJmZmQzNTJlNWRhOTY0YzZkYmU5OGRlYjAwYWNkMGE5
OWUxLi5hMTE2NGYyZThkMTg3ODk0YWM5MTI4NDc2ZjkzYzEzN2M1ODFjY2NiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NldHRpbmdz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
ZXR0aW5ncy5oCkBAIC0zNCwxMiArMzQsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBl
clRpbGVQYWludGluZ0VuYWJsZWQoKTsKICAgICBzdGF0aWMgYm9vbCBwYXJ0aWFsU3dhcEVuYWJs
ZWQoKTsKICAgICBzdGF0aWMgYm9vbCBhY2NlbGVyYXRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKCk7CiAKICAgICAvLyBU
aGVzZSBzZXR0ZXJzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkIGJlZm9y
ZSB0aGUgbGF5ZXIKICAgICAvLyByZW5kZXJlciBpcyBpbml0aWFsaXplZC4KICAgICBzdGF0aWMg
dm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNl
dFBhcnRpYWxTd2FwRW5hYmxlZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRBY2NlbGVyYXRl
ZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChib29sKTsKIAogICAgIC8vIFRoZXNlIHNldHRpbmdzIGFyZSBtZWFu
dCB0byBiZSBzZXQgb25seSBvbmNlLCBhbmQgb25seSByZWFkIHRoZXJlYWZ0ZXIuCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciByZXNldHRpbmcgc2V0dGluZ3MgaW4gdGVzdHMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tp
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHAKaW5kZXggNzdjNWUzMTk3MGJlZDMzZTIxMDA1MDk4OTM5ODhhY2M3MWM5NzE3NC4uZmY2OWQy
NzlkMDQzN2JjMjYxMjZiNDc1NTA2NjdmZDdkZTcyMjA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNTUsNiArNTUs
NyBAQAogI2luY2x1ZGUgPG1hdGguaD4KIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNlbmRp
ZgogCkBAIC0xMzUsMTcgKzEzNiwyMiBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJl
c2FtcGxpbmdNb2RlKGNvbnN0IFNrTWF0cml4JiBtYXRyaXgsIGNvbnN0IE5hdGl2ZQogICAgICAg
ICByZXR1cm4gUkVTQU1QTEVfTk9ORTsKICAgICB9CiAKKyAgICBib29sIGxhenlEZWNvZGVkID0g
ZmFsc2U7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgbGF6eURlY29kZWQgPSBJbWFnZURl
Y29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQoYml0bWFwLmJpdG1hcCgpKTsKKyNlbmRpZgorCiAg
ICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgbm90IHlldCBkb25lIGxvYWRpbmcsIHVzZSBsaW5lYXIu
IFdlIGRvbid0IGNhY2hlIHRoZQogICAgIC8vIHBhcnRpYWxseSByZXNhbXBsZWQgaW1hZ2VzLCBh
bmQgYXMgdGhleSBjb21lIGluIGluY3JlbWVudGFsbHksIGl0IGNhdXNlcwogICAgIC8vIHVzIHRv
IGhhdmUgdG8gcmVzYW1wbGUgdGhlIHdob2xlIHRoaW5nIGV2ZXJ5IHRpbWUuCi0gICAgaWYgKCFi
aXRtYXAuaXNEYXRhQ29tcGxldGUoKSkKKyAgICBpZiAoIWxhenlEZWNvZGVkICYmICFiaXRtYXAu
aXNEYXRhQ29tcGxldGUoKSkKICAgICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKIAogICAg
IC8vIEV2ZXJ5dGhpbmcgZWxzZSBnZXRzIHJlc2FtcGxlZC4KICAgICAvLyBIaWdoIHF1YWxpdHkg
aW50ZXJwb2xhdGlvbiBvbmx5IGVuYWJsZWQgZm9yIHNjYWxpbmcgYW5kIHRyYW5zbGF0aW9uLgog
ICAgIGlmICghKG1hdHJpeC5nZXRUeXBlKCkgJiAoU2tNYXRyaXg6OmtBZmZpbmVfTWFzayB8IFNr
TWF0cml4OjprUGVyc3BlY3RpdmVfTWFzaykpKQogICAgICAgICByZXR1cm4gUkVTQU1QTEVfQVdF
U09NRTsKLSAgICAKKwogICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VT
a2lhLmNwcAppbmRleCA2N2Y0ODEzMzI2M2RhZTQ1OWMyNTU1N2ZmZTZiMTU3NjVlY2I2NmEzLi40
MmE4NTU1NGY1NGJhZDRjODU5ZDhhOTllOTRhOTM4NjZjZTNiN2Q0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwCkBAIC0zNyw2ICszNywxMSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtSW5zdHJ1bWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUlt
YWdlU2tpYSgpCkBAIC02OCw2ICs3MywxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVz
aXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUpIGNvbnN0CiAKIFNrQml0
bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJ
bWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZEltYWdlU3Vic2V0KSBjb25zdAogeworI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURl
Y29kZWQobV9pbWFnZSkpCisgICAgICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlT25NYWluVGhyZWFkKCktPnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAobV9pbWFnZSwgc2Nh
bGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CisjZW5kaWYKKwogICAgIGlmICghaGFz
UmVzaXplZEJpdG1hcChzY2FsZWRJbWFnZVNpemUpKSB7CiAgICAgICAgIGJvb2wgc2hvdWxkQ2Fj
aGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAgICAgJiYgc2hvdWxkQ2FjaGVSZXNh
bXBsaW5nKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRl
eCBlYTY0OTVmZWU2NDVjYzVmOWViZTVlZTRhOGUyMzE0ZGRmYjBhMjhkLi4zYjU4MTU0MDA1MjJl
MTU0NzRmOWQyNGUzODRmMWQxOWQwYWIyNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMTQ1LDYgKzE0NSwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5
ICogd2lkdGgoKSkgKyB4OwogI2VuZGlmCiAgICAgICAgIH0KKworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorICAgICAgICB2b2lkIHNldFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fYml0bWFwID0gTmF0aXZlSW1hZ2VTa2lhKGJpdG1hcCwg
MSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTa0JpdG1hcCYgZ2V0U2tCaXRtYXAoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuYml0bWFwKCk7Cisg
ICAgICAgIH0KKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29u
c3Q7CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdDsKQEAgLTE5OCw3ICsyMTEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gYXQgZGVjb2RlIHRpbWUuICBJbWFnZSBkZWNvZGVycyB3
aWxsIGRvd25zYW1wbGUgYW55IGltYWdlcyBsYXJnZXIgdGhhbgogICAgIC8vIHxtX21heE51bVBp
eGVsc3wuICBGSVhNRTogTm90IHlldCBzdXBwb3J0ZWQgYnkgYWxsIGRlY29kZXJzLgogICAgIGNs
YXNzIEltYWdlRGVjb2RlciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlRGVj
b2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiAgICAgcHVibGljOgogICAgICAgICBJ
bWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pCiAgICAgICAgICAgICA6IG1fc2NhbGVkKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggNmNkMTc4NTJmYWNmMzQ3NmRiNGJhMTRjYTRhNGQyNGY0OTAzZGNlMy4uNmRj
NjVjY2MyYWU1YTdkZWQ2MWFkOTcyZjk4MTExNmE3ZjAyNzcyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0xNjksOCArMTY5LDEwIEBACiAgICAgICAgICAgICAndGVzdHMvRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJTY3Jv
bGxiYXJUaGVtZUdlb21ldHJ5LmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0ZpbHRlck9wZXJhdGlv
bnNUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9Nb2NrQ0NRdWFkQ3VsbGVyLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL01v
Y2tJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMvVGV4dHVyZUNvcGllclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9UaHJvdHRsZWRUZXh0dXJlVXBsb2FkZXJUZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNo
cm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWMwYjgwNzUxODNmOTZlNjY2NjlkNjIyMjZhYjBl
NTZmMDA1MjU4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RlckNocm9taXVtLmgi
CisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52
YXMuaCIKKyNpbmNsdWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VE
ZWNvZGVyQ2hyb21pdW1UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6c2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5s
ZWFrUHRyKCkpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2Rl
cigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOworICAgICAg
ICBtX2xhenlEZWNvZGVyID0gYWRvcHRQdHIoSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNyZWF0ZSht
X2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9jYW52YXNCaXRtYXAuc2V0Q29uZmlnKFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApOworICAgICAgICBtX2NhbnZhcy5zZXRC
aXRtYXBEZXZpY2UobV9jYW52YXNCaXRtYXApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBU
ZWFyRG93bigpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNldEluc3RhbmNl
T25NYWluVGhyZWFkKDApOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIE1vY2tJbWFnZURlY29k
ZXIqIG1fYWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyQ2hyb21pdW0+IG1f
bGF6eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0JpdG1hcCBtX2Nh
bnZhc0JpdG1hcDsKKyAgICBTa0NhbnZhcyBtX2NhbnZhczsKK307CisKK1RFU1RfRihJbWFnZURl
Y29kZXJDaHJvbWl1bVRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRp
dmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVj
b2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRtYXAoKS5o
ZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisgICAgU2tD
YW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOwor
ICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKKyAgICBt
X3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rl
ci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVy
ZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0
LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lh
PiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFz
TmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IGltYWdlLT5y
ZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1
MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNOdWxsKCkpOworICAgIEVYUEVD
VF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNj
YWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNjYWxlZEJpdG1hcC5oZWln
aHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVyZS5iZWdp
blJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRC
aXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAg
IG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJiZWJiMGEzZGMyZmFmY2QxNzNiOGMyOWI2MDlkY2NkNTkxNjEzNDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURl
Y29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVy
X2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoK
KyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFnZURlY29kZXIoSW1hZ2VTb3Vy
Y2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxl
QXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KDApCisgICAgeyB9
CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSog
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudDsKKworICAgICAgICBBU1NFUlQoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0Vt
cHR5KCkpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2YXRlOgorICAgIGlu
dCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTE3OGJjNjYzMWQ0NDNmMjYxY2QwMzE0MmZm
ZGJiOTE2N2Q1ZjcyNy4uNmMxN2Y5NGM2NzRhMzYwZjU0MmIyY2NkZjZjZjUxMThlZDE1OWZmZSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIC0tZW5hYmxl
LWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0
U2hlbGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5Ogor
ICAgICAgICAoQ2hyb21pdW1Qb3J0LnZpcnR1YWxfdGVzdF9zdWl0ZXMpOgorCiAyMDEyLTA5LTA2
ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVc2UgV2ViQ29tcG9zaXRvclN1cHBvcnQgZnVuY3Rpb25zIGluc3RlYWQgb2YgV2ViQ29t
cG9zaXRvciBzdGF0aWNzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1w
UmVuZGVyVHJlZS5jcHAKaW5kZXggYmVlMTc3N2M2ZmRlNzkzY2U3OGE3Y2Q2ZmJhMmZiZGNkNmFk
OWEzMy4uOWY2NmE1MmVmNzE0MTllMGRhMjYwNTI0NGRlZGU5NTViN2YyNTUzMCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNjIs
NiArNjIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZFBhaW50
aW5nW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtcGFpbgogc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvW10gPSAiLS1lbmFibGUtYWNj
ZWxlcmF0ZWQtdmlkZW8iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVXNlR3JhcGhpY3NDb250
ZXh0M0RJbXBsZW1lbnRhdGlvbltdID0gIi0tdXNlLWdyYXBoaWNzLWNvbnRleHQtM2QtaW1wbGVt
ZW50YXRpb249IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGlu
Z1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9w
dGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVycmVkLWlt
YWdlLWRlY29kaW5nIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzT3B0W10gPSAi
LS1zdHJlc3Mtb3B0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc0Rlb3B0W10gPSAi
LS1zdHJlc3MtZGVvcHQiOwpAQCAtMTI5LDYgKzEzMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiBhcmd2W10pCiAgICAgYm9vbCBkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwog
ICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHBl
clRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc09wdCA9IGZhbHNlOwogICAgIGJv
b2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKICAgICBib29sIGhhcmR3YXJlQWNjZWxlcmF0ZWRHTCA9
IGZhbHNlOwpAQCAtMTc1LDYgKzE3Nyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBHcmFwaGljQ29udGV4
dDNEIGltcGxlbWVudGF0aW9uICVzXG4iLCBpbXBsZW1lbnRhdGlvbi5jX3N0cigpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmcpCiAg
ICAgICAgICAgICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nKQorICAgICAg
ICAgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAgIGVsc2Ug
aWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc09wdCkKICAgICAgICAgICAgIHN0cmVzc09wdCA9
IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc0Rlb3B0KQpA
QCAtMjEzLDYgKzIxNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
ICAgIHNoZWxsLnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMkRDYW52YXNFbmFi
bGVkKTsKICAgICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRQZXJUaWxlUGFpbnRpbmdF
bmFibGVkKHBlclRpbGVQYWludGluZ0VuYWJsZWQpOworICAgICAgICBzaGVsbC5zZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAg
ICAgICBzaGVsbC5zZXRKYXZhU2NyaXB0RmxhZ3MoamF2YVNjcmlwdEZsYWdzKTsKICAgICAgICAg
c2hlbGwuc2V0U3RyZXNzT3B0KHN0cmVzc09wdCk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc0Rl
b3B0KHN0cmVzc0Rlb3B0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwCmluZGV4IGU1ZTlkZWQ2YWUzMGYxOWVhY2I1ZWYwODRmOGQ4N2M5YzRlNDYzYmYuLmM0
MjFiODA4YjNhZjE1MGQxYjAwODA3M2ZiZGNjNDgxZWExMWJhZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMzgyLDYgKzM4MiwxMSBAQCB2b2lk
IFRlc3RTaGVsbDo6c2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAg
UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29tcG9zaXRvclN1cHBvcnQoKS0+c2V0UGVyVGlsZVBhaW50
aW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBUZXN0U2hlbGw6OnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFBsYXRmb3JtOjpjdXJyZW50
KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
ZW5hYmxlZCk7Cit9CisKIHN0YXRpYyBzdHJpbmcgZHVtcERvY3VtZW50VGV4dChXZWJGcmFtZSog
ZnJhbWUpCiB7CiAgICAgLy8gV2UgdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50J3MgdGV4dCBpbnN0
ZWFkIG9mIHRoZSBib2R5IHRleHQgaGVyZSBiZWNhdXNlCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IDQwNTAzNGE0ZTEzOThhNmZhOGI1MjE5NGY4NDEzNTEx
ZTliZWY5ZjguLjI5ZTU0Y2UzNDQxN2Q2YWVlOTVlODMwMjU3NzVhYmM4OTFiYzliNzcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0xMzYsNiArMTM2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBz
ZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFBlclRpbGVQYWludGlu
Z0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KGJvb2wpOwogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNo
ZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExF
IGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4
IGU2NmIwYTIwNDMxOWQxZjg4Njk0ZTM3NmM3MGFjYzdhMGU4YTNlNWEuLjdlNTkzZTljNmNhZTVm
OTAxNTA3NzQ4OWJiNDYxYTliMTZjNTliZWEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzcwLDYgKzM3MCw5IEBA
IGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUo
J3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvdGhyZWFkZWQvY29tcG9zaXRpbmcvd2ViZ2wnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcG9zaXRpbmcvd2ViZ2wnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLXRocmVhZGVkLWNvbXBvc2l0aW5nJ10p
LAorICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm
YXN0L2ltYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtZGVm
ZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcnLCAnLS1m
b3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAogICAgICAgICBdCiAKICAgICAjCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDgz
OTU2YzRhN2YwOWYyODI4YTZmMDY2MTdhN2JkNWIxOTQ2YTJjOC4uOTJiMmIzMDdmNjE5YzZiNWM2
NjU5ZjZmYWFjNDY4YTY0YmZjYjBhNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA5LTA4
ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBD
aHJvbWl1bSB0byB0ZXN0IGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLgorCisgICAg
ICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMgd2lsbCBi
ZSB0ZXN0ZWQgd2l0aAorICAgICAgICAtLWZvcmNlLWNvbXBvc2l0aW5nIC0tZW5hYmxlLXBlci10
aWxlLXBhaW50aW5nIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVk
LgorCiAyMDEyLTA4LTI3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW3NraWFdIERyYXdpbmcgYSBzdWJyZWN0IG9mIGJpdG1hcCBpbWFnZSBpcyBtaXNhbGlnbmVk
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCBmMmQzMWRmYzc0Y2ZiMTFhM2E4NzA3OGUyNzk3MDNlZWNmNzQzOTY4Li5jZWY1ZWRhNDFmMGM0
OWY4MTEzYzhhYjg1OGMxOWMwNzc4MjRhMjI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY1MCw2ICs2NTAsOCBAQCBXT05URklYIFNL
SVAgOiBwbGF0Zm9ybS9tYWMvcGx1Z2lucy91bmRlZmluZWQtcHJvcGVydHktY3Jhc2guaHRtbCA9
IFBBU1MKIC8vIElnbm9yZSB0ZXN0IGJlY2F1c2UgaXQgdHJpZXMgdG8gbG9hZCAucGRmIGZpbGVz
IGluIDxpbWc+IHRhZ3MuCiBXT05URklYIFNLSVAgOiBmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2Ut
bGFuZHNjYXBlLmh0bWwgPSBQQVNTCiBXT05URklYIFNLSVAgOiBmYXN0L2ltYWdlcy9wZGYtYXMt
aW1hZ2UuaHRtbCA9IFBBU1MKK1dPTlRGSVggU0tJUCA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sID0gUEFT
UworV09OVEZJWCBTS0lQIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9wZGYtYXMtaW1hZ2UuaHRtbCA9IFBBU1MKIFdPTlRGSVggU0tJUCA6IGZhc3QvcmVw
bGFjZWQvcGRmLWFzLWltYWdlLmh0bWwgPSBQQVNTCiAKIC8vIFRoZXNlIHRlc3RzIHRyeSB0byBw
cmludCBhIFBERiBmaWxlIGFzIHRoZSBleHBlY3RlZCByZXN1bHQuICBJIGRvbid0IHRoaW5rCkBA
IC02OTIsNiArNjk0LDggQEAgV09OVEZJWCBTS0lQIDogZmFzdC9kb20vV2luZG93L3RpbWVvdXQt
cmVsZWFzZWQtb24tY2xvc2UuaHRtbCA9IFBBU1MKIC8vIFRoZXNlIHRlc3RzIGV4cGVjdCBhIHRp
ZmYgZGVjb2Rlciwgd2hpY2ggd2UgZG9uJ3QgaGF2ZS4KIFdPTlRGSVggTElOVVggQU5EUk9JRCBX
SU4gOiBmYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1sID0gSU1BR0UrVEVYVAogV09OVEZJWCBM
SU5VWCBBTkRST0lEIFdJTiA6IGZhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sID0gSU1BR0Ur
VEVYVAorV09OVEZJWCBMSU5VWCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZW1iZWQtaW1hZ2UuaHRtbCA9IElNQUdFK1RFWFQKK1dP
TlRGSVggTElOVVggQU5EUk9JRCBXSU4gOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sID0gSU1BR0UrVEVYVAogCiAvLyBTYWZh
cmkgaGFzIGEgdW5pcXVlIGhhbmRsaW5nIG9mIHRoZSBCT00gY2hhcmFjdGVycyBhbW9uZyBicm93
c2Vycy4KIC8vIFRoZXJlIGlzIGEgc3Ryb25nIHN1c3BpY2lvbiB0aGF0IHRoaXMgaXMgYSBzZWN1
cml0eSBwcm9ibGVtLCBzbyB3ZQpAQCAtMTE4OSw2ICsxMTkzLDcgQEAgQlVHQ1IxMTE1MyBMSU5V
WCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2Zhc3QvY2FudmFz
L2NhbnZhcy0KIAogLy8gdGVzdF9zaGVsbCwgRFJUIGRvIG5vdCBjb3JyZWN0bHkgc2NoZWR1bGUg
cGFpbnRzIHdoZW4gaW52YWxpZGF0aW5nLgogQlVHQ1I2MjQzMyBXSU4gOiBmYXN0L2ltYWdlcy9n
aWYtbG9vcC1jb3VudC5odG1sID0gSU1BR0UKK0JVR0NSNjI0MzMgV0lOIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1jb3VudC5odG1sID0g
SU1BR0UKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFNWRyBURVNUUwpAQCAtMTQ3Nyw2ICsxNDgyLDggQEAg
QlVHQ1I5NDI3NCBNQUMgOiBmYXN0L2V2ZW50cy9vcHRpb24tdGFiLmh0bWwgPSBURVhUCiAvLyBJ
Z25vcmVkIG9uIFdpbi9MaW51eCBiZWNhdXNlIHRoZXkgcmVseSBvbiBRVCB0byBwcm92aWRlIGEg
VElGRiBkZWNvZGVyLgogQlVHQ1IxMDM3OCBNQUMgOiBmYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5o
dG1sID0gSU1BR0UrVEVYVAogQlVHQ1IxMDM3OCBNQUMgOiBmYXN0L2ltYWdlcy9vYmplY3QtaW1h
Z2UuaHRtbCA9IElNQUdFK1RFWFQKK0JVR0NSMTAzNzggTUFDIDogcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1sID0gSU1BR0UrVEVY
VAorQlVHQ1IxMDM3OCBNQUMgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sID0gSU1BR0UrVEVYVAogCiAvLyBUaGUgZm9sbG93
aW5nIGFyZSBmbGFreSBpbiB0aGF0IHNvbWUgdGltZXMgdGhlIHRpbWVvdXQgb3IgY3Jhc2gsIGJ1
dCB3ZSB0aGluawogLy8gaXQgaXMgYmVjYXVzZSBvZiBidWdzIGluIG90aGVyIHBhcnRzIG9mIHRo
ZSBjb2RlIGFuZCBub3Qgc3BlY2lmaWMgdG8gd2hhdApAQCAtMjEwNSw2ICsyMTEyLDExIEBAIEJV
R1dLNTAyODIgTElOVVggQU5EUk9JRCBXSU4gOiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1y
aW5nLW91dGxpbmUtY29sb3Itbm90CiBCVUdXSzUwMjgyIExJTlVYIEFORFJPSUQgV0lOIDogZmFz
dC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLmh0bWwgPSBJTUFHRStU
RVhUCiBCVUdXSzUwMjgyIExJTlVYIEFORFJPSUQgV0lOIDogZmFzdC9pbWFnZXMvaW1hZ2VtYXAt
Y2lyY2xlLWZvY3VzLXJpbmcuaHRtbCA9IElNQUdFK1RFWFQKIEJVR1dLNTAyODIgTElOVVggQU5E
Uk9JRCBXSU4gOiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRtbCA9
IElNQUdFK1RFWFQKK0JVR1dLNTAyODIgTElOVVggQU5EUk9JRCBXSU4gOiBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0
bGluZS1jb2xvci1leHBsaWNpdGx5LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sID0gSU1BR0UrVEVY
VAorQlVHV0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9y
LW5vdC1pbmhlcml0ZWQtZnJvbS1tYXAuaHRtbCA9IElNQUdFK1RFWFQKK0JVR1dLNTAyODIgTElO
VVggQU5EUk9JRCBXSU4gOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci5odG1sID0gSU1BR0UrVEVY
VAorQlVHV0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZvY3VzLXJpbmcuaHRtbCA9
IElNQUdFK1RFWFQKK0JVR1dLNTAyODIgTElOVVggQU5EUk9JRCBXSU4gOiBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLXBvbHlnb24tZm9jdXMt
cmluZy5odG1sID0gSU1BR0UrVEVYVAogCiAvLyBSZWdyZXNzZWQgYXQgcjczNDIzLiBBbGwgYXJl
YXMgYXJlIHBhaW50ZWQgZ3JlZW4uCiBCVUdXSzUwNzM0IExJTlVYIEFORFJPSUQgV0lOIDogZmFz
dC9yZXBhaW50L3Bvc2l0aW9uZWQtZG9jdW1lbnQtZWxlbWVudC5odG1sID0gSU1BR0UKQEAgLTIx
MTYsNiArMjEyOCw3IEBAIEJVR1dLNTA3MzQgTElOVVggQU5EUk9JRCBXSU4gOiBmYXN0L3JlcGFp
bnQvcG9zaXRpb25lZC1kb2N1bWVudC1lbGVtZW50Lmh0bWwgPSBJCiAvLyBEUlQgbmVlZHMgdG8g
c2NoZWR1bGUgcGFpbnRzIG9uIGludmFsaWRhdGlvbnMgbGlrZSBDaHJvbWUgZG9lcy4KIEJVR0NS
NjI0MzMgTElOVVggQU5EUk9JRCBNQUMgOiBmYXN0L2JhY2tncm91bmRzL2FuaW1hdGVkLWdpZi1h
cy1iYWNrZ3JvdW5kLmh0bWwgPSBJTUFHRQogQlVHQ1I2MjQzMyBMSU5VWCBBTkRST0lEIE1BQyA6
IGZhc3QvaW1hZ2VzL2dpZi1sb29wLWNvdW50Lmh0bWwgPSBJTUFHRQorQlVHQ1I2MjQzMyBMSU5V
WCBBTkRST0lEIE1BQyA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCA9IElNQUdFCiAKIAogLy8gVGhpcyB0ZXN0IG5lZWRz
IGVuaGFuY2VkIGV2ZW50U2VuZGVyLmNvbnRleHRNZW51KCkgcmV0dXJuIHZhbHVlLgpAQCAtMjI2
MCw2ICsyMjczLDcgQEAgQlVHV0s1NDA1MSBNQUMgOiBwbHVnaW5zL3dpbmRvd2xlc3NfcGx1Z2lu
X3BhaW50X3Rlc3QuaHRtbCA9IFRJTUVPVVQKIAogLy8gQWN0dWFsIGZhaWx1cmVzCiBCVUdXSzU0
MzIyIFNOT1dMRU9QQVJEIDogZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFnZS5odG1sID0gSU1B
R0UrVEVYVAorQlVHV0s1NDMyMiBTTk9XTEVPUEFSRCA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFnZS5odG1sID0gSU1BR0UrVEVY
VAogQlVHV0s1NDMyMiBTTk9XTEVPUEFSRCA6IGZhc3QvcmVwbGFjZWQvd2lkdGgxMDBwZXJjZW50
LXRleHRhcmVhLmh0bWwgPSBJTUFHRQogQlVHV0s1NDMyMiBTTk9XTEVPUEFSRCA6IGZhc3QvdGV4
dC9pbnRlcm5hdGlvbmFsL3RleHQtY29tYmluZS1pbWFnZS10ZXN0Lmh0bWwgPSBJTUFHRQogCkBA
IC0yMjc1LDExICsyMjg5LDEzIEBAIEJVR1dLNTUxMTcgOiBmYXN0L2pzL2kxOG4tYmluZGluZ3Mt
bG9jYWxlLmh0bWwgPSBURVhUCiBCVUdDUjc0NDk3IDogcGxhdGZvcm0vd2luL3BsdWdpbnMvd2lu
ZG93bGVzcy1wYWludC1yZWN0LWNvb3JkaW5hdGVzLmh0bWwgPSBURVhUCiAKIEJVR1dLNTUzMDAg
OiBmYXN0L2ltYWdlcy9zdXBwb3J0LWJyb2tlbi1pbWFnZS1kZWxlZ2F0ZS5odG1sID0gVEVYVAor
QlVHV0s1NTMwMCA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvc3VwcG9ydC1icm9rZW4taW1hZ2UtZGVsZWdhdGUuaHRtbCA9IFRFWFQKIAogLy8gaW50cm9k
dWNlZCBieSBEYXZlIEh5YXR0IGluIFdLIHI4MDU4MgogQlVHQ1I3NTU2MSBMSU5VWCBBTkRST0lE
IFdJTiA6IGZhc3Qvd3JpdGluZy1tb2RlL3RleHQtb3JpZW50YXRpb24tYmFzaWMuaHRtbCA9IElN
QUdFK1RFWFQKIAogQlVHV0s1NjA2MCBMSU5VWCA6IGZhc3QvaW1hZ2VzL2Zhdmljb24tYXMtaW1h
Z2UuaHRtbCA9IElNQUdFK1RFWFQKK0JVR1dLNTYwNjAgTElOVVggOiBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmljb24tYXMtaW1hZ2UuaHRtbCA9IElN
QUdFK1RFWFQKIAogLy8gU2tpcCBhbiBvdmVybHkgcmVzdHJpY3RpdmUgY3Jvc3Mtb3JpZ2luIEhU
VFBTIHRlc3QKIEJVR0NSNjk1OTQgU0tJUCA6IGh0dHAvdGVzdHMvYXBwY2FjaGUvZGlmZmVyZW50
LWh0dHBzLW9yaWdpbi1yZXNvdXJjZS1tYWluLmh0bWwgPSBQQVNTCkBAIC0yMzk1LDYgKzI0MTEs
NyBAQCBCVUdXSzYwMTMxIFNMT1cgOiBmYXN0L2Nzcy92aXNpdGVkLWxpbmstaGFuZy5odG1sID0g
UEFTUwogCiAvLyBJbnRyb2R1Y2VkIGluIHI4NDQ0MwogQlVHV0s1OTA2MyA6IGZhc3QvaW1hZ2Vz
L2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbCA9IFRFWFQKK0JVR1dLNTkw
NjMgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2FuaW1h
dGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbCA9IFRFWFQKIAogQlVHV0s1NjcwMiBX
SU4gREVCVUcgOiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGluZy1jcm9zcy1vcmlnaW4tZnJvbS1o
dHRwcy5odG1sID0gUEFTUyBUSU1FT1VUCiAKQEAgLTI2MTMsOCArMjYzMCwxMCBAQCBCVUdXSzY5
OTk4IExJTlVYIFdJTiA6IHBsdWdpbnMvcmVmY291bnQtbGVha3MuaHRtbCA9IFBBU1MgVEVYVAog
CiAvLyBJQ0MgY29sb3IgcHJvZmlsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gV0lOLCBMSU5VWCwg
QU5EUk9JRCBzbyBTS0lQIGZvciBub3cuCiBCVUdXSzcwMDAxIFNLSVAgTElOVVggQU5EUk9JRCBX
SU4gOiBmYXN0L2ltYWdlcy9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmlsZS5odG1sID0gUEFT
UworQlVHV0s3MDAwMSBTS0lQIExJTlVYIEFORFJPSUQgV0lOIDogcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmls
ZS5odG1sID0gUEFTUwogLy8gUGFsZXR0ZWQgUE5HIHdpdGggSUNDIGNvbG9yIHByb2ZpbGVzIG5v
dCB3b3JraW5nLgogQlVHV0s4NjcyMiA6IGZhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNv
bG9yLXByb2ZpbGUuaHRtbCA9IE1JU1NJTkcKK0JVR1dLODY3MjIgOiBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXBy
b2ZpbGUuaHRtbCA9IE1JU1NJTkcKIAogLy8gVjggaGFuZGxlcyBzdGFjayBvdmVyZmxvdyBleGNl
cHRpb25zIGRpZmZlcmVudGx5IHRoYW4gSlNDCiBCVUdXSzcwMjEwIDogZmFzdC9qcy9zdGFjay1v
dmVyZmxvdy1hcnJpdHktY2F0Y2guaHRtbCA9IFRFWFQKQEAgLTI4NTMsNiArMjg3Miw3IEBAIEJV
R1dLODE4MDMgTUFDIDogcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcnViYmVyYmFuZGlu
Zy90cmFuc2Zvcm0tb3ZlcmhhbmctCiBCVUdXSzgxODAzIE1BQyA6IHBsYXRmb3JtL2Nocm9taXVt
L2NvbXBvc2l0aW5nL3J1YmJlcmJhbmRpbmcvdHJhbnNmb3JtLW92ZXJoYW5nLXcuaHRtbCA9IFBB
U1MgSU1BR0UKIAogQlVHV0s4MTkzMSBTTk9XTEVPUEFSRCBXSU4gREVCVUcgOiBmYXN0L2ltYWdl
cy9kZXN0cm95ZWQtaW1hZ2UtbG9hZC1ldmVudC5odG1sID0gUEFTUyBUSU1FT1VUCitCVUdXSzgx
OTMxIFNOT1dMRU9QQVJEIFdJTiBERUJVRyA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvZGVzdHJveWVkLWltYWdlLWxvYWQtZXZlbnQuaHRtbCA9IFBBU1Mg
VElNRU9VVAogCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcyNzAzOC0xLmh0
bWwgPSBJTUFHRStURVhUCiBCVUdXSzM3MjQ0IDogdGFibGVzL21vemlsbGEvYnVncy9idWcyNzAz
OC0yLmh0bWwgPSBJTUFHRStURVhUCkBAIC0zMDEzLDYgKzMwMzMsOCBAQCBCVUdXSzgzMzI0IFdJ
TiBERUJVRyA6IGZhc3QvanMvY3Jvc3MtZ2xvYmFsLW9iamVjdC1pbmxpbmUtZ2xvYmFsLXZhci5o
dG1sID0gUEFTUwogLy8gRVhJRiBvcmllbnRhdGlvbiBzdXBwb3J0IGhhcyBub3QgeWV0IGJlZW4g
aW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0KIEJVR1dLMTk2ODggU0tJUCA6IGZhc3QvaW1h
Z2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCA9IFBBU1MKIEJVR1dLMTk2ODggU0tJUCA6IGZhc3Qv
aW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgPSBQQVNTCitCVUdXSzE5Njg4IFNLSVAg
OiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3Jp
ZW50YXRpb24uaHRtbCA9IFBBU1MKK0JVR1dLMTk2ODggU0tJUCA6IHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi1jc3MuaHRtbCA9
IFBBU1MKIAogQlVHQ1IxMjI0NjIgV0lOIExJTlVYIFNMT1cgOiBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9pbnNwZWN0LWVsZW1lbnQuaHRtbCA9IFRFWFQKIApAQCAtMzY0MCwzICszNjYyLDcgQEAgQlVH
V0s5NTEyMSA6IHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNl
cnZlQXNwZWN0UmF0aW8tYXR0ci4KIEJVR1dLOTUxMjEgOiBzdmcvZHluYW1pYy11cGRhdGVzL1NW
R0ZFSW1hZ2VFbGVtZW50LXN2Z2RvbS1wcmVzZXJ2ZUFzcGVjdFJhdGlvLXByb3AuaHRtbCA9IElN
QUdFCiBCVUdXSzk1MTIxIDogc3ZnL3pvb20vcGFnZS96b29tLWJhY2tncm91bmQtaW1hZ2VzLmh0
bWwgPSBJTUFHRQogQlVHV0s5NTEyMSA6IHNjcm9sbGJhcnMvb3ZlcmZsb3ctc2Nyb2xsYmFyLWNv
bWJpbmF0aW9ucy5odG1sID0gSU1BR0UKKworLy8gRGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuIFJl
YmFzZWxpbmUuCitCVUdXSzk1MTIxIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5kLXdlYmtpdC10cmFuc2Zv
cm0tc2NhbGUuaHRtbCA9IElNQUdFCitCVUdXSzk0MjQwIFNMT1cgOiBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwg
PSBQQVNTIFRJTUVPVVQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRl
cyBpbiB0aGlzIGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNv
ZGUgcGF0aAorIyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163224</attachid>
            <date>2012-09-10 15:15:27 -0700</date>
            <delta_ts>2012-09-21 11:41:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120910151503.patch</filename>
            <type>text/plain</type>
            <size>86114</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ2YTFlMDYyNTEzYTI3
MGVlYjExN2I3MTQ5MmFkOTQ0NzdlZWY2ZC4uOTFhODIyYjg1N2FiYzEzYjBlMWI0ZWZhNzE3OWMx
ZGEyNWI5OGRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kZXJDaHJvbWl1bQorCisgICAgICAgIFRo
aXMgaXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIGEgaW1hZ2UgZGVjb2Rlci4gVGhp
cyBpcworICAgICAgICBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgaXQgZ2VuZXJhdGVzIGEgbGF6aWx5
IGRlY29kZWQgU2tCaXRtYXAgdGhyb3VnaAorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisK
KyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWFuYWdl
cyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAgICAgICAg
ZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNv
ZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXpp
bHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRtYXAKKyAgICAgICAgY29udGFpbnMgYSBM
YXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbiBpbWFnZQor
ICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29k
aW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0
bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRz
IHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAg
ICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcg
aW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVj
b2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVz
dHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQor
ICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAg
ICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAg
ICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0IHRvIHZlcmlmeSBk
ZWZlcnJlZAorICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldHRpbmdzOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAg
ICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChTZXR0aW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNo
cm9taXVtOjpJbWFnZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXJDaHJvbWl1bTo6fkltYWdlRGVjb2RlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyQ2hyb21pdW06OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyQ2hyb21pdW06OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXJDaHJvbWl1bTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXJDaHJvbWl1bTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXJDaHJvbWl1bTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXJDaHJvbWl1bTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RlckNocm9taXVtOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGVyQ2hyb21pdW0uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RlckNocm9taXVtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRt
YXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6YWRkRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6Oklt
YWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1
YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNo
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJ
bWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVH
ZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRv
cjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjphZGRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1l
R2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNpemUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVs
UmVmLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
enlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJD
b3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6ZmxhdHRlbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEltYWdlRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKwog
MjAxMi0wOS0wMyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtz
a2lhXSBEcmF3aW5nIGEgc3VicmVjdCBvZiBiaXRtYXAgaW1hZ2UgaXMgbWlzYWxpZ25lZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3ZjFkYWI2NjAwNzk2YmJlNDA0MjAwOGQzNWI2MDli
ZDg4NmViNWMxLi5hNzNiNmU1YzU3OGQ2OWM0ODc1YmVjMDMzNTU4NWEwZTRkMTAzMGRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA5LTA4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
aGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAg
ICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURl
Y29kZXJDaHJvbWl1bVRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIEltYWdl
RGVjb2RlckNocm9taXVtVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICog
V2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICog
c3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBz
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBs
OjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBs
KToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZURlY29kZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtVGVzdDo6U2V0VXApOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0OjpUZWFyRG93bik6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQpOgorCisyMDEyLTA5LTA3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBXZWJJbWFnZSBzaG91bGQgdXNlIEltYWdlRGVjb2RlciBkaXJl
Y3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYx
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGlzIGZvciBwcmVwYXJhdGlvbiBvZiBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAg
ICAgICAgSW1hZ2VTb3VyY2Ugd2lsbCBiZSB1c2VkIGFzIGEgcG9ydGFsIHRvIGFjY2VzcyBkZWZl
cnJlZCBpbWFnZSBkZWNvZGVyCisgICAgICAgIGJ5IEJpdG1hcEltYWdlLCBpdCBzaG91bGQgbm90
IGJlIGFjY2Vzc2libGUgdGhyb3VnaCBXZWJLaXQgQVBJcy4KKworICAgICAgICBXZWJJbWFnZSBu
b3cgY2FsbHMgSW1hZ2VEZWNvZGVyIGRpcmVjdGx5IHdoaWNoIGlzIHRoZSBhY3R1YWwKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gb2YgYW4gaW1hZ2UgZGVjb2Rlci4KKworICAgICAgICBUZXN0czog
V2ViSW1hZ2VUZXN0LlBOR0ltYWdlCisgICAgICAgICAgICAgICBXZWJJbWFnZVRlc3QuSUNPSW1h
Z2UKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHNyYy9XZWJJbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6ZnJvbURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbWFnZTo6ZnJhbWVzRnJvbURhdGEpOgorICAgICAgICAqIHRlc3RzL1dlYkltYWdl
VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVh
ZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2Js
YWNrLWFuZC13aGl0ZS5pY286IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvd2hpdGUtMXgx
LnBuZzogQWRkZWQuCisKIDIwMTItMDktMDYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERvbid0IGxpbmsgY2MgaW4gdG8gV2ViS2l0
LmRsbCB3aGVuIHVzZV9saWJjY19mb3JfY29tcG9zaXRvcj0xCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZTNiOWYzNjYyMzVmYTdjMWNkNWY2MzYwNWYzNWQ1OTVhYzgxY2ZmYy4uNzQ3ODUzMDRkMzVkNTA5
N2MyZmQ5N2JlMTdiZjBlMmZlMzZiMDc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDg5MCw2ICs0
ODkwLDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNo
cm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJp
dmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExh
eWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGU5N2M2NGY3M2Rj
YjBlMjdhZTQ5NjRkNDc1ZTYyYWI4MjliM2ZjNTQuLjUxMWVlYTljMTg5Y2JiMmU5NTlkYTUyMzgx
NGUyY2ZhMDBmNTNiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC00Miw2ICs0Miwx
MCBAQAogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjks
NiArMjMzLDkgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3dlYkF1
ZGlvRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX2RlZmVycmVkQ2FudmFzMmRFbmFibGVkKGZhbHNlKQorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQor
I2VuZGlmCiAgICAgLCBtX2xvYWREZWZlcnJpbmdFbmFibGVkKHRydWUpCiAgICAgLCBtX3RpbGVk
QmFja2luZ1N0b3JlRW5hYmxlZChmYWxzZSkKICAgICAsIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRF
bmFibGVkKGZhbHNlKQpAQCAtOTIxLDYgKzkyOCwxNyBAQCB2b2lkIFNldHRpbmdzOjpzZXREZWZl
cnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9kZWZlcnJlZENhbnZhczJk
RW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ZvaWQgU2V0
dGluZ3M6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlm
IChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgPSBlbmFibGVkOworfQorI2VuZGlmCisKIHZvaWQgU2V0dGluZ3M6OnNldE1pbmlt
dW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQgbnVtUGl4ZWxzKQogewogICAgIG1fbWluaW11
bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplID0gbnVtUGl4ZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5o
CmluZGV4IGZkNGQ5YTk5MmI2OWVmZGNmNGE0ZGJkNGU4NTA1NDllMjVjN2M0YWQuLjQwNTJlMjdj
ZTQyMDZiZTk1ZGM1ZGM3OTI3ZjYzNDM4MTYyYjZmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgK
QEAgLTQxNyw2ICs0MTcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgICAgICBib29sIGRlZmVycmVkMmRD
YW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZDsg
fQogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChib29sKTsKKyAgICAgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
OyB9CisjZW5kaWYKKwogICAgICAgICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJE
IGNhbnZhcyBpcyByZW5kZXJlZCBpbiBzb2Z0d2FyZQogICAgICAgICAvLyBldmVuIGlmIGhhcmR3
YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLgogICAgICAgICAvLyBIYXJkd2FyZSBhY2NlbGVy
YXRpb24gaXMgdXNlZnVsIGZvciBsYXJnZSBjYW52YXNlcyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhl
CkBAIC03MzcsNiArNzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
d2ViQXVkaW9FbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRF
bmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2RlZmVycmVkQ2FudmFzMmRFbmFibGVkIDogMTsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgOiAxOworI2VuZGlmCiAgICAgICAgIGJvb2wgbV9sb2FkRGVmZXJyaW5nRW5h
YmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV90aWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQgOiAxOwog
ICAgICAgICBib29sIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkIDogMTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBjYTBm
OTVkNzcyMjA4Yjc3NDFmOGQyNDQxZWQwMDUyOTI2OGM2MjdiLi45NjJhOTFhNWQ5OTcyNmViNjZm
YTE2MjA5NmRmZDM5MzY0NTFkOWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIklt
YWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQpAQCAtNzgsNyArODIsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZm
aWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBu
byBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2Rl
cikgewotICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0
cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0
aXZlSW1hZ2VTb3VyY2VQdHI+KE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRh
LCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAm
JiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3
ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIuLjcyNjI5ZWY4ZWE5OTY4YzBjMjQ2NTE0ZDEzMGEw
NGYxNTU1MDc5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaApAQCAtNDgsMTEgKzQ4LDE5IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lm
IFVTRShDRykKIHR5cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsK
LSNlbHNlCisjZWxpZiAhVVNFKFNLSUEpIHx8ICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIElt
YWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsK
ICNlbmRpZgogCisjaWYgVVNFKFNLSUEpICYmIFBMQVRGT1JNKENIUk9NSVVNKQorY2xhc3MgSW1h
Z2VEZWNvZGVyQ2hyb21pdW07Cit0eXBlZGVmIEltYWdlRGVjb2RlckNocm9taXVtIE5hdGl2ZUlt
YWdlU291cmNlRmFjdG9yeTsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIE5hdGl2ZUlt
YWdlU291cmNlUHRyOworI2Vsc2UKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlU291
cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVj
b2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5p
bWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0
aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUgYW4gb3B0aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxv
b3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93IGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJv
bWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDlmYzBmODcyMzI4MDkwNjA5ZGIxMmU1OTk3MzcyZjczMmVm
MjkzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1
bS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlRGVjb2RlckNocm9taXVtOjpJbWFnZURlY29kZXJDaHJvbWl1bShJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAs
IG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VE
ZWNvZGVyQ2hyb21pdW06On5JbWFnZURlY29kZXJDaHJvbWl1bSgpCit7Cit9CisKKy8vIHN0YXRp
YworSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIEltYWdlRGVjb2RlckNocm9taXVtOjpjcmVhdGUoY29u
c3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRp
b24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
T3B0aW9uKQoreworICAgIEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rl
cjo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICBp
ZiAoIWFjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgSW1h
Z2VEZWNvZGVyQ2hyb21pdW0oYWN0dWFsRGVjb2Rlcik7Cit9CisKKy8vIHN0YXRpYworSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0qIEltYWdlRGVjb2RlckNocm9taXVtOjpjcmVhdGUoSW1hZ2VEZWNvZGVy
KiBkZWNvZGVyKQoreworICAgIHJldHVybiBuZXcgSW1hZ2VEZWNvZGVyQ2hyb21pdW0oZGVjb2Rl
cik7Cit9CisKK1N0cmluZyBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fZmls
ZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdlRnJhbWUqIEltYWdlRGVjb2RlckNocm9taXVtOjpm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1h
Z2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBp
cworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBB
bmltYXRpb24gaXMgaGFuZGxlZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29t
ZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBkb2VzIHN5bmNocm9ub3VzCisgICAgLy8gaW1hZ2Ug
ZGVjb2RpbmcuCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLmdldCgpCisgICAgICAgICAgICAm
JiBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA9PSAxCisgICAgICAgICAgICAmJiBtX2Fj
dHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fc2l6ZSA9IG1fYWN0
dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAgICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1
YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlE
ZWNvZGVkU2tCaXRtYXAgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCktPmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7
CisgICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0
bWFwKTsKKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIG1fZGF0YS5nZXQo
KSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBOT1RFOiBXaGVuIGltYWdlIGlzIGRl
Y29kZWQgb24gaW1wbCB0aHJlYWQgdGhpcyBzaG91bGQgc3VibWl0IHRoZQorICAgICAgICAvLyBk
YXRhIHRvIGltcGwgdGhyZWFkLgorICAgICAgICBtX2RhdGEgPSAwOworCisgICAgICAgIC8vIEZJ
WE1FOiBNYWtlIHN1cmUgSW1hZ2VTb3VyY2UgZG9lc24ndCBxdWVyeSB0aGlzLgorICAgICAgICBt
X2xhenlEZWNvZGVkRnJhbWUuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7Cisg
ICAgfQorCisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1f
YWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKworICAgIC8vIFRPRE86
IE5lZWQgdG8gc3luY2hyb25pemUgc3RhdGVzIGZyb20gV2ViTGF6eURlY29kaW5nSW1hZ2Ugd2l0
aCBtX2xhenlEZWNvZGVkRnJhbWUuIFRoZXNlIHN0YXRlcyBpbmNsdWRlIGFscGhhLCBmcmFtZUlz
Q29tcGxldGUgYW5kIGR1cmF0aW9uLgorICAgIHJldHVybiAmbV9sYXp5RGVjb2RlZEZyYW1lOwor
fQorCit2b2lkIEltYWdlRGVjb2RlckNocm9taXVtOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQo
KSkgeworICAgICAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgV2ViTGF6eURl
Y29kaW5nSW1hZ2UgaXMgY3JlYXRlZCwgYXQgd2hpY2ggcG9pbnQgbV9kYXRhIGlzIHRyYW5zZmVy
ZWQuCisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0g
YWxsRGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YS5n
ZXQoKSk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQo
KS0+c2V0RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0
YVJlY2VpdmVkKTsKKyAgICAgICAgLy8gTk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGlt
cGwgdGhyZWFkIHN1Ym1pdHMgZGF0YSB0byBpbXBsIHRocmVhZCBoZXJlLgorICAgIH0KK30KKwor
Ym9vbCBJbWFnZURlY29kZXJDaHJvbWl1bTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5p
c1NpemVBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJbWFnZURl
Y29kZXJDaHJvbWl1bTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgIHJldHVy
biBtX3NpemU7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5k
ZXgpOworCisgICAgLy8gRGVmZXJyZWQgaW1hZ2UgZGVjb2Rpbmcgb25seSBzdXBwb3J0cyBzaW5n
bGUgZnJhbWUgaW1hZ2VzIGFuZCBoYXZlCisgICAgLy8gdW5pZm9ybSBzaXplLgorICAgIHJldHVy
biBtX3NpemU7Cit9CisKK3NpemVfdCBJbWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVDb3VudCgp
Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAgIHJldHVybiAxOworfQorCitpbnQgSW1hZ2VE
ZWNvZGVyQ2hyb21pdW06OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRp
dGlvbkNvdW50KCk7CisgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIEltYWdl
RGVjb2RlckNocm9taXVtOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3Jl
RnJhbWUpCit7CisgICAgLy8gSWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFt
ZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQorICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0
aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAg
ICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZy
YW1lKTsKKworICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3aGVuIEltYWdlU291cmNlIGlzIGluc3Ry
dWN0ZWQgdG8gY2xlYXIgY2FjaGUgdGhpcworICAgIC8vIG9iamVjdCBkb2Vzbid0IGdldCBkZWxl
dGVkLiBPdGhlcndpc2UgdGhlcmUgd2lsbCB0d28gZW50cmllcyBvZgorICAgIC8vIFNrUGl4ZWxS
ZWYgZm9yIHRoZSBzYW1lIGltYWdlLgorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gVE9ETzogU3luY2hyb25pemUgdGhpcyBz
dGF0ZSB3aXRoIFdlYkxhenlEZWNvZGluZ0ltYWdlLgorICAgIC8vIFJldHVybiB0cnVlIGhlcmUg
aXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcgYnV0IG1heSBub3QKKyAgICAvLyBnbyB0
aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgp
OworCisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3Qg
bWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJD
aHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZDg1ZDg0MzA5ZTQ2MWUxMGY5ODRiNDcyMDAyYWQwNGUz
NmNlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEltYWdlRGVjb2RlckNocm9taXVtX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVy
Q2hyb21pdW1faAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdl
RGVjb2RlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGVyQ2hyb21pdW0oKTsK
KyAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShjb25zdCBTaGFyZWRCdWZm
ZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIC8vIFVzZWQgaW4gdGVzdCBvbmx5LiBPd25lcnNo
aXAgb2YgZGVjb2RlciBpcyB0cmFuc2ZlcnJlZC4KKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyQ2hy
b21pdW0qIGNyZWF0ZShJbWFnZURlY29kZXIqKTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRpb25D
b3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7Cisg
ICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgSW1hZ2VEZWNvZGVyQ2hyb21pdW0oSW1hZ2VEZWNvZGVyKiBhY3R1YWxE
ZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1f
YWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2Rl
cjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXpl
OworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTA3MDhjZDk5YmU1Y2YzYzljZTVkYzBjMmIyYmY2ZjM5NWM4NGMyYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRl
ICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYu
aCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUg
InNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2Ugeworc3RhdGljIGNvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxh
enkiOworSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKwor
c3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bWFnZURlY29kaW5nU3RvcmUpCit7CisgICAgaWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAg
ICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURl
Y29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCisgICAgOiBtX25leHRJZCgwKQorewor
fQorCitJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworICAgIFdU
Rjo6ZGVsZXRlQWxsVmFsdWVzKG1fZnJhbWVHZW5lcmF0b3JzKTsKKyAgICBXVEY6OmRlbGV0ZUFs
bFZhbHVlcyhtX2ZyYW1lQ2FjaGUpOworfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RpbmdTdG9y
ZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0
dXJuIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbWFnZURl
Y29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIHNldEluc3RhbmNl
T25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30K
KworLy8gc3RhdGljCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKQoreworICAg
IHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworfQorCisvLyBzdGF0aWMKK2Jvb2wgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7Cisg
ICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAgICAgICAmJiBiaXRtYXAucGl4ZWxS
ZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgICAgICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVmKCkt
PmdldFVSSSgpLCBsYWJlbExhenlEZWNvZGVkLCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkpOwor
fQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRt
YXAoV1RGOjpQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQo
Y2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXpl
OjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2Vu
ZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VT
aXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVs
UmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAg
ICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBi
aXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxs
U2l6ZSwgZnVsbFJlY3QpKTsKKyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6
eURlY29kZWQpOworICAgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0
dXJlIGZyb20gcmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0Jp
dG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KSBjb25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworCisgICAgLy8gVGhpcyBjaGVjayBtYWtlIHN1cmUgdGhlIG9yaWdpbiBsYXp5IGRlY29k
aW5nIFNrQml0bWFwIHRha2VzIGVudGlyZSBpbWFnZSB3aXRob3V0IHNjYWxpbmcuCisgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4
ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2Fs
ZWQobG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYmICFwaXhl
bFJlZi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICBTa0lTaXpl
IGltYWdlU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQo
KSk7CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSByb3cgYnl0ZXMgaXMgZml4ZWQgdG8gU2tCaXRt
YXAgdGhpcyBtZWFucyB3ZSBoYXZlIHRvIHNjYWxlIHRoZSBlbnRpcmUgaW1hZ2UuCisgICAgcm93
Qnl0ZXMgPSBTa0JpdG1hcDo6Q29tcHV0ZVJvd0J5dGVzKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgc2NhbGVkU2l6ZS53aWR0aCgpKTsKKworICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7
CisgICAgcmVzaXplZEJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
LCBzY2FsZWRTdWJzZXQud2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7
CisgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYo
cGl4ZWxSZWYtPmlkKCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpOworICAgIHJlc2l6ZWRC
aXRtYXAuc2V0SW1tdXRhYmxlKCk7IC8vIFByZXZlbnRzIFNrUGljdHVyZSBmcm9tIHJlY29yZGlu
ZyBwaXhlbHMuCisgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXREYXRhKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7CisgICAgbG9va3VwRnJhbWVHZW5lcmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6YWRkRGF0
YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGxv
b2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPmFkZERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKK30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorewor
ICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgSW1hZ2VGcmFtZUdlbmVy
YXRvciogZ2VuZXJhdG9yID0gbG9va3VwRnJhbWVHZW5lcmF0b3IoaWQpOworICAgIFNrSVNpemUg
ZnVsbFNpemUgPSBnZW5lcmF0b3ItPnNpemUoKTsKKworICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNh
dmVzIHRoZSBmdWxsIHNpemUgaW1hZ2UgYXQgdGhlIG1vbWVudC4KKyAgICBJbWFnZUZyYW1lQ2Fj
aGUqIGZyYW1lQ2FjaGUgPSBsb29rdXBGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSk7CisgICAgU2tC
aXRtYXAgYml0bWFwOworCisgICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1F
OiBQaXhlbHMgYXJlIG93bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4g
RmluZAorICAgICAgICAvLyBhIHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hl
LgorICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCk7CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hl
IGlmIHRoaXMgaXMgY29tcGxldGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgeworICAgICAgICAgICAgZnJhbWVDYWNoZSA9IG5ldyBJ
bWFnZUZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplLCBmcmFtZS0+Z2V0U2tCaXRtYXAoKSwgdHJ1ZSk7
CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKGZyYW1lQ2FjaGUpOworICAgICAgICB9
IGVsc2UgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZSBwcm9wZXJseS4gQ291bGQgdGhp
cyBiZSBkZWNvZGluZyBlcnJvcj8KKyAgICAgICAgICAgIC8vIG9yIHRoZXJlJ3Mgbm90IGVub3Vn
aCBieXRlcyB0byBkZWNvZGUgaW1hZ2U/CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAgICBiaXRt
YXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVsbFNpemUgIT0g
c2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24tdGhlLWZs
eSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1c2UuCisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNjYWxlcyB0aGUgZW50aXJlIGltYWdlIGluc3RlYWQgb2Yg
anVzdCBleHRyYWN0aW5nCisgICAgICAgIC8vIHRoZSByZXF1ZXN0ZWQgZnJhZ21lbnQuIEZpeCB0
aGlzLgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpS
ZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2Nh
bGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9sb2NrZWRT
a0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2NrZWRTa0Jp
dG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vic2V0Lngo
KSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxv
Y2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAg
bV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0bWFwLnJl
c2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFk
KCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgpICYmIFdU
Rjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKFdU
Rjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgSW1hZ2VGcmFtZUdl
bmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2Rlcik7Cisg
ICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIGdlbmVy
YXRvcik7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9v
a3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAgIEltYWdlRnJhbWVHZW5lcmF0
b3IqIGdlbmVyYXRvciA9IG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7CisgICAgQVNTRVJUKGdl
bmVyYXRvcik7CisgICAgcmV0dXJuIGdlbmVyYXRvcjsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRv
ciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1h
cCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1hcCkpOwor
ICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQ
aXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJhbWVDYWNo
ZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5p
c0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVb
aV07CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6
ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkpIHsKKyAg
ICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ2FjaGVbaV07CisgICAgICAgICAgICBtX2ZyYW1lQ2Fj
aGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRhNmZkMDA3OTdkNTM0MTgyYjFkNzg4ODZiMWZhYjc1MjliNGE3NTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFn
ZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAorCisjaW5jbHVk
ZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURl
Y29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFtZUNhY2hl
OworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUgeworcHVi
bGljOgorICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQorICAgIH5J
bWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIGlu
c3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIGJvb2wgaXNM
YXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tCaXRtYXAgY3JlYXRlTGF6eURl
Y29kZWRTa0JpdG1hcChXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgU2tCaXRt
YXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkgY29uc3Q7CisKKyAg
ICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBTaGFyZWRCdWZmZXIqLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CisgICAgdm9pZCBhZGREYXRhKGNvbnN0IFNrQml0bWFwJiwgU2hhcmVkQnVm
ZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9jayBhbmQgdW5sb2NrIHN1
cHBvcnRzIG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRoZW0gaSBwYWlyLgorICAg
IHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKK3By
aXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihXVEY6OlBhc3NP
d25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJh
bWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBsb29r
dXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdlRnJhbWVD
YWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
IGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpOworCisgICAgV1RGOjpIYXNoTWFwPGludCwgSW1hZ2VGcmFtZUdlbmVyYXRv
cio+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFdURjo6VmVjdG9yPEltYWdlRnJhbWVDYWNoZSo+
IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0JpdG1hcCBtX2xvY2tl
ZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2MyYjI3ZjQxZDA4MDhm
ZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2Fj
aGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZy
YW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShpbnQg
aWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNv
bnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUo
c2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1faXNDb21wbGV0ZShp
c0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNFcXVhbChpbnQgaWQs
IGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlkID09IG1f
aWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRlYjZkN2QxNDgyZTcyMjY5
ZTIzZmI2NzU3NjVlODZmNzA4MzEwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVmaW5lIEltYWdl
RnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5o
IgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlRnJhbWVDYWNoZSB7CitwdWJsaWM6CisgICAgLy8gSW1hZ2VGcmFtZUNhY2hlIGlzIGEgc2Nh
bGVkIHZlcnNpb24gb2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorICAgIC8vIGJ5IHR3byB0
aGluZ3M6CisgICAgLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMg
ZnJhZ21lbnQgY29tZXMgZnJvbS4KKyAgICAvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4KKyAgICBJ
bWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBT
a0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVDYWNoZSgpOworCisg
ICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9Cisg
ICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBib29sIGlz
RXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICBib29s
IGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKworcHJpdmF0ZToK
KyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBt
X2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiMjlkMDcxMWJjY2Q1YjQxNzQ2MzlkNDMyODVlNzJjZmIzOWE4YjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNz
T3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNvZGVyKQor
eworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lkdGgoKSwg
bV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+
SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKK30KKwor
dm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFdURjo6UGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0YSA9IGRhdGE7
CisgICAgaWYgKG1fZGVjb2Rlci5nZXQoKSkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKG1f
ZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJh
dG9yOjphZGREYXRhKFdURjo6UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQoreworICAgIC8vIFRPRE86IEltcGxlbWVudC4KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlh
ODMxODM4ZTNkZDE4YzVlOGVmOTYwMDY3NWViZWFjOGVjOTk0OTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdl
bmVyYXRvcl9oCisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tT
aXplLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFt
ZUdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBD
cmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRl
Y29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoV1RGOjpQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4s
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIGFkZERhdGEoV1RGOjpQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNp
emUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6
Ok93blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBXVEY6OlJlZlB0cjxTaGFyZWRC
dWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWEyMjVmYTI2ZTMzOTgyYzc4ZWUwZTYwYzQyYjhlYWFkZDdkYjA0ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitT
S19ERUNMQVJFX0dMT0JBTF9NVVRFWChnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCk7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1Bp
eGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYg
c2NhbGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJlZigmZ0xhenlEZWNvZGluZ0ltYWdlUmVmTXV0
ZXgpCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAg
LCBtX3NjYWxlZFN1YnNldChzY2FsZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVs
UmVmOjp+TGF6eURlY29kaW5nUGl4ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1Bp
eGVsUmVmOjppc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZnVsbFNpemUgIT0gbV9zY2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1Bp
eGVsUmVmOjppc0NsaXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lk
dGgoKSAhPSBtX3NjYWxlZFN1YnNldC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAh
PSBtX3NjYWxlZFN1YnNldC5oZWlnaHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxS
ZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1h
aW5UaHJlYWQoKS0+bG9ja1BpeGVscyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0
KTsKK30KKwordm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQorewor
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlE
ZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYoU2tGbGF0dGVuYWJsZVJlYWRCdWZmZXImIGJ1ZmZlcikKKyAgICA6IFNrUGl4ZWxSZWYo
YnVmZmVyLCAmZ0xhenlEZWNvZGluZ0ltYWdlUmVmTXV0ZXgpCit7CisgICAgbV9pZCA9IGJ1ZmZl
ci5yZWFkSW50KCk7CisgICAgbV9zY2FsZWRTaXplLmZXaWR0aCA9IGJ1ZmZlci5yZWFkSW50KCk7
CisgICAgbV9zY2FsZWRTaXplLmZIZWlnaHQgPSBidWZmZXIucmVhZEludCgpOworICAgIGJ1ZmZl
ci5yZWFkSVJlY3QoJm1fc2NhbGVkU3Vic2V0KTsKKyAgICBBU1NFUlQoZmFsc2UpOworfQorCit2
b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZl
ciYgYnVmZmVyKSBjb25zdAoreworICAgIHRoaXMtPlNrUGl4ZWxSZWY6OmZsYXR0ZW4oYnVmZmVy
KTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHNhdmUgdGhlIGVuY29kZWQgYnl0ZXMgaGVyZSBpbnN0
ZWFkIG9mIGFuIElELgorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIFNrUGljdHVy
ZSBpcyBmbGF0dGVuZWQgc3VjaCB0aGF0IGl0IGNhbiBiZQorICAgIC8vIGRlc2VyaWFsaXplZCBp
biBhbm90aGVyIHByb2Nlc3Mgc28ganVzdCBhbiBJRCBpcyBub3QgbWVhbmluZ2Z1bC4KKyAgICBi
dWZmZXIud3JpdGVJbnQobV9pZCk7CisgICAgYnVmZmVyLndyaXRlSW50KG1fc2NhbGVkU2l6ZS53
aWR0aCgpKTsKKyAgICBidWZmZXIud3JpdGVJbnQobV9zY2FsZWRTaXplLmhlaWdodCgpKTsKKyAg
ICBidWZmZXIud3JpdGVJUmVjdChtX3NjYWxlZFN1YnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhjMDc2
NGM0MDMyNmY4ZmM1NWEyMDM5NDFjMTU1ZjE2MjU2YWQ2MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVs
UmVmLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGF6eURlY29kaW5nUGl4ZWxS
ZWZfaAorI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisKKyNpbmNsdWRlICJTa0ZsYXR0
ZW5hYmxlQnVmZmVycy5oIgorI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1Jl
Y3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgeworICBwdWJsaWM6Cisg
ICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
LCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1YWwgfkxhenlEZWNvZGlu
Z1BpeGVsUmVmKCk7CisKKyAgICBTS19ERUNMQVJFX1BVQkxJQ19GTEFUVEVOQUJMRV9ERVNFUklB
TElaQVRJT05fUFJPQ1MoTGF6eURlY29kaW5nUGl4ZWxSZWYpCisKKyAgICBpbnQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9vbCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxs
U2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NsaXBwZWQoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6
CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9u
TG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4
ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7
CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZihTa0ZsYXR0ZW5hYmxlUmVhZEJ1ZmZlciYpOwor
ICAgIHZpcnR1YWwgdm9pZCBmbGF0dGVuKFNrRmxhdHRlbmFibGVXcml0ZUJ1ZmZlciYpIGNvbnN0
IFNLX09WRVJSSURFOworCisgIHByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBt
X3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVsUmVmX2hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdl
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUlt
YWdlU2tpYS5jcHAKaW5kZXggNjdmNDgxMzMyNjNkYWU0NTljMjU1NTdmZmU2YjE1NzY1ZWNiNjZh
My4uNDJhODU1NTRmNTRiYWQ0Yzg1OWQ4YTk5ZTk0YTkzODY2Y2UzYjdkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VT
a2lhLmNwcApAQCAtMzcsNiArMzcsMTEgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUluc3RydW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRp
dmVJbWFnZVNraWEoKQpAQCAtNjgsNiArNzMsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhh
c1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplKSBjb25zdAogCiBT
a0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xh
enlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2Us
IHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAo
IWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplKSkgewogICAgICAgICBib29sIHNob3Vs
ZENhY2hlID0gaXNEYXRhQ29tcGxldGUoKQogICAgICAgICAgICAgICAgICYmIHNob3VsZENhY2hl
UmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
aW5kZXggZWE2NDk1ZmVlNjQ1Y2M1ZjllYmU1ZWU0YThlMjMxNGRkZmIwYTI4ZC4uOGIwYzU2MmRk
ZmYyYTJkODU5MGQyOTExYzFhOTNhZmUwMzkzYmY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTE0NSw2ICsx
NDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMg
KyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAgICB9CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFw
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9IE5hdGl2ZUltYWdlU2tpYShiaXRt
YXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU2tCaXRtYXAmIGdldFNrQml0bWFw
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmJpdG1hcCgp
OworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGludCB3aWR0aCgp
IGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCA2ZDAxNWVlYzMzM2JmMjJjNzI0NDcyZmE4YWNkZTA3YWUzNjkwMWJhLi5m
MTIwYTU4OGU1NjQ5YWU3MGRmZjAzYzZkZmJiNDhmZDZhMThiMmQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTE2OCw4ICsxNjgsMTAgQEAKICAgICAgICAgICAgICd0ZXN0cy9G
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvRmFrZVdlYlNj
cm9sbGJhclRoZW1lR2VvbWV0cnkuaCcsCiAgICAgICAgICAgICAndGVzdHMvRmlsdGVyT3BlcmF0
aW9uc1Rlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9JbWFnZURlY29kZXJDaHJvbWl1bVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL01vY2tDQ1F1YWRDdWxsZXIuaCcsCisgICAgICAgICAgICAndGVzdHMv
TW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9UZXh0dXJlQ29waWVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RleHR1cmVMYXllckNocm9taXVtVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1Rocm90dGxlZFRleHR1cmVVcGxvYWRlclRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmluZGV4IGY0N2Zm
OWY3YzNkYmQzYWQ4OTAxNGU0NmU2MGEyMWNiOWNlMWFmODMuLmEzNDBjODgwMGMyZjFlOTEzOTVk
Mjg4Mzk1NTkyZGE3YWYwYTY3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU2V0dGluZ3MuaApAQCAtODMsNiArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdlYlNpemUpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNoKGJvb2wpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJLaXQuY3BwCmluZGV4IDkzMzFkMDUzYTJkNWJmNDRiOTVjMmY0YTYwNmNlOWJjMWYzN2Ix
NjAuLmMyMmI0NDQ0YzFlOTA4MzkwZWVhNTAxYTg4ZmFkMWNkOWFhNmM2YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0
b3JlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgpAQCAtMTY1LDYgKzE2Niw3IEBAIHZv
aWQgc2h1dGRvd24oKQogICAgIH0KICNlbmRpZgogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0
ID0gMDsKKyAgICBXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CiAgICAg
UGxhdGZvcm06OnNodXRkb3duKCk7CiAgICAgV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6c2h1dGRv
d24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCmluZGV4IDUwMjZlZTk0YjlmZGUyMDU2OGIwYmE4NTMyM2YxNTdlYWY0ZGM5Y2QuLmM1ZjM5
MmU0ZGUwZTIyOTM3ZGYzMTk0NjRjMzVhYzA3MTUyOWMwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtNDU4LDYgKzQ1OCwxMSBAQCB2
b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogICAgIG1fc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQp
OwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaAppbmRleCA2Y2VlMmFmMjNlZGI1YTIxZTExNmYzMTQ2YTk2NDZmZDJkZjYy
ODhiLi5hOWU3MTk0NmY2Mjc4NzEwZmYxYmRlNjMzNWY1NTExNzEzNmIzNzFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtNzUsNiArNzUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNv
bnN0IFdlYlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2Vi
U2l6ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNoKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kZXJDaHJvbWl1bVRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQwZTZmNTUyNzFlZDY4YTE5YWY0MWM1NWM4OWIwODcyZWQ1MDY3YTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9t
aXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tQ
aWN0dXJlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlckNocm9taXVtVGVzdCA6
IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRV
cCgpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIo
KTsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXRTaXplKDYwMCwgNjEzKTsKKyAgICAgICAg
bV9sYXp5RGVjb2RlciA9IGFkb3B0UHRyKEltYWdlRGVjb2RlckNocm9taXVtOjpjcmVhdGUobV9h
Y3R1YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzQml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIDEwMCwgMTAwKTsKKyAgICAgICAgbV9jYW52YXMuc2V0Qml0
bWFwRGV2aWNlKG1fY2FudmFzQml0bWFwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVh
ckRvd24oKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFsRGVjb2Rl
cjsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyQ2hyb21pdW0+IG1fbGF6eURlY29kZXI7CisgICAg
U2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0JpdG1hcCBtX2NhbnZhc0JpdG1hcDsKKyAgICBT
a0NhbnZhcyBtX2NhbnZhczsKK307CisKK1RFU1RfRihJbWFnZURlY29kZXJDaHJvbWl1bVRlc3Qs
IGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdl
KGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRp
dmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRo
KCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNv
ZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1h
Z2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMg
PSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRy
YXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3Jk
aW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAg
IEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkp
OworfQorCitURVNUX0YoSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0LCBkcmF3U2NhbGVkSW50b1Nr
UGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0ciht
X2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkp
OworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNp
emU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9G
QUxTRShzY2FsZWRCaXRtYXAuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1h
cC5pc0ltbXV0YWJsZSgpKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgp
KTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNU
X0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAg
ICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEw
MCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAg
IG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNv
ZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0
dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVC
dWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIz
NzQ0ZTUxZmRlNDNjMTY0YjMxMTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIklt
YWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURl
Y29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNv
ZGVyKCkKKyAgICAgICAgOiBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlw
bGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAg
LCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1v
Y2siOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKwor
ICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAg
ICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZy
YW1lQnVmZmVyUmVxdWVzdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVj
b2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggNTE3OGJjNjYzMWQ0NDNmMjYxY2QwMzE0MmZmZGJiOTE2N2Q1ZjcyNy4uNThkZmJhYWJiOGM0
YzVkNTU0MzUyOTE5OWFkNTQ4MDVkNmMwMmU1ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRv
IERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVl
LmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAg
IChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJl
ZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAg
ICAoV2ViUHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0
X3N1aXRlcyk6CisKIDIwMTItMDktMDYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBXZWJDb21wb3NpdG9yU3VwcG9ydCBmdW5j
dGlvbnMgaW5zdGVhZCBvZiBXZWJDb21wb3NpdG9yIHN0YXRpY3MKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBiZWUxNzc3YzZmZGU3
OTNjZTc4YTdjZDZmYmEyZmJkY2Q2YWQ5YTMzLi45ZjY2YTUyZWY3MTQxOWUwZGEyNjA1MjQ0ZGVk
ZTk1NWI3ZjI1NTMwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
dW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVt
cFJlbmRlclRyZWUuY3BwCkBAIC02Miw2ICs2Miw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlv
bkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWlu
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
VmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3Jh
cGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmci
Oworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10g
PSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0xMjksNiArMTMwLDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRD
YW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAg
IGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3Ry
ZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wg
aGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xNzUsNiArMTc3LDggQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVu
dGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVu
YWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQg
PSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJl
ZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQog
ICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQg
PT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMTMsNiArMjE3LDcgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNo
ZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7Cisg
ICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZh
U2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAg
ICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZTVlOWRlZDZhZTMwZjE5ZWFjYjVl
ZjA4NGY4ZDg3YzljNGU0NjNiZi4uYWJjNmMxMzQyMGM2NzAxODFmMDYyZTE2ZTBmYjhlZDllNGRl
NDZkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBA
IC0xMTMsNiArMTEzLDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAg
ICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NP
cHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZp
bmlzaGVkKHRydWUpCkBAIC0yMjgsNiArMjI5LDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2Vi
U2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRl
ZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBt
X3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3
KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0
MDUwMzRhNGUxMzk4YTZmYThiNTIxOTRmODQxMzUxMWU5YmVmOWY4Li44MGVmYWE5NDc5YWM0YjE5
MWU2YzExM2ZhMTkwYzg2Mjc1NzgwMDk1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaApAQCAtMTM2LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERl
ZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNF
bmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVk
OyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQg
c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQog
ICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBX
YXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2Zp
bmlzaGVkRXZlbnQ7IH0KQEAgLTIzMiw2ICsyMzMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9k
ZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0Vu
YWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsK
ICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCBjNGRl
MGFiYzE0NDUwYTEwOWFhY2E3Zjk3N2EyOWU4OTM5YjI2Y2U0Li41M2FjYjVlODZhNDI2NTg3YTQy
ZWI2Y2QwMDhiOTRhZmE5YmYyYjJiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVm
ZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAg
ICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0
aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxz
ZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1v
Y2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQg
PSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRv
KFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNF
bmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRp
bmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5h
YmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJh
Y2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsK
ICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5h
YmxlZCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBy
ZWZlcmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5oCmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1
ZjJkMDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0
cnVjdCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZDsKICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0
ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
OwogICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBt
b2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKaW5kZXggZTY2YjBhMjA0MzE5ZDFmODg2OTRlMzc2YzcwYWNjN2EwZThhM2U1YS4uN2U1
OTNlOWM2Y2FlNWY5MDE1MDc3NDg5YmI0NjFhOWIxNmM1OWJlYSAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zNzAs
NiArMzcwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVh
bFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC90aHJlYWRlZC9jb21wb3NpdGlu
Zy93ZWJnbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZy93ZWJn
bCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtdGhyZWFkZWQtY29t
cG9zaXRpbmcnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyct
LWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVuYWJsZS1wZXItdGlsZS1wYWlu
dGluZycsICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAgICAgICAgIF0KIAogICAgICMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwODM5NTZjNGE3ZjA5ZjI4MjhhNmYwNjYxN2E3YmQ1YjE5NDZhMmM4Li45MmIyYjMw
N2Y2MTljNmI1YzY2NTlmNmZhYWM0NjhhNjRiZmNiMGE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSB2aXJ0dWFsIHRlc3Qg
c3VpdGUgZm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJyZWQgaW1hZ2UKKyAgICAgICAgZGVjb2Rp
bmcuCisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcyB3aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAgIC0tZm9yY2UtY29tcG9zaXRpbmcgLS1l
bmFibGUtcGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2Rpbmcu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1F
LnR4dDogQWRkZWQuCisKIDIwMTItMDgtMjcgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbc2tpYV0gRHJhd2luZyBhIHN1YnJlY3Qgb2YgYml0bWFwIGltYWdlIGlz
IG1pc2FsaWduZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IGYyZDMxZGZjNzRjZmIxMWEzYTg3MDc4ZTI3OTcwM2VlY2Y3NDM5NjguLmNl
ZjVlZGE0MWYwYzQ5ZjgxMTNjOGFiODU4YzE5YzA3NzgyNGEyMjkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjUwLDYgKzY1MCw4IEBA
IFdPTlRGSVggU0tJUCA6IHBsYXRmb3JtL21hYy9wbHVnaW5zL3VuZGVmaW5lZC1wcm9wZXJ0eS1j
cmFzaC5odG1sID0gUEFTUwogLy8gSWdub3JlIHRlc3QgYmVjYXVzZSBpdCB0cmllcyB0byBsb2Fk
IC5wZGYgZmlsZXMgaW4gPGltZz4gdGFncy4KIFdPTlRGSVggU0tJUCA6IGZhc3QvaW1hZ2VzL3Bk
Zi1hcy1pbWFnZS1sYW5kc2NhcGUuaHRtbCA9IFBBU1MKIFdPTlRGSVggU0tJUCA6IGZhc3QvaW1h
Z2VzL3BkZi1hcy1pbWFnZS5odG1sID0gUEFTUworV09OVEZJWCBTS0lQIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtbGFuZHNjYXBl
Lmh0bWwgPSBQQVNTCitXT05URklYIFNLSVAgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS5odG1sID0gUEFTUwogV09OVEZJWCBTS0lQ
IDogZmFzdC9yZXBsYWNlZC9wZGYtYXMtaW1hZ2UuaHRtbCA9IFBBU1MKIAogLy8gVGhlc2UgdGVz
dHMgdHJ5IHRvIHByaW50IGEgUERGIGZpbGUgYXMgdGhlIGV4cGVjdGVkIHJlc3VsdC4gIEkgZG9u
J3QgdGhpbmsKQEAgLTY5Miw2ICs2OTQsOCBAQCBXT05URklYIFNLSVAgOiBmYXN0L2RvbS9XaW5k
b3cvdGltZW91dC1yZWxlYXNlZC1vbi1jbG9zZS5odG1sID0gUEFTUwogLy8gVGhlc2UgdGVzdHMg
ZXhwZWN0IGEgdGlmZiBkZWNvZGVyLCB3aGljaCB3ZSBkb24ndCBoYXZlLgogV09OVEZJWCBMSU5V
WCBBTkRST0lEIFdJTiA6IGZhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgPSBJTUFHRStURVhU
CiBXT05URklYIExJTlVYIEFORFJPSUQgV0lOIDogZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0
bWwgPSBJTUFHRStURVhUCitXT05URklYIExJTlVYIEFORFJPSUQgV0lOIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1sID0gSU1B
R0UrVEVYVAorV09OVEZJWCBMSU5VWCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0bWwgPSBJTUFHRStURVhU
CiAKIC8vIFNhZmFyaSBoYXMgYSB1bmlxdWUgaGFuZGxpbmcgb2YgdGhlIEJPTSBjaGFyYWN0ZXJz
IGFtb25nIGJyb3dzZXJzLgogLy8gVGhlcmUgaXMgYSBzdHJvbmcgc3VzcGljaW9uIHRoYXQgdGhp
cyBpcyBhIHNlY3VyaXR5IHByb2JsZW0sIHNvIHdlCkBAIC0xMTg5LDYgKzExOTMsNyBAQCBCVUdD
UjExMTUzIExJTlVYIEFORFJPSUQgV0lOIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUv
ZmFzdC9jYW52YXMvY2FudmFzLQogCiAvLyB0ZXN0X3NoZWxsLCBEUlQgZG8gbm90IGNvcnJlY3Rs
eSBzY2hlZHVsZSBwYWludHMgd2hlbiBpbnZhbGlkYXRpbmcuCiBCVUdDUjYyNDMzIFdJTiA6IGZh
c3QvaW1hZ2VzL2dpZi1sb29wLWNvdW50Lmh0bWwgPSBJTUFHRQorQlVHQ1I2MjQzMyBXSU4gOiBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sb29wLWNv
dW50Lmh0bWwgPSBJTUFHRQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gU1ZHIFRFU1RTCkBAIC0xNDc3LDYg
KzE0ODIsOCBAQCBCVUdDUjk0Mjc0IE1BQyA6IGZhc3QvZXZlbnRzL29wdGlvbi10YWIuaHRtbCA9
IFRFWFQKIC8vIElnbm9yZWQgb24gV2luL0xpbnV4IGJlY2F1c2UgdGhleSByZWx5IG9uIFFUIHRv
IHByb3ZpZGUgYSBUSUZGIGRlY29kZXIuCiBCVUdDUjEwMzc4IE1BQyA6IGZhc3QvaW1hZ2VzL2Vt
YmVkLWltYWdlLmh0bWwgPSBJTUFHRStURVhUCiBCVUdDUjEwMzc4IE1BQyA6IGZhc3QvaW1hZ2Vz
L29iamVjdC1pbWFnZS5odG1sID0gSU1BR0UrVEVYVAorQlVHQ1IxMDM3OCBNQUMgOiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwg
PSBJTUFHRStURVhUCitCVUdDUjEwMzc4IE1BQyA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0bWwgPSBJTUFHRStURVhUCiAKIC8v
IFRoZSBmb2xsb3dpbmcgYXJlIGZsYWt5IGluIHRoYXQgc29tZSB0aW1lcyB0aGUgdGltZW91dCBv
ciBjcmFzaCwgYnV0IHdlIHRoaW5rCiAvLyBpdCBpcyBiZWNhdXNlIG9mIGJ1Z3MgaW4gb3RoZXIg
cGFydHMgb2YgdGhlIGNvZGUgYW5kIG5vdCBzcGVjaWZpYyB0byB3aGF0CkBAIC0yMTA1LDYgKzIx
MTIsMTEgQEAgQlVHV0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IGZhc3QvaW1hZ2VzL2ltYWdl
bWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QKIEJVR1dLNTAyODIgTElOVVggQU5EUk9J
RCBXSU4gOiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRt
bCA9IElNQUdFK1RFWFQKIEJVR1dLNTAyODIgTElOVVggQU5EUk9JRCBXSU4gOiBmYXN0L2ltYWdl
cy9pbWFnZW1hcC1jaXJjbGUtZm9jdXMtcmluZy5odG1sID0gSU1BR0UrVEVYVAogQlVHV0s1MDI4
MiBMSU5VWCBBTkRST0lEIFdJTiA6IGZhc3QvaW1hZ2VzL2ltYWdlbWFwLXBvbHlnb24tZm9jdXMt
cmluZy5odG1sID0gSU1BR0UrVEVYVAorQlVHV0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9j
dXMtcmluZy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwg
PSBJTUFHRStURVhUCitCVUdXSzUwMjgyIExJTlVYIEFORFJPSUQgV0lOIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91
dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sID0gSU1BR0UrVEVYVAorQlVH
V0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLmh0bWwg
PSBJTUFHRStURVhUCitCVUdXSzUwMjgyIExJTlVYIEFORFJPSUQgV0lOIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1jaXJjbGUtZm9jdXMt
cmluZy5odG1sID0gSU1BR0UrVEVYVAorQlVHV0s1MDI4MiBMSU5VWCBBTkRST0lEIFdJTiA6IHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9s
eWdvbi1mb2N1cy1yaW5nLmh0bWwgPSBJTUFHRStURVhUCiAKIC8vIFJlZ3Jlc3NlZCBhdCByNzM0
MjMuIEFsbCBhcmVhcyBhcmUgcGFpbnRlZCBncmVlbi4KIEJVR1dLNTA3MzQgTElOVVggQU5EUk9J
RCBXSU4gOiBmYXN0L3JlcGFpbnQvcG9zaXRpb25lZC1kb2N1bWVudC1lbGVtZW50Lmh0bWwgPSBJ
TUFHRQpAQCAtMjExNiw2ICsyMTI4LDcgQEAgQlVHV0s1MDczNCBMSU5VWCBBTkRST0lEIFdJTiA6
IGZhc3QvcmVwYWludC9wb3NpdGlvbmVkLWRvY3VtZW50LWVsZW1lbnQuaHRtbCA9IEkKIC8vIERS
VCBuZWVkcyB0byBzY2hlZHVsZSBwYWludHMgb24gaW52YWxpZGF0aW9ucyBsaWtlIENocm9tZSBk
b2VzLgogQlVHQ1I2MjQzMyBMSU5VWCBBTkRST0lEIE1BQyA6IGZhc3QvYmFja2dyb3VuZHMvYW5p
bWF0ZWQtZ2lmLWFzLWJhY2tncm91bmQuaHRtbCA9IElNQUdFCiBCVUdDUjYyNDMzIExJTlVYIEFO
RFJPSUQgTUFDIDogZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCA9IElNQUdFCitCVUdD
UjYyNDMzIExJTlVYIEFORFJPSUQgTUFDIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1jb3VudC5odG1sID0gSU1BR0UKIAogCiAvLyBUaGlz
IHRlc3QgbmVlZHMgZW5oYW5jZWQgZXZlbnRTZW5kZXIuY29udGV4dE1lbnUoKSByZXR1cm4gdmFs
dWUuCkBAIC0yMjYwLDYgKzIyNzMsNyBAQCBCVUdXSzU0MDUxIE1BQyA6IHBsdWdpbnMvd2luZG93
bGVzc19wbHVnaW5fcGFpbnRfdGVzdC5odG1sID0gVElNRU9VVAogCiAvLyBBY3R1YWwgZmFpbHVy
ZXMKIEJVR1dLNTQzMjIgU05PV0xFT1BBUkQgOiBmYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdl
Lmh0bWwgPSBJTUFHRStURVhUCitCVUdXSzU0MzIyIFNOT1dMRU9QQVJEIDogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwg
PSBJTUFHRStURVhUCiBCVUdXSzU0MzIyIFNOT1dMRU9QQVJEIDogZmFzdC9yZXBsYWNlZC93aWR0
aDEwMHBlcmNlbnQtdGV4dGFyZWEuaHRtbCA9IElNQUdFCiBCVUdXSzU0MzIyIFNOT1dMRU9QQVJE
IDogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvdGV4dC1jb21iaW5lLWltYWdlLXRlc3QuaHRtbCA9
IElNQUdFCiAKQEAgLTIyNzUsMTEgKzIyODksMTMgQEAgQlVHV0s1NTExNyA6IGZhc3QvanMvaTE4
bi1iaW5kaW5ncy1sb2NhbGUuaHRtbCA9IFRFWFQKIEJVR0NSNzQ0OTcgOiBwbGF0Zm9ybS93aW4v
cGx1Z2lucy93aW5kb3dsZXNzLXBhaW50LXJlY3QtY29vcmRpbmF0ZXMuaHRtbCA9IFRFWFQKIAog
QlVHV0s1NTMwMCA6IGZhc3QvaW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0
bWwgPSBURVhUCitCVUdXSzU1MzAwIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9zdXBwb3J0LWJyb2tlbi1pbWFnZS1kZWxlZ2F0ZS5odG1sID0gVEVYVAog
CiAvLyBpbnRyb2R1Y2VkIGJ5IERhdmUgSHlhdHQgaW4gV0sgcjgwNTgyCiBCVUdDUjc1NTYxIExJ
TlVYIEFORFJPSUQgV0lOIDogZmFzdC93cml0aW5nLW1vZGUvdGV4dC1vcmllbnRhdGlvbi1iYXNp
Yy5odG1sID0gSU1BR0UrVEVYVAogCiBCVUdXSzU2MDYwIExJTlVYIDogZmFzdC9pbWFnZXMvZmF2
aWNvbi1hcy1pbWFnZS5odG1sID0gSU1BR0UrVEVYVAorQlVHV0s1NjA2MCBMSU5VWCA6IHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFn
ZS5odG1sID0gSU1BR0UrVEVYVAogCiAvLyBTa2lwIGFuIG92ZXJseSByZXN0cmljdGl2ZSBjcm9z
cy1vcmlnaW4gSFRUUFMgdGVzdAogQlVHQ1I2OTU5NCBTS0lQIDogaHR0cC90ZXN0cy9hcHBjYWNo
ZS9kaWZmZXJlbnQtaHR0cHMtb3JpZ2luLXJlc291cmNlLW1haW4uaHRtbCA9IFBBU1MKQEAgLTIz
OTUsNiArMjQxMSw3IEBAIEJVR1dLNjAxMzEgU0xPVyA6IGZhc3QvY3NzL3Zpc2l0ZWQtbGluay1o
YW5nLmh0bWwgPSBQQVNTCiAKIC8vIEludHJvZHVjZWQgaW4gcjg0NDQzCiBCVUdXSzU5MDYzIDog
ZmFzdC9pbWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sID0gVEVY
VAorQlVHV0s1OTA2MyA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sID0gVEVYVAogCiBC
VUdXSzU2NzAyIFdJTiBERUJVRyA6IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9waW5nLWNyb3NzLW9y
aWdpbi1mcm9tLWh0dHBzLmh0bWwgPSBQQVNTIFRJTUVPVVQKIApAQCAtMjYxMyw4ICsyNjMwLDEw
IEBAIEJVR1dLNjk5OTggTElOVVggV0lOIDogcGx1Z2lucy9yZWZjb3VudC1sZWFrcy5odG1sID0g
UEFTUyBURVhUCiAKIC8vIElDQyBjb2xvciBwcm9maWxlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBX
SU4sIExJTlVYLCBBTkRST0lEIHNvIFNLSVAgZm9yIG5vdy4KIEJVR1dLNzAwMDEgU0tJUCBMSU5V
WCBBTkRST0lEIFdJTiA6IGZhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxl
Lmh0bWwgPSBQQVNTCitCVUdXSzcwMDAxIFNLSVAgTElOVVggQU5EUk9JRCBXSU4gOiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1j
b2xvci1wcm9maWxlLmh0bWwgPSBQQVNTCiAvLyBQYWxldHRlZCBQTkcgd2l0aCBJQ0MgY29sb3Ig
cHJvZmlsZXMgbm90IHdvcmtpbmcuCiBCVUdXSzg2NzIyIDogZmFzdC9pbWFnZXMvcGFsZXR0ZWQt
cG5nLXdpdGgtY29sb3ItcHJvZmlsZS5odG1sID0gTUlTU0lORworQlVHV0s4NjcyMiA6IHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGFsZXR0ZWQtcG5nLXdp
dGgtY29sb3ItcHJvZmlsZS5odG1sID0gTUlTU0lORwogCiAvLyBWOCBoYW5kbGVzIHN0YWNrIG92
ZXJmbG93IGV4Y2VwdGlvbnMgZGlmZmVyZW50bHkgdGhhbiBKU0MKIEJVR1dLNzAyMTAgOiBmYXN0
L2pzL3N0YWNrLW92ZXJmbG93LWFycml0eS1jYXRjaC5odG1sID0gVEVYVApAQCAtMjg1Myw2ICsy
ODcyLDcgQEAgQlVHV0s4MTgwMyBNQUMgOiBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9y
dWJiZXJiYW5kaW5nL3RyYW5zZm9ybS1vdmVyaGFuZy0KIEJVR1dLODE4MDMgTUFDIDogcGxhdGZv
cm0vY2hyb21pdW0vY29tcG9zaXRpbmcvcnViYmVyYmFuZGluZy90cmFuc2Zvcm0tb3Zlcmhhbmct
dy5odG1sID0gUEFTUyBJTUFHRQogCiBCVUdXSzgxOTMxIFNOT1dMRU9QQVJEIFdJTiBERUJVRyA6
IGZhc3QvaW1hZ2VzL2Rlc3Ryb3llZC1pbWFnZS1sb2FkLWV2ZW50Lmh0bWwgPSBQQVNTIFRJTUVP
VVQKK0JVR1dLODE5MzEgU05PV0xFT1BBUkQgV0lOIERFQlVHIDogcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9kZXN0cm95ZWQtaW1hZ2UtbG9hZC1ldmVudC5o
dG1sID0gUEFTUyBUSU1FT1VUCiAKIEJVR1dLMzcyNDQgOiB0YWJsZXMvbW96aWxsYS9idWdzL2J1
ZzI3MDM4LTEuaHRtbCA9IElNQUdFK1RFWFQKIEJVR1dLMzcyNDQgOiB0YWJsZXMvbW96aWxsYS9i
dWdzL2J1ZzI3MDM4LTIuaHRtbCA9IElNQUdFK1RFWFQKQEAgLTMwMTMsNiArMzAzMyw4IEBAIEJV
R1dLODMzMjQgV0lOIERFQlVHIDogZmFzdC9qcy9jcm9zcy1nbG9iYWwtb2JqZWN0LWlubGluZS1n
bG9iYWwtdmFyLmh0bWwgPSBQQVNTCiAvLyBFWElGIG9yaWVudGF0aW9uIHN1cHBvcnQgaGFzIG5v
dCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybQogQlVHV0sxOTY4OCBTS0lQ
IDogZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi5odG1sID0gUEFTUwogQlVHV0sxOTY4OCBT
S0lQIDogZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi1jc3MuaHRtbCA9IFBBU1MKK0JVR1dL
MTk2ODggU0tJUCA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvZXhpZi1vcmllbnRhdGlvbi5odG1sID0gUEFTUworQlVHV0sxOTY4OCBTS0lQIDogcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9u
LWNzcy5odG1sID0gUEFTUwogCiBCVUdDUjEyMjQ2MiBXSU4gTElOVVggU0xPVyA6IGh0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3QtZWxlbWVudC5odG1sID0gVEVYVAogCkBAIC0zNjQwLDMgKzM2
NjIsNyBAQCBCVUdXSzk1MTIxIDogc3ZnL2R5bmFtaWMtdXBkYXRlcy9TVkdGRUltYWdlRWxlbWVu
dC1kb20tcHJlc2VydmVBc3BlY3RSYXRpby1hdHRyLgogQlVHV0s5NTEyMSA6IHN2Zy9keW5hbWlj
LXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtc3ZnZG9tLXByZXNlcnZlQXNwZWN0UmF0aW8tcHJv
cC5odG1sID0gSU1BR0UKIEJVR1dLOTUxMjEgOiBzdmcvem9vbS9wYWdlL3pvb20tYmFja2dyb3Vu
ZC1pbWFnZXMuaHRtbCA9IElNQUdFCiBCVUdXSzk1MTIxIDogc2Nyb2xsYmFycy9vdmVyZmxvdy1z
Y3JvbGxiYXItY29tYmluYXRpb25zLmh0bWwgPSBJTUFHRQorCisvLyBEZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZy4gUmViYXNlbGluZS4KK0JVR1dLOTUxMjEgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQtd2Vi
a2l0LXRyYW5zZm9ybS1zY2FsZS5odG1sID0gSU1BR0UKK0JVR1dLOTQyNDAgU0xPVyA6IHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0
LWdyaWQuaHRtbCA9IFBBU1MgVElNRU9VVApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9S
RUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNi
N2Q4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisj
IFRlc3Qgc3VpdGVzIGluIHRoaXMgZGlyZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZycgY29kZSBwYXRoCisjIHRocm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165161</attachid>
            <date>2012-09-21 11:41:58 -0700</date>
            <delta_ts>2012-09-21 11:42:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120921114122.patch</filename>
            <type>text/plain</type>
            <size>54259</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI4MmM0NWU4MjVlOTVj
MjE5NmU0MGQ2YThkZTE1NDBlY2QzYjg3My4uM2U2ZmI2NzYxYmYzMTJjM2Q5NWU5ZTUzYjY2ODVm
NTY3YmQxOWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA5LTE5ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW3NraWFdIERyYXdpbmcgYSBz
dWJyZWN0IG9mIGJpdG1hcCBpbWFnZSBpcyBtaXNhbGlnbmVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTEyMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gZHJhd2luZyBhIHN1YnJlY3Qgb2YgQml0
bWFwSW1hZ2UgYW5kIHRoZSBzdWJyZWN0IGlzIG5vdCBhbGlnbmVkCisgICAgICAgIHRvIGludGVn
ZXIgYm91bmRhcmllcywgc2tpYSBleHBhbmRzIGl0IHRvIHRoZSBjbG9zZXN0IGVuY2xvc2luZyBp
bnRlZ2VyCisgICAgICAgIHJlY3RhbmdsZS4gVGhpcyBjcmVhdGVzIHByb21pbmVudCByZW5kZXJp
bmcgYXJ0aWZhY3RzIHdoZW4gYW4gaW1hZ2UKKyAgICAgICAgaXMgdXNlZCBhcyBiYWNrZ3JvdW5k
IGFuZCBpdHMgc3ViLXJlZ2lvbnMgYXJlIGludmFsaWRhdGVkIGZyZXF1ZW50bHkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgY2xvc2VseSByZWxhdGVkIHByb2JsZW0uIEluIFJF
U0FNUExFX0FXRVNPTUUKKyAgICAgICAgcmVzYW1wbGluZyBtb2RlIHRoZSBwcmV2aW91cyBhbGdv
cml0aG0gYXBwbGllcyBkaWZmZXJlbnQgYXBwcm94aW1hdGVkCisgICAgICAgIHNjYWxlIGZhY3Rv
ciBmb3IgZWFjaCBzY2FsZWQgaW1hZ2UgZnJhZ21lbnQuIFRoaXMgY2F1c2VkIHRoZSBzdGl0Y2hl
ZAorICAgICAgICBpbWFnZSB0byBsb29rIHVnbHkuCisKKyAgICAgICAgU2NhbGUgZmFjdG9yIGlz
IGFwcHJveGltYXRlZCB1c2luZyBlbnRpcmUgaW1hZ2Ugc2l6ZSwgdGhpcyBnaXZlcyBhCisgICAg
ICAgIG1vcmUgYWNjdXJhdGUgYXBwcm94aW1hdGlvbiBiZWNhdXNlIG9mIGdyZWF0ZXIgZGVub21p
bmF0b3IgYW5kIGEKKyAgICAgICAgY29uc2lzdGVudCBzY2FsZSBmYWN0b3IgYWNyb3NzIGFsbCBm
cmFnbWVudHMuCisKKyAgICAgICAgQ2hhbmdlcyBpbiBTa2lhIGVuYWJsZSBjYWNoaW5nIG9mIHRo
ZSBzY2FsZWQgaW1hZ2UgYW5kIHJldHVybiB0aGUKKyAgICAgICAgc2NhbGVkIGZyYWdtZW50IGJl
Y2F1c2Ugc2NhbGUgZmFjdG9yIGlzIG5vdyBjb25zaXN0ZW50IGZvciBhbGwKKyAgICAgICAgZnJh
Z21lbnRzLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L2ltYWdlcy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5odG1sCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlUmVzYW1wbGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3UmVzYW1wbGVkQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6Omhh
c1Jlc2l6ZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNp
emVkQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVk
SW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpyZWN0
SW5TdWJzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VT
a2lhLmg6CisgICAgICAgIChOYXRpdmVJbWFnZVNraWEpOgorICAgICAgICAoQ2FjaGVkSW1hZ2VJ
bmZvKToKKwogMjAxMi0wOS0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gRW5hYmxlIG1vcmUgY2xhbmcgd2FybmluZ3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCA4
Zjg4M2Q4MTk4MTlkMmVkYjc5MzFkMWVhMmFhM2UyNTk1OGQwNDg4Li44NTc2OTkxZGY2YjE4ODFh
ZGQ0YmQ5MmViNmJjNzhjZmMwYzA1N2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUg
IlNrUGl4ZWxSZWYuaCIKICNpbmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5o
IgpAQCAtNTAsNiArNTEsOSBAQAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKIAorI2luY2x1ZGUgPGxp
bWl0cz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCiAjZW5kaWYKQEAgLTcwLDExICs3NCw4IEBAIGVudW0gUmVzYW1w
bGluZ01vZGUgewogICAgIFJFU0FNUExFX0FXRVNPTUUsCiB9OwogCi1zdGF0aWMgUmVzYW1wbGlu
Z01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNvbnN0IFNrTWF0cml4JiBtYXRyaXgsIGNvbnN0
IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQsIGZs
b2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKK3N0YXRpYyBSZXNhbXBsaW5nTW9kZSBj
b21wdXRlUmVzYW1wbGluZ01vZGUoY29uc3QgU2tNYXRyaXgmIG1hdHJpeCwgY29uc3QgTmF0aXZl
SW1hZ2VTa2lhJiBiaXRtYXAsIGZsb2F0IHNyY1dpZHRoLCBmbG9hdCBzcmNIZWlnaHQsIGZsb2F0
IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKIHsKLSAgICBpbnQgZGVzdElXaWR0aCA9IHN0
YXRpY19jYXN0PGludD4oZGVzdFdpZHRoKTsKLSAgICBpbnQgZGVzdElIZWlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RIZWlnaHQpOwotCiAgICAgLy8gVGhlIHBlcmNlbnQgY2hhbmdlIGJlbG93
IHdoaWNoIHdlIHdpbGwgbm90IHJlc2FtcGxlLiBUaGlzIHVzdWFsbHkgbWVhbnMKICAgICAvLyBh
biBvZmYtYnktb25lIGVycm9yIG9uIHRoZSB3ZWIgcGFnZSwgYW5kIGp1c3QgZG9pbmcgbmVhcmVz
dCBuZWlnaGJvcgogICAgIC8vIHNhbXBsaW5nIGlzIHVzdWFsbHkgZ29vZCBlbm91Z2guCkBAIC05
MiwxMCArOTMsMTMgQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5nTW9k
ZShjb25zdCBTa01hdHJpeCYgbWF0cml4LCBjb25zdCBOYXRpdmUKICAgICAvLyBGaWd1cmUgb3V0
IGlmIHdlIHNob3VsZCByZXNhbXBsZSB0aGlzIGltYWdlLiBXZSB0cnkgdG8gcHJ1bmUgb3V0IHNv
bWUKICAgICAvLyBjb21tb24gY2FzZXMgd2hlcmUgcmVzYW1wbGluZyB3b24ndCBnaXZlIHVzIGFu
eXRoaW5nLCBzaW5jZSBpdCBpcyBtdWNoCiAgICAgLy8gc2xvd2VyIHRoYW4gZHJhd2luZyBzdHJl
dGNoZWQuCi0gICAgaWYgKHNyY1dpZHRoID09IGRlc3RJV2lkdGggJiYgc3JjSGVpZ2h0ID09IGRl
c3RJSGVpZ2h0KSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzYW1wbGUgaWYgdGhl
IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lLgorICAgIGZsb2F0IGRpZmZXaWR0
aCA9IGZhYnMoZGVzdFdpZHRoIC0gc3JjV2lkdGgpOworICAgIGZsb2F0IGRpZmZIZWlnaHQgPSBm
YWJzKGRlc3RIZWlnaHQgLSBzcmNIZWlnaHQpOworICAgIGJvb2wgd2lkdGhOZWFybHlFcXVhbCA9
IGRpZmZXaWR0aCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCk7CisgICAg
Ym9vbCBoZWlnaHROZWFybHlFcXVhbCA9IGRpZmZIZWlnaHQgPCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6ZXBzaWxvbigpOworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzYW1wbGUgaWYg
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lLgorICAgIGlmICh3aWR0aE5l
YXJseUVxdWFsICYmIGhlaWdodE5lYXJseUVxdWFsKQogICAgICAgICByZXR1cm4gUkVTQU1QTEVf
Tk9ORTsKLSAgICB9CiAKICAgICBpZiAoc3JjV2lkdGggPD0ga1NtYWxsSW1hZ2VTaXplVGhyZXNo
b2xkCiAgICAgICAgIHx8IHNyY0hlaWdodCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQKQEAg
LTExMyw3ICsxMTcsNyBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdN
b2RlKGNvbnN0IFNrTWF0cml4JiBtYXRyaXgsIGNvbnN0IE5hdGl2ZQogICAgICAgICAvLyBUaGlz
IGlzIHRyeWluZyB0byBjYXRjaCBjYXNlcyB3aGVyZSBzb21lYm9keSBoYXMgY3JlYXRlZCBhIGJv
cmRlcgogICAgICAgICAvLyAod2hpY2ggbWlnaHQgYmUgbGFyZ2UpIGFuZCB0aGVuIGlzIHN0cmV0
Y2hpbmcgaXQgdG8gZmlsbCBzb21lIHBhcnQKICAgICAgICAgLy8gb2YgdGhlIHBhZ2UuCi0gICAg
ICAgIGlmIChzcmNXaWR0aCA9PSBkZXN0V2lkdGggfHwgc3JjSGVpZ2h0ID09IGRlc3RIZWlnaHQp
CisgICAgICAgIGlmICh3aWR0aE5lYXJseUVxdWFsIHx8IGhlaWdodE5lYXJseUVxdWFsKQogICAg
ICAgICAgICAgcmV0dXJuIFJFU0FNUExFX05PTkU7CiAKICAgICAgICAgLy8gVGhlIGltYWdlIGlz
IGdyb3dpbmcgYSBsb3QgYW5kIGluIG1vcmUgdGhhbiBvbmUgZGlyZWN0aW9uLiBSZXNhbXBsaW5n
CkBAIC0xMjEsOCArMTI1LDggQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBs
aW5nTW9kZShjb25zdCBTa01hdHJpeCYgbWF0cml4LCBjb25zdCBOYXRpdmUKICAgICAgICAgcmV0
dXJuIFJFU0FNUExFX0xJTkVBUjsKICAgICB9CiAKLSAgICBpZiAoKGZhYnMoZGVzdFdpZHRoIC0g
c3JjV2lkdGgpIC8gc3JjV2lkdGggPCBrRnJhY3Rpb25hbENoYW5nZVRocmVzaG9sZCkKLSAgICAg
ICAgJiYgKGZhYnMoZGVzdEhlaWdodCAtIHNyY0hlaWdodCkgLyBzcmNIZWlnaHQgPCBrRnJhY3Rp
b25hbENoYW5nZVRocmVzaG9sZCkpIHsKKyAgICBpZiAoKGRpZmZXaWR0aCAvIHNyY1dpZHRoIDwg
a0ZyYWN0aW9uYWxDaGFuZ2VUaHJlc2hvbGQpCisgICAgICAgICYmIChkaWZmSGVpZ2h0IC8gc3Jj
SGVpZ2h0IDwga0ZyYWN0aW9uYWxDaGFuZ2VUaHJlc2hvbGQpKSB7CiAgICAgICAgIC8vIEl0IGlz
IGRpc2FwcG9pbnRpbmdseSBjb21tb24gb24gdGhlIHdlYiBmb3IgaW1hZ2Ugc2l6ZXMgdG8gYmUg
b2ZmIGJ5CiAgICAgICAgIC8vIG9uZSBvciB0d28gcGl4ZWxzLiBXZSBkb24ndCBib3RoZXIgcmVz
YW1wbGluZyBpZiB0aGUgc2l6ZSBkaWZmZXJlbmNlCiAgICAgICAgIC8vIGlzIGEgc21hbGwgZnJh
Y3Rpb24gb2YgdGhlIG9yaWdpbmFsIHNpemUuCkBAIC0xNjIsMTEgKzE2Niw1OCBAQCBzdGF0aWMg
UmVzYW1wbGluZ01vZGUgbGltaXRSZXNhbXBsaW5nTW9kZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBw
bGF0Zm9ybUNvbnRleHQsCiAgICAgcmV0dXJuIHJlc2FtcGxpbmc7CiB9CiAKLS8vIERyYXdzIHRo
ZSBnaXZlbiBiaXRtYXAgdG8gdGhlIGdpdmVuIGNhbnZhcy4gVGhlIHN1YnNldCBvZiB0aGUgc291
cmNlIGJpdG1hcAotLy8gaWRlbnRpZmllZCBieSBzcmNfcmVjdCBpcyBkcmF3biB0byB0aGUgZ2l2
ZW4gZGVzdGluYXRpb24gcmVjdC4gVGhlIGJpdG1hcAotLy8gd2lsbCBiZSByZXNhbXBsZWQgdG8g
cmVzYW1wbGVfd2lkdGggKiByZXNhbXBsZV9oZWlnaHQgKHRoaXMgaXMgdGhlIHNpemUgb2YKLS8v
IHRoZSB3aG9sZSBpbWFnZSwgbm90IHRoZSBzdWJzZXQpLiBTZWUgc2hvdWxkUmVzYW1wbGVCaXRt
YXAgZm9yIG1vcmUuCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbGUgYW4gaW1hZ2Ug
YW5kIGV4dHJhY3QgYSBzY2FsZWQgZnJhZ21lbnQuCisvLworLy8gQUxHT1JJVEhNCisvLworLy8g
QmVjYXVzZSB0aGUgc2NhbGVkIGltYWdlIHNpemUgaGFzIHRvIGJlIGludGVnZXJzLCB3ZSBhcHBy
b3hpbWF0ZSB0aGUgcmVhbAorLy8gc2NhbGUgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm11bGEgKG9u
bHkgWCBkaXJlY3Rpb24gaXMgc2hvd24pOgorLy8KKy8vIHNjYWxlZEltYWdlV2lkdGggPSByb3Vu
ZChzY2FsZVggKiBpbWFnZVJlY3Qud2lkdGgoKSkKKy8vIGFwcHJveGltYXRlU2NhbGVYID0gc2Nh
bGVkSW1hZ2VXaWR0aCAvIGltYWdlUmVjdC53aWR0aCgpCisvLworLy8gV2l0aCB0aGlzIG1ldGhv
ZCB3ZSBtYWludGFpbiBhIGNvbnN0YW50IHNjYWxlIGZhY3RvciBhbW9uZyBmcmFnbWVudHMgaW4K
Ky8vIHRoZSBzY2FsZWQgaW1hZ2UuIFRoaXMgYWxsb3dzIGZyYWdtZW50cyB0byBzdGl0Y2ggdG9n
ZXRoZXIgdG8gZm9ybSB0aGUKKy8vIGZ1bGwgc2NhbGVkIGltYWdlLiBUaGUgZG93bnNpZGUgaXMg
dGhlcmUgd2lsbCBiZSBhIHNtYWxsIGRpZmZlcmVuY2UKKy8vIGJldHdlZW4gfHNjYWxlWHwgYW5k
IHxhcHByb3hpbWF0ZVNjYWxlWHwuCisvLworLy8gQSBzY2FsZWQgaW1hZ2UgZnJhZ21lbnQgaXMg
aWRlbnRpZmllZCBieToKKy8vCisvLyAtIFNjYWxlZCBpbWFnZSBzaXplCisvLyAtIFNjYWxlZCBp
bWFnZSBmcmFnbWVudCByZWN0YW5nbGUgKEludFJlY3QpCisvLworLy8gU2NhbGVkIGltYWdlIHNp
emUgaGFzIGJlZW4gZGV0ZXJtaW5lZCBhbmQgdGhlIG5leHQgc3RlcCBpcyB0byBjb21wdXRlIHRo
ZQorLy8gcmVjdGFuZ2xlIGZvciB0aGUgc2NhbGVkIGltYWdlIGZyYWdtZW50IHdoaWNoIG5lZWRz
IHRvIGJlIGFuIEludFJlY3QuCiAvLworLy8gc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3QgKiAoYXBw
cm94aW1hdGVTY2FsZVgsIGFwcHJveGltYXRlU2NhbGVZKQorLy8gZW5jbG9zaW5nU2NhbGVkU3Jj
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkU3JjUmVjdCkKKy8vCisvLyBGaW5hbGx5IHdl
IGV4dHJhY3QgdGhlIHNjYWxlZCBpbWFnZSBmcmFnbWVudCB1c2luZworLy8gKHNjYWxlZEltYWdl
U2l6ZSwgZW5jbG9zaW5nU2NhbGVkU3JjUmVjdCkuCisvLworc3RhdGljIFNrQml0bWFwIGV4dHJh
Y3RTY2FsZWRJbWFnZUZyYWdtZW50KGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBjb25z
dCBTa1JlY3QmIHNyY1JlY3QsIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUmVjdCogc2NhbGVkU3JjUmVjdCwg
U2tJUmVjdCogZW5jbG9zaW5nU2NhbGVkU3JjUmVjdCkKK3sKKyAgICBTa0lTaXplIGltYWdlU2l6
ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLmJpdG1hcCgpLndpZHRoKCksIGJpdG1hcC5iaXRtYXAo
KS5oZWlnaHQoKSk7CisgICAgU2tJU2l6ZSBzY2FsZWRJbWFnZVNpemUgPSBTa0lTaXplOjpNYWtl
KGNsYW1wVG9JbnRlZ2VyKHJvdW5kZihpbWFnZVNpemUud2lkdGgoKSAqIHNjYWxlWCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcihy
b3VuZGYoaW1hZ2VTaXplLmhlaWdodCgpICogc2NhbGVZKSkpOworCisgICAgU2tSZWN0IGltYWdl
UmVjdCA9IFNrUmVjdDo6TWFrZVdIKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0
KCkpOworICAgIFNrUmVjdCBzY2FsZWRJbWFnZVJlY3QgPSBTa1JlY3Q6Ok1ha2VXSChzY2FsZWRJ
bWFnZVNpemUud2lkdGgoKSwgc2NhbGVkSW1hZ2VTaXplLmhlaWdodCgpKTsKKworICAgIFNrTWF0
cml4IHNjYWxlVHJhbnNmb3JtOworICAgIHNjYWxlVHJhbnNmb3JtLnNldFJlY3RUb1JlY3QoaW1h
Z2VSZWN0LCBzY2FsZWRJbWFnZVJlY3QsIFNrTWF0cml4OjprRmlsbF9TY2FsZVRvRml0KTsKKyAg
ICBzY2FsZVRyYW5zZm9ybS5tYXBSZWN0KHNjYWxlZFNyY1JlY3QsIHNyY1JlY3QpOworCisgICAg
c2NhbGVkU3JjUmVjdC0+aW50ZXJzZWN0KHNjYWxlZEltYWdlUmVjdCk7CisgICAgKmVuY2xvc2lu
Z1NjYWxlZFNyY1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KCpzY2FsZWRTcmNSZWN0KTsKKworICAg
IC8vIHxlbmNsb3NpbmdTY2FsZWRTcmNSZWN0fCBjYW4gYmUgbGFyZ2VyIHRoYW4gfHNjYWxlZElt
YWdlU2l6ZXwgYmVjYXVzZQorICAgIC8vIG9mIGZsb2F0IGluYWNjdXJhY3kgc28gY2xpcCB0byBn
ZXQgaW5zaWRlLgorICAgIGVuY2xvc2luZ1NjYWxlZFNyY1JlY3QtPmludGVyc2VjdChTa0lSZWN0
OjpNYWtlU2l6ZShzY2FsZWRJbWFnZVNpemUpKTsKKyAgICByZXR1cm4gYml0bWFwLnJlc2l6ZWRC
aXRtYXAoc2NhbGVkSW1hZ2VTaXplLCAqZW5jbG9zaW5nU2NhbGVkU3JjUmVjdCk7Cit9CisKIC8v
IFRoaXMgZG9lcyBhIGxvdCBvZiBjb21wdXRhdGlvbiB0byByZXNhbXBsZSBvbmx5IHRoZSBwb3J0
aW9uIG9mIHRoZSBiaXRtYXAKIC8vIHRoYXQgd2lsbCBvbmx5IGJlIGRyYXduLiBUaGlzIGlzIGNy
aXRpY2FsIGZvciBwZXJmb3JtYW5jZSBzaW5jZSB3aGVuIHdlIGFyZQogLy8gc2Nyb2xsaW5nLCBm
b3IgZXhhbXBsZSwgd2UgYXJlIG9ubHkgZHJhd2luZyBhIHNtYWxsIHN0cmlwIG9mIHRoZSBpbWFn
ZS4KQEAgLTE3NSw0OCArMjI2LDQ3IEBAIHN0YXRpYyBSZXNhbXBsaW5nTW9kZSBsaW1pdFJlc2Ft
cGxpbmdNb2RlKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwKIC8vCiAvLyBO
b3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlv
biBpcyBsaW1pdGVkIHRvCiAvLyBzY2FsaW5nIG9yIHRyYW5zbGF0aW9uLgotc3RhdGljIHZvaWQg
ZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29u
c3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIHNyY0lSZWN0LCBjb25z
dCBTa1JlY3QmIGRlc3RSZWN0KQorc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0Nh
bnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRt
YXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKIHsKICNp
ZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBUUkFDRV9FVkVOVDAoInNraWEiLCAiZHJhd1Jlc2Ft
cGxlZEJpdG1hcCIpOwogI2VuZGlmCi0gICAgLy8gQXBwbHkgZm9yd2FyZCB0cmFuc2Zvcm0gdG8g
ZGVzdFJlY3QgdG8gZXN0aW1hdGUgcmVxdWlyZWQgc2l6ZSBvZgotICAgIC8vIHJlLXNhbXBsZWQg
Yml0bWFwLCBhbmQgdXNlIG9ubHkgaW4gY2FsbHMgcmVxdWlyZWQgdG8gcmVzaXplLCBvciB0aGF0
Ci0gICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1aXJlZCBzaXplLgotICAgIFNrUmVjdCBkZXN0UmVj
dFRyYW5zZm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RS
ZWN0VHJhbnNmb3JtZWQsIGRlc3RSZWN0KTsKLSAgICBTa0lSZWN0IGRlc3RSZWN0VHJhbnNmb3Jt
ZWRSb3VuZGVkOwotICAgIGRlc3RSZWN0VHJhbnNmb3JtZWQucm91bmQoJmRlc3RSZWN0VHJhbnNm
b3JtZWRSb3VuZGVkKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUgcG9ydGlvbiBvZiBv
dXIgcmVjdC4KKyAgICAvLyBXZSB3YW50IHRvIHNjYWxlIHxkZXN0UmVjdHwgd2l0aCB0cmFuc2Zv
cm1hdGlvbiBpbiB0aGUgY2FudmFzIHRvIG9idGFpbgorICAgIC8vIHRoZSBmaW5hbCBzY2FsZS4g
VGhlIGZpbmFsIHNjYWxlIGlzIGEgY29tYmluYXRpb24gb2Ygc2NhbGUgdHJhbnNmb3JtCisgICAg
Ly8gaW4gY2FudmFzIGFuZCBleHBsaWNpdCBzY2FsaW5nIChzcmNSZWN0IGFuZCBkZXN0UmVjdCku
CisgICAgU2tSZWN0IHNjcmVlblJlY3Q7CisgICAgY2FudmFzLmdldFRvdGFsTWF0cml4KCkubWFw
UmVjdCgmc2NyZWVuUmVjdCwgZGVzdFJlY3QpOworICAgIGZsb2F0IHJlYWxTY2FsZVggPSBzY3Jl
ZW5SZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgcmVhbFNjYWxlWSA9
IHNjcmVlblJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpOworCisgICAgLy8gVGhpcyBw
YXJ0IG9mIGNvZGUgbGltaXRzIHNjYWxpbmcgb25seSB0byB2aXNpYmxlIHBvcnRpb24gaW4gdGhl
CisgICAgLy8gZGVzdGluYXRpb24gcmVjdGFuZ2xlLgogICAgIFNrUmVjdCBkZXN0UmVjdFZpc2li
bGVTdWJzZXQ7CiAgICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0LCAmZGVzdFJl
Y3RWaXNpYmxlU3Vic2V0KTsKKwogICAgIC8vIENsaXBSZWN0VG9DYW52YXMgb2Z0ZW4gb3ZlcnNo
b290cywgcmVzdWx0aW5nIGluIGEgbGFyZ2VyIHJlZ2lvbiB0aGFuIG91cgogICAgIC8vIG9yaWdp
bmFsIGRlc3RSZWN0LiBJbnRlcnNlY3RpbmcgZ2V0cyB1cyBiYWNrIGluc2lkZS4KICAgICBpZiAo
IWRlc3RSZWN0VmlzaWJsZVN1YnNldC5pbnRlcnNlY3QoZGVzdFJlY3QpKQogICAgICAgICByZXR1
cm47IC8vIE5vdGhpbmcgdmlzaWJsZSBpbiBkZXN0UmVjdC4KIAotICAgIC8vIENvbXB1dGUgdGhl
IHRyYW5zZm9ybWVkIChzY3JlZW4gc3BhY2UpIHBvcnRpb24gb2YgdGhlIHZpc2libGUgcG9ydGlv
biBmb3IKLSAgICAvLyB1c2UgYmVsb3cuCi0gICAgU2tSZWN0IGRlc3RSZWN0VmlzaWJsZVN1YnNl
dFRyYW5zZm9ybWVkOwotICAgIGNhbnZhcy5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RS
ZWN0VmlzaWJsZVN1YnNldFRyYW5zZm9ybWVkLCBkZXN0UmVjdFZpc2libGVTdWJzZXQpOwotICAg
IFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQgPSBkZXN0UmVjdFZpc2libGVTdWJz
ZXRUcmFuc2Zvcm1lZDsKLSAgICBkZXN0Qml0bWFwU3Vic2V0VHJhbnNmb3JtZWQub2Zmc2V0KC1k
ZXN0UmVjdFRyYW5zZm9ybWVkLmZMZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLWRlc3RSZWN0VHJhbnNmb3JtZWQuZlRvcCk7Ci0gICAgU2tJUmVjdCBkZXN0Qml0
bWFwU3Vic2V0VHJhbnNmb3JtZWRSb3VuZGVkOwotICAgIGRlc3RCaXRtYXBTdWJzZXRUcmFuc2Zv
cm1lZC5yb3VuZCgmZGVzdEJpdG1hcFN1YnNldFRyYW5zZm9ybWVkUm91bmRlZCk7Ci0KLSAgICAv
LyBUcmFuc2Zvcm1zIGFib3ZlIHBsdXMgcm91bmRpbmcgbWF5IGNhdXNlIGRlc3RCaXRtYXBTdWJz
ZXRUcmFuc2Zvcm1lZFJvdW5kZWQKLSAgICAvLyB0byBnbyBvdXRzaWRlIHRoZSBpbWFnZSwgc28g
bmVlZCB0byBjbGlwIHRvIGF2b2lkIHByb2JsZW1zLgotICAgIGlmICghZGVzdEJpdG1hcFN1YnNl
dFRyYW5zZm9ybWVkUm91bmRlZC5pbnRlcnNlY3QoCi0gICAgICAgICAgICAwLCAwLCBkZXN0UmVj
dFRyYW5zZm9ybWVkUm91bmRlZC53aWR0aCgpLCBkZXN0UmVjdFRyYW5zZm9ybWVkUm91bmRlZC5o
ZWlnaHQoKSkpCi0gICAgICAgIHJldHVybjsgLy8gSW1hZ2UgaXMgbm90IHZpc2libGUuCi0KLSAg
ICBTa0JpdG1hcCByZXNhbXBsZWQgPSBiaXRtYXAucmVzaXplZEJpdG1hcChzcmNJUmVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdFRyYW5z
Zm9ybWVkUm91bmRlZC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSZWN0VHJhbnNmb3JtZWRSb3VuZGVkLmhlaWdodCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXRU
cmFuc2Zvcm1lZFJvdW5kZWQpOwotICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQs
IDAsIGRlc3RSZWN0VmlzaWJsZVN1YnNldCwgJnBhaW50KTsKKyAgICAvLyBGaW5kIHRoZSBjb3Jy
ZXNwb25kaW5nIHJlY3QgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyAgICBTa01hdHJpeCBkZXN0VG9T
cmNUcmFuc2Zvcm07CisgICAgU2tSZWN0IHNyY1JlY3RWaXNpYmxlU3Vic2V0OworICAgIGRlc3RU
b1NyY1RyYW5zZm9ybS5zZXRSZWN0VG9SZWN0KGRlc3RSZWN0LCBzcmNSZWN0LCBTa01hdHJpeDo6
a0ZpbGxfU2NhbGVUb0ZpdCk7CisgICAgZGVzdFRvU3JjVHJhbnNmb3JtLm1hcFJlY3QoJnNyY1Jl
Y3RWaXNpYmxlU3Vic2V0LCBkZXN0UmVjdFZpc2libGVTdWJzZXQpOworCisgICAgU2tSZWN0IHNj
YWxlZFNyY1JlY3Q7CisgICAgU2tJUmVjdCBlbmNsb3NpbmdTY2FsZWRTcmNSZWN0OworICAgIFNr
Qml0bWFwIHNjYWxlZEltYWdlRnJhZ21lbnQgPSBleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudChi
aXRtYXAsIHNyY1JlY3RWaXNpYmxlU3Vic2V0LCByZWFsU2NhbGVYLCByZWFsU2NhbGVZLCAmc2Nh
bGVkU3JjUmVjdCwgJmVuY2xvc2luZ1NjYWxlZFNyY1JlY3QpOworICAgIHNjYWxlZFNyY1JlY3Qu
b2Zmc2V0KC1lbmNsb3NpbmdTY2FsZWRTcmNSZWN0LngoKSwgLWVuY2xvc2luZ1NjYWxlZFNyY1Jl
Y3QueSgpKTsKKworICAgIC8vIEJlY2F1c2UgdGhlIGltYWdlIGZyYWdtZW50IGlzIGdlbmVyYXRl
ZCB3aXRoIGFuIGFwcHJveG1pYXRlZCBzY2FsaW5nCisgICAgLy8gZmFjdG9yLiBUaGlzIGRyYXcg
d2lsbCBwZXJmb3JtIGEgY2xvc2UgdG8gMSBzY2FsaW5nLgorICAgIC8vCisgICAgLy8gTk9URTog
Rm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIElmIHRoZSBkaWZmZXJlbmNlIGluIHNjYWxlIGlzIHNv
IHNtYWxsCisgICAgLy8gdGhhdCBTa2lhIGRvZXNuJ3QgcHJvZHVjZSBhIGRpZmZlcmVuY2UgdGhl
biB3ZSBjYW4ganVzdCBibGl0IGl0IGRpcmVjdGx5CisgICAgLy8gdG8gZW5oYW5jZSBwZXJmb3Jt
YW5jZS4KKyAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3RUb1JlY3Qoc2NhbGVkSW1hZ2VGcmFnbWVu
dCwgJnNjYWxlZFNyY1JlY3QsIGRlc3RSZWN0VmlzaWJsZVN1YnNldCwgJnBhaW50KTsKIH0KIAog
c3RhdGljIGJvb2wgaGFzTm9uOTByb3RhdGlvbihQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0
KQpAQCAtMjI0LDcgKzI3NCw3IEBAIHN0YXRpYyBib29sIGhhc05vbjkwcm90YXRpb24oUGxhdGZv
cm1Db250ZXh0U2tpYSogY29udGV4dCkKICAgICByZXR1cm4gIWNvbnRleHQtPmNhbnZhcygpLT5n
ZXRUb3RhbE1hdHJpeCgpLnJlY3RTdGF5c1JlY3QoKTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRT
a0JpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2
ZUltYWdlU2tpYSYgYml0bWFwLCBjb25zdCBTa0lSZWN0JiBzcmNSZWN0LCBjb25zdCBTa1JlY3Qm
IGRlc3RSZWN0LCBjb25zdCBTa1hmZXJtb2RlOjpNb2RlJiBjb21wT3ApCitzdGF0aWMgdm9pZCBw
YWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
TmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgU2tYZmVybW9kZTo6TW9kZSYgY29tcE9wKQogewogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIFRSQUNFX0VWRU5UMCgic2tpYSIsICJwYWludFNrQml0bWFw
Iik7CkBAIC0yNDksNyArMjk5LDggQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9y
bUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAgICAgICAg
aWYgKCEoY2FudmFzLT5nZXRUb3RhbE1hdHJpeCgpLmdldFR5cGUoKSAmIChTa01hdHJpeDo6a0Fm
ZmluZV9NYXNrIHwgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKSkpCiAgICAgICAgICAgICBj
YW52YXMtPmdldFRvdGFsTWF0cml4KCkubWFwUmVjdCgmZGVzdFJlY3RUYXJnZXQsIGRlc3RSZWN0
KTsKIAotICAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNhbnZhcy0+
Z2V0VG90YWxNYXRyaXgoKSwgYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0
KCksCisgICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY2FudmFzLT5n
ZXRUb3RhbE1hdHJpeCgpLCBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KHNyY1JlY3Qud2lkdGgoKSksIFNrU2NhbGFyVG9G
bG9hdChzcmNSZWN0LmhlaWdodCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3RUYXJnZXQud2lkdGgoKSksIFNrU2Nh
bGFyVG9GbG9hdChkZXN0UmVjdFRhcmdldC5oZWlnaHQoKSkpOwogICAgIH0KIApAQCAtMjY5LDcg
KzMyMCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSog
cGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIGlzIHNvbWV0aGlu
ZyBpbnRlcmVzdGluZyBnb2luZyBvbiB3aXRoIHRoZSBtYXRyaXggKGxpa2UgYSByb3RhdGlvbiku
CiAgICAgICAgIC8vIE5vdGU6IGZvciBzZXJpYWxpemF0aW9uLCB3ZSB3aWxsIHdhbnQgdG8gc3Vi
c2V0IHRoZSBiaXRtYXAgZmlyc3Qgc28KICAgICAgICAgLy8gd2UgZG9uJ3Qgc2VuZCBleHRyYSBw
aXhlbHMuCi0gICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLmJpdG1hcCgpLCAm
c3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJl
Y3RUb1JlY3QoYml0bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAg
ICAgfQogICAgIHBsYXRmb3JtQ29udGV4dC0+ZGlkRHJhd1JlY3QoZGVzdFJlY3QsIHBhaW50LCAm
Yml0bWFwLmJpdG1hcCgpKTsKIH0KQEAgLTMyMyw3ICszNzQsNiBAQCB2b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgaWYgKCFiaXRtYXApCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFNrSVJlY3Qgc3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qobm9y
bVNyY1JlY3QpOwogICAgIFNrTWF0cml4IGN0bSA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKICAgICBTa01hdHJpeCB0b3RhbE1hdHJpeDsK
ICAgICB0b3RhbE1hdHJpeC5zZXRDb25jYXQoY3RtLCBwYXR0ZXJuVHJhbnNmb3JtKTsKQEAgLTM0
Miw3ICszOTIsNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsCiAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVk
KCkgfHwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCiAgICAgICAgIHJl
c2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CiAgICAgZWxzZQotICAgICAgICByZXNhbXBsaW5n
ID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKHRvdGFsTWF0cml4LCAqYml0bWFwLCBzcmNSZWN0Lndp
ZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdo
dCk7CisgICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUodG90YWxNYXRy
aXgsICpiaXRtYXAsIG5vcm1TcmNSZWN0LndpZHRoKCksIG5vcm1TcmNSZWN0LmhlaWdodCgpLCBk
ZXN0Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOwogICAgIHJlc2FtcGxpbmcgPSBsaW1p
dFJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByZXNhbXBsaW5nKTsK
IAogICAgIC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJLaXQgcmVxdWVzdGVkLgpAQCAtMzUxLDEy
ICs0MDEsMTkgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LAogICAgIFNrU2hhZGVyKiBzaGFkZXI7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1Q
TEVfQVdFU09NRSkgewogICAgICAgICAvLyBEbyBuaWNlIHJlc2FtcGxpbmcuCi0gICAgICAgIGlu
dCB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oZGVzdEJpdG1hcFdpZHRoKTsKLSAgICAgICAgaW50
IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oZGVzdEJpdG1hcEhlaWdodCk7Ci0gICAgICAgIFNr
Qml0bWFwIHJlc2FtcGxlZCA9IGJpdG1hcC0+cmVzaXplZEJpdG1hcChzcmNSZWN0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgc2NhbGVYID0gZGVzdEJpdG1hcFdpZHRoIC8gbm9ybVNy
Y1JlY3Qud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgc2NhbGVZID0gZGVzdEJpdG1hcEhlaWdodCAv
IG5vcm1TcmNSZWN0LmhlaWdodCgpOworICAgICAgICBTa1JlY3Qgc2NhbGVkU3JjUmVjdDsKKyAg
ICAgICAgU2tJUmVjdCBlbmNsb3NpbmdTY2FsZWRTcmNSZWN0OworCisgICAgICAgIC8vIFRoZSBp
bWFnZSBmcmFnbWVudCBnZW5lcmF0ZWQgaGVyZSBpcyBub3QgZXhhY3RseSB3aGF0IGlzCisgICAg
ICAgIC8vIHJlcXVlc3RlZC4gVGhlIHNjYWxlIGZhY3RvciB1c2VkIGlzIGFwcHJveGltYXRlZCBh
bmQgaW1hZ2UKKyAgICAgICAgLy8gZnJhZ21lbnQgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRvIGFsaWdu
IHRvIGludGVnZXIKKyAgICAgICAgLy8gYm91bmRhcmllcy4KKyAgICAgICAgU2tCaXRtYXAgcmVz
YW1wbGVkID0gZXh0cmFjdFNjYWxlZEltYWdlRnJhZ21lbnQoKmJpdG1hcCwgbm9ybVNyY1JlY3Qs
IHNjYWxlWCwgc2NhbGVZLCAmc2NhbGVkU3JjUmVjdCwgJmVuY2xvc2luZ1NjYWxlZFNyY1JlY3Qp
OwogICAgICAgICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHJlc2FtcGxl
ZCwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2Rl
KTsKIAotICAgICAgICAvLyBTaW5jZSB3ZSBqdXN0IHJlc2l6ZWQgdGhlIGJpdG1hcCwgd2UgbmVl
ZCB0byByZW1vdmUgdGhlIHNjYWxlIAorICAgICAgICAvLyBTaW5jZSB3ZSBqdXN0IHJlc2l6ZWQg
dGhlIGJpdG1hcCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIHNjYWxlCiAgICAgICAgIC8vIGFwcGxp
ZWQgdG8gdGhlIHBpeGVscyBpbiB0aGUgYml0bWFwIHNoYWRlci4gVGhpcyBtZWFucyB3ZSBuZWVk
CiAgICAgICAgIC8vIENUTSAqIHBhdHRlcm5UcmFuc2Zvcm0gdG8gaGF2ZSBpZGVudGl0eSBzY2Fs
ZS4gU2luY2Ugd2UKICAgICAgICAgLy8gY2FuJ3QgbW9kaWZ5IENUTSAob3IgdGhlIHJlY3Rhbmds
ZSB3aWxsIGJlIGRyYXduIGluIHRoZSB3cm9uZwpAQCAtMzY3LDcgKzQyNCw3IEBAIHZvaWQgSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5pY2UgcmVzYW1wbGluZy4KICAgICAgICAgU2tCaXRt
YXAgc3JjU3Vic2V0OwotICAgICAgICBiaXRtYXAtPmJpdG1hcCgpLmV4dHJhY3RTdWJzZXQoJnNy
Y1N1YnNldCwgc3JjUmVjdCk7CisgICAgICAgIGJpdG1hcC0+Yml0bWFwKCkuZXh0cmFjdFN1YnNl
dCgmc3JjU3Vic2V0LCBlbmNsb3NpbmdJbnRSZWN0KG5vcm1TcmNSZWN0KSk7CiAgICAgICAgIHNo
YWRlciA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoc3JjU3Vic2V0LCBTa1NoYWRlcjo6
a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUpOwogICAgIH0KIApA
QCAtNDQ0LDcgKzUwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAKICAgICBwYWludFNrQml0bWFwKGN0
eHQtPnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgKmJtLAotICAgICAgICAg
ICAgICAgICAgZW5jbG9zaW5nSW50UmVjdChub3JtU3JjUmVjdCksCisgICAgICAgICAgICAgICAg
ICBub3JtU3JjUmVjdCwKICAgICAgICAgICAgICAgICAgIG5vcm1Ec3RSZWN0LAogICAgICAgICAg
ICAgICAgICAgV2ViQ29yZUNvbXBvc2l0ZVRvU2tpYUNvbXBvc2l0ZShjb21wb3NpdGVPcCkpOwog
CkBAIC00NjgsNyArNTI1LDcgQEAgdm9pZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGN0eHQsCiAKICAgICBwYWludFNrQml0bWFwKGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgbV9uYXRpdmVJbWFnZSwKLSAgICAgICAg
ICAgICAgICAgIGVuY2xvc2luZ0ludFJlY3Qobm9ybVNyY1JlY3QpLAorICAgICAgICAgICAgICAg
ICAgbm9ybVNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICBub3JtRHN0UmVjdCwKICAgICAgICAg
ICAgICAgICAgIFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUoY29tcG9zaXRlT3ApKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRp
dmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9O
YXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IDJjNGJhZWQ3NTRkMzdkZjA4MjgxZmMyMmE2YjNkYjM0
OGY1MDU0ZDkuLjE1MGFjOGEzNDlmYWU4NjBhMGQ3MWYyZjhlMjRkM2Q4MjExZDA4MTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAKQEAgLTYxLDU2ICs2MSw0OCBAQCBpbnQgTmF0aXZlSW1hZ2VTa2lhOjpk
ZWNvZGVkU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0U2l6ZSgpICsgbV9yZXNp
emVkSW1hZ2UuZ2V0U2l6ZSgpOwogfQogCi1ib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXpl
ZEJpdG1hcChjb25zdCBTa0lSZWN0JiBzcmNTdWJzZXQsIGludCBkZXN0V2lkdGgsIGludCBkZXN0
SGVpZ2h0KSBjb25zdAorYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29u
c3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1
YnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jYWNoZWRJbWFnZUluZm8uaXNFcXVhbChzcmNT
dWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCkgJiYgIW1fcmVzaXplZEltYWdlLmVtcHR5KCk7
CisgICAgYm9vbCBpbWFnZVNjYWxlRXF1YWwgPSBtX2NhY2hlZEltYWdlSW5mby5zY2FsZWRJbWFn
ZVNpemUgPT0gc2NhbGVkSW1hZ2VTaXplOworICAgIGJvb2wgc2NhbGVkSW1hZ2VTdWJzZXRBdmFp
bGFibGUgPSBtX2NhY2hlZEltYWdlSW5mby5zY2FsZWRJbWFnZVN1YnNldC5jb250YWlucyhzY2Fs
ZWRJbWFnZVN1YnNldCk7CisgICAgcmV0dXJuIGltYWdlU2NhbGVFcXVhbCAmJiBzY2FsZWRJbWFn
ZVN1YnNldEF2YWlsYWJsZSAmJiAhbV9yZXNpemVkSW1hZ2UuZW1wdHkoKTsKIH0KIAotU2tCaXRt
YXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdFdpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0SGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3Qm
IGRlc3RWaXNpYmxlU3Vic2V0KSBjb25zdAorU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNp
emVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYg
c2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNSZXNpemVkQml0bWFwKHNy
Y1N1YnNldCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KSkgeworICAgIGlmICghaGFzUmVzaXplZEJp
dG1hcChzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KSkgewogICAgICAgICBib29s
IHNob3VsZENhY2hlID0gaXNEYXRhQ29tcGxldGUoKQotICAgICAgICAgICAgJiYgc2hvdWxkQ2Fj
aGVSZXNhbXBsaW5nKHNyY1N1YnNldCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0LCBkZXN0VmlzaWJs
ZVN1YnNldCk7Ci0KLSAgICAgICAgU2tCaXRtYXAgc3Vic2V0OwotICAgICAgICBtX2ltYWdlLmV4
dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKLSAgICAgICAgaWYgKCFzaG91bGRDYWNo
ZSkgewotICAgICAgICAgICAgLy8gSnVzdCByZXNpemUgdGhlIHZpc2libGUgc3Vic2V0IGFuZCBy
ZXR1cm4gaXQuCi0gICAgICAgICAgICBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6d2lsbFJlc2l6
ZUltYWdlKHNob3VsZENhY2hlKTsKLSAgICAgICAgICAgIFNrQml0bWFwIHJlc2l6ZWRJbWFnZSA9
IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwgc2tpYTo6SW1hZ2VPcGVyYXRp
b25zOjpSRVNJWkVfTEFOQ1pPUzMsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgZGVzdFZpc2libGVT
dWJzZXQpOwotICAgICAgICAgICAgUGxhdGZvcm1JbnN0cnVtZW50YXRpb246OmRpZFJlc2l6ZUlt
YWdlKCk7Ci0gICAgICAgICAgICByZXNpemVkSW1hZ2Uuc2V0SW1tdXRhYmxlKCk7CisgICAgICAg
ICAgICAgICAgJiYgc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVk
SW1hZ2VTdWJzZXQpOworCisgICAgICAgIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVz
aXplSW1hZ2Uoc2hvdWxkQ2FjaGUpOworICAgICAgICBTa0JpdG1hcCByZXNpemVkSW1hZ2UgPSBz
a2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShtX2ltYWdlLCBza2lhOjpJbWFnZU9wZXJhdGlv
bnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVkSW1hZ2VTaXplLndpZHRoKCksIHNjYWxlZEltYWdl
U2l6ZS5oZWlnaHQoKSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworICAgICAgICByZXNpemVkSW1hZ2Uu
c2V0SW1tdXRhYmxlKCk7CisgICAgICAgIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uOjpkaWRSZXNp
emVJbWFnZSgpOworCisgICAgICAgIGlmICghc2hvdWxkQ2FjaGUpCiAgICAgICAgICAgICByZXR1
cm4gcmVzaXplZEltYWdlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUGxhdGZvcm1J
bnN0cnVtZW50YXRpb246OndpbGxSZXNpemVJbWFnZShzaG91bGRDYWNoZSk7Ci0gICAgICAgICAg
ICBtX3Jlc2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwg
c2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIGRlc3RXaWR0aCwgZGVzdEhl
aWdodCk7Ci0gICAgICAgICAgICBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6ZGlkUmVzaXplSW1h
Z2UoKTsKLSAgICAgICAgfQotICAgICAgICBtX3Jlc2l6ZWRJbWFnZS5zZXRJbW11dGFibGUoKTsK
KworICAgICAgICBtX3Jlc2l6ZWRJbWFnZSA9IHJlc2l6ZWRJbWFnZTsKICAgICB9CiAKLSAgICBT
a0JpdG1hcCB2aXNpYmxlQml0bWFwOwotICAgIG1fcmVzaXplZEltYWdlLmV4dHJhY3RTdWJzZXQo
JnZpc2libGVCaXRtYXAsIGRlc3RWaXNpYmxlU3Vic2V0KTsKLSAgICByZXR1cm4gdmlzaWJsZUJp
dG1hcDsKKyAgICBTa0JpdG1hcCByZXNpemVkU3Vic2V0OworICAgIFNrSVJlY3QgcmVzaXplZFN1
YnNldFJlY3QgPSBtX2NhY2hlZEltYWdlSW5mby5yZWN0SW5TdWJzZXQoc2NhbGVkSW1hZ2VTdWJz
ZXQpOworICAgIG1fcmVzaXplZEltYWdlLmV4dHJhY3RTdWJzZXQoJnJlc2l6ZWRTdWJzZXQsIHJl
c2l6ZWRTdWJzZXRSZWN0KTsKKyAgICByZXR1cm4gcmVzaXplZFN1YnNldDsKIH0KIAotYm9vbCBO
YXRpdmVJbWFnZVNraWE6OnNob3VsZENhY2hlUmVzYW1wbGluZyhjb25zdCBTa0lSZWN0JiBzcmNT
dWJzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXN0V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBkZXN0SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3QKK2Jvb2wgTmF0aXZlSW1h
Z2VTa2lhOjpzaG91bGRDYWNoZVJlc2FtcGxpbmcoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VT
aXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKICAgICAvLyBD
aGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBtYXRjaCBwcmV2aW91cyByZXF1
ZXN0LgotICAgIGJvb2wgbWF0Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1hZ2VJbmZv
LmlzRXF1YWwoc3JjU3Vic2V0LCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQpOworICAgIGJvb2wgbWF0
Y2hlc1ByZXZpb3VzUmVxdWVzdCA9IG1fY2FjaGVkSW1hZ2VJbmZvLmlzRXF1YWwoc2NhbGVkSW1h
Z2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CiAgICAgaWYgKG1hdGNoZXNQcmV2aW91c1JlcXVl
c3QpCiAgICAgICAgICsrbV9yZXNpemVSZXF1ZXN0czsKICAgICBlbHNlIHsKLSAgICAgICAgbV9j
YWNoZWRJbWFnZUluZm8uc2V0KHNyY1N1YnNldCwgZGVzdFdpZHRoLCBkZXN0SGVpZ2h0KTsKKyAg
ICAgICAgbV9jYWNoZWRJbWFnZUluZm8uc2V0KHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VT
dWJzZXQpOwogICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKLSAgICAgICAgLy8gUmVzZXQg
bV9yZXNpemVkSW1hZ2Ugbm93LCBiZWNhdXNlIHdlIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4g
dGhlCi0gICAgICAgIC8vIGxhc3QgcmVxdWVzdGVkIHJlc2l6ZSBpbmZvIGFuZCBtX3Jlc2l6ZWRJ
bWFnZSdzIHJlc2l6ZSBpbmZvLgorICAgICAgICAvLyBSZXNldCBtX3Jlc2l6ZWRJbWFnZSBub3cs
IGJlY2F1c2Ugd2UgZG9uJ3QgZGlzdGluZ3Vpc2gKKyAgICAgICAgLy8gYmV0d2VlbiB0aGUgbGFz
dCByZXF1ZXN0ZWQgcmVzaXplIGluZm8gYW5kIG1fcmVzaXplZEltYWdlJ3MKKyAgICAgICAgLy8g
cmVzaXplIGluZm8uCiAgICAgICAgIG1fcmVzaXplZEltYWdlLnJlc2V0KCk7CiAgICAgfQogCkBA
IC0xMjMsMTMgKzExNSwxNiBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNh
bXBsaW5nKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKIAogICAgIC8vIElmIHRoZSBkZXN0aW5h
dGlvbiBiaXRtYXAgaXMgZXhjZXNzaXZlbHkgbGFyZ2UsIHdlJ2xsIG5ldmVyIGFsbG93IGNhY2hp
bmcuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBrTGFyZ2VCaXRtYXBTaXpl
ID0gNDA5NlVMTCAqIDQwOTZVTEw7Ci0gICAgaWYgKChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KGRlc3RXaWR0aCkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGRlc3RI
ZWlnaHQpKSA+IGtMYXJnZUJpdG1hcFNpemUpCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGZ1bGxT
aXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzY2FsZWRJbWFnZVNpemUud2lk
dGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNjYWxlZEltYWdlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGZyYWdtZW50U2l6ZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2NhbGVkSW1hZ2VTdWJzZXQud2lkdGgoKSkgKiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNjYWxlZEltYWdlU3Vic2V0LmhlaWdodCgpKTsK
KworICAgIGlmIChmcmFnbWVudFNpemUgPiBrTGFyZ2VCaXRtYXBTaXplKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgZGVzdGluYXRpb24gYml0bWFwIGlzIHNtYWxsLCB3
ZSdsbCBhbHdheXMgYWxsb3cgY2FjaGluZywgc2luY2UKICAgICAvLyB0aGVyZSBpcyBub3QgdmVy
eSBtdWNoIHBlbmFsdHkgZm9yIGNvbXB1dGluZyBpdCBhbmQgaXQgbWF5IGNvbWUgaW4gaGFuZHku
Ci0gICAgc3RhdGljIGNvbnN0IGludCBrU21hbGxCaXRtYXBTaXplID0gNDA5NjsKLSAgICBpZiAo
ZGVzdFdpZHRoICogZGVzdEhlaWdodCA8PSBrU21hbGxCaXRtYXBTaXplKQorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBrU21hbGxCaXRtYXBTaXplID0gNDA5NjsKKyAgICBpZiAoZnJhZ21lbnRT
aXplIDw9IGtTbWFsbEJpdG1hcFNpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
SWYgInRvbyBtYW55IiByZXF1ZXN0cyBoYXZlIGJlZW4gbWFkZSBmb3IgdGhpcyBiaXRtYXAsIHdl
IGFzc3VtZSB0aGF0CkBAIC0xMzgsMjggKzEzMywzNCBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwKICAgICBpZiAo
bV9yZXNpemVSZXF1ZXN0cyA+PSBrTWFueVJlcXVlc3RUaHJlc2hvbGQpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgLy8gSWYgbW9yZSB0aGFuIDEvNCBvZiB0aGUgcmVzaXplZCBpbWFnZSBp
cyB2aXNpYmxlLCBpdCdzIHdvcnRoIGNhY2hpbmcuCi0gICAgaW50IGRlc3RWaXNpYmxlU2l6ZSA9
IGRlc3RWaXNpYmxlU3Vic2V0LndpZHRoKCkgKiBkZXN0VmlzaWJsZVN1YnNldC5oZWlnaHQoKTsK
LSAgICByZXR1cm4gKGRlc3RWaXNpYmxlU2l6ZSA+IChkZXN0V2lkdGggKiBkZXN0SGVpZ2h0KSAv
IDQpOworICAgIC8vIElmIG1vcmUgdGhhbiAxLzQgb2YgdGhlIHJlc2l6ZWQgaW1hZ2UgaXMgcmVx
dWVzdGVkLCBpdCdzIHdvcnRoIGNhY2hpbmcuCisgICAgcmV0dXJuIGZyYWdtZW50U2l6ZSA+IGZ1
bGxTaXplIC8gNDsKIH0KIAogTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OkNhY2hl
ZEltYWdlSW5mbygpCiB7Ci0gICAgc3JjU3Vic2V0LnNldEVtcHR5KCk7CisgICAgc2NhbGVkSW1h
Z2VTaXplLnNldEVtcHR5KCk7CisgICAgc2NhbGVkSW1hZ2VTdWJzZXQuc2V0RW1wdHkoKTsKK30K
KworYm9vbCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbChjb25zdCBT
a0lTaXplJiBvdGhlclNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgb3RoZXJTY2FsZWRJ
bWFnZVN1YnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2NhbGVkSW1hZ2VTaXplID09IG90aGVy
U2NhbGVkSW1hZ2VTaXplICYmIHNjYWxlZEltYWdlU3Vic2V0ID09IG90aGVyU2NhbGVkSW1hZ2VT
dWJzZXQ7CiB9CiAKLWJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OmlzRXF1
YWwoY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJzZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkg
Y29uc3QKK3ZvaWQgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OnNldChjb25zdCBT
a0lTaXplJiBvdGhlclNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgb3RoZXJTY2FsZWRJ
bWFnZVN1YnNldCkKIHsKLSAgICByZXR1cm4gc3JjU3Vic2V0ID09IG90aGVyU3JjU3Vic2V0Ci0g
ICAgICAgICYmIHJlcXVlc3RTaXplLndpZHRoKCkgPT0gd2lkdGgKLSAgICAgICAgJiYgcmVxdWVz
dFNpemUuaGVpZ2h0KCkgPT0gaGVpZ2h0OworICAgIHNjYWxlZEltYWdlU2l6ZSA9IG90aGVyU2Nh
bGVkSW1hZ2VTaXplOworICAgIHNjYWxlZEltYWdlU3Vic2V0ID0gb3RoZXJTY2FsZWRJbWFnZVN1
YnNldDsKIH0KIAotdm9pZCBOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6c2V0KGNv
bnN0IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitTa0lS
ZWN0IE5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpyZWN0SW5TdWJzZXQoY29uc3Qg
U2tJUmVjdCYgb3RoZXJTY2FsZWRJbWFnZVN1YnNldCkKIHsKLSAgICBzcmNTdWJzZXQgPSBvdGhl
clNyY1N1YnNldDsKLSAgICByZXF1ZXN0U2l6ZS5zZXRXaWR0aCh3aWR0aCk7Ci0gICAgcmVxdWVz
dFNpemUuc2V0SGVpZ2h0KGhlaWdodCk7CisgICAgaWYgKCFzY2FsZWRJbWFnZVN1YnNldC5jb250
YWlucyhvdGhlclNjYWxlZEltYWdlU3Vic2V0KSkKKyAgICAgICAgcmV0dXJuIFNrSVJlY3Q6Ok1h
a2VFbXB0eSgpOworICAgIFNrSVJlY3Qgc3Vic2V0UmVjdCA9IG90aGVyU2NhbGVkSW1hZ2VTdWJz
ZXQ7CisgICAgc3Vic2V0UmVjdC5vZmZzZXQoLXNjYWxlZEltYWdlU3Vic2V0LngoKSwgLXNjYWxl
ZEltYWdlU3Vic2V0LnkoKSk7CisgICAgcmV0dXJuIHN1YnNldFJlY3Q7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IDJhNTJlNjhlZTRlZjE3NTUxOWQxODNm
ZGRmZDU1N2E1MmRmZDQ2YTUuLmNlMjliY2RkYmVkNjFmZjM1OGE0NDRiNmYyYTI4NzI4ZDNmZTI0
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAiU2tCaXRt
YXAuaCIKICNpbmNsdWRlICJTa1JlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiU2tTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzAsMzkgKzcwLDMzIEBA
IHB1YmxpYzoKICAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdXRpb25TY2FsZTsgfQogCiAgICAgLy8gV2UgY2FuIGtlZXAgYSByZXNpemVkIHZlcnNpb24g
b2YgdGhlIGJpdG1hcCBjYWNoZWQgb24gdGhpcyBvYmplY3QuCi0gICAgLy8gVGhpcyBmdW5jdGlv
biB3aWxsIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlCi0g
ICAgLy8gZ2l2ZW4gaW1hZ2Ugc3Vic2V0IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMgYW5kIHN1
YnNldHMuCi0gICAgYm9vbCBoYXNSZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNl
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4K
KyAgICAvLyBzY2FsZSBhbmQgc3Vic2V0LgorICAgIGJvb2wgaGFzUmVzaXplZEJpdG1hcChjb25z
dCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZEltYWdlU3Vi
c2V0KSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gYW4gZXhpc3RpbmcgcmVzaXpl
ZCBpbWFnZSBzdWJzZXQsIG9yIGdlbmVyYXRlIGEgbmV3IG9uZQotICAgIC8vIG9mIHRoZSBzcGVj
aWZpZWQgc2l6ZSBhbmQgc3Vic2V0cyBhbmQgcG9zc2libHkgY2FjaGUgaXQuCi0gICAgLy8gc3Jj
U3Vic2V0IGlzIHRoZSBzdWJzZXQgb2YgdGhlIGltYWdlIHRvIHJlc2l6ZSBpbiBpbWFnZSBzcGFj
ZS4KLSAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNyY1N1YnNldCwg
aW50IGRlc3RXaWR0aCwgaW50IGRlc3RIZWlnaHQpIGNvbnN0Ci0gICAgewotICAgICAgICBTa0lS
ZWN0IGRlc3RWaXNpYmxlU3Vic2V0ID0gezAsIDAsIGRlc3RXaWR0aCwgZGVzdEhlaWdodH07Ci0g
ICAgICAgIHJldHVybiByZXNpemVkQml0bWFwKHNyY1N1YnNldCwgZGVzdFdpZHRoLCBkZXN0SGVp
Z2h0LCBkZXN0VmlzaWJsZVN1YnNldCk7Ci0gICAgfQotCi0gICAgLy8gU2FtZSBhcyBhYm92ZSwg
YnV0IHJldHVybnMgYSBzdWJzZXQgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlIChpZTogdGhlCi0g
ICAgLy8gdmlzaWJsZSBzdWJzZXQpLiBkZXN0VmlzaWJsZVN1YnNldCBpcyB0aGUgc3Vic2V0IG9m
IHRoZSByZXNpemVkCi0gICAgLy8gKGRlc3RXaWR0aCB4IGRlc3RIZWlnaHQpIGltYWdlLgotICAg
IC8vIEluIG90aGVyIHdvcmRzOgotICAgIC8vIC0gY3JvcCBpbWFnZSBieSBzcmNTdWJzZXQgLT4g
aW1hZ2VTdWJzZXQuCi0gICAgLy8gLSByZXNpemUgaW1hZ2VTdWJzZXQgdG8gZGVzdFdpZHRoIHgg
ZGVzdEhlaWdodCAtPiBkZXN0SW1hZ2UuCi0gICAgLy8gLSByZXR1cm4gZGVzdEltYWdlIGNyb3Bw
ZWQgYnkgZGVzdFZpc2libGVTdWJzZXQuCi0gICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcChjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsIGludCBkZXN0V2lkdGgsIGludCBkZXN0SGVpZ2h0LCBjb25z
dCBTa0lSZWN0JiBkZXN0VmlzaWJsZVN1YnNldCkgY29uc3Q7CisgICAgLy8gb2YgdGhlIHNwZWNp
ZmllZCBzaXplIGFuZCBzdWJzZXQgYW5kIHBvc3NpYmx5IGNhY2hlIGl0LgorICAgIC8vCisgICAg
Ly8gc2NhbGVkSW1hZ2VTaXplCisgICAgLy8gRGltZW5zaW9ucyBvZiB0aGUgc2NhbGVkIGZ1bGwg
aW1hZ2UuCisgICAgLy8KKyAgICAvLyBzY2FsZWRJbWFnZVN1YnNldAorICAgIC8vIFJlY3Rhbmds
ZSBvZiB0aGUgc3Vic2V0IGluIHRoZSBzY2FsZWQgaW1hZ2UuCisgICAgU2tCaXRtYXAgcmVzaXpl
ZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNj
YWxlZEltYWdlU3Vic2V0KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICAvLyBDYWNoZWRJbWFnZUlu
Zm8gaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBjYWNoZWQgb3IgcmVxdWVzdGVkIGltYWdl
CiAgICAgLy8gcmVzaXplcy4KKyAgICAvLyBJbWFnZSByZXNpemUgaXMgaWRlbnRpZmllZCBieSB0
aGUgc2NhbGVkIGltYWdlIHNpemUgYW5kIHNjYWxlZCBpbWFnZSBzdWJzZXQuCiAgICAgc3RydWN0
IENhY2hlZEltYWdlSW5mbyB7Ci0gICAgICAgIEludFNpemUgcmVxdWVzdFNpemU7Ci0gICAgICAg
IFNrSVJlY3Qgc3JjU3Vic2V0OworICAgICAgICBTa0lTaXplIHNjYWxlZEltYWdlU2l6ZTsKKyAg
ICAgICAgU2tJUmVjdCBzY2FsZWRJbWFnZVN1YnNldDsKIAogICAgICAgICBDYWNoZWRJbWFnZUlu
Zm8oKTsKIAotICAgICAgICBib29sIGlzRXF1YWwoY29uc3QgU2tJUmVjdCYgb3RoZXJTcmNTdWJz
ZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0KGNvbnN0
IFNrSVJlY3QmIG90aGVyU3JjU3Vic2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgICAg
ICBib29sIGlzRXF1YWwoY29uc3QgU2tJU2l6ZSYgb3RoZXJTY2FsZWRJbWFnZVNpemUsIGNvbnN0
IFNrSVJlY3QmIG90aGVyU2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dChjb25zdCBTa0lTaXplJiBvdGhlclNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgb3Ro
ZXJTY2FsZWRJbWFnZVN1YnNldCk7CisgICAgICAgIFNrSVJlY3QgcmVjdEluU3Vic2V0KGNvbnN0
IFNrSVJlY3QmIG90aGVyU2NhbGVkSW1hZ2VSZWN0KTsKICAgICB9OwogCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBnaXZlbiByZXNpemUgb3BlcmF0aW9uIHNob3VsZCBlaXRoZXIgcmVzaXpl
IHRoZSB3aG9sZQpAQCAtMTE4LDE2ICsxMTIsMTQgQEAgcHJpdmF0ZToKICAgICAvLyBiZXR0ZXIg
aWYgd2UncmUgZ29pbmcgdG8gYmUgdXNpbmcgaXQgbW9yZSB0aGFuIG9uY2UgKGxpa2UgYSBiaXRt
YXAKICAgICAvLyBzY3JvbGxpbmcgb24gYW5kIG9mZiB0aGUgc2NyZWVuLiBTaW5jZSB3ZSBvbmx5
IGNhY2hlIHdoZW4gZG9pbmcgdGhlCiAgICAgLy8gZW50aXJlIHRoaW5nLCBpdCdzIGJlc3QgdG8g
anVzdCBkbyBpdCB1cCBmcm9udC4KLSAgICBib29sIHNob3VsZENhY2hlUmVzYW1wbGluZyhjb25z
dCBTa0lSZWN0JiBzcmNTdWJzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGRlc3RXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdEhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBkZXN0U3Vi
c2V0KSBjb25zdDsKKyAgICBib29sIHNob3VsZENhY2hlUmVzYW1wbGluZyhjb25zdCBTa0lTaXpl
JiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZEltYWdlU3Vic2V0KSBjb25z
dDsKIAogICAgIC8vIFRoZSBvcmlnaW5hbCBpbWFnZS4KICAgICBTa0JpdG1hcCBtX2ltYWdlOwog
ICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwogCi0gICAgLy8gVGhlIGNhY2hlZCBiaXRtYXAu
IFRoaXMgd2lsbCBiZSBlbXB0eSgpIGlmIHRoZXJlIGlzIG5vIGNhY2hlZCBpbWFnZS4KKyAgICAv
LyBUaGUgY2FjaGVkIGJpdG1hcCBmcmFnbWVudC4gVGhpcyBpcyBhIHN1YnNldCBvZiB0aGUgc2Nh
bGVkIHZlcnNpb24gb2YKKyAgICAvLyB8bV9pbWFnZXwuIGVtcHR5KCkgcmV0dXJucyB0cnVlIGlm
IHRoZXJlIGlzIG5vIGNhY2hlZCBpbWFnZS4KICAgICBtdXRhYmxlIFNrQml0bWFwIG1fcmVzaXpl
ZEltYWdlOwogCiAgICAgLy8gUmVmZXJlbmNlcyBob3cgbWFueSB0aW1lcyB0aGF0IHRoZSBpbWFn
ZSBzaXplIGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IKQEAgLTE0MSwxMiArMTMzLDExIEBAIHByaXZh
dGU6CiAgICAgLy8gcmVzaXplZCBpbWFnZSwgd2Uga25vdyB0aGF0IHdlIHNob3VsZCBwcm9iYWJs
eSBjYWNoZSBpdCwgZXZlbiBpZiBhbGwgb2YKICAgICAvLyB0aG9zZSByZXF1ZXN0cyBpbmRpdmlk
dWFsbHkgYXJlIHNtYWxsIGFuZCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJlIGNhY2hlZC4KICAgICAv
LwotICAgIC8vIFdlIGFsc28gdHJhY2sgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Vic2V0
cyBmb3IgY2FjaGluZyBwYXJ0aWFsCi0gICAgLy8gaW1hZ2UgcmVzaXplcy4KKyAgICAvLyBXZSBh
bHNvIHRyYWNrIHNjYWxpbmcgaW5mb3JtYXRpb24gYW5kIGRlc3RpbmF0aW9uIHN1YnNldCBmb3Ig
dGhlIHNjYWxlZAorICAgIC8vIGltYWdlLiBTZWUgY29tbWVudHMgZm9yIENhY2hlZEltYWdlSW5m
by4KICAgICBtdXRhYmxlIENhY2hlZEltYWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBt
dXRhYmxlIGludCBtX3Jlc2l6ZVJlcXVlc3RzOwogfTsKIAogfQogI2VuZGlmICAvLyBOYXRpdmVJ
bWFnZVNraWFfaAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjYxY2M2Nzk3OTcxZWUwZTAzNzJkY2I0ZTRiZjMwNWRlOWZi
ZWJiYS4uYTg2Njk4ZTBkZWViODJiNDVmYzZlYzM5MDk0NDQ3YjRkOTdmY2UxMSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ1IEBACisyMDEyLTA4LTI3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW3NraWFdIERyYXdpbmcgYSBzdWJyZWN0IG9mIGJpdG1hcCBpbWFnZSBpcyBt
aXNhbGlnbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTEyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IDMgbmV3IHRlc3RzIGFkZGVkLgorCisgICAgICAgIC0gZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVj
dC5odG1sCisKKyAgICAgICAgVGhpcyB0ZXN0IGVubGFyZ2VzIGEgMngxIGltYWdlIGluIGEgY2Fu
dmFzIGZvciBlYXN5IHZlcmlmaWNhdGlvbi4KKyAgICAgICAgMi8zIG9mIHRoZSBpbWFnZSBpcyB1
c2VkIGFzIHNvdXJjZSByZWN0YW5nbGUgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aAorICAgICAg
ICBmb3IgcGFydGlhbCBwaXhlbCBhZGRyZXNzaW5nLgorCisgICAgICAgIFBpeGVsIHRlc3QgcmVz
dWx0IHNob3VsZCBoYXZlIDEvMyBibHVlIG9uIHRoZSBsZWZ0IGFuZCAyLzMgZ3JlZW4gb24gdGhl
CisgICAgICAgIHJpZ2h0IHdpdGggZ3JhZGllbnQgYWNjb3JkaW5nIHRvIGludGVycG9sYXRpb24g
c2V0dGluZ3MuCisKKyAgICAgICAgLSBmYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQuaHRt
bAorCisgICAgICAgIERyYXdzIGEgMTF4MTEgaW1hZ2UgaW50byBhIGNhbnZhcyBpbiA4IGZyYWdt
ZW50cyB3aXRoIHBhcnRpYWwgcGl4ZWxzLgorICAgICAgICBDYW52YXMgc2hvdWxkIGxvb2sganVz
dCBsaWtlIGEgc2luZ2xlIGltYWdlIGVubGFyZ2VkLgorCisgICAgICAgIC0gZmFzdC9pbWFnZXMv
cmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbAorCisgICAgICAgIFNjYWxlIGEgMzF4MzEgaW1hZ2Ug
dG8gNTV4NTUuIEEgYmx1ZSBzcXVhcmUgbW92ZXMgYWNyb3NzIHRoZSBzY2FsZWQKKyAgICAgICAg
aW1hZ2Ugc3VjaCB0aGF0IHRoZSBpbWFnZSBpcyBwYXJ0aWFsbHkgaW52YWxpZGF0ZWQuIEFmdGVy
IHRoZSBhbmltYXRpb24KKyAgICAgICAgdGhlIGltYWdlIHNob3VsZCBsb29rIHRoZSBzYW1lLgor
CisgICAgICAgICogZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL3Jlc291cmNlcy9ncmlkLWxhcmdlLnBuZzog
QWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2dyaWQtc21hbGwucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOiBBZGRl
ZCBpbWFnZSBmYWlsdXJlIGV4cGVjdGF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVj
dGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9pbWFnZXMv
cmVwYWludC1zdWJyZWN0LWdyaWQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKwogMjAxMi0wOS0yMCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEtlcm5pbmcgbmV2ZXIg
b2NjdXJzIGJldHdlZW4gYSBzcGFjZSBhbmQgdGhlIGZvbGxvd2luZyBnbHlwaApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9w
YWludC1zdWJyZWN0LWdyaWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
cGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZl
OTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
IEBACisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3Qt
Z3JpZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTAyMDNhZjU3YTVkY2EwNWNhN2M3NGIwMWQxZWQ0MTcwZmQ3Y2IxNQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3Qt
Z3JpZC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjMw
IiBoZWlnaHQ9IjMwIj48L2NhbnZhcz4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KHRydWUpOworCit2YXIgaW1nID0gbmV3IEltYWdl
KCk7CisvLyBUaGlzIGlzIGEgMTF4MTEgYmxhY2sgYW5kIHdoaXRlIGdyaWQuCitpbWcuc3JjID0g
J3Jlc291cmNlcy9ncmlkLXNtYWxsLnBuZyc7CisKK2Z1bmN0aW9uIGRyYXdTdWJSZWN0U2NhbGVk
KGN0eCwgaW1nLCB4LCB5LCB3LCBoLCBzY2FsZSkKK3sKKyAgICBjdHguZHJhd0ltYWdlKGltZywg
eCwgeSwgdywgaCwgeCAqIHNjYWxlLCB5ICogc2NhbGUsIHcgKiBzY2FsZSwgaCAqIHNjYWxlKTsK
K30KKworaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBEcmF3IHRoZSBpbWFnZSBp
bnRvIGNhbnZhcyB3aXRoIDggZnJhZ21lbnRzIGxpa2Ugc2hvd246CisgICAgLy8KKyAgICAvLyB8
IDMuNjYgeCAzLjY2IHwgICB8IDMuNjYgeCAzLjY2IHwgICB8IDMuNjYgeCAzLjY2IHwKKyAgICAv
LworICAgIC8vIHwgICAgIDUuNSB4IDMuNjYgICAgICB8ICAgICB8ICAgICAgNS41IHggMy42NiAg
ICAgfAorICAgIC8vCisgICAgLy8gfCAzLjY2IHggMy42NiB8ICAgfCAzLjY2IHggMy42NiB8ICAg
fCAzLjY2IHggMy42NiB8CisKKyAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7CisKKyAgICB2YXIgc2NhbGUgPSAzMC4wIC8gMTEu
MDsKKworICAgIC8vIERyYXcgdGhlIHRvcCByb3cuCisgICAgZHJhd1N1YlJlY3RTY2FsZWQoY3R4
LCBpbWcsIDAsIDAsIDMuNjYsIDMuNjYsIHNjYWxlKTsKKyAgICBkcmF3U3ViUmVjdFNjYWxlZChj
dHgsIGltZywgMy42NiwgMCwgMy42NiwgMy42Niwgc2NhbGUpOworICAgIGRyYXdTdWJSZWN0U2Nh
bGVkKGN0eCwgaW1nLCA3LjMzLCAwLCAzLjY2LCAzLjY2LCBzY2FsZSk7CisKKyAgICAvLyBEcmF3
IHRoZSBtaWRkbGUgcm93LgorICAgIGRyYXdTdWJSZWN0U2NhbGVkKGN0eCwgaW1nLCAwLCAzLjY2
LCA1LjUsIDMuNjYsIHNjYWxlKTsKKyAgICBkcmF3U3ViUmVjdFNjYWxlZChjdHgsIGltZywgNS41
LCAzLjY2LCA1LjUsIDMuNjYsIHNjYWxlKTsKKworICAgIC8vIERyYXcgdGhlIGJvdHRvbSByb3cu
CisgICAgZHJhd1N1YlJlY3RTY2FsZWQoY3R4LCBpbWcsIDAsIDcuMzMsIDMuNjYsIDMuNjYsIHNj
YWxlKTsKKyAgICBkcmF3U3ViUmVjdFNjYWxlZChjdHgsIGltZywgMy42NiwgNy4zMywgMy42Niwg
My42Niwgc2NhbGUpOworICAgIGRyYXdTdWJSZWN0U2NhbGVkKGN0eCwgaW1nLCA3LjMzLCA3LjMz
LCAzLjY2LCAzLjY2LCBzY2FsZSk7Cit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL3BhaW50LXN1YnJlY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjYxMjRiMzJhNDdiNzYxYzBiNTc2
ZjY1MzU2MTZiYWIzMGRhMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvcGFpbnQtc3VicmVjdC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQodHJ1ZSk7CisKK3Zh
ciBpbWcgPSBuZXcgSW1hZ2UoKTsKKy8vIFRoaXMgaXMgYSAyeDEgaW1hZ2UsIGJsdWUgYXQgKDAs
IDApIGFuZCBncmVlbiBhdCAoMSwgMCkuCitpbWcuc3JjID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2
NCwnICsKKydpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUlBQUFBQkNBSUFBQUI3UU9qZEFBQUFB
WE5TUjBJQXJzNGM2UUFBQUFsd1NGbHpBQUFMRXdBQScgKworJ0N4TUJBSnFjR0FBQUFBZDBTVTFG
Qjl3SUd4UUtJYlBwSHRNQUFBQVBTVVJCVkFqWFkyQmcrTS93bndFQUJnRUIvNktQRWRrQUFBQUFT
VVZPJyArCisnUks1Q1lJST0nOworCitpbWcub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIC8v
IFN0YXJ0IGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgYmx1ZSBwaXhlbCBhbmQgc3RyZXRjaCB0byB0
aGUgZW50aXJlCisgICAgLy8gY2FudmFzLiBDYW52YXMgc2hvdWxkIGhhdmUgMS8zIGJsdWUgb24g
dGhlIGxlZnQgYW5kIDIvMyBncmVlbiBvbiB0aGUKKyAgICAvLyByaWdodCwgd2l0aCBncmFkaWVu
dCBpZiBpbnRlcnBvbGF0aW9uIGFsbG93cy4KKyAgICB2YXIgY3R4ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7CisgICAgY3R4LmRyYXdJbWFnZShp
bWcsIDAuNSwgMCwgMS41LCAxLCAwLCAwLCAyMDAsIDEwMCk7Cit9Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRl
ZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVwYWlu
dC1zdWJyZWN0LWdyaWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDY1YTRkOTVhMmExNjdiYzlkM2JhYTgzMjEyYTg1NTM1NWQxMzJjMAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwKQEAg
LTAsMCArMSw1NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLnRlc3RSZXBhaW50KCk7CisgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KHRydWUpOworfQorCit2YXIgcG9zID0gWworICAgIC8vIEZpcnN0IHJvdy4KKyAg
ICBbMCwgMF0sCisgICAgWzAsIDE4LjMzXSwKKyAgICBbMCwgMzYuNjddLAorCisgICAgLy8gU2Vj
b25kIHJvdy4KKyAgICBbMTguMzMsIC05LjE3XSwKKyAgICBbMTguMzMsIDkuMTddLAorICAgIFsx
OC4zMywgMjcuNV0sCisgICAgWzE4LjMzLCA0NS44M10sCisKKyAgICAvLyBUaGlyZCByb3cuCisg
ICAgWzM2LjY3LCAwXSwKKyAgICBbMzYuNjcsIDE4LjMzXSwKKyAgICBbMzYuNjcsIDM2LjY3XSwK
KworICAgIC8vIERpc2FwcGVhci4KKyAgICBbLTEwMCwgLTEwMF0sCitdOwordmFyIGN1cnJlbnRQ
b3MgPSAwOworCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoY3VycmVudFBvcyA+PSBw
b3MubGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICB2YXIgbWFzayA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYXNrIik7CisgICAgbWFzay5zdHlsZS50b3AgPSBwb3NbY3VycmVudFBv
c11bMF07CisgICAgbWFzay5zdHlsZS5sZWZ0ID0gcG9zW2N1cnJlbnRQb3NdWzFdOworICAgICsr
Y3VycmVudFBvczsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbigpOworICAgICAgICBydW5UZXN0KCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2V0VGltZW91dCgicnVuVGVzdCgpOyIsIDEwMDApOworICAg
IH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7IgorICAg
ICAgc3R5bGU9ImJhY2tncm91bmQ6IHVybChyZXNvdXJjZXMvZ3JpZC1sYXJnZS5wbmcpIG5vLXJl
cGVhdDsgYmFja2dyb3VuZC1zaXplOiA1NXB4IDU1cHg7Ij4KKzxkaXYgaWQ9Im1hc2siIHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyBsZWZ0OiAtMTAwcHg7CisgICAgICAg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsgd2lkdGg6IDE4LjMzcHg7IGhl
aWdodDogMTguMzNweDsiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2dyaWQtbGFyZ2UucG5nIGIvTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2dyaWQtbGFyZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyMDQ2
ZWQ3M2IyOTUyYTAzOTJhMzczNTEyODhmMTBkMmY2ZTA4ZjYKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDI3MQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXkAqcGgwMHdrWkJHa3BZN09pQUFFRjh9
fEZ0VHNGZzxaJXt3TD4yPlMKejQ9e0UrblFhRldFR3V3SzJodzFAM3xidF9ILVFgKlBaITQha0s9
Rjg4O1VZMDJwcW85UjZvKGVmLX5gO3YqYWIhCno8b287JU91O1hfNnFkZk55dUxpKD44WXZPO3A8
e3s3SihXNj1Lbz5Kd3owWGBhRigrSFhwVS0kWWVZIyhWbzlvMQp6YSMxUmZWbFhsPUd9MU0mKUhO
XilGKjMzO0Z0OyleKUNIMFQyTDl6ITktd0gqJX0+Y3B0SGlDclBEPntTc0RaKUwKTCl6NCp9USRp
Qn0qNHw5WgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2dyaWQtc21hbGwucG5nIGIvTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvcmVzb3VyY2VzL2dyaWQtc21hbGwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkZDJhNzZiYTcwMjE3
MjZkZWQzMjYzZmNmZTkwZGYxZTM0NGE1Y2QKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI1Mgp6
Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXisjb0UjMHdqWT9saXZYO3JYKzg3bTtlN29SdlZyTEA7
RDFUQjghMnYKejJOPTdaJShlcHdtSzhYcjE4Sn5jaEIqKFhGYWtONm8tVTNkNXxAKkl7UXYqSW9+
YFp3fE5GdkAjenFFenstMVlICnpOdlBydntuZnh4YnRVRTMzPzJyezRKbkxTZF4/VC1IS35Aa013
RnhebVpWeEc3b2BGejF8dEpRQlY3WWFUPzR9cQp3THZ0JWJMbn50Z1Q/MkN+MHxSfHkoSjNlemFg
UkklKDwqVW1ofDYyNjBvMV9ZPkZWZFEmTUJiQDBJaX0kMFJSOTEKCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDJmODFiNWQyNTYyOWZmYTI0YTU3MzY5YTdjZTY3NzZkMTFjNTkwNTAuLmNiZWI2NjQ2
MzFmODRhZjIzZTFjYmMyYThlNjNlYWJhNGY3ZjM0MTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzU2MSwzICszNTYxLDQ2IEBAIHdl
YmtpdC5vcmcvYi85NzE3OSBodHRwL3Rlc3RzL2Nzcy9saW5rLWNzcy1kaXNhYmxlZC12YWx1ZS13
aXRoLXNsb3ctbG9hZGluZy1zaGVlCiAjIFRoZSB0ZXN0IHNob3VsZCBwYXNzIGFmdGVyIGhhcmZi
dXp6IHRyYW5zaXRpb24uCiB3ZWJraXQub3JnL2IvOTcxNjQgWyBMaW51eCBdIGZhc3QvdGV4dC9p
bnRlcm5hdGlvbmFsL2hlYnJldy1zZWxlY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogCisjIFRoZXNl
IHRlc3RzIG5lZWQgcmViYXNlbGluaW5nIGFmdGVyIGJ1ZyA5NTEyMS4KKyMgQWxnb3JpdGhtIGZv
ciBpbWFnZSBzY2FsaW5nIGhhcyBjaGFuZ2VkIHNvIHRoZXNlIHRlc3QgcmV1bHRzIG5lZWQgdG8g
YmUgdXBkYXRlZC4KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JhY2tncm91bmRzL3JlcGVhdC9t
YXNrLW5lZ2F0aXZlLW9mZnNldC1yZXBlYXQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk1MTIxIGZhc3QvYmFja2dyb3VuZHMvc2l6ZS9iYWNrZ3JvdW5kU2l6ZTE1Lmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JhY2tncm91
bmRzL3NpemUvY29udGFpbi1hbmQtY292ZXItem9vbWVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JhY2tncm91bmRzL3NpemUvY29udGFpbi1hbmQt
Y292ZXIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIGZhc3Qv
Ym9yZGVycy9ib3JkZXItaW1hZ2Utc2NhbGUtdHJhbnNmb3JtLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JvcmRlcnMvYm9yZGVyLWltYWdlLXNjYWxl
ZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgZmFzdC9ib3Jk
ZXJzL2JvcmRlci1pbWFnZS1zaWRlLXJlZHVjdGlvbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvOTUxMjEgZmFzdC9ib3JkZXJzL2JvcmRlci1pbWFnZS1zbGljZS1jb25z
dHJhaW5lZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgZmFz
dC9ib3JkZXJzL2lubGluZS1tYXNrLW92ZXJsYXktaW1hZ2Utb3V0c2V0LXZlcnRpY2FsLXJsLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JvcmRlcnMv
aW5saW5lLW1hc2stb3ZlcmxheS1pbWFnZS1vdXRzZXQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk1MTIxIGZhc3QvYm9yZGVycy9zY2FsZWQtYm9yZGVyLWltYWdlLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2hpZHBpL2lt
YWdlLXNldC1ib3JkZXItaW1hZ2UtZHluYW1pYy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvOTUxMjEgZmFzdC9oaWRwaS9pbWFnZS1zZXQtYm9yZGVyLWltYWdlLXNpbXBs
ZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgZmFzdC9pbWFn
ZXMvcGl4ZWwtY3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBmYXN0L3JlcGFpbnQv
YmFja2dyb3VuZC1taXNhbGlnbmVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4dC1hbmNob3ItZGlyTFRSLWFuY2hvckVuZC5zdmcg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4
dC1hbmNob3ItZGlyTFRSLWFuY2hvck1pZGRsZS5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4dC1hbmNob3ItZGlyTFRSLWFuY2hvclN0
YXJ0LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9XM0Mt
STE4Ti90ZXh0LWFuY2hvci1kaXJOb25lLWFuY2hvckVuZC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4dC1hbmNob3ItZGlyTm9uZS1h
bmNob3JNaWRkbGUuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEg
c3ZnL1czQy1JMThOL3RleHQtYW5jaG9yLWRpck5vbmUtYW5jaG9yU3RhcnQuc3ZnIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3ZnL1czQy1JMThOL3RleHQtYW5jaG9y
LWRpclJUTC1hbmNob3JFbmQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTUxMjEgc3ZnL1czQy1JMThOL3RleHQtYW5jaG9yLWRpclJUTC1hbmNob3JNaWRkbGUuc3ZnIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3ZnL1czQy1JMThOL3RleHQt
YW5jaG9yLWRpclJUTC1hbmNob3JTdGFydC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4dC1hbmNob3ItaW5oZXJpdGVkLWRpckxUUi1h
bmNob3JFbmQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3Zn
L1czQy1JMThOL3RleHQtYW5jaG9yLWluaGVyaXRlZC1kaXJMVFItYW5jaG9yTWlkZGxlLnN2ZyBb
IEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9XM0MtSTE4Ti90ZXh0
LWFuY2hvci1pbmhlcml0ZWQtZGlyTFRSLWFuY2hvclN0YXJ0LnN2ZyBbIEltYWdlT25seUZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9XM0MtSTE4Ti90ZXh0LWFuY2hvci1pbmhlcml0
ZWQtZGlyUlRMLWFuY2hvckVuZC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi85NTEyMSBzdmcvVzNDLUkxOE4vdGV4dC1hbmNob3ItaW5oZXJpdGVkLWRpclJUTC1hbmNob3JN
aWRkbGUuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3ZnL1cz
Qy1JMThOL3RleHQtYW5jaG9yLWluaGVyaXRlZC1kaXJSVEwtYW5jaG9yU3RhcnQuc3ZnIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3ZnL1czQy1JMThOL3RleHQtYW5j
aG9yLW5vLW1hcmt1cC5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEy
MSBzdmcvVzNDLVNWRy0xLjEtU0UvZmlsdGVycy1pbWFnZS0wNS1mLnN2ZyBbIEltYWdlT25seUZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9XM0MtU1ZHLTEuMS9jb29yZHMtdmlld2F0
dHItMDItYi5zdmcgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBzdmcv
YXMtYm9yZGVyLWltYWdlL3N2Zy1hcy1ib3JkZXItaW1hZ2UuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9jdXN0b20vaW1hZ2Utc21hbGwtd2lkdGgtaGVp
Z2h0LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9jdXN0
b20vcG9pbnRlci1ldmVudHMtaW1hZ2UtY3NzLXRyYW5zZm9ybS5zdmcgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBzdmcvY3VzdG9tL3BvaW50ZXItZXZlbnRzLWltYWdl
LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk1MTIxIHN2Zy9keW5hbWlj
LXVwZGF0ZXMvU1ZHRkVJbWFnZUVsZW1lbnQtZG9tLXByZXNlcnZlQXNwZWN0UmF0aW8tYXR0ci5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTUxMjEgc3ZnL2R5bmFtaWMt
dXBkYXRlcy9TVkdGRUltYWdlRWxlbWVudC1zdmdkb20tcHJlc2VydmVBc3BlY3RSYXRpby1wcm9w
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NTEyMSBzdmcvem9vbS9w
YWdlL3pvb20tYmFja2dyb3VuZC1pbWFnZXMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk1MTIxIHNjcm9sbGJhcnMvb3ZlcmZsb3ctc2Nyb2xsYmFyLWNvbWJpbmF0aW9u
cy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWV4cGVjdGVkLnBuZyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmY2EwN2YwYzYxYzVhNzFlZTAxMWM5MzY5ZDdhZTY2NTdm
MDZlYTIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4ODEKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuMDxDCnpCKHA+VmJNcipZ
cSRIemMzeVU7VSkxKU54PGRpaEM2dzQlWTNscHxwXjh5QTJ1RklZLWp2KkN1LXJoMGZWbG90UAp6
eFkmRStePFYjJD5Kc2AxVG5gVUZgVj0+X1FTcXN8PiROajczPUFjQz5HMkU8NTMqUnE3I3deTzcj
V1VXR1QhWXoKejcmWklnPEVecFo/KTIyelpodis5WFo3d14+KDR5QVpfMlJsSlU0RUFtP24qaVU9
ODJfM3puUi1YS3QxPUZ6Z1Z+CnprNj5VaFktRDgrNUZUWlcyRXU0Yzd8akt2eG5NTEdqT0sjVFRy
ZnktIUFBYmJLJCtEY3Z4VXpDK3IkaT51NnsxLQpIb0QhTTxPfiVXYgoKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9p
bWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC1leHBlY3RlZC5wbmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGI0NDM1YTkzMjg2OGNlNmVhNzYwMjVmZThkYjlhMzdjYThlODNiNQpHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgNDQ2MAp6Y21lSExgJlgwcThVRzNuVF4tPEJUTlJQP3hHQVBr
a2g/KSphOVN2STFJUFZOMDFYOyQ0bmx5MEJyO3tLJDVQNygKenBkPCghUERtdn1LcEdIMk5icXp9
SyFUSjgyb1U3YjFWUmlLTCUwTUlfUWpvQD9XZz8jSjNQTzktfWlhbT97b2I7CnomLVo9YmRzcUZ1
UDJhUDQ0KisyNV5aQXRrMEV8QmR6JG9tWDUjKVMkPFU/ej9BUEp2XjVmV30oUGV7dGhPYVUlVgp6
YXAkaWtJRyVJQnA+VTIpakBQYWAjV3x4S1R5UDFGWnQpS0I0bWRnT1N8fFhBNEwoO2MxIVhoVXZQ
KCh5I1BSTkYKem49Py13JUZaKyZpI3Y1cWw+aCNCX3Bva05oZW4hVFFNUD5BUjZoOzhEbjdETSVk
bCV4ZEQmRTV6NURzT0FsdEh0CnpsTGhhV0tSaHF+e2lCdVdpRjA+THQtbXRndkVHT05NbX1OdkQy
azhoYW1nQGkmKFlLWEBOTEY/QzJiJEx5PFErUAp6MHRZX2AxMGNAbTVjdjN5Km5ReWN1V2lCWWI5
dWk0aHUyQyhaUnpzZmY4ME9IWDB3R2BpK21QfmI7MiQ2SH01RHsKekQrdndkIyEhfjBJXn0oKDFM
WVMrNUY2VCZTV2FHPVApfVNKd1B3dU8jZGQ1QGI+N2l4d1IrU3NBaUFgMjZlQDEkCnpUb1VkV0Zj
K1VnI1dPUUExdDs3fU49cTYyM1UzNXVid1I/QiVqTTdsSj5WTmwpSzRueVZ+P0QtYX1faiRlKkhC
IQp6TW8/PiNgbnA1a2ppNW9YNj8jbGImPjU/VjxYZzl2cD8jV09JfDg1VnNJY0EtTWlZKDZiLWtf
R0VBZEVxUG0jNiUKelZ+PzlIPDhXYXpuRztmSmN2T0B2RUI5QFdIUk08IzVWNnRHNnkyJilFY1NE
R3I2aVA7bD12Y3hpaSM/enh8XzYwCnpsS2h2UnFSVz5yTHg7QnY8Pm1uVStFbEhiR1UmSGheIzE7
U0I0NXpkRz9lVngoJWVpRSNBdl5sO0wjS3Zma00kcwp6SUgzfWkjSXQzKiZjeE50alcwezNSbnAm
WFopKko1OFN+JUxlMnVfVEU4MUFhTmI1a2RZKEwjNDdlQGMxY2pVKmAKejRFYlk8MThRbiZhNSRW
X3hqVjBZbW5Ne2krUHFUeFNpYG52ZkpHKz5zTCl9OUN6NTR4SzZoaThkZVJoM1ZjU25QCnpQJmVo
SjV7YWEpdGA2JEBxU1ApV0lYTmdWbT9LZmwlPyhzd0ZkaVA7Xk1scFVafldCQ1k8RHBCUHlZVChS
JWNsKwp6I3AwTVlmXnhKbVZKcClhK2BpTThoKCV7RlNKSXl+SHhEWmJaTC1DX1FoTmwzSSlVZmF2
Ym5Mc244P1ReWE4hSloKejJBUnlxRVdlUjk7VlVKMEhQcXdHPT1aOTJhQ2dAVUYtS3NuJDI1UTY1
e1gxUl5QakdoeWRsaSkqdnZ0UWtxITVrCnpgfE8zYnRuSUJPcCppQVdHQXwtOUZwdzlLbDkpSSpT
blhabEhNX0FnM3B3Mm41TlhhOVMmSXxMan57PHg1K2tJXwp6WmE3O01jLTRoNG45UWRwQEN3TmE7
WWplaj5GSF94MXhzaXl5WUtZNlk2U1g2KWhtYkNQRUpsNWppeFJuREsyaFcKeitMUTx0IXJNZUtH
ZHdLcGRCJlU9VEhAc0tjKWF9bGU2USsxYjRUVkJpclR5ZCNxaCskI1A7QGY7cVNjSG1UbSFYCnpB
WnxkVW80SWZBaStxNTxiWSFaQWJ2b1VYSyhARjdCVyFIXiVaQD1gUmFHX0h7aCRKc3A/SHloTk1n
TW8jdUhAPAp6LVE7STJsPzM9UCZrcktMPnRHTl9CcG5uZEI+WDQ2KEU8e1dvfn17ISEoIW9tI0xM
VUtfXzdaMmByYDAjTmNDVj8KelNYbFB6ezlzKlZpIVZ+MmhpaHRtX0FKMFJKVW09ITRpZztVPnc8
RTBkQERfP1AhQzd9RiNGK2cjVkw9aCNWRGo0Cnp3eTFxZmB7PndNKn41cCY1RDBFWnFkPU4kZyhl
Wj08S3FkMEAxQEUwXzRRYHY9QXAqcDxLd1YrNmJkQ2JjWUYyJAp6cnJ4QWgxaCtzc1dAKl9AKjs/
emNgWXBpSClTRX0yIW5PX1k8dyhZKVFsKnd1P3c2UjYoS01uO05sNmpwWG1HSWoKejVffjNLTSZ3
OFBEJE5PZSorTHxqWGRaTmtJSHEzZj5pU3pTM1cmJXs8KVFLKlA4eU5oK2UlYk5XY0NPbWlVVW88
CnppajZeVCEoPmpkY3hgUD4jP1EpbkNtb3hnemQ7TjMlUzgwbVQ3cyFOU31gWngpenlfR218UDQt
dkZJe1JkYWVFUwp6aEVFUUY0UXgydmVefTlyMC1tRmhpJiZeJlg7TUlERmM/fUFnK3dCZSR5K1Yy
c1d6O2lAalRjaEdlNnViZW4pRHgKemRLYWI5ZH0xQmw1c2dOPnhKVkZaU3dFfF5CdGRHaDhDYWVx
X3UwTEc9eil+UW1rcUp+TCFtYGM4SSQ9WT9NMDRaCnpKQks1d0g1bmNyaE9EeChHNHhlbTZuWDlH
WmlydF8/U3wrTlZ9TFd8NFV3LThNb0RoKDNKJDNMRXg3NSpQIXN2Vwp6UHVMZCFAP1c1LVd4YFN5
Mlh1OUg9e1ZfU3tXJEszaXJjI2hOMCU9JEw9RkpMdyZLKSZhRkU9YEtBMUtNTjQyNksKekh0KWQ4
bSN8SG4kSkdleE1pbzUod3pOVn4hKUIrKytJWXtPa0VYVjhBVyR9OEhBP34odl5vZypFbl5uRndZ
NjAkCnpsQD1Caj5mSjRYczVBUXV0ZnsjPENVPkpATlZ5cytVb31wbVFWa0g4RUlMZTRLfHVrJmFf
fE9adTZyVns2Tnpnbwp6dThgUHM1QGF1X2tCODA5JmEmdShnTSQkNm0lbFZTY2A8aGImSSY7Y20q
bm9Aa145UyFnXmk3ayZgTWAjckBAbzwKemZxM1Z7Uz1RSCgzSlFXVEFBdT0hXlc1bnkwMU94R1Q4
O25mVV4md096PkVESzBuZG0zPE1pMms9PHI/Jl9FR0AkCnlRbX5mLV8lZ21YMy0oZzVobDBJRSoh
P2o3em5sZW4jRTxuVGhFNHY2NzVzZXlkX01FTFF2VjArVTtoY3UrfCpTNwoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFz
dC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQtZXhwZWN0
ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmYTA4MDRiMTk0Yzk5ZWNlNmY2NzU4MjIzMTlkY2M0MzIzZDJk
OGIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDc1OTkKemNtZUkxYENuNyN5Mlc/KFNVT3l4JDRZ
SGNOc2tqMWt0bWl+bDNLQi1PdHBmNTJ0aCRtMGl6NnRGfG00O09BJEZwCno1dCp4cTZjOGl4NUZs
N28xUEtUVDBSbGx9MkFQTEkkWiVKI3krN1lTO0t+b2NYT3J4X0BBSXpieVZrUF98SmxsSAp6Xj1F
M0k1ZF5YTiZfVUIqMng4XjgxaEs7WWxOR3E0eD5pKktLZXFjRnU9akk0YksyRkAqV2E3YWNYaSQ2
WVV0Kj0KelRnT2V1UnF5KiN4KDIkWjRjIWdoLTM/RmYqPTRaJSlZLVQ0bipfME8teXpkfEhVVVpG
LVI1NGM5emwhS3R8OFUhCnpsb0k4KkZJS3dXdXtUaGtTUWl+fEZ6TkY4Nn5GKU1wSWghZl57KVFu
K0tRSURNO2B2dUd+dGxoTSQ2NnZvVUZXZQp6K0dGUk40YGQoTjh1NGxHc1omKWgyRzJqWGRLPyt+
Qitre0tAKmlRXj9LZSF0SFBQeXk0ekw/Tm1PZT15OGc+ZXUKekg+TnNrc1A3RyFCRlUjb3Y5WW1B
JHtXNWBRIX4yb3JzfVYycEhyOUw8dV85MEFzdTxBZ0JSVyUlNGpqV3hncC1yCnpjUTdOQjhUNzZf
Y2xDTmJGRzEwYFdOOWB2V2FpTU89KjlqUj54TlYrKklRNzhLVyM5K15zZEY0bnZCO29sJXFCbgp6
LW09T056M2EmTD5kMzxfQ0hhak0kQzMtWkhuKXttdVFubHcjb2laQXI5SzAtRiZmcyVNeiVKSnVo
KnwlfDhBQXgKeihVe1dCPVFCb01YQ0Beank/eSVARkROUTVaY0h8MjFPek5UNGdhI1F1ZG1pXnJt
Tkk8czQrRUZwRHRXblQlN0shCnoqJU5RITtOWU1jZCt6TW5jd051N3Z9KT5kS0p7Zzd0PkxBMl9C
MHdURmZoPDRuY19RR2Y4KDF5Pkt3bVFyJXF2cQp6cEF3Znp8Q09YNlVHPD48JHlGdDVAZVlFcHUk
fW1JcklJQEBwX1J8S3YkWlZAVTB3KGU0e3ZIfVQxTn1YRWhgSWgKemFyeHVreTtFYXRJaTtuZ0Rf
NT44RUcqMUVtWlBTd3Uxek5RbG40NEFJJl9HXjVRKm88U21LdHtuPlRLKFJhTiF3CnpFSThZY1dM
UXlBO21MbSM+UUByN0ckUiZeejRRX2ZaZ0ZOVjRiO2B1JHoteGp0c0ZNSEMpYyRtaFZtVjhJa1Fl
JAp6T19LZD1WPjk8YDlqJHo+Kl9fMFpUckBLPyE+I1lgNHtLeDdTY0NRUHIoZk88b29oMD9kaTgy
ZlBSX0R1dk0yQksKek9WbVZEUTxGS0xPJmpSJXw2VyZqVHVAQUpPZmd3VWNHbDk9NmktI0ZxeX4q
PGt9RFZRLU0hbn0pVnJRdUp7PmBtCnpZPkdWYGRHbj9eQzhRKVBZcVk7TSNeMnZSJHwtMi0mNkRe
JjkrWikqRH5MTjtVQT9gJTQ8MDtOU1hrZ05DTktIPAp6Q0c4RSZXMyVhSiZKMDVgbkt0SkYwdH1M
XlFZb1MwTDAlJGJRdDBqSiRxQVQjYHtzPWNSKmJ1cGFYMjs0cFp9OGkKengrQzlYdmE3VTNBYl8/
eXtFUns7ZyV4SUQ5Yk9Be3V7KEc/bz5WRj1ydVJALXZKZWxDQSlESnBNTVhoWlJ1UGlSCnowWk58
fS1gWT1qcT1wYElhT2h9aW4qUXJeQCY9UWo/LVAwTUlgSXwzcVBFdTc/dmpoSEJoQmZOayYjUEZP
WnctIwp6JllVXlpVS3R1cHIlenM0Xnw+O012ZSZjaVZaPUp9Z3NfNXh0djRoYUxxVHR6VCpXMTte
azBrXzZDcipqc09TREwKejw8bU94cmtrY14lYWlPQXI4QT9nKipNXyQjZWs7dnpBcntPY0dQZlp3
PTIkZCl2OHNzWmgzJEY7ZXl9eXhZcXw1CnopSGdQZ2NrYk0mckJ6PkJ5QiRaZGVTN1VvI24rRFEr
cVl8SlMhYEt6P2I8YiM1ZX1vU3dzd2hvSnZ9YGc+czZzcgp6cVlxa0tKZ1hCUSh3eS1SViM7Sk97
MHFmflElcilQail8XylxWWUoRzd5Rig9aGBHN0J7JHApQm95IUFJYHc9d2QKeihtPFRBdVcjNyg+
Jk12NlBEaFhLKGI0KGsqcy1GTSl6e0hEbTZlc01KQn5lY3R9c2dFO2RDbGMoREwkZkV8JiVBCnpN
PTU3I1hNMXtqOyN9NSpLYj51KSh2QlMye1ZXflpyQn0/aXtqRVppT1locTI8TSV8N3NJc35wWT43
PDc8dWF1fgp6KjRCLV4pbldReD9YUX1mXkx6JkNkU25hNUBmTCRuTFlWU0thWXJNd3QrVFZ0PDtm
TUFUK0dNckVHO2IrPlYkQzgKeiZFdE5IaHlXTEs3IXpINkhCc0U8Mn5MelVXNHY+fEg7ZT5ULUgz
fFAqVkNoanhfbVJOa34+US1fUE5GfXI9QlExCnpJIWg0REFBRyhIZUBjPXMpfGtnPk1AQmBWKkpn
bk5HITx3dEswZmE0P2NMIzMjTn4zKW1lYGslUGhOaDBlcW9fKgp6T3puUnREO0VfTSs7MTUlLTR0
ej07ZHVQYCQ0V3xJMS0xXjZfNG9IUGxzUlEoPmRyMHk9RDc8eEozOXF9akZQIVIKenpIQE4xKGtm
ej90PzxiVDsqO0NVczVCQGk/PTE5MDRAKEVnRUpHdEJCT1JUWTFwJUVxXzFFVm5DTU0+JHdHMSEz
CnpgR0x0fkxoe2ZUeEQqMFBjJSVkbE48fT9uR1Q5bkJMcGNqUWBCaGF2PSlgeFM5O2xlSHYybjR0
VX01K3wtfUFgSAp6JUhAZHtGQWk+c2hJc0FFe0xVSUJJflNrdGM4IzBwPGBmcWRFZ1R9UEM4fSZK
OWdEbWlQTTwhI1p7SSMzNFlrRjAKekNRfUJMZjNAQFlfbzNwc3l1N144KE5RJG8oQlItUDh5aFcx
PEB0P29Bb21XQlIzUDtIcnN6QStKNk4xKHZDWDZZCnpQQT5aTng4SHYyPmd0LUAoMiF6K1Q5aUZ9
PXB+KlRpTk82SHlYP2NnWkVtLXtlIVh8KD1uNyZ7VTFJdFBAcjQjYwp6UH49X2Y8XnVgRmQhI3Io
NlokPE5kbmxBanptZXZwKmBjVCNIfGk1fko7eXI+YVR1RjdaKkRYWmI+WmBaKGReQzUKeiZGQ1hR
dkFmalFxeFJOVFUwdk9Adl40WXRBZXNRejA1TlFCVGhwcFoocVhlNWM4YCtvKyZRPnEmQzU3KURt
cmQkCnorQHNAI3Fpb3FJSjdzUilNKyM3bnZ9QWJqNjZPY3VYbDtESHszVGNOR0lHOENkMH19K2Q7
MjJ2bnEoNHVYQDBhLQp6SzQmZmVvIyMkSVE4RmNCJHdpej88N0w/TXkjbz1sWF83cW0mcC1kbiVw
N0BqY1J3XnJyXzw1QVFYWllUaGI1Q0oKejFTJTIrTT1BRihtJmM8aDskaEk+JVArcSlpJkEmMDN8
WWN3JU8jQytOdj04Y3s1SWlaOypIVzRRU1ZsSnVvJG9SCnotV0lib15PNzdLNnkpUlUlWFo/UkJh
QytNal4/PjFDTUxGd19+RyNFP0R6XjhjNjBQODZlZTF7cGBpaHs2d1N9Vwp6SmwjPVBuUkZTTiZh
fX5fUXNxcjJvdD1lTVJhS2NzR3NNZndxYGQoYjJJXndiJXR8V2lkb1BfdUpNTGhZJilpcX0KempC
dj4renEkKE5CWnslNiM2eTk2OG1yPmV2KXx4aDBBbnt1SW5TcmpeNCU/Z01JNllvSzVKR1ZAPDlg
XnJxezhLCnoqeDUwYjdza085YVdYQD1lYURXbWNrakI7Vzx9bkQ+KHtSeks3OURucXxnTCk4Uk43
MGRfTDh2PisjOElORTQ/RAp6QyVaSiE8PjJKaC1QJjNSQWs9OCV2eCt0Qmk3SiZCMXVLPTU7czBD
WEVvQSl+KURIMDdubUgyIzlhdHZuZDNUcjEKelhKKHtpV280YSU7dFM4Jm87PXdiMGUyRlF1XlNX
aCo/RDwwSW1OPWBUeFJIfFhuVG12a3pRZno7OXk3Pm1TYk8xCnpJSFEpOW1aWUlLJVFqbjBPJHwz
bWZ3JCMyN043NGQkU2YlRSg9LT4yM3E8Iz1LUEJELXp2dzlQY0Vzc0FJdHI/VAp6diRTY0lpcT1H
emZRQn1qdyNTY2B4eipsY2I3ZS0hUiVDfn5FJTZyNGxfNz4/R1B8cnkrP0x9QWR4S0p1OTdeSGIK
eihxJDMyMzRVbkNpbD9Ka2xIdGRCY3xOXj1VQmlwcSs7RXF6QVJRTzRPRVVDVD1NPnojX20oUmc8
Tm1FejtuZFV4Cnp5K2tSUHB8TmU3UEpJMi1yJSRnY3NwTkhkO2RCOGFNR3h1ZD11anYhNyF4PnV3
Jmo3UG1EUlIyO1VMQSQkakdnMAp6IW8jPXwtQ1AjUyQ3aU5AcytTdyRYRiNEKTAzbmAha0E7PCRk
d3ZIYk9id1dGKEtPIV5VbXJ1K04/ZX0mbWszRjEKemM5M1UkQCRGTXN2d1hacW1YbmNAUUN1dDxa
YzFaVWlib0xgdXRnRERFQGxJeSRPJkZ2VVMwVmYpfk05bVhBJHpICnpSQyNHWks+PDJzczwpYVlW
ekJzNFAwPCRIU1J6aSgmZl44Y0ZVZWVxZkdaVzRnLXc+dkhjJXppUkIpREZ4aXFOSAp6VUUlPSYz
NWtpYztQSnY1WlJ1aVBsdjRgPEZZbmh6QUhMMiFpalc3I1Bma2tPJWFqQiM3PnRWLUY5TXVjanlp
PkgKemdrcmE1K25KbDIofGFuVnQjJmxUbGZpKzMhbEklRnpocmBNN1RiSVFEMnJgSmZCeU54KCMh
eGw7bnVCTlc/P1lrCnp1UXpUcTM3bTBidkUqfGpFaE9RS3NqMjh6ZEdOQHFTTzRaN195bklgXjU3
JWwrZEgwVzFhWVBHfE4zPTYtTyRHawp6ITN9VCtycyFQaCFzMjNwVVNqQmN0NmR6S0NoWTBxb0B1
KTAjSk15dUZmY0M/KEtgITltV0VQRTgjVnd0M3JKUWQKejZGTUN8QHhVQHNDKkk9WCNwIzd7ITRO
Tnpqfjs8Tm59dER3MHo/JE9NOVZFfXBqcyo5KUZsdVkkRUc4KnZCbkdlCnp8RXJxbCYxU00kc3l4
NTZHX1c8eG1Kfjl6WihHZEI8WVcpdHN9dHwjPjZ4OUczRm9RZSU5cHZ0Z0BxTzMoUUdVPwp6SVhN
fX5BRUxeYWZJT0RJdTVOMjx0S3ZeaVBFTjNEXiFIZyRQbFlITCVCZF9GUEZYVTlAQ0QkMmomKksy
Tkg5a28KeiNEakArJTZzYmphQW80THt9RHNiezN0KkskWGxvRTRhNSRGTFpMIU4kWnJWNGFvU0Vz
cDwrSzh0cH5YaVBPSSV5Cno8flApa2pNTytkSUVYTkVfd0w8JWs0N0FxdXJoUVJVSjN6VkokUGYz
RzZEPXRRLXJmZEVnQW0paVlvSVRJVklMTAp6QUktMnJBYVMlN3wzTUhCPld1OVA7KXhIMmlDS2sz
V1pJMFQkMnA2O0N6JU1INzA5VVFDcytYdSROKFZ+cCY5bHkKektnUkN+b34lSDc8d04+XzNaIyFe
UD4/fXJAX0N3cUB6Xl5vNl55akN3TTd3Rk9MNDVGO1JgaTRIeyNPJXtya2dCCnotJE1TX0V5cml6
Rml6QXBQRVN0e28xMSVZJClQbXwoaTkkMVpQeF5tMiZmZ2F6SjdqbHo0TGIhRUM/MSZLc0tBQQp6
emIyOTdFeHA2VCFffiRJeFcwPjFfbk57fHNxXlhEWU80c1F7ZC1weFJzRmckLTw+eClIa09eMCly
a0BUNU9AUUsKelh6JTE/dlRON1JNfioxTUFGVFM8VXc9aFp2Q1RmVlQxNiE7RSlHTzJ5P181Y2ha
OEluJnJfdSUpQERFYjFXKHVWCno/KT1gUEFxaHU+Jl9PWGVRNWd+IzhZLT0+dXxlMVJWODdAUlNV
YUNUKmBDfD9la1RMNlVLUTRObT14WWRrZSExQAp6KHhhJWQ2OEpOUnZrWmQtX28tLTFPZDBVUHY/
b3VWdzYoUFhoeENyVDBuQjJtcztYUlpFOEVBJUNtfHNMTi1zdSgKekJWQilgc3Y1ZjM4KWpgWHt+
N35TKTJtbGchJjh5XiFvX0R+WDd1Nm9wVWxpdU5SJCh7dypFOHl3TVpUeys5bTswCnplXjZzckRu
T3lFcTV8Qyg3OG0heE93IVcmRnF4PjNYJjR9WClRcld6V3RHdkFWVnpuVEk2SyhRVklhOV9KQ18/
Ngp6N19AaEhoaGpGR24zdz1UWjhaSGNXKzNnJUVpNTJRPm1eJCRRZlNqanl+R0x9Qnd7bHZmUiMz
O1FoUGMmM31lJmIKei02PHt+NSE3JTBQSkt2QncjU1lrbjNmfnMhU3tMWWBTQkwrUCNQdkElb3ZK
ez1JWkpTaTZNNXRme04lcExWPHZUCno8WGF1NCh3THctMjc9PUEmWXc5YDt5WXhlNk9XMWU0SzV3
Y2Q9MDZTSGw5Yn1QKnhTV2BKM2ZRRSpITDtaTzJBVQp6RFZJaHRqUGY1ayUpWW51OEZ4VSlfNHk2
PmYkR3x8VFZpVWpUKUJlWmQzU2RBXzNvbGx4IzA4VCRHYkUlRzd4MyUKei1gfDMkM0cwRiFhNTRK
ZStPTktualhlSkkmK2p4ZWhVOTl1WntIcHE4bHAtaHJranhVMGY8QVhZbHRlKjg7dWB7CnolUHlz
dSQ+OTFOdG84S2lmIztGeTtabzBeS1ppWE9CUUskTTcwQ2N1dEFXU2NzSFMkakJGTnY7bDgzeUNr
P2l7Rgp6XiQ3T01WKTN6dV9QSWNXbSEyX19DP3E7RkdsU3Q0bGEtMGwhJColRTw+WUshenV0Vnk4
cFEqSzB8JWIxamwqYHUKemp7a3xBYUJ1PiVGRSR6fFMpOF9XNGpkNDE8eCheKjB1K1h+YV98eU1r
S0pMMU5yVElDKF47b3whb1k5JVJVPm1ECnpBOXEwWG01Qk09aFE+enZ4cFNSZG1Sd2o3T20tQD5J
ZExNU3wzJFJJUW05TnhIPV9yJEhgMlFiUnF7QTMlezMmWAp6SlU0ZmBiU1RCeGZBbHByT1hBRjNS
aVJ3NFR1RHI9eW9FcGBUZGJpdjxBNmcjQnJyfTV0RUEhYUByQClCTEltQkAKel5RQyh9a250WDBG
KT1aS0V1O2YhVCk2TiFKJC1Ba21CeU5JS2NudkVXKnF+QUpHRX1kOVVUJCNIOGVFMXpVezU4Cnpe
SFR9ZXo0UWNGd0BeclZtZD50Tj16S3FJJV94Nkd7UDRLVG5rd35eTnRPVVZONUdpT1Q2JjN4NTdF
KWwjWCF1cAp6YjxWPmhCTXkwUHdSbERgR2RzKVNhNnF3QV5aKlJSV1ZVfEtCdjtOdnFTSzcrTF4m
VGhhWCRYfDw2RWA7czBTKzYKei1xQkh0JDI0WVAkakJrMFpVIUsrQ2ZzIVl7XzVzKl5PbGpoR1hG
Nj03bEY3ajA9fGRzeGxTflYwdDBZWSM0ODByCnpAdVFAcTFPJiVuVm9ZZWRjS3xhRDBgJklwek95
ZXI/KnpReWFuQkEtJV8ybFQxVyhnVnglakAqdT9XdzA+TT5rWQp6UngtUUd7NHE1NTcoVUYqPzck
aWshIWhDX2lrPFdIakVJUUgkZVRsJmBGamZQVXp9ZX1lQWB4bD1ROUskVntMdjYKeipaeCFzTj9u
MSswZTdrfW1+SCFUPXxkJHhYeVFYRmUxTzZTN0poSnI1Qn5UZTdXfV5vTmJUfCE1dj9QRiY4bSFW
ClJART0mPiY7Y3ZjTT9ibjtgRU1UJEVvbEclCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165162</attachid>
            <date>2012-09-21 11:42:56 -0700</date>
            <delta_ts>2012-09-21 11:53:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120921114220.patch</filename>
            <type>text/plain</type>
            <size>76185</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U2ZmI2NzYxYmYzMTJj
M2Q5NWU5ZTUzYjY2ODVmNTY3YmQxOWRjYi4uMTMzYzg0MmY1ZDRkM2RkNGYyMDY5ZWZhMDkzZTky
ZTAwMjczZjJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kZXJDaHJvbWl1bQorCisgICAgICAgIFRo
aXMgaXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIGEgaW1hZ2UgZGVjb2Rlci4gVGhp
cyBpcworICAgICAgICBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgaXQgZ2VuZXJhdGVzIGEgbGF6aWx5
IGRlY29kZWQgU2tCaXRtYXAgdGhyb3VnaAorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisK
KyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWFuYWdl
cyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAgICAgICAg
ZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNv
ZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXpp
bHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRtYXAKKyAgICAgICAgY29udGFpbnMgYSBM
YXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbiBpbWFnZQor
ICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29k
aW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0
bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRz
IHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAg
ICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcg
aW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVj
b2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVz
dHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQor
ICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAg
ICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAg
ICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0IHRvIHZlcmlmeSBk
ZWZlcnJlZAorICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldHRpbmdzOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAg
ICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChTZXR0aW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6SW1hZ2VEZWNvZGVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFn
ZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1
bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpmaWxl
bmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6
ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9t
aXVtOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lU2l6
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1l
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OnJlcGV0aXRp
b25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVt
OjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJD
aHJvbWl1bTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbWFnZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fklt
YWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6
TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
enlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKwogMjAxMi0wOS0xOSAgQWxwaGEgTGFtICA8
aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtza2lhXSBEcmF3aW5nIGEgc3VicmVjdCBv
ZiBiaXRtYXAgaW1hZ2UgaXMgbWlzYWxpZ25lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA3NjQ2ZWM0MTQ2MmI0MWI3M2NkNjRiMjBkY2Q1N2ZkNWNlOTAxYzI0Li41M2U4ODVlZjllMmQ0
MGI4ZmU0NGYyZDE5NmFkNjE4MGY2ODQ0MjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDY5IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2Rp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
IG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhl
c2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0LmNwcC4gVGhl
eSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0
dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVk
IGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kZXJDaHJvbWl1bVRlc3QuZHJhd0lu
dG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIEltYWdlRGVjb2RlckNocm9taXVtVGVzdC5kcmF3
U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
cHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdz
SW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9JbWFn
ZURlY29kZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RlckNocm9taXVtVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCisyMDEyLTA5LTA3ICBB
bHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBXZWJJ
bWFnZSBzaG91bGQgdXNlIEltYWdlRGVjb2RlciBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGZvciBwcmVwYXJhdGlv
biBvZiBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgSW1hZ2VTb3VyY2Ugd2lsbCBi
ZSB1c2VkIGFzIGEgcG9ydGFsIHRvIGFjY2VzcyBkZWZlcnJlZCBpbWFnZSBkZWNvZGVyCisgICAg
ICAgIGJ5IEJpdG1hcEltYWdlLCBpdCBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgdGhyb3VnaCBX
ZWJLaXQgQVBJcy4KKworICAgICAgICBXZWJJbWFnZSBub3cgY2FsbHMgSW1hZ2VEZWNvZGVyIGRp
cmVjdGx5IHdoaWNoIGlzIHRoZSBhY3R1YWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgYW4g
aW1hZ2UgZGVjb2Rlci4KKworICAgICAgICBUZXN0czogV2ViSW1hZ2VUZXN0LlBOR0ltYWdlCisg
ICAgICAgICAgICAgICBXZWJJbWFnZVRlc3QuSUNPSW1hZ2UKKworICAgICAgICAqIFdlYktpdC5n
eXBpOgorICAgICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbWFnZTo6ZnJvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6ZnJhbWVzRnJv
bURhdGEpOgorICAgICAgICAqIHRlc3RzL1dlYkltYWdlVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0
OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2JsYWNrLWFuZC13aGl0ZS5pY286IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvd2hpdGUtMXgxLnBuZzogQWRkZWQuCisKIDIwMTItMDkt
MjAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFVucmV2aWV3ZWQgYnVpbGQgZml4LiB3ZWJraXRfdW5pdF90ZXN0cyBoYXZlIGdsb2JhbCBjb25z
dHJ1Y3RvcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjM3MjdmYTBmMmEwOTQwOTU5NGI1OTVjNGNm
ZGFiYmVjYTg2ZTdhMy4uYWUyZmQ3YTNlNTI2NGJmNTMzMjUzMDE0MjY2OTIxMzNiODM5NmJmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkwMyw2ICs0OTAzLDE2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rl
ckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRM
YXllckRlbGVnYXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCmluZGV4IGRmNDI1OTY0ZGU2MTFkYjUzOGY5Y2JiY2M3NjdkMjQyZTEzM2Vk
MTcuLmEyYTIwZGYxMWRmMDA1ZTY0YzAyZWI3NWM2NDIzOGJmNjgxMThlZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgIlN0b3JhZ2VNYXAu
aCIKICNpbmNsdWRlIDxsaW1pdHM+CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMzUsNiArMjM5LDkgQEAgU2V0dGluZ3M6OlNldHRp
bmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3dlYkF1ZGlvRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
YWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkQ2FudmFz
MmRFbmFibGVkKGZhbHNlKQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICwgbV9kZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX2xvYWREZWZlcnJp
bmdFbmFibGVkKHRydWUpCiAgICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChmYWxzZSkK
ICAgICAsIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKGZhbHNlKQpAQCAtOTM1LDYgKzk0
MiwxNyBAQCB2b2lkIFNldHRpbmdzOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKK3ZvaWQgU2V0dGluZ3M6OnNldERlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5p
dGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorI2Vu
ZGlmCisKIHZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShp
bnQgbnVtUGl4ZWxzKQogewogICAgIG1fbWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplID0g
bnVtUGl4ZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDgzOTg2ZjY5NzBiZmQyOGFlMjhl
ZmE2Yzg5ZDFmYWQ1NDk1NjhiMGEuLmI0NDE5OTBlMzhmMWM5NWFkMzlmNDQ2ZjYwNDMyYTNjNjk4
YzZjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTQzMiw2ICs0MzIsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJv
b2wpOwogICAgICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZDsgfQogCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKTsKKyAg
ICAgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOyB9CisjZW5kaWYKKwogICAgICAgICAvLyBO
dW1iZXIgb2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJEIGNhbnZhcyBpcyByZW5kZXJlZCBpbiBzb2Z0
d2FyZQogICAgICAgICAvLyBldmVuIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVk
LgogICAgICAgICAvLyBIYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgdXNlZnVsIGZvciBsYXJnZSBj
YW52YXNlcyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhlCkBAIC03NTgsNiArNzYzLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fd2ViQXVkaW9FbmFibGVkIDogMTsKICAgICAg
ICAgYm9vbCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBt
X2RlZmVycmVkQ2FudmFzMmRFbmFibGVkIDogMTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAg
ICAgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgOiAxOworI2VuZGlmCiAg
ICAgICAgIGJvb2wgbV9sb2FkRGVmZXJyaW5nRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV90
aWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fcGFnaW5hdGVEdXJp
bmdMYXlvdXRFbmFibGVkIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYxMjdmNjBkZTVm
ODFmOWI2OTk2Li44OTg5OTU2ZDhlM2E4M2M3NTllYTY4N2NmOTE2ZWQ5MWUzMTIyNDQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyArODIsNyBA
QCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUg
dG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAg
ICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBz
dGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRh
dGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAg
ICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KE5hdGl2ZUlt
YWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1Q
TElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFn
ZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVy
RGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIu
LjcyNjI5ZWY4ZWE5OTY4YzBjMjQ2NTE0ZDEzMGEwNGYxNTU1MDc5NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDgsMTEgKzQ4LDE5
IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKIHR5cGVkZWYgQ0dJbWFnZVNv
dXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCisjZWxpZiAhVVNFKFNLSUEpIHx8
ICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VE
ZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKICNlbmRpZgogCisjaWYgVVNFKFNLSUEpICYm
IFBMQVRGT1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGVyQ2hyb21pdW07Cit0eXBlZGVm
IEltYWdlRGVjb2RlckNocm9taXVtIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKK3R5cGVkZWYg
SW1hZ2VEZWNvZGVyQ2hyb21pdW0qIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vsc2UKK3R5cGVk
ZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBS
aWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBz
dXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0
YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUg
YW4gb3B0aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93
IGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FiN2Ri
NTg3OTE5ZmMzZjE2Y2MxODE3YWJhMjg3NzI3ZTM5OGZmOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9t
aXVtLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRGVjb2RlckNocm9taXVtOjpJ
bWFnZURlY29kZXJDaHJvbWl1bShJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBt
X2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihh
Y3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFnZURlY29k
ZXJDaHJvbWl1bSgpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUgaWYgaW1hZ2UKKyAgICAvLyBpcyBkZWZlcnJlZCBk
ZWNvZGVkLgorfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RlckNocm9taXVtKiBJbWFnZURlY29k
ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVh
bERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFB
bmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RlckNocm9taXVtKGFjdHVhbERlY29kZXIpOwor
fQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RlckNocm9taXVtKiBJbWFnZURlY29kZXJDaHJvbWl1
bTo6Y3JlYXRlKEltYWdlRGVjb2RlciogZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbmV3IEltYWdl
RGVjb2RlckNocm9taXVtKGRlY29kZXIpOworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGVyQ2hyb21p
dW06OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVy
LmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lv
bigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBJ
bWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICAvLyBPbmx5IGRlZmVyIGltYWdlIGRlY29kaW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJh
bWUgaW1hZ2UuIFRoZSByZWFzb24gaXMKKyAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1
c3VhbGx5IGFuaW1hdGVkIEdJRi4gQW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRt
YXBJbWFnZSB3aGljaCB1c2VzIHNvbWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG9lcyBzeW5j
aHJvbm91cworICAgIC8vIGltYWdlIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rl
ci5nZXQoKQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCkgPT0g
MQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgewor
ICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICAgICAgbV9maWxl
bmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKwor
ICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0
dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tC
aXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRT
a0JpdG1hcCgpLCBtX2RhdGEuZ2V0KCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgLy8g
Tk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGltcGwgdGhyZWFkIHRoaXMgc2hvdWxkIHN1
Ym1pdCB0aGUKKyAgICAgICAgLy8gZGF0YSB0byBpbXBsIHRocmVhZC4KKyAgICAgICAgbV9kYXRh
ID0gMDsKKworICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBk
aWRuJ3QgaGFwcGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29y
cmVjdC4gVGhpcyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAg
IC8vIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1l
LnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7
Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OnNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gZGF0YSB1bnRpbCBXZWJMYXp5
RGVjb2RpbmdJbWFnZSBpcyBjcmVhdGVkLCBhdAorICAgICAgICAvLyB3aGljaCBwb2ludCBtX2Rh
dGEgaXMgdHJhbnNmZXJlZC4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9hbGxE
YXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVCghbV9kYXRhLmdldCgpKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgp
LCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBOT1RFOiBXaGVuIGltYWdlIGlz
IGRlY29kZWQgb24gaW1wbCB0aHJlYWQgc3VibWl0cyBkYXRhIHRvIGltcGwKKyAgICAgICAgLy8g
dGhyZWFkIGhlcmUuCisgICAgfQorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjppc1Np
emVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0
cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2RlckNocm9taXVtOjpzaXplKCkgY29uc3QKK3sK
KyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6ZSBJbWFnZURl
Y29kZXJDaHJvbWl1bTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAgICAv
LyB1bmlmb3JtIHNpemUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVj
b2RlckNocm9taXVtOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kZXJDaHJvbWl1bTo6cmVwZXRpdGlvbkNvdW50
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1h
dGlvbk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5Cisg
ICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworfQorCitib29sIEltYWdlRGVjb2RlckNo
cm9taXVtOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAg
aWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rl
ci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9u
aXplIHRoaXMgc3RhdGUgd2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAg
IC8vIGFjdHVhbGx5IGRlY29kZWQuIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJt
cyBvZiByZW5kZXJpbmcgYnV0CisgICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1p
emVkIHJlbmRlcmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVk
IEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1f
YWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJh
bWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlD
YWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUxZDg1ZDg0MzA5ZTQ2MWUxMGY5ODRiNDcyMDAyYWQwNGUzNmNlMGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdl
RGVjb2RlckNocm9taXVtX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVyQ2hyb21pdW1faAorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RlckNocm9taXVtIHsK
K3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGVyQ2hyb21pdW0oKTsKKyAgICBzdGF0aWMgSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKKworICAgIC8vIFVzZWQgaW4gdGVzdCBvbmx5LiBPd25lcnNoaXAgb2YgZGVjb2RlciBpcyB0
cmFuc2ZlcnJlZC4KKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShJbWFn
ZURlY29kZXIqKTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworCisg
ICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICB2
b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisK
KyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0Owor
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHNp
emVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OworICAg
IHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNB
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1h
Z2VEZWNvZGVyQ2hyb21pdW0oSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsKKworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOwor
ICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAgIFN0cmluZyBt
X2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAgSW1hZ2VGcmFt
ZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMxYzc4M2Q4
MzEyZjQxZTE3ZTc5YmE3NjVkNWE1YTJkNjUwYjc2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5j
cHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1Jl
Y3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29w
ZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugeworc3Rh
dGljIGNvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworSW1hZ2VEZWNvZGlu
Z1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5z
dGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUp
Cit7CisgICAgaWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3Rh
bmNlT25NYWluVGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29k
aW5nU3RvcmU7Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZSgpCisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5n
U3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVz
KG1fZnJhbWVHZW5lcmF0b3JzKTsKKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lQ2Fj
aGUpOworfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIHNfaW5zdGFuY2VPbk1h
aW5UaHJlYWQ7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdl
RGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30KKworLy8gc3RhdGljCit2b2lk
IEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKQoreworICAgIHNldEluc3RhbmNlT25NYWlu
VGhyZWFkKDApOworfQorCisvLyBzdGF0aWMKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xh
enlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5w
aXhlbFJlZigpCisgICAgICAgICAgICAmJiBiaXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAg
ICAgICAgICAgICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVmKCktPmdldFVSSSgpLCBsYWJlbExh
enlEZWNvZGVkLCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkpOworfQorCitTa0JpdG1hcCBJbWFn
ZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoV1RGOjpQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXplOjpNYWtlKGRlY29kZXItPnNp
emUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFTU0VSVCghZnVs
bFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpOwor
CisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1bGxTaXplKTsKKwor
ICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNl
cyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBTa0JpdG1hcCBiaXRtYXA7
CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGZ1bGxT
aXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxSZWYo
bmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxsU2l6ZSwgZnVsbFJlY3QpKTsK
KyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQpOworICAgIGJp
dG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZyb20gcmVjb3JkaW5n
IHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5n
U3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KSBj
b25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgTGF6eURl
Y29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxS
ZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2FsZWQo
bG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYmICFwaXhlbFJl
Zi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICBTa0lTaXplIGlt
YWdlU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7
CisKKyAgICAvLyBOb3RlOiBCZWNhdXNlIHJvdyBieXRlcyBpcyBmaXhlZCB0byBTa0JpdG1hcCB0
aGlzIG1lYW5zIHdlIGhhdmUgdG8gc2NhbGUgdGhlCisgICAgLy8gZW50aXJlIGltYWdlLgorICAg
IHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVkQml0
bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93Qnl0
ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVs
UmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKTsKKyAgICByZXNp
emVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUgZnJvbSByZWNv
cmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZh
bGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERhdGEo
ZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmFk
ZERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAg
ICAvLyBUT0RPOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9j
a1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3Qm
IHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKwor
ICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IGxvb2t1cEZyYW1lR2VuZXJhdG9y
KGlkKTsKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gZ2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAv
LyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQu
CisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShpZCwg
ZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJpdG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkg
eworICAgICAgICAvLyBGSVhNRTogUGl4ZWxzIGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVy
IGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAgICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3du
ZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0
b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVz
IHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJh
bWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAg
IGZyYW1lQ2FjaGUgPSBuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdl
dFNrQml0bWFwKCksIHRydWUpOworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChmcmFt
ZUNhY2hlKTsKKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNv
ZGluZyBlcnJvci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkp
OworICAgICAgICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBp
ZiAoZnVsbFNpemUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlz
IGRvbmUgb24tdGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAv
LyBhZnRlciB1c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVk
IGZyYWdtZW50LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRp
b25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9T
Mywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9s
b2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2Nr
ZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxz
KCk7CisgICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vi
c2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0
bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgp
ICYmIFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJh
dG9yKFdURjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgSW1hZ2VG
cmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2Rl
cik7CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQs
IGdlbmVyYXRvcik7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdTdG9y
ZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAgIEltYWdlRnJhbWVH
ZW5lcmF0b3IqIGdlbmVyYXRvciA9IG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7CisgICAgQVNT
RVJUKGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGdlbmVyYXRvcjsKK30KKworSW1hZ2VGcmFtZUdl
bmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBT
a0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1h
cCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVj
b2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJh
bWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hl
W2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1l
Q2FjaGVbaV07CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ2FjaGVbaV07CisgICAgICAgICAgICBtX2Zy
YW1lQ2FjaGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRhNmZkMDA3OTdkNTM0MTgyYjFkNzg4ODZiMWZhYjc1MjliNGE3NTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbWFnZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAorCisj
aW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1Np
emUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFt
ZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUg
eworcHVibGljOgorICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3Jl
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQor
ICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3Rv
cmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIGJv
b2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tCaXRtYXAgY3JlYXRl
TGF6eURlY29kZWRTa0JpdG1hcChXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAg
U2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBTaGFyZWRCdWZmZXIqLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCBhZGREYXRhKGNvbnN0IFNrQml0bWFwJiwgU2hh
cmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9jayBhbmQgdW5s
b2NrIHN1cHBvcnRzIG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRoZW0gaSBwYWly
LgorICAgIHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
LCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRP
blZhbGlkVGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihXVEY6
OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9v
a3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdl
RnJhbWVDYWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpOworCisgICAgV1RGOjpIYXNoTWFwPGludCwgSW1hZ2VGcmFtZUdl
bmVyYXRvcio+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFdURjo6VmVjdG9yPEltYWdlRnJhbWVD
YWNoZSo+IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0JpdG1hcCBt
X2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2MyYjI3ZjQx
ZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZy
YW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2FjaGU6On5J
bWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNo
ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3NjYWxl
ZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1faXNDb21w
bGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNFcXVhbChp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlk
ID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRlYjZkN2QxNDgy
ZTcyMjY5ZTIzZmI2NzU3NjVlODZmNzA4MzEwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVmaW5l
IEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNr
UmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlRnJhbWVDYWNoZSB7CitwdWJsaWM6CisgICAgLy8gSW1hZ2VGcmFtZUNhY2hlIGlz
IGEgc2NhbGVkIHZlcnNpb24gb2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorICAgIC8vIGJ5
IHR3byB0aGluZ3M6CisgICAgLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0
IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKyAgICAvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4K
KyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBj
b25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVDYWNoZSgp
OworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFw
OyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBi
b29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAg
ICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKworcHJp
dmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0Jp
dG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRhMWUyZGRlYjZkYjczOWRhNzYyNTdhZmU4MmNiNTI0NDg3YzE3YjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRv
cihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNv
ZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lk
dGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJh
dG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsK
K30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFdURjo6UGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0YSA9
IGRhdGE7CisgICAgaWYgKG1fZGVjb2Rlci5nZXQoKSkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXRE
YXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNjc2OGU0
ZTFmM2E1YjU5YzFiYjM3ODIwOTgyOTE4NDIzYWM2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdlbmVyYXRv
cl9oCisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tTaXplLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVy
YXRvciB7CitwdWJsaWM6CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVz
IHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIo
KTsKKyAgICB2b2lkIHNldERhdGEoV1RGOjpQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6Ok93blB0cjxJbWFnZURlY29kZXI+
IG1fZGVjb2RlcjsKKyAgICBXVEY6OlJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBT
a0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZmOTI5NzcxZWNi
ZDVmOTA4ZmExZDM0YmZjZmYxOTk3MzNlYzMwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNw
cApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUu
aCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitTS19ERUNMQVJFX0dMT0JBTF9NVVRF
WChnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
TGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorICAgIDog
U2tQaXhlbFJlZigmZ0xhenlEZWNvZGluZ0ltYWdlUmVmTXV0ZXgpCisgICAgLCBtX2lkKGlkKQor
ICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3NjYWxlZFN1YnNldChzY2Fs
ZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURlY29kaW5nUGl4
ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZChjb25z
dCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnVsbFNpemUgIT0gbV9z
Y2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAhPSBtX3NjYWxlZFN1YnNl
dC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3NjYWxlZFN1YnNldC5oZWln
aHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0Nv
bG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgcmV0
dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVs
cyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFp
blRocmVhZCgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCktPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxv
Y2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg5ODFmZDljZjJlZWEyMTRkY2NlOTk5ZjI3NzJiYjAxMzI5ZGQwNzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlE
ZWNvZGluZ1BpeGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5j
bHVkZSAiU2tGbGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisj
aW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsK
KyAgcHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFs
IH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxF
X09CSkVDVCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9v
bCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0Ns
aXBwZWQoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7
CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9u
TG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbV9p
ZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5n
UGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCAxNTBhYzhhMzQ5ZmFlODYwYTBkNzFm
MmY4ZTI0ZDNkODIxMWQwODEwLi41YTdiNzMwZTdmODdkZjU4OTllYTBmZTMwYzJjNjY1Y2E1NTFm
YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0zNyw2ICszNywxMSBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRp
dmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCkBAIC03MCw2ICs3NSwxMSBAQCBib29sIE5h
dGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFn
ZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRt
YXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJ
bWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1h
Z2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVj
b2RlZFNrQml0bWFwKG1faW1hZ2UsIHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQp
OworI2VuZGlmCisKICAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBz
Y2FsZWRJbWFnZVN1YnNldCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNv
bXBsZXRlKCkKICAgICAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2FtcGxpbmcoc2NhbGVk
SW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGVhNjQ5NWZlZTY0
NWNjNWY5ZWJlNWVlNGE4ZTIzMTRkZGZiMGEyOGQuLjhiMGM1NjJkZGZmMmEyZDg1OTBkMjkxMWMx
YTkzYWZlMDM5M2JmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1LDE5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSAr
IHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAg
IHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFwLCAxKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAg
aW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMTQw
NTM5ZjJkNGMxYmZmOTU2Y2Y3ZWUwMTVkMmJlOGQ0M2FiY2RmOS4uYjBhZGRlZjk0OWQ1NGMyMjk0
OWJhMTlmMjE2YTkzZDMwMzgxZDNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC03Nyw5ICs3NywxMSBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdl
RGVjb2RlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMv
S2V5Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xp
bmtIaWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlzdGVuZXJMZWFrVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5k
ZXggNWZmMjA2YjBhNTdlNDBlMjdlZDI1MTVkMGMxMjA4NDU5MmFlOTk3Mi4uMGNjYzdjYWFjMjJk
NzYzNTM1YTU2YjBkYjY2NTM1NDVmMGM2OTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggOTMzMWQwNTNhMmQ1YmY0NGI5NWMyZjRhNjA2Y2U5
YmMxZjM3YjE2MC4uYzIyYjQ0NDRjMWU5MDgzOTBlZWE1MDFhODhmYWQxY2Q5YWE2YzZiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCkBAIC0xNjUsNiArMTY2
LDcgQEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQogI2VuZGlmCiAgICAgc193ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQgPSAwOworICAgIFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KTsKICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsKICAgICBXZWJQcmVyZW5kZXJpbmdTdXBwb3J0
OjpzaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKaW5kZXggNGNjM2VmNzI3YWE1OGQwNzQ0ODBiMTM2OTQxOGNmZTVmYjBiYTkz
ZS4uZDI3OTQ1ODQ5ZmQ5ZGRiNzFmM2IzYTQwZGJkMzNlMjhhOTE2NzgxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC00NjksNiArNDY5
LDExIEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChi
b29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IGU5ZTAxYmZjZDc0NmUxNTA2MWE3MzI3ZmFlYjUy
NTI4Zjk3NTM2YmIuLjgwN2FmYzk0NzQyNmEyMDAyNzk3NGY5ZGE2NDNiMjAxZTVhNWU0NWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03Niw2
ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9taXVtVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9taXVtVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDBlNmY1NTI3MWVkNjhhMTlhZjQxYzU1Yzg5YjA4NzJlZDUwNjdhMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RlckNocm9taXVtLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyQ2hyb21p
dW1UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uTWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdl
RGVjb2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOwor
ICAgICAgICBtX2xhenlEZWNvZGVyID0gYWRvcHRQdHIoSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNy
ZWF0ZShtX2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9jYW52YXNCaXRtYXAuc2V0Q29uZmln
KFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApOworICAgICAgICBtX2NhbnZh
cy5zZXRCaXRtYXBEZXZpY2UobV9jYW52YXNCaXRtYXApOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRk
b3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1
YWxEZWNvZGVyOworICAgIE93blB0cjxJbWFnZURlY29kZXJDaHJvbWl1bT4gbV9sYXp5RGVjb2Rl
cjsKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOworICAgIFNrQml0bWFwIG1fY2FudmFzQml0bWFw
OworICAgIFNrQ2FudmFzIG1fY2FudmFzOworfTsKKworVEVTVF9GKEltYWdlRGVjb2RlckNocm9t
aXVtVGVzdCwgZHJhd0ludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tp
YT4gaW1hZ2UoYWRvcHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5h
c05ld05hdGl2ZUltYWdlKCkpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXpl
KCkud2lkdGgoKSwgaW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUShtX2Fj
dHVhbERlY29kZXItPnNpemUoKS5oZWlnaHQoKSwgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbWFnZS0+Yml0bWFwKCkuaXNJbW11dGFibGUoKSk7CisKKyAgICBTa0NhbnZhcyogdGVt
cENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENh
bnZhcy0+ZHJhd0JpdG1hcChpbWFnZS0+Yml0bWFwKCksIDAsIDApOworICAgIG1fcGljdHVyZS5l
bmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1
ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVy
ZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQoKSk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kZXJDaHJvbWl1bVRlc3QsIGRyYXdTY2Fs
ZWRJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFk
b3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJ
bWFnZSgpKSk7CisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gaW1hZ2UtPnJlc2l6ZWRCaXRt
YXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0goNTAsIDUxKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1hcC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoc2Nh
bGVkQml0bWFwLmlzSW1tdXRhYmxlKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2NhbGVkQml0bWFw
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MSwgc2NhbGVkQml0bWFwLmhlaWdodCgpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgp
KTsKKworICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5n
KDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJpdG1hcCwgMCwg
MCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2Fj
dHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMu
ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVy
LT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRiMzExMDFkMDViMzMwNzMyYzJmZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tJbWFnZURlY29kZXJfaAorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTW9j
a0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIE1vY2tJ
bWFnZURlY29kZXIoKQorICAgICAgICA6IEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFQ
cmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKQor
ICAgICAgICAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0KKworICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAibW9jayI7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90KQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50OworCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICB9CisKKyAg
ICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNb2Nr
SW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5NzVjZjFmMDk0YjY3MWU1ZTVjNWMyNjYxN2MwMmVkNjFiNzI2MmViLi45OWNk
ODJmOGJiNWU1NjEyMWE2NWU3ZTQyNWZmNDFmYTU1M2NhMTYyIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDkt
MDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVj
b2RpbmcgdG8gRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToK
KyAgICAgICAgKFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OnNldERl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAg
IChXZWJQcmVmZXJlbmNlczo6cmVzZXQpOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmFwcGx5
VG8pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmg6
CisgICAgICAgIChXZWJQcmVmZXJlbmNlcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVtUG9ydC52aXJ0
dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAxMi0wOS0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRW5hYmxlIG1vcmUgY2xhbmcgd2FybmluZ3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCAwOTQ5YWE3YTY3ZWFkN2IxNTk4NzZjNTg5NzQwN2Y5YjkxMzc5ODUxLi5iNWQyMWVlNTUx
MGYwZTQzNDU0OTgzZWY1OWNjNjM1ZWM5MDIzZjM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02Myw2ICs2Myw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJs
ZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0
aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUt
cGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJy
ZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwog
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwog
c3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7
CkBAIC0xMzEsNiArMTMyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAg
ICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVy
YXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5h
YmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9
IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xNzks
NiArMTgxLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRp
b24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFy
Z3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRp
bGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBv
cHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0g
b3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMTcsNiArMjIxLDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBz
aGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5h
YmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBh
aW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEph
dmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NP
cHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZTVl
OWRlZDZhZTMwZjE5ZWFjYjVlZjA4NGY4ZDg3YzljNGU0NjNiZi4uYWJjNmMxMzQyMGM2NzAxODFm
MDYyZTE2ZTBmYjhlZDllNGRlNDZkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNl
KQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQog
ICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMjgsNiArMjI5LDcgQEAgdm9pZCBU
ZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZz
LmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9h
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVm
cy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuaAppbmRleCA0MDUwMzRhNGUxMzk4YTZmYThiNTIxOTRmODQxMzUxMWU5YmVmOWY4
Li44MGVmYWE5NDc5YWM0YjE5MWU2YzExM2ZhMTkwYzg2Mjc1NzgwMDk1IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM2LDYgKzEzNiw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVk
KGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lm
IGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVz
ZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZl
bnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzMiw2ICsyMzMsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNj
ZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJs
ZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJl
ZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJl
c3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBy
ZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5NzYyNGQxOWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5Li4w
OTZjOWZiOGZjZmVmODVjNDEwNDg5YjliM2ZhOTM5MjljN2E1ZjEzIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2
LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNF
bmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsK
ICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1
c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlBy
ZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFj
Y2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAg
ICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2Nl
bGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGlu
Z3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVk
KG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERl
dmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1
M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVm
ZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJl
bmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRl
ZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVk
aWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0Vu
YWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggNDRj
OThhMzgzYTIwZjM4NTI0OWIzMGU4YWQ1YzQ5YjA2ODlhY2IyNC4uMDEyYmYyYzI4NGZkNDdhMjk3
YWIxYTBlNzkxMTNkMWZmNjI2M2VmOSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zNzMsOSArMzczLDkgQEAgY2xh
c3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC90aHJlYWRlZC9jb21wb3NpdGluZy93ZWJnbCcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZy93ZWJnbCcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtdGhyZWFkZWQtY29tcG9zaXRpbmcnXSksCi0g
ICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dw
dS9mYXN0L2hpZHBpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaGlkcGkn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZm9yY2UtY29tcG9zaXRpbmctbW9k
ZSddKSwKKyAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxl
LWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nJywg
Jy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAgICAgIwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGE4NjY5OGUwZGVlYjgyYjQ1ZmM2ZWMzOTA5NDQ0N2I0ZDk3ZmNlMTEuLjJlOWI1ODdlZGUyODVh
M2RiMWYzMmJjNmVkZjEwM2NjYThhNzRlZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0w
OS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBm
b3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKwor
ICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdp
bGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1w
ZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVB
RE1FLnR4dDogQWRkZWQuCisKIDIwMTItMDgtMjcgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbc2tpYV0gRHJhd2luZyBhIHN1YnJlY3Qgb2YgYml0bWFwIGltYWdl
IGlzIG1pc2FsaWduZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRl
cyBpbiB0aGlzIGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNv
ZGUgcGF0aAorIyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165165</attachid>
            <date>2012-09-21 11:53:58 -0700</date>
            <delta_ts>2012-10-04 19:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20120921115323.patch</filename>
            <type>text/plain</type>
            <size>75982</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U2ZmI2NzYxYmYzMTJj
M2Q5NWU5ZTUzYjY2ODVmNTY3YmQxOWRjYi4uMTMzYzg0MmY1ZDRkM2RkNGYyMDY5ZWZhMDkzZTky
ZTAwMjczZjJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kZXJDaHJvbWl1bQorCisgICAgICAgIFRo
aXMgaXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIGEgaW1hZ2UgZGVjb2Rlci4gVGhp
cyBpcworICAgICAgICBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgaXQgZ2VuZXJhdGVzIGEgbGF6aWx5
IGRlY29kZWQgU2tCaXRtYXAgdGhyb3VnaAorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisK
KyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWFuYWdl
cyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAgICAgICAg
ZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNv
ZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXpp
bHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRtYXAKKyAgICAgICAgY29udGFpbnMgYSBM
YXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbiBpbWFnZQor
ICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29k
aW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0
bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRz
IHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAg
ICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcg
aW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVj
b2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVz
dHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQor
ICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAg
ICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAg
ICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0IHRvIHZlcmlmeSBk
ZWZlcnJlZAorICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldHRpbmdzOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAg
ICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChTZXR0aW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6SW1hZ2VEZWNvZGVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFn
ZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1
bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpmaWxl
bmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6
ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9t
aXVtOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVtOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1lU2l6
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OmZyYW1l
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQ2hyb21pdW06OnJlcGV0aXRp
b25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJDaHJvbWl1bTo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckNocm9taXVt
OjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJD
aHJvbWl1bTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbWFnZURlY29kZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fklt
YWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6
TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
enlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKwogMjAxMi0wOS0xOSAgQWxwaGEgTGFtICA8
aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtza2lhXSBEcmF3aW5nIGEgc3VicmVjdCBv
ZiBiaXRtYXAgaW1hZ2UgaXMgbWlzYWxpZ25lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA3NjQ2ZWM0MTQ2MmI0MWI3M2NkNjRiMjBkY2Q1N2ZkNWNlOTAxYzI0Li41M2U4ODVlZjllMmQ0
MGI4ZmU0NGYyZDE5NmFkNjE4MGY2ODQ0MjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDY5IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2Rp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
IG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhl
c2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0LmNwcC4gVGhl
eSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0
dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVk
IGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kZXJDaHJvbWl1bVRlc3QuZHJhd0lu
dG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIEltYWdlRGVjb2RlckNocm9taXVtVGVzdC5kcmF3
U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
cHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdz
SW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9JbWFn
ZURlY29kZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoSW1hZ2VEZWNvZGVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RlckNocm9taXVtVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCisyMDEyLTA5LTA3ICBB
bHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBXZWJJ
bWFnZSBzaG91bGQgdXNlIEltYWdlRGVjb2RlciBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGZvciBwcmVwYXJhdGlv
biBvZiBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgSW1hZ2VTb3VyY2Ugd2lsbCBi
ZSB1c2VkIGFzIGEgcG9ydGFsIHRvIGFjY2VzcyBkZWZlcnJlZCBpbWFnZSBkZWNvZGVyCisgICAg
ICAgIGJ5IEJpdG1hcEltYWdlLCBpdCBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgdGhyb3VnaCBX
ZWJLaXQgQVBJcy4KKworICAgICAgICBXZWJJbWFnZSBub3cgY2FsbHMgSW1hZ2VEZWNvZGVyIGRp
cmVjdGx5IHdoaWNoIGlzIHRoZSBhY3R1YWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgYW4g
aW1hZ2UgZGVjb2Rlci4KKworICAgICAgICBUZXN0czogV2ViSW1hZ2VUZXN0LlBOR0ltYWdlCisg
ICAgICAgICAgICAgICBXZWJJbWFnZVRlc3QuSUNPSW1hZ2UKKworICAgICAgICAqIFdlYktpdC5n
eXBpOgorICAgICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbWFnZTo6ZnJvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6ZnJhbWVzRnJv
bURhdGEpOgorICAgICAgICAqIHRlc3RzL1dlYkltYWdlVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0
OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2JsYWNrLWFuZC13aGl0ZS5pY286IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvd2hpdGUtMXgxLnBuZzogQWRkZWQuCisKIDIwMTItMDkt
MjAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFVucmV2aWV3ZWQgYnVpbGQgZml4LiB3ZWJraXRfdW5pdF90ZXN0cyBoYXZlIGdsb2JhbCBjb25z
dHJ1Y3RvcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjM3MjdmYTBmMmEwOTQwOTU5NGI1OTVjNGNm
ZGFiYmVjYTg2ZTdhMy4uYWUyZmQ3YTNlNTI2NGJmNTMzMjUzMDE0MjY2OTIxMzNiODM5NmJmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkwMyw2ICs0OTAzLDE2IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rl
ckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRM
YXllckRlbGVnYXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCmluZGV4IGRmNDI1OTY0ZGU2MTFkYjUzOGY5Y2JiY2M3NjdkMjQyZTEzM2Vk
MTcuLmEyYTIwZGYxMWRmMDA1ZTY0YzAyZWI3NWM2NDIzOGJmNjgxMThlZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgIlN0b3JhZ2VNYXAu
aCIKICNpbmNsdWRlIDxsaW1pdHM+CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMzUsNiArMjM5LDkgQEAgU2V0dGluZ3M6OlNldHRp
bmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3dlYkF1ZGlvRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
YWNjZWxlcmF0ZWRDYW52YXMyZEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkQ2FudmFz
MmRFbmFibGVkKGZhbHNlKQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICwgbV9kZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX2xvYWREZWZlcnJp
bmdFbmFibGVkKHRydWUpCiAgICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChmYWxzZSkK
ICAgICAsIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKGZhbHNlKQpAQCAtOTM1LDYgKzk0
MiwxNyBAQCB2b2lkIFNldHRpbmdzOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVu
YWJsZWQpCiAgICAgbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKK3ZvaWQgU2V0dGluZ3M6OnNldERlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5p
dGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorI2Vu
ZGlmCisKIHZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShp
bnQgbnVtUGl4ZWxzKQogewogICAgIG1fbWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplID0g
bnVtUGl4ZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDgzOTg2ZjY5NzBiZmQyOGFlMjhl
ZmE2Yzg5ZDFmYWQ1NDk1NjhiMGEuLmI0NDE5OTBlMzhmMWM5NWFkMzlmNDQ2ZjYwNDMyYTNjNjk4
YzZjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTQzMiw2ICs0MzIsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJv
b2wpOwogICAgICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWZlcnJlZENhbnZhczJkRW5hYmxlZDsgfQogCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKTsKKyAg
ICAgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOyB9CisjZW5kaWYKKwogICAgICAgICAvLyBO
dW1iZXIgb2YgcGl4ZWxzIGJlbG93IHdoaWNoIDJEIGNhbnZhcyBpcyByZW5kZXJlZCBpbiBzb2Z0
d2FyZQogICAgICAgICAvLyBldmVuIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVk
LgogICAgICAgICAvLyBIYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgdXNlZnVsIGZvciBsYXJnZSBj
YW52YXNlcyB3aGVyZSBpdCBjYW4gYXZvaWQgdGhlCkBAIC03NTgsNiArNzYzLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fd2ViQXVkaW9FbmFibGVkIDogMTsKICAgICAg
ICAgYm9vbCBtX2FjY2VsZXJhdGVkQ2FudmFzMmRFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBt
X2RlZmVycmVkQ2FudmFzMmRFbmFibGVkIDogMTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAg
ICAgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgOiAxOworI2VuZGlmCiAg
ICAgICAgIGJvb2wgbV9sb2FkRGVmZXJyaW5nRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV90
aWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fcGFnaW5hdGVEdXJp
bmdMYXlvdXRFbmFibGVkIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYxMjdmNjBkZTVm
ODFmOWI2OTk2Li44OTg5OTU2ZDhlM2E4M2M3NTllYTY4N2NmOTE2ZWQ5MWUzMTIyNDQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyQ2hyb21pdW0uaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyArODIsNyBA
QCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUg
dG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAg
ICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBz
dGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRh
dGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAg
ICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KE5hdGl2ZUlt
YWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1Q
TElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFn
ZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVy
RGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIu
LjcyNjI5ZWY4ZWE5OTY4YzBjMjQ2NTE0ZDEzMGEwNGYxNTU1MDc5NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDgsMTEgKzQ4LDE5
IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKIHR5cGVkZWYgQ0dJbWFnZVNv
dXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCisjZWxpZiAhVVNFKFNLSUEpIHx8
ICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VE
ZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKICNlbmRpZgogCisjaWYgVVNFKFNLSUEpICYm
IFBMQVRGT1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGVyQ2hyb21pdW07Cit0eXBlZGVm
IEltYWdlRGVjb2RlckNocm9taXVtIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKK3R5cGVkZWYg
SW1hZ2VEZWNvZGVyQ2hyb21pdW0qIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vsc2UKK3R5cGVk
ZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBS
aWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBz
dXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0
YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUg
YW4gb3B0aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93
IGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FiN2Ri
NTg3OTE5ZmMzZjE2Y2MxODE3YWJhMjg3NzI3ZTM5OGZmOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9t
aXVtLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRGVjb2RlckNocm9taXVtOjpJ
bWFnZURlY29kZXJDaHJvbWl1bShJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBt
X2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihh
Y3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNvZGVyQ2hyb21pdW06On5JbWFnZURlY29k
ZXJDaHJvbWl1bSgpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUgaWYgaW1hZ2UKKyAgICAvLyBpcyBkZWZlcnJlZCBk
ZWNvZGVkLgorfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RlckNocm9taXVtKiBJbWFnZURlY29k
ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVh
bERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFB
bmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RlckNocm9taXVtKGFjdHVhbERlY29kZXIpOwor
fQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RlckNocm9taXVtKiBJbWFnZURlY29kZXJDaHJvbWl1
bTo6Y3JlYXRlKEltYWdlRGVjb2RlciogZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbmV3IEltYWdl
RGVjb2RlckNocm9taXVtKGRlY29kZXIpOworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGVyQ2hyb21p
dW06OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVy
LmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lv
bigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBJ
bWFnZURlY29kZXJDaHJvbWl1bTo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICAvLyBPbmx5IGRlZmVyIGltYWdlIGRlY29kaW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJh
bWUgaW1hZ2UuIFRoZSByZWFzb24gaXMKKyAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1
c3VhbGx5IGFuaW1hdGVkIEdJRi4gQW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRt
YXBJbWFnZSB3aGljaCB1c2VzIHNvbWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG9lcyBzeW5j
aHJvbm91cworICAgIC8vIGltYWdlIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rl
ci5nZXQoKQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCkgPT0g
MQorICAgICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgewor
ICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICAgICAgbV9maWxl
bmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKwor
ICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0
dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tC
aXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRT
a0JpdG1hcCgpLCBtX2RhdGEuZ2V0KCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgLy8g
Tk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGltcGwgdGhyZWFkIHRoaXMgc2hvdWxkIHN1
Ym1pdCB0aGUKKyAgICAgICAgLy8gZGF0YSB0byBpbXBsIHRocmVhZC4KKyAgICAgICAgbV9kYXRh
ID0gMDsKKworICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBk
aWRuJ3QgaGFwcGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29y
cmVjdC4gVGhpcyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAg
IC8vIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1l
LnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7
Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OnNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gZGF0YSB1bnRpbCBXZWJMYXp5
RGVjb2RpbmdJbWFnZSBpcyBjcmVhdGVkLCBhdAorICAgICAgICAvLyB3aGljaCBwb2ludCBtX2Rh
dGEgaXMgdHJhbnNmZXJlZC4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9hbGxE
YXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVCghbV9kYXRhLmdldCgpKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgp
LCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBOT1RFOiBXaGVuIGltYWdlIGlz
IGRlY29kZWQgb24gaW1wbCB0aHJlYWQgc3VibWl0cyBkYXRhIHRvIGltcGwKKyAgICAgICAgLy8g
dGhyZWFkIGhlcmUuCisgICAgfQorfQorCitib29sIEltYWdlRGVjb2RlckNocm9taXVtOjppc1Np
emVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0
cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2RlckNocm9taXVtOjpzaXplKCkgY29uc3QKK3sK
KyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6ZSBJbWFnZURl
Y29kZXJDaHJvbWl1bTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAgICAv
LyB1bmlmb3JtIHNpemUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVj
b2RlckNocm9taXVtOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kZXJDaHJvbWl1bTo6cmVwZXRpdGlvbkNvdW50
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1h
dGlvbk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5Cisg
ICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmICht
X2FjdHVhbERlY29kZXIuZ2V0KCkpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworfQorCitib29sIEltYWdlRGVjb2RlckNo
cm9taXVtOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAg
aWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rl
ci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9u
aXplIHRoaXMgc3RhdGUgd2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAg
IC8vIGFjdHVhbGx5IGRlY29kZWQuIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJt
cyBvZiByZW5kZXJpbmcgYnV0CisgICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1p
emVkIHJlbmRlcmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVk
IEltYWdlRGVjb2RlckNocm9taXVtOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1f
YWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJh
bWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlD
YWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kZXJDaHJvbWl1bS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUxZDg1ZDg0MzA5ZTQ2MWUxMGY5ODRiNDcyMDAyYWQwNGUzNmNlMGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdl
RGVjb2RlckNocm9taXVtX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVyQ2hyb21pdW1faAorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RlckNocm9taXVtIHsK
K3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGVyQ2hyb21pdW0oKTsKKyAgICBzdGF0aWMgSW1hZ2VE
ZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKKworICAgIC8vIFVzZWQgaW4gdGVzdCBvbmx5LiBPd25lcnNoaXAgb2YgZGVjb2RlciBpcyB0
cmFuc2ZlcnJlZC4KKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyQ2hyb21pdW0qIGNyZWF0ZShJbWFn
ZURlY29kZXIqKTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworCisg
ICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICB2
b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisK
KyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0Owor
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHNp
emVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OworICAg
IHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNB
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1h
Z2VEZWNvZGVyQ2hyb21pdW0oSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsKKworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOwor
ICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAgIFN0cmluZyBt
X2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAgSW1hZ2VGcmFt
ZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMxYzc4M2Q4
MzEyZjQxZTE3ZTc5YmE3NjVkNWE1YTJkNjUwYjc2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5j
cHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1Jl
Y3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29w
ZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugeworc3Rh
dGljIGNvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworSW1hZ2VEZWNvZGlu
Z1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5z
dGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUp
Cit7CisgICAgaWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3Rh
bmNlT25NYWluVGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29k
aW5nU3RvcmU7Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZSgpCisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5n
U3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVz
KG1fZnJhbWVHZW5lcmF0b3JzKTsKKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lQ2Fj
aGUpOworfQorCisvLyBzdGF0aWMKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIHNfaW5zdGFuY2VPbk1h
aW5UaHJlYWQ7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdl
RGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30KKworLy8gc3RhdGljCit2b2lk
IEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKQoreworICAgIHNldEluc3RhbmNlT25NYWlu
VGhyZWFkKDApOworfQorCisvLyBzdGF0aWMKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xh
enlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5w
aXhlbFJlZigpCisgICAgICAgICAgICAmJiBiaXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAg
ICAgICAgICAgICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVmKCktPmdldFVSSSgpLCBsYWJlbExh
enlEZWNvZGVkLCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkpOworfQorCitTa0JpdG1hcCBJbWFn
ZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoV1RGOjpQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXplOjpNYWtlKGRlY29kZXItPnNp
emUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFTU0VSVCghZnVs
bFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpOwor
CisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1bGxTaXplKTsKKwor
ICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNl
cyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBTa0JpdG1hcCBiaXRtYXA7
CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGZ1bGxT
aXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxSZWYo
bmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxsU2l6ZSwgZnVsbFJlY3QpKTsK
KyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQpOworICAgIGJp
dG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZyb20gcmVjb3JkaW5n
IHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5n
U3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KSBj
b25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgTGF6eURl
Y29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxS
ZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2FsZWQo
bG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYmICFwaXhlbFJl
Zi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICBTa0lTaXplIGlt
YWdlU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7
CisKKyAgICAvLyBOb3RlOiBCZWNhdXNlIHJvdyBieXRlcyBpcyBmaXhlZCB0byBTa0JpdG1hcCB0
aGlzIG1lYW5zIHdlIGhhdmUgdG8gc2NhbGUgdGhlCisgICAgLy8gZW50aXJlIGltYWdlLgorICAg
IHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVkQml0
bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93Qnl0
ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVs
UmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKTsKKyAgICByZXNp
emVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUgZnJvbSByZWNv
cmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZh
bGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERhdGEo
ZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmFk
ZERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAg
ICAvLyBUT0RPOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9j
a1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3Qm
IHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKwor
ICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IGxvb2t1cEZyYW1lR2VuZXJhdG9y
KGlkKTsKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gZ2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAv
LyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQu
CisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShpZCwg
ZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJpdG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkg
eworICAgICAgICAvLyBGSVhNRTogUGl4ZWxzIGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVy
IGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAgICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3du
ZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0
b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVz
IHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJh
bWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAg
IGZyYW1lQ2FjaGUgPSBuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdl
dFNrQml0bWFwKCksIHRydWUpOworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChmcmFt
ZUNhY2hlKTsKKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNv
ZGluZyBlcnJvci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkp
OworICAgICAgICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBp
ZiAoZnVsbFNpemUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlz
IGRvbmUgb24tdGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAv
LyBhZnRlciB1c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVk
IGZyYWdtZW50LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRp
b25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9T
Mywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9s
b2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2Nr
ZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxz
KCk7CisgICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vi
c2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0
bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgp
ICYmIFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJh
dG9yKFdURjo6UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgSW1hZ2VG
cmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2Rl
cik7CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQs
IGdlbmVyYXRvcik7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdTdG9y
ZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAgIEltYWdlRnJhbWVH
ZW5lcmF0b3IqIGdlbmVyYXRvciA9IG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7CisgICAgQVNT
RVJUKGdlbmVyYXRvcik7CisgICAgcmV0dXJuIGdlbmVyYXRvcjsKK30KKworSW1hZ2VGcmFtZUdl
bmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBT
a0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1h
cCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVj
b2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJh
bWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hl
W2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1l
Q2FjaGVbaV07CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ2FjaGVbaV07CisgICAgICAgICAgICBtX2Zy
YW1lQ2FjaGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRhNmZkMDA3OTdkNTM0MTgyYjFkNzg4ODZiMWZhYjc1MjliNGE3NTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbWFnZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAorCisj
aW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1Np
emUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFt
ZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUg
eworcHVibGljOgorICAgIHN0YXRpYyBXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3Jl
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQor
ICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3Rv
cmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIGJv
b2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tCaXRtYXAgY3JlYXRl
TGF6eURlY29kZWRTa0JpdG1hcChXVEY6OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAg
U2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBTaGFyZWRCdWZmZXIqLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCBhZGREYXRhKGNvbnN0IFNrQml0bWFwJiwgU2hh
cmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9jayBhbmQgdW5s
b2NrIHN1cHBvcnRzIG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRoZW0gaSBwYWly
LgorICAgIHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
LCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRP
blZhbGlkVGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihXVEY6
OlBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9v
a3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdl
RnJhbWVDYWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpOworCisgICAgV1RGOjpIYXNoTWFwPGludCwgSW1hZ2VGcmFtZUdl
bmVyYXRvcio+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFdURjo6VmVjdG9yPEltYWdlRnJhbWVD
YWNoZSo+IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0JpdG1hcCBt
X2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2MyYjI3ZjQx
ZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZy
YW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2FjaGU6On5J
bWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNo
ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3NjYWxl
ZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1faXNDb21w
bGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNFcXVhbChp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlk
ID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRlYjZkN2QxNDgy
ZTcyMjY5ZTIzZmI2NzU3NjVlODZmNzA4MzEwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVmaW5l
IEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNr
UmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlRnJhbWVDYWNoZSB7CitwdWJsaWM6CisgICAgLy8gSW1hZ2VGcmFtZUNhY2hlIGlz
IGEgc2NhbGVkIHZlcnNpb24gb2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorICAgIC8vIGJ5
IHR3byB0aGluZ3M6CisgICAgLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0
IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKyAgICAvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4K
KyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBj
b25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVDYWNoZSgp
OworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFw
OyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBi
b29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAg
ICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKworcHJp
dmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0Jp
dG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRhMWUyZGRlYjZkYjczOWRhNzYyNTdhZmU4MmNiNTI0NDg3YzE3YjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRv
cihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNv
ZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lk
dGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJh
dG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsK
K30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFdURjo6UGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0YSA9
IGRhdGE7CisgICAgaWYgKG1fZGVjb2Rlci5nZXQoKSkKKyAgICAgICAgbV9kZWNvZGVyLT5zZXRE
YXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNjc2OGU0
ZTFmM2E1YjU5YzFiYjM3ODIwOTgyOTE4NDIzYWM2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdlbmVyYXRv
cl9oCisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tTaXplLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVy
YXRvciB7CitwdWJsaWM6CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVz
IHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIo
KTsKKyAgICB2b2lkIHNldERhdGEoV1RGOjpQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6Ok93blB0cjxJbWFnZURlY29kZXI+
IG1fZGVjb2RlcjsKKyAgICBXVEY6OlJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBT
a0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZmOTI5NzcxZWNi
ZDVmOTA4ZmExZDM0YmZjZmYxOTk3MzNlYzMwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNw
cApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUu
aCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitTS19ERUNMQVJFX0dMT0JBTF9NVVRF
WChnTGF6eURlY29kaW5nSW1hZ2VSZWZNdXRleCk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
TGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorICAgIDog
U2tQaXhlbFJlZigmZ0xhenlEZWNvZGluZ0ltYWdlUmVmTXV0ZXgpCisgICAgLCBtX2lkKGlkKQor
ICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3NjYWxlZFN1YnNldChzY2Fs
ZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURlY29kaW5nUGl4
ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZChjb25z
dCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnVsbFNpemUgIT0gbV9z
Y2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAhPSBtX3NjYWxlZFN1YnNl
dC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3NjYWxlZFN1YnNldC5oZWln
aHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0Nv
bG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgcmV0
dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVs
cyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFp
blRocmVhZCgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCktPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxv
Y2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg5ODFmZDljZjJlZWEyMTRkY2NlOTk5ZjI3NzJiYjAxMzI5ZGQwNzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlE
ZWNvZGluZ1BpeGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5j
bHVkZSAiU2tGbGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisj
aW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsK
KyAgcHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFs
IH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxF
X09CSkVDVCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9v
bCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0Ns
aXBwZWQoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7
CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9u
TG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbV9p
ZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5n
UGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCAxNTBhYzhhMzQ5ZmFlODYwYTBkNzFm
MmY4ZTI0ZDNkODIxMWQwODEwLi41YTdiNzMwZTdmODdkZjU4OTllYTBmZTMwYzJjNjY1Y2E1NTFm
YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0zNyw2ICszNywxMSBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRp
dmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCkBAIC03MCw2ICs3NSwxMSBAQCBib29sIE5h
dGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFn
ZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRt
YXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJ
bWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1h
Z2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVj
b2RlZFNrQml0bWFwKG1faW1hZ2UsIHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQp
OworI2VuZGlmCisKICAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBz
Y2FsZWRJbWFnZVN1YnNldCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNv
bXBsZXRlKCkKICAgICAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2FtcGxpbmcoc2NhbGVk
SW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGVhNjQ5NWZlZTY0
NWNjNWY5ZWJlNWVlNGE4ZTIzMTRkZGZiMGEyOGQuLjhiMGM1NjJkZGZmMmEyZDg1OTBkMjkxMWMx
YTkzYWZlMDM5M2JmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1LDE5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSAr
IHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAg
IHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFwLCAxKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAg
aW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMTQw
NTM5ZjJkNGMxYmZmOTU2Y2Y3ZWUwMTVkMmJlOGQ0M2FiY2RmOS4uYjBhZGRlZjk0OWQ1NGMyMjk0
OWJhMTlmMjE2YTkzZDMwMzgxZDNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC03Nyw5ICs3NywxMSBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdl
RGVjb2RlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMv
S2V5Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xp
bmtIaWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlzdGVuZXJMZWFrVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5k
ZXggNWZmMjA2YjBhNTdlNDBlMjdlZDI1MTVkMGMxMjA4NDU5MmFlOTk3Mi4uMGNjYzdjYWFjMjJk
NzYzNTM1YTU2YjBkYjY2NTM1NDVmMGM2OTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggOTMzMWQwNTNhMmQ1YmY0NGI5NWMyZjRhNjA2Y2U5
YmMxZjM3YjE2MC4uYzIyYjQ0NDRjMWU5MDgzOTBlZWE1MDFhODhmYWQxY2Q5YWE2YzZiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCkBAIC0xNjUsNiArMTY2
LDcgQEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQogI2VuZGlmCiAgICAgc193ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQgPSAwOworICAgIFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KTsKICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsKICAgICBXZWJQcmVyZW5kZXJpbmdTdXBwb3J0
OjpzaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKaW5kZXggNGNjM2VmNzI3YWE1OGQwNzQ0ODBiMTM2OTQxOGNmZTVmYjBiYTkz
ZS4uZDI3OTQ1ODQ5ZmQ5ZGRiNzFmM2IzYTQwZGJkMzNlMjhhOTE2NzgxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC00NjksNiArNDY5
LDExIEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChi
b29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IGU5ZTAxYmZjZDc0NmUxNTA2MWE3MzI3ZmFlYjUy
NTI4Zjk3NTM2YmIuLjgwN2FmYzk0NzQyNmEyMDAyNzk3NGY5ZGE2NDNiMjAxZTVhNWU0NWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03Niw2
ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9taXVtVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RlckNocm9taXVtVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDBlNmY1NTI3MWVkNjhhMTlhZjQxYzU1Yzg5YjA4NzJlZDUwNjdhMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNv
ZGVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RlckNocm9taXVtLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyQ2hyb21p
dW1UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uTWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdl
RGVjb2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOwor
ICAgICAgICBtX2xhenlEZWNvZGVyID0gYWRvcHRQdHIoSW1hZ2VEZWNvZGVyQ2hyb21pdW06OmNy
ZWF0ZShtX2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9jYW52YXNCaXRtYXAuc2V0Q29uZmln
KFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApOworICAgICAgICBtX2NhbnZh
cy5zZXRCaXRtYXBEZXZpY2UobV9jYW52YXNCaXRtYXApOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRk
b3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1
YWxEZWNvZGVyOworICAgIE93blB0cjxJbWFnZURlY29kZXJDaHJvbWl1bT4gbV9sYXp5RGVjb2Rl
cjsKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOworICAgIFNrQml0bWFwIG1fY2FudmFzQml0bWFw
OworICAgIFNrQ2FudmFzIG1fY2FudmFzOworfTsKKworVEVTVF9GKEltYWdlRGVjb2RlckNocm9t
aXVtVGVzdCwgZHJhd0ludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tp
YT4gaW1hZ2UoYWRvcHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5h
c05ld05hdGl2ZUltYWdlKCkpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXpl
KCkud2lkdGgoKSwgaW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUShtX2Fj
dHVhbERlY29kZXItPnNpemUoKS5oZWlnaHQoKSwgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbWFnZS0+Yml0bWFwKCkuaXNJbW11dGFibGUoKSk7CisKKyAgICBTa0NhbnZhcyogdGVt
cENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENh
bnZhcy0+ZHJhd0JpdG1hcChpbWFnZS0+Yml0bWFwKCksIDAsIDApOworICAgIG1fcGljdHVyZS5l
bmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1
ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVy
ZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQoKSk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kZXJDaHJvbWl1bVRlc3QsIGRyYXdTY2Fs
ZWRJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFk
b3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJ
bWFnZSgpKSk7CisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gaW1hZ2UtPnJlc2l6ZWRCaXRt
YXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0goNTAsIDUxKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1hcC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoc2Nh
bGVkQml0bWFwLmlzSW1tdXRhYmxlKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2NhbGVkQml0bWFw
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MSwgc2NhbGVkQml0bWFwLmhlaWdodCgpKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgp
KTsKKworICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5n
KDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJpdG1hcCwgMCwg
MCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2Fj
dHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMu
ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVy
LT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRiMzExMDFkMDViMzMwNzMyYzJmZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tJbWFnZURlY29kZXJfaAorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTW9j
a0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIE1vY2tJ
bWFnZURlY29kZXIoKQorICAgICAgICA6IEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFQ
cmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKQor
ICAgICAgICAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0KKworICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAibW9jayI7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90KQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50OworCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICB9CisKKyAg
ICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNb2Nr
SW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5NzVjZjFmMDk0YjY3MWU1ZTVjNWMyNjYxN2MwMmVkNjFiNzI2MmViLi45OWNk
ODJmOGJiNWU1NjEyMWE2NWU3ZTQyNWZmNDFmYTU1M2NhMTYyIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDkt
MDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVj
b2RpbmcgdG8gRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJl
bmRlclRyZWUuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToK
KyAgICAgICAgKFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OnNldERl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAg
IChXZWJQcmVmZXJlbmNlczo6cmVzZXQpOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmFwcGx5
VG8pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmg6
CisgICAgICAgIChXZWJQcmVmZXJlbmNlcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVtUG9ydC52aXJ0
dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAxMi0wOS0yMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRW5hYmxlIG1vcmUgY2xhbmcgd2FybmluZ3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCAwOTQ5YWE3YTY3ZWFkN2IxNTk4NzZjNTg5NzQwN2Y5YjkxMzc5ODUxLi5iNWQyMWVlNTUx
MGYwZTQzNDU0OTgzZWY1OWNjNjM1ZWM5MDIzZjM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02Myw2ICs2Myw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJs
ZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0
aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUt
cGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJy
ZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwog
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwog
c3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7
CkBAIC0xMzEsNiArMTMyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAg
ICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVy
YXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5h
YmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9
IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xNzks
NiArMTgxLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRp
b24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFy
Z3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRp
bGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBv
cHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0g
b3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMTcsNiArMjIxLDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBz
aGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5h
YmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBh
aW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEph
dmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NP
cHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZTVl
OWRlZDZhZTMwZjE5ZWFjYjVlZjA4NGY4ZDg3YzljNGU0NjNiZi4uYWJjNmMxMzQyMGM2NzAxODFm
MDYyZTE2ZTBmYjhlZDllNGRlNDZkNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNl
KQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQog
ICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMjgsNiArMjI5LDcgQEAgdm9pZCBU
ZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZz
LmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9h
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVm
cy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuaAppbmRleCA0MDUwMzRhNGUxMzk4YTZmYThiNTIxOTRmODQxMzUxMWU5YmVmOWY4
Li44MGVmYWE5NDc5YWM0YjE5MWU2YzExM2ZhMTkwYzg2Mjc1NzgwMDk1IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM2LDYgKzEzNiw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVk
KGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lm
IGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVz
ZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZl
bnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzMiw2ICsyMzMsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNj
ZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJs
ZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJl
ZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJl
c3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlBy
ZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5NzYyNGQxOWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5Li4w
OTZjOWZiOGZjZmVmODVjNDEwNDg5YjliM2ZhOTM5MjljN2E1ZjEzIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2
LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNF
bmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsK
ICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1
c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlBy
ZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFj
Y2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAg
ICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2Nl
bGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGlu
Z3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVk
KG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERl
dmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1
M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVm
ZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJl
bmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRl
ZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVk
aWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0Vu
YWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggNDRj
OThhMzgzYTIwZjM4NTI0OWIzMGU4YWQ1YzQ5YjA2ODlhY2IyNC4uMjU0OTkwY2ViNWEwNzMxZDNk
OWY4NDUyNGRkZWQyMmVjMTg1M2RlYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zNzYsNiArMzc2LDkgQEAgY2xh
c3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9oaWRwaScsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdmYXN0L2hpZHBpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1
aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWyctLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVu
YWJsZS1wZXItdGlsZS1wYWludGluZycsICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAg
ICAgICAgIF0KIAogICAgICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhODY2OThlMGRlZWI4MmI0NWZjNmVjMzkwOTQ0NDdi
NGQ5N2ZjZTExLi4yZTliNTg3ZWRlMjg1YTNkYjFmMzJiYzZlZGYxMDNjY2E4YTc0ZWY2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNv
ZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQy
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRp
bmcgYSB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJyZWQgaW1h
Z2UKKyAgICAgICAgZGVjb2RpbmcuCisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcyB3aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAgIC0tZm9y
Y2UtY29tcG9zaXRpbmcgLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUtZGVmZXJy
ZWQtaW1hZ2UtZGVjb2RpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVkLgorCiAyMDEyLTA4LTI3ICBB
bHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW3NraWFdIERyYXdpbmcg
YSBzdWJyZWN0IG9mIGJpdG1hcCBpbWFnZSBpcyBtaXNhbGlnbmVkCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JF
QURNRS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0MzJkNWZkMDBiODI4
MWUyODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApAQCAt
MCwwICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGVzdCB0aGUgJ2Rl
ZmVycmVkIGltYWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBDaHJvbWl1bSBEUlQu
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167232</attachid>
            <date>2012-10-04 19:35:03 -0700</date>
            <delta_ts>2012-10-04 19:42:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121004193412.patch</filename>
            <type>text/plain</type>
            <size>83472</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJjYjA4YjM5YzExMGVl
NmFhMmFkMzBkNTBhNjFkMGVmN2YzMjlhMS4uZDIyOTIwZjJmNmJiYjJhMDdkNTgzMTJlMWRkN2Nl
NTVhZWZhODhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNyBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KworMjAxMi0xMC0wMyAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtza2lhXSBEcmF3aW5nIGEgc3VicmVjdCBvZiBiaXRtYXAgaW1hZ2UgaXMgbWlzYWxpZ25lZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUxMjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGRyYXdp
bmcgYSBzdWJyZWN0IG9mIEJpdG1hcEltYWdlIGFuZCB0aGUgc3VicmVjdCBpcyBub3QgYWxpZ25l
ZAorICAgICAgICB0byBpbnRlZ2VyIGJvdW5kYXJpZXMsIHNraWEgZXhwYW5kcyBpdCB0byB0aGUg
Y2xvc2VzdCBlbmNsb3NpbmcgaW50ZWdlcgorICAgICAgICByZWN0YW5nbGUuIFRoaXMgY3JlYXRl
cyBwcm9taW5lbnQgcmVuZGVyaW5nIGFydGlmYWN0cyB3aGVuIGFuIGltYWdlCisgICAgICAgIGlz
IHVzZWQgYXMgYmFja2dyb3VuZCBhbmQgaXRzIHN1Yi1yZWdpb25zIGFyZSBpbnZhbGlkYXRlZCBm
cmVxdWVudGx5LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhlIHByb2JsZW0gYnkgZG9p
bmcgYWxpZ25tZW50IHRvIGludGVnZXIgYm91bmRhcmllcworICAgICAgICBhbmQgY2xpcHBpbmcg
Zm9yIGJvdGggY2FzZXMgb2YgUkVTQU1QTEVfQVdFU09NRSBhbmQgUkVTQU1QTEVfTElORUFSLgor
CisgICAgICAgIEEgY2xpcCByZWN0IGlzIGFwcGxpZWQgdG8gdGhlIGNhbnZhcyB1c2luZyBvcmln
aW5hbCBkZXN0aW5hdGlvbgorICAgICAgICByZWN0YW5nbGUsIHdoaWxlIHNvdXJjZSBhbmQgZGVz
dGluYXRpb24gcmVjdGFuZ2xlcyBhcmUgZW5sYXJnZWQKKyAgICAgICAgYXBwcm9wcmlhdGVseSB0
byBlbnN1cmUgc291cmNlIHJlY3RhbmdsZSBpcyBhbGlnbmVkLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBmaXhlcyBhIGNsb3NlbHkgcmVsYXRlZCBwcm9ibGVtLiBJbiBSRVNBTVBMRV9BV0VT
T01FCisgICAgICAgIHJlc2FtcGxpbmcgbW9kZSB0aGUgcHJldmlvdXMgYWxnb3JpdGhtIGFwcGxp
ZXMgZGlmZmVyZW50IGFwcHJveGltYXRlZAorICAgICAgICBzY2FsZSBmYWN0b3IgZm9yIGVhY2gg
c2NhbGVkIGltYWdlIGZyYWdtZW50LiBUaGlzIGNhdXNlZCB0aGUgc3RpdGNoZWQKKyAgICAgICAg
aW1hZ2UgdG8gbG9vayB1Z2x5LgorCisgICAgICAgIFNjYWxlIGZhY3RvciBpcyBhcHByb3hpbWF0
ZWQgdXNpbmcgZW50aXJlIGltYWdlIHNpemUsIHRoaXMgZ2l2ZXMgYQorICAgICAgICBtb3JlIGFj
Y3VyYXRlIGFwcHJveGltYXRpb24gYmVjYXVzZSBvZiBncmVhdGVyIGRlbm9taW5hdG9yIGFuZCBh
CisgICAgICAgIGNvbnNpc3RlbnQgc2NhbGUgZmFjdG9yIGFjcm9zcyBhbGwgZnJhZ21lbnRzLgor
CisgICAgICAgIENoYW5nZXMgaW4gU2tpYSBlbmFibGUgY2FjaGluZyBvZiB0aGUgc2NhbGVkIGlt
YWdlIGFuZCByZXR1cm4gdGhlCisgICAgICAgIHNjYWxlZCBmcmFnbWVudCBiZWNhdXNlIHNjYWxl
IGZhY3RvciBpcyBub3cgY29uc2lzdGVudCBmb3IgYWxsCisgICAgICAgIGZyYWdtZW50cy4KKwor
ICAgICAgICBUZXN0czogZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbAorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZVJlc2FtcGxpbmdNb2RlKTogVXNlIGZsb2F0IGZvciB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjphcmVCb3VuZGFyaWVzSW50ZWdlckFsaWdu
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUJpdG1hcERyYXdSZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3UmVzYW1wbGVkQml0bWFwKTogTmV3IGFsZ29yaXRobSBmb3IgZHJhd2luZyBzY2FsZWQg
aW1hZ2UgZnJhZ21lbnQuCisgICAgICAgIChXZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZHJhdyk6IFVzZSBTa1JlY3QgaW5zdGVhZCBvZiBTa0lSZWN0LgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgQ2hhbmdp
bmcgdGhlIGFsZ29yaXRobSBmb3IgZXh0cmFjdGluZyBhIHNjYWxlZCBpbWFnZSBmcmFnbWVudC4K
KyAgICAgICAgQSBmcmFnbWVudCBpcyBub3cgaWRlbnRpZmllZCBieSAoc2NhbGVkSW1hZ2VTaXpl
LCBzY2FsZWRJbWFnZVN1YnNldCkuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6
Omhhc1Jlc2l6ZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpy
ZXNpemVkQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6c2hvdWxk
Q2FjaGVSZXNhbXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2Fj
aGVkSW1hZ2VJbmZvOjpDYWNoZWRJbWFnZUluZm8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6c2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6Q2FjaGVkSW1hZ2VJbmZvOjpy
ZWN0SW5TdWJzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmg6CisgICAgICAgIChOYXRpdmVJbWFnZVNraWEpOgorICAgICAgICAoQ2FjaGVkSW1h
Z2VJbmZvKToKKwogMjAxMi0xMC0wNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaW5hbCBwYXJ0IG9mICJzeW5jIiB0byAiZmx1c2giIHJlbmFtaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDJlOWMxOWEwZTAwZTJjNmRkZjcwM2U0Nzcw
NmVjODBkNGY2NjA0M2YuLjY3ZDYyMDIzMDJhMDI0MWM0NmM3YWMzYTMxZGIxMzFiMDcxNTEwNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTItMDktMDgg
IEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIElt
cGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgbmV3IHVuaXQgdGVzdHMgZm9yIGRlZmVycmVk
IGltYWdlIGRlY29kaW5nLgorICAgICAgICBUaGVzZSB0ZXN0cyBhcmUgZGVmaW5lZCBpbiBJbWFn
ZURlY29kaW5nQnJpZGdlVGVzdC5jcHAuIFRoZXkgdmVyaWZ5CisgICAgICAgIGltYWdlIGRlY29k
aW5nIGhhcHBlbnMgb25seSB3aGVuIFNrUGljdHVyZSBpcyByYXN0ZXJpemVkIGZvciBib3RoCisg
ICAgICAgIHNjYWxlZCBhbmQgbm9uLXNjYWxlZCBjYXNlcy4KKworICAgICAgICBUZXN0czogSW1h
Z2VEZWNvZGluZ0JyaWRnZVRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIElt
YWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAg
KiBzcmMvV2ViS2l0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAq
IHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0lt
cGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0lt
cGwpOgorICAgICAgICAqIHRlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0OjpTZXRVcCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlVGVzdDo6VGVhckRvd24pOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6Ok1vY2tJbWFnZURlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KToKKwogMjAxMi0xMC0wNCAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgSW5kZXhlZERCOiBwcm9tb3RlIG9iamVjdHN0b3JlL2luZGV4IGJhY2tlbmQg
aWRzIHRvIHRoZSBmcm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDdjMTFlNzY3N2E3NWY0MDFl
MjQ1NDJhZTQyNjA2NmVmMmU4OGFkNWYuLmZlMTZjZDM3Y2UxMjkwMzZjYjViOGRlZjE0NjdmY2Mw
NGM3NzBhYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ4OTksNiArNDg5OSwxNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRh
dGFTa2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZURlY29kaW5nQnJpZGdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRl
eCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYxMjdmNjBkZTVmODFmOWI2OTk2Li45OGYwODViZWE5ZmFj
ZjBjN2M5NjI5MGNlOTZjN2JiNmZkNjI2NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1
ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ0JyaWRnZS5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCkBAIC03OCw3ICs4Miw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBp
bnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5
cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9k
ZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291
cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OjpjcmVhdGUo
KmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKICNp
ZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9kZWNv
ZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQogICAgICAgICAgICAgbV9kZWNvZGVy
LT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjg3OWVkYTA1
NWFiODdkMjU1NjAyMWYzZTdmOTAyZGU1NjY5YTE1Yi4uZjFiZGNhOTJiOGFmZTE0MWI3MTk0ZTE1
ZmNiZTExNWQxMjBlMTA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCkBAIC00OCwxMSArNDgsMTkgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwog
CiAjaWYgVVNFKENHKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNl
UHRyOwotI2Vsc2UKKyNlbGlmICFVU0UoU0tJQSkgfHwgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xh
c3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNl
UHRyOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIEltYWdlRGVjb2Rp
bmdCcmlkZ2U7Cit0eXBlZGVmIEltYWdlRGVjb2RpbmdCcmlkZ2UgTmF0aXZlSW1hZ2VTb3VyY2VG
YWN0b3J5OwordHlwZWRlZiBJbWFnZURlY29kaW5nQnJpZGdlKiBOYXRpdmVJbWFnZVNvdXJjZVB0
cjsKKyNlbHNlCit0eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7
CisjZW5kaWYKKwogLy8gUmlnaHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJlY29nbml6ZWQgaW1h
Z2UgZm9ybWF0IHRoYXQgc3VwcG9ydHMgYW5pbWF0aW9uLgogLy8gVGhlIGFuaW1hdGlvbiBzeXN0
ZW0gYW5kIHRoZSBjb25zdGFudHMgYmVsb3cgYXJlIGRlc2lnbmVkIHdpdGggdGhpcyBpbiBtaW5k
LgogLy8gR0lGcyBoYXZlIGFuIG9wdGlvbmFsIDE2LWJpdCB1bnNpZ25lZCBsb29wIGNvdW50IHRo
YXQgZGVzY3JpYmVzIGhvdyBhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNmU3ODA5YzhiMmQ2ZmIyZGNjZmQ1MzU0NDQ0MWVhODlhMTNiZWFhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ0JyaWRnZS5oIgorCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5n
QnJpZGdlKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlcikKKyAgICA6IG1fYWxsRGF0YVJlY2Vp
dmVkKGZhbHNlKQorICAgICwgbV9hY3R1YWxEZWNvZGVyKGFkb3B0UHRyKGFjdHVhbERlY29kZXIp
KQoreworfQorCitJbWFnZURlY29kaW5nQnJpZGdlOjp+SW1hZ2VEZWNvZGluZ0JyaWRnZSgpCit7
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBJbWFnZURl
Y29kaW5nU3RvcmUgaWYgaW1hZ2UKKyAgICAvLyBpcyBkZWZlcnJlZCBkZWNvZGVkLgorfQorCitJ
bWFnZURlY29kaW5nQnJpZGdlKiBJbWFnZURlY29kaW5nQnJpZGdlOjpjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9u
KQoreworICAgIEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICBpZiAoIWFj
dHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgSW1hZ2VEZWNv
ZGluZ0JyaWRnZShhY3R1YWxEZWNvZGVyKTsKK30KKworUGFzc093blB0cjxJbWFnZURlY29kaW5n
QnJpZGdlPiBJbWFnZURlY29kaW5nQnJpZGdlOjpjcmVhdGUoUGFzc093blB0cjxJbWFnZURlY29k
ZXI+IGRlY29kZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURlY29kaW5nQnJp
ZGdlKGRlY29kZXIubGVha1B0cigpKSk7Cit9CisKK1N0cmluZyBJbWFnZURlY29kaW5nQnJpZGdl
OjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikK
KyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAg
ICByZXR1cm4gbV9maWxlbmFtZUV4dGVuc2lvbjsKK30KKworSW1hZ2VGcmFtZSogSW1hZ2VEZWNv
ZGluZ0JyaWRnZTo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICAvLyBP
bmx5IGRlZmVyIGltYWdlIGRlY29kaW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJhbWUgaW1hZ2Uu
IFRoZSByZWFzb24gaXMKKyAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFu
aW1hdGVkIEdJRi4gQW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRtYXBJbWFnZSB3
aGljaCB1c2VzIHNvbWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG9lcyBzeW5jaHJvbm91cwor
ICAgIC8vIGltYWdlIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyCisgICAgICAgICYm
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpID09IDEKKyAgICAgICAgJiYgbV9hY3R1YWxE
ZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgeworCisgICAgICAgIG1fc2l6ZSA9IG1fYWN0dWFs
RGVjb2Rlci0+c2l6ZSgpOworICAgICAgICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1YWxE
ZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlEZWNv
ZGVkU2tCaXRtYXAgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkt
PmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7Cisg
ICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0bWFw
KTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5z
ZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEucmVsZWFzZSgp
LCBtX2FsbERhdGFSZWNlaXZlZCk7CisKKyAgICAgICAgLy8gU2V0IGZyYW1lIHRvIHBhcnRpYWwg
YmVjYXVzZSBkZWNvZGUgZGlkbid0IGhhcHBlbiB5ZXQgc28gd2UgY2FuJ3QKKyAgICAgICAgLy8g
cHJlZGljdCB0aGlzIGNvcnJlY3QuIFRoaXMgZmxhZyBvbmx5IGhhcyBlZmZlY3Qgb24gR0lGIGlt
YWdlcyBzbworICAgICAgICAvLyB0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgIG1f
bGF6eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAg
ICB9CisKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiAmbV9sYXp5RGVj
b2RlZEZyYW1lOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdCcmlkZ2U6OnNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAobV9hY3R1YWxE
ZWNvZGVyKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gZGF0YSB1bnRpbCBXZWJM
YXp5RGVjb2RpbmdJbWFnZSBpcyBjcmVhdGVkLCBhdAorICAgICAgICAvLyB3aGljaCBwb2ludCBt
X2RhdGEgaXMgdHJhbnNmZXJlZC4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9h
bGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rl
ci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVCghbV9kYXRhKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9u
TWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBOT1RFOiBXaGVuIGltYWdlIGlzIGRl
Y29kZWQgb24gaW1wbCB0aHJlYWQgc3VibWl0cyBkYXRhIHRvIGltcGwKKyAgICAgICAgLy8gdGhy
ZWFkIGhlcmUuCisgICAgfQorfQorCitib29sIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmlzU2l6ZUF2
YWlsYWJsZSgpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1f
YWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0ludFNpemUgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
YWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOwor
ICAgIHJldHVybiBtX3NpemU7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJh
bWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChp
bmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFnZSBkZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNp
bmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAgICAvLyB1bmlmb3JtIHNpemUuCisgICAgcmV0
dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQo
KQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERl
Y29kZXItPmZyYW1lQ291bnQoKTsKKyAgICByZXR1cm4gMTsKK30KKworaW50IEltYWdlRGVjb2Rp
bmdCcmlkZ2U6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7
CisgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdCcmlk
Z2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAg
ICAvLyBJZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNo
ZSBpcyBtYW5hZ2VkIGJ5CisgICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBp
Z25vcmVkLgorICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rl
ci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworfQorCitib29sIElt
YWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBGSVhNRTogU3lu
Y2hyb25pemUgdGhpcyBzdGF0ZSB3aXRoIEltYWdlRGVjb2RpbmdTdG9yZSB3aGVuIGltYWdlIGlz
CisgICAgLy8gYWN0dWFsbHkgZGVjb2RlZC4gUmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGlu
IHRlcm1zIG9mIHJlbmRlcmluZyBidXQKKyAgICAvLyBtYXkgbm90IGdvIHRocm91Z2ggc29tZSBv
cHRpbWl6ZWQgcmVuZGVyaW5nIGNvZGUgcGF0aC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5z
aWduZWQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4KTsKKworICAgIC8vIElmIGZyYW1l
IGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gaXQgaXMgbm90IG1hbmFnZWQgYnkgTWVtb3J5Q2Fj
aGUKKyAgICAvLyBzbyByZXR1cm4gMCBoZXJlLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODliZWY4NjA3Y2ZkMTJhYjA3ODBjZDY1OTVhODk2MzljODM3MTlkNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdCcmlkZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29k
aW5nQnJpZGdlX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGluZ0JyaWRnZV9oCisKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZSB7CitwdWJsaWM6
CisgICAgfkltYWdlRGVjb2RpbmdCcmlkZ2UoKTsKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ0Jy
aWRnZSogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhh
T3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisgICAg
Ly8gVXNlIG9ubHkgaW4gdGVzdC4KKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZURlY29kaW5n
QnJpZGdlPiBjcmVhdGUoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgp
OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50
IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSW1hZ2VEZWNvZGluZ0JyaWRnZShJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwor
ICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9h
Y3R1YWxEZWNvZGVyOworCisgICAgU3RyaW5nIG1fZmlsZW5hbWVFeHRlbnNpb247CisgICAgSW50
U2l6ZSBtX3NpemU7CisKKyAgICBJbWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0
b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MTk0Zjk2ZDlmMTJlMDgzMDMwM2VmZTZkYjM0MWMzM2U5OTQ0
NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
KworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2Rp
bmdQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgor
CisjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKKy8vIFVSSSBsYWJlbCBmb3IgYSBsYXppbHkgZGVj
b2RlZCBTa1BpeGVsUmVmLgorY29uc3QgY2hhciBsYWJlbExhenlEZWNvZGVkW10gPSAibGF6eSI7
CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IDA7CisKK3N0
YXRpYyB2b2lkIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZSogaW1h
Z2VEZWNvZGluZ1N0b3JlKQoreworICAgIGlmICghaW1hZ2VEZWNvZGluZ1N0b3JlKQorICAgICAg
ICBkZWxldGUgc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAgICBzX2luc3RhbmNlT25NYWluVGhy
ZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3JlOworfQorfSAvLyBuYW1lc3BhY2UKKworSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAgIDogbV9uZXh0SWQoMCkKK3sKK30K
KworSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30KKworSW1h
Z2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCkKK3sKKyAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKK30KKwordm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIHNldEluc3Rh
bmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsK
K30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKK3sKKyAgICBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZCgwKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6
eURlY29kZWQoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKK3sKKyAgICByZXR1cm4gYml0bWFwLnBp
eGVsUmVmKCkKKyAgICAgICAgJiYgYml0bWFwLnBpeGVsUmVmKCktPmdldFVSSSgpCisgICAgICAg
ICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVmKCktPmdldFVSSSgpLCBsYWJlbExhenlEZWNvZGVk
LCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkpOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5n
U3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoUGFzc093blB0cjxJbWFnZURlY29kZXI+
IGRlY29kZXIpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBT
a0lTaXplIGZ1bGxTaXplID0gU2tJU2l6ZTo6TWFrZShkZWNvZGVyLT5zaXplKCkud2lkdGgoKSwg
ZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBBU1NFUlQoIWZ1bGxTaXplLmlzRW1wdHko
KSk7CisKKyAgICBjcmVhdGVGcmFtZUdlbmVyYXRvcihkZWNvZGVyKTsKKworICAgIFNrSVJlY3Qg
ZnVsbFJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShmdWxsU2l6ZSk7CisKKyAgICAvLyBDcmVhdGVz
IGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiB0aGF0IHJlZmVyZW5jZXMgdGhlIGVudGlyZSBp
bWFnZSB3aXRob3V0IHNjYWxpbmcuCisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5z
ZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBm
dWxsU2l6ZS5oZWlnaHQoKSk7CisgICAgYml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZihtX25leHRJZCwgZnVsbFNpemUsIGZ1bGxSZWN0KSktPnVucmVmKCk7CisKKyAg
ICAvLyBVc2UgVVJJIHRvIGlkZW50aWZ5IHRoaXMgaXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVs
UmVmIG9mIHR5cGUgTGF6eURlY29kaW5nUGl4ZWxSZWYuCisgICAgYml0bWFwLnBpeGVsUmVmKCkt
PnNldFVSSShsYWJlbExhenlEZWNvZGVkKTsKKyAgICBiaXRtYXAuc2V0SW1tdXRhYmxlKCk7IC8v
IFByZXZlbnRzIFNrUGljdHVyZSBmcm9tIHJlY29yZGluZyBwaXhlbHMuCisgICAgcmV0dXJuIGJp
dG1hcDsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2Fs
bGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKiBwaXhlbFJl
ZiA9IHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkp
OworICAgIEFTU0VSVCghcGl4ZWxSZWYtPmlzU2NhbGVkKGxvb2t1cEZyYW1lR2VuZXJhdG9yKHBp
eGVsUmVmLT5pZCgpKS0+c2l6ZSgpKSAmJiAhcGl4ZWxSZWYtPmlzQ2xpcHBlZCgpKTsKKworICAg
IGludCByb3dCeXRlcyA9IDA7CisgICAgU2tJU2l6ZSBpbWFnZVNpemUgPSBTa0lTaXplOjpNYWtl
KGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOworCisgICAgcm93Qnl0ZXMgPSBTa0Jp
dG1hcDo6Q29tcHV0ZVJvd0J5dGVzKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVk
U2l6ZS53aWR0aCgpKTsKKworICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CisgICAgcmVzaXpl
ZEJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJz
ZXQud2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisgICAgcmVzaXpl
ZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYocGl4ZWxSZWYtPmlk
KCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigpOworICAgIHJlc2l6ZWRCaXRt
YXAuc2V0SW1tdXRhYmxlKCk7IC8vIFByZXZlbnRzIFNrUGljdHVyZSBmcm9tIHJlY29yZGluZyBw
aXhlbHMuCisgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpzZXREYXRhKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVk
T25WYWxpZFRocmVhZCgpKTsKKyAgICBsb29rdXBGcmFtZUdlbmVyYXRvcihiaXRtYXApLT5zZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9y
ZTo6bG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNr
SVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKKworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IGxvb2t1cEZyYW1lR2Vu
ZXJhdG9yKGlkKTsKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gZ2VuZXJhdG9yLT5zaXplKCk7CisK
KyAgICAvLyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBt
b21lbnQuCisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNo
ZShpZCwgZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJpdG1hcDsKKworICAgIGlmICghZnJhbWVD
YWNoZSkgeworICAgICAgICAvLyBGSVhNRTogUGl4ZWxzIGFyZSBvd25lZCBieSB0aGUgSW1hZ2VE
ZWNvZGVyIGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAgICAgICAgLy8gYSB3YXkgdG8gdHJhbnNm
ZXIgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBn
ZW5lcmF0b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8v
IFNhdmVzIHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBp
ZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAg
ICAgICAgIG1fZnJhbWVDYWNoZS5hcHBlbmQoSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUoaWQsIGZ1
bGxTaXplLCBmcmFtZS0+Z2V0U2tCaXRtYXAoKSwgdHJ1ZSkpOworICAgICAgICB9IGVsc2UgaWYg
KGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIGRlY29kaW5nIGVycm9yLiBSZXBvcnQgdGhpcyB0byBC
aXRtYXBJbWFnZS4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAg
Yml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKGZyYW1lQ2FjaGUtPmlzQ29tcGxldGUoKSk7CisgICAgICAgIGJpdG1hcCA9IGZyYW1lQ2Fj
aGUtPmJpdG1hcCgpOworICAgIH0KKworICAgIGlmIChmdWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7
CisgICAgICAgIC8vIEltYWdlIHNjYWxpbmcgaXMgZG9uZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQg
aW1hZ2UgaXMgZGVzdHJveWVkCisgICAgICAgIC8vIGFmdGVyIHVzZS4KKyAgICAgICAgLy8gRklY
TUU6IFJlc2l6ZSBqdXN0IHRoZSByZXF1ZXN0ZWQgZnJhZ21lbnQuCisgICAgICAgIG1fbG9ja2Vk
U2tCaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxl
ZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2xvY2tlZFNrQml0bWFwLmxvY2tQaXhlbHMoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gYml0bWFwOworICAgICAg
ICBtX2xvY2tlZFNrQml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbG9j
a2VkU2tCaXRtYXAuZ2V0QWRkcihzY2FsZWRTdWJzZXQueCgpLCBzY2FsZWRTdWJzZXQueSgpKTsK
K30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscygpCit7CisgICAgQVNT
RVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBtX2xvY2tlZFNrQml0bWFwLnVubG9j
a1BpeGVscygpOworICAgIG1fbG9ja2VkU2tCaXRtYXAucmVzZXQoKTsKK30KKworYm9vbCBJbWFn
ZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVy
biB0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNNYWluVGhyZWFkKCk7Cit9CisK
K3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICArK21fbmV4dElkOworICAgIG1fZnJhbWVH
ZW5lcmF0b3JzLmFkZChtX25leHRJZCwgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGRlY29k
ZXIpKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29r
dXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWVHZW5l
cmF0b3JzLmdldChpZCk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdT
dG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaXNMYXp5RGVjb2RlZChiaXRtYXApKTsKKyAgICByZXR1cm4gbG9va3Vw
RnJhbWVHZW5lcmF0b3Ioc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAu
cGl4ZWxSZWYoKSktPmlkKCkpOworfQorCitJbWFnZUZyYW1lQ2FjaGUqIEltYWdlRGVjb2RpbmdT
dG9yZTo6bG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVk
U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hlW2ldLmdldCgpOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1l
Q2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKSB7CisgICAgICAgICAgICBt
X2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY0ODBiZTBjN2VhMGI2Yzc5NTg2YTc1MDc3YmY5MjNkZmVhMjViMTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAor
CisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJT
a1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VG
cmFtZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3Rv
cmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KKyAg
ICB+SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3Jl
KiBpbnN0YW5jZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1h
aW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyBib29s
IGlzTGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmKTsKKworICAgIFNrQml0bWFwIGNyZWF0ZUxh
enlEZWNvZGVkU2tCaXRtYXAoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBTa0JpdG1h
cCByZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KSBjb25zdDsKKworICAg
IHZvaWQgc2V0RGF0YShjb25zdCBTa0JpdG1hcCYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gTG9jayBhbmQgdW5sb2NrIHN1cHBvcnRz
IG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBzbyBjYWxsIHRoZW0gaSBwYWlyLgorICAgIHZvaWQq
IGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKK3ByaXZhdGU6
CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRPblZhbGlkVGhyZWFk
KCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4pOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9y
KGludCBpZCkgY29uc3Q7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJhbWVHZW5l
cmF0b3IoY29uc3QgU2tCaXRtYXAmKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGxvb2t1
cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAg
ICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
KTsKKworICAgIEhhc2hNYXA8aW50LCBPd25QdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gPiBtX2Zy
YW1lR2VuZXJhdG9yczsKKyAgICBWZWN0b3I8T3duUHRyPEltYWdlRnJhbWVDYWNoZT4gPiBtX2Zy
YW1lQ2FjaGU7CisKKyAgICBpbnQgbV9uZXh0SWQ7CisgICAgU2tCaXRtYXAgbV9sb2NrZWRTa0Jp
dG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2Fj
aGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2VjYjZhYTYwZDNjMmIyN2Y0MWQwODA4ZmRlYzNj
ZmY4N2QxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFtZUNh
Y2hlKCkKK3sKK30KKworSW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBi
b29sIGlzQ29tcGxldGUpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxl
ZFNpemUpCisgICAgLCBtX2JpdG1hcChiaXRtYXApCisgICAgLCBtX2lzQ29tcGxldGUoaXNDb21w
bGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwoaW50IGlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIHJldHVybiBpZCA9PSBtX2lkICYm
IHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkOTI4Yjk2YmVmZjUwMjY2YmM5OGJm
NDQwYjMzMGZjMTA3OWU0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lQ2FjaGVfaAorI2RlZmluZSBJbWFnZUZyYW1l
Q2FjaGVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNp
bmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gSW1hZ2VGcmFtZUNhY2hlIGlzIGEgc2NhbGVkIHZlcnNpb24g
b2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorLy8gYnkgdHdvIHRoaW5nczoKKy8vIDEuIElt
YWdlIElELiBUaGUgb3JpZ2luYWwgaW1hZ2UgdGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20u
CisvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4KK2NsYXNzIEltYWdlRnJhbWVDYWNoZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29s
IGlzQ29tcGxldGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRnJh
bWVDYWNoZShpZCwgc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgfQorCisg
ICAgSW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFw
JiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICB+SW1hZ2VGcmFtZUNhY2hlKCk7CisKKyAgICBjb25z
dCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBTa0Jp
dG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KKworICAgIGJvb2wgaXNFcXVhbChp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQorCitwcml2YXRlOgorICAgIGlu
dCBtX2lkOworICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrQml0bWFwIG1fYml0bWFw
OworICAgIGJvb2wgbV9pc0NvbXBsZXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJj
NDMwYWIyNzU3ODM2MGI1OTdiZWFhNzhhZGY5NTc4NGRmMjZjMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIDogbV9kZWNvZGVyKGRlY29kZXIpCit7CisgICAg
bV9zaXplID0gU2tJU2l6ZTo6TWFrZShtX2RlY29kZXItPnNpemUoKS53aWR0aCgpLCBtX2RlY29k
ZXItPnNpemUoKS5oZWlnaHQoKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKCkKK3sKK30KKworSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1lR2VuZXJhdG9y
OjpkZWNvZGVyKCkKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyLmdldCgpOworfQorCit2b2lkIElt
YWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKG1f
ZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0
YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlN2M5Y2M1MDg3ZWYyZTI5ZWJhNzE1MWI1YTRhMWFj
ODQ4NThlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisjZGVmaW5lIEltYWdlRnJhbWVH
ZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tTaXplLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NPd25QdHI8SW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bWFnZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbWFn
ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgfkltYWdlRnJh
bWVHZW5lcmF0b3IoKTsKKworICAgIC8vIENyZWF0ZXMgdGhlIGltYWdlIGRlY29kZXIgaWYgbmVl
ZGVkLgorICAgIEltYWdlRGVjb2RlciogZGVjb2RlcigpOworICAgIHZvaWQgc2V0RGF0YShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0
IFNrSVNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9kYXRhOworICAgIFNrSVNpemUgbV9zaXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wMDllM2Y2ZmExNWMxOTJlYjFlNjRlODI0NzE0OWQyMzM3MGU3ZWYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURl
Y29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKworI2luY2x1ZGUgIklt
YWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworTGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVs
UmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2Nh
bGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJlZigwKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1f
c2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0
KQoreworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKCkK
K3sKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQoY29uc3QgU2tJU2l6
ZSYgZnVsbFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZ1bGxTaXplICE9IG1fc2NhbGVkU2l6
ZTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0gbV9zY2FsZWRTdWJzZXQud2lkdGgo
KSB8fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2FsZWRTdWJzZXQuaGVpZ2h0KCk7Cit9
CisKK3ZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxl
KiopCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5sb2NrUGl4ZWxzKGlkKCksIG1fc2Nh
bGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOworfQorCit2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVm
OjpvblVubG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnVubG9ja1BpeGVscygp
OworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmOTFhYzI1YjRl
YTIyM2EyZDVjNWFkZWVkN2I0YjAzNjJhYjczMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5o
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlEZWNvZGluZ1BpeGVsUmVmX2gK
KyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tGbGF0dGVuYWJs
ZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0Lmgi
CisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXp5
RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKK3B1YmxpYzoKKyAgICBMYXp5
RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0
IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdmlydHVhbCB+TGF6eURlY29kaW5nUGl4ZWxS
ZWYoKTsKKworICAgIFNLX0RFQ0xBUkVfVU5GTEFUVEVOQUJMRV9PQkpFQ1QoKQorCisgICAgaW50
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJ
U2l6ZSYgZnVsbFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVmIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwg
dm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25V
bmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVk
U2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5nUGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lh
LmNwcAppbmRleCA4ZGU5NTEwNjYxY2U4M2EwMGE1MjYwZGNjMTA1MGQ4ZjQ3YzcxYTZmLi42YWM3
MDA4ZGNlYTIwNzBiY2UzYWIzYTczNDg3NTY5YjljNDRjMzVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3Bw
CkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKICNpbmNsdWRlICJT
a2lhVXRpbHMuaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkltYWdlRGVj
b2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNlbmRpZgorCiB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKGNvbnN0IFNrQml0bWFwKiBjb25zdCYgaW1hZ2UsIFdURjo6TWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKIHsKICAgICBXVEY6Ok1lbW9yeUNsYXNzSW5m
byBpbmZvKG1lbW9yeU9iamVjdEluZm8sIGltYWdlKTsKQEAgLTgxLDYgKzg2LDExIEBAIGJvb2wg
TmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZElt
YWdlU2l6ZSwgY29uc3QgU2tJCiAKIFNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxl
ZEltYWdlU3Vic2V0KSBjb25zdAogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGlmIChJ
bWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQobV9pbWFnZSkpCisgICAgICAgIHJldHVy
biBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnJlc2l6ZUxhenlE
ZWNvZGVkU2tCaXRtYXAobV9pbWFnZSwgc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNl
dCk7CisjZW5kaWYKKwogICAgIGlmICghaGFzUmVzaXplZEJpdG1hcChzY2FsZWRJbWFnZVNpemUs
IHNjYWxlZEltYWdlU3Vic2V0KSkgewogICAgICAgICBib29sIHNob3VsZENhY2hlID0gaXNEYXRh
Q29tcGxldGUoKQogICAgICAgICAgICAgJiYgc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHNjYWxlZElt
YWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAzMDNkNzU5OWE5YWFm
NDFlNjI4NGNlMDM3ZmVjM2JmMmZkZTFkYjU2Li44NTUwMzg1MjBhOTgzYzYwMDZjNjQyNDdlNmFk
NDJmYzhlZDI0MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMTQ1LDYgKzE0NSwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OwogI2VuZGlmCiAgICAgICAgIH0KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2
b2lkIHNldFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fYml0bWFwID0gTmF0aXZlSW1hZ2VTa2lhKGJpdG1hcCwgMSk7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBTa0JpdG1hcCYgZ2V0U2tCaXRtYXAoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuYml0bWFwKCk7CisgICAgICAgIH0KKyNlbmRp
ZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGlu
dCBoZWlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGY0Mjhj
YjEzMGI3ZDY2N2U1OGY4YjlmZWRiNjUxZDliNzgwMDYxODAuLjMzMDZiNjU5Yjc0YmM0OTdiNzA0
NzhjNjM5ZGUzYmMxNTg1ZDIyNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NzcsOSArNzcsMTEgQEAKICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9JbWFnZURl
Y29kaW5nQnJpZGdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5
Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xpbmtI
aWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlzdGVuZXJMZWFrVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXgg
ZTgxNmUxMTNkMjczNzM0MTRiMDc5NDcwODI3OGQwYTc0ODFmYTIyOS4uM2Y3OGUwMzg4NDk2MjI4
YjM5NjM5ZDQ3NmRkZTI3ZWJmMTczM2VmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYktpdC5jcHAKaW5kZXggOTMzMWQwNTNhMmQ1YmY0NGI5NWMyZjRhNjA2Y2U5YmMx
ZjM3YjE2MC4uYzIyYjQ0NDRjMWU5MDgzOTBlZWE1MDFhODhmYWQxY2Q5YWE2YzZiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAKKyNpbmNsdWRlICJJbWFnZURlY29k
aW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCkBAIC0xNjUsNiArMTY2LDcg
QEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQogI2VuZGlmCiAgICAgc193ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQgPSAwOworICAgIFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsK
ICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsKICAgICBXZWJQcmVyZW5kZXJpbmdTdXBwb3J0Ojpz
aHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdz
SW1wbC5jcHAKaW5kZXggMTZiYzQzMTFiOTczYjQ5MzM4Y2RkYTBkZWIwNTUxZjFlOWRkYzllMi4u
ZmY3NjljYzcyMjRmZWQyZGE0MjNmOTNkNzFkMDFhMWM1MjRhMmY1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBsLmgiCiAKICNpbmNsdWRlICJGb250UmVuZGVyaW5n
TW9kZS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViVVJMLmgiCkBAIC01NCw2ICs1NSw3IEBAIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGlu
Z3NJbXBsKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICAsIG1fdmlld3BvcnRFbmFibGVkKGZhbHNl
KQogICAgICwgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmYWxz
ZSkKICAgICAsIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmYXVsdFRpbGVTaXpl
KFdlYlNpemUoMjU2LCAyNTYpKQogICAgICwgbV9tYXhVbnRpbGVkTGF5ZXJTaXplKFdlYlNpemUo
NTEyLCA1MTIpKQogewpAQCAtNDc0LDYgKzQ3NiwxNSBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3Mt
PnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRp
bmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7
CisgICAgaWYgKCFtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgZW5hYmxlZCkKKyAg
ICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
aWYgKG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAhZW5hYmxlZCkKKyAgICAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIG1fZGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZChlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmgKaW5kZXggNzg2ZmY5NzE4ZGRhOTVjNmI5ZTk3ODhjYTExMjY0MmZhNzE0ZDNm
MS4uYjhmODVmNDc1OWVlM2Y0NTA1ZDk1MzRlMmQxMTQ4NTI0NmIzNWQ4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTc3LDYgKzc3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25z
dCBXZWJTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdlYlNp
emUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKTsKQEAgLTE3NSw2ICsxNzYsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV92aWV3cG9ydEVuYWJsZWQ7CiAgICAgYm9vbCBtX2FwcGx5RGVmYXVs
dERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yOwogICAgIGJvb2wgbV9nZXN0dXJlVGFwSGln
aGxpZ2h0RW5hYmxlZDsKKyAgICBib29sIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsK
ICAgICBXZWJTaXplIG1fZGVmYXVsdFRpbGVTaXplOwogICAgIFdlYlNpemUgbV9tYXhVbnRpbGVk
TGF5ZXJTaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFiZThhNzJjNTA0NzNh
MzNkYTJmMDEzZGMwNjNjZDcyMTU4ZjMwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwCkBAIC0wLDAgKzEs
MTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ0JyaWRnZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2lu
Y2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNsdWRlICJTa1Bp
Y3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QgOiBw
dWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7
CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1f
bGF6eURlY29kZXIgPSBJbWFnZURlY29kaW5nQnJpZGdlOjpjcmVhdGUoYWRvcHRQdHIobV9hY3R1
YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzLnNldERldmljZShuZXcgU2tEZXZpY2UoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAsIDEwMCkpLT51bnJlZigpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gRG9uJ3Qgb3du
IHRoaXMgYnV0IHNhdmVzIHRoZSBwb2ludGVyIHRvIHF1ZXJ5IHN0YXRlcy4KKyAgICBNb2NrSW1h
Z2VEZWNvZGVyKiBtX2FjdHVhbERlY29kZXI7CisgICAgT3duUHRyPEltYWdlRGVjb2RpbmdCcmlk
Z2U+IG1fbGF6eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZh
cyBtX2NhbnZhczsKK307CisKK1RFU1RfRihJbWFnZURlY29kaW5nQnJpZGdlVGVzdCwgZHJhd0lu
dG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UoYWRvcHRQ
dHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05hdGl2ZUltYWdl
KCkpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgaW1h
Z2UtPmJpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29kZXItPnNp
emUoKS5oZWlnaHQoKSwgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpbWFnZS0+Yml0
bWFwKCkuaXNJbW11dGFibGUoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGlj
dHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1h
cChpbWFnZS0+Yml0bWFwKCksIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsK
KyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNU
X0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisK
K1RFU1RfRihJbWFnZURlY29kaW5nQnJpZGdlVGVzdCwgZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUp
Cit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UoYWRvcHRQdHIobV9sYXp5RGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05hdGl2ZUltYWdlKCkpKTsKKyAgICBT
a0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBpbWFnZS0+cmVzaXplZEJpdG1hcChTa0lTaXplOjpNYWtl
KDUwLCA1MSksIFNrSVJlY3Q6Ok1ha2VXSCg1MCwgNTEpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2Nh
bGVkQml0bWFwLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShzY2FsZWRCaXRtYXAuaXNJbW11
dGFibGUoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzY2FsZWRCaXRtYXAud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDUxLCBzY2FsZWRCaXRtYXAuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUSgwLCBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgU2tDYW52
YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAg
IHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoc2NhbGVkQml0bWFwLCAwLCAwKTsKKyAgICBtX3BpY3R1
cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3Bp
Y3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2YyMzc0NGU1MWZk
ZTQzYzE2NGIzMTEwMWQwNWIzMzA3MzJjMmZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTW9ja0ltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyIDog
cHVibGljIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgTW9ja0ltYWdlRGVjb2RlcigpCisg
ICAgICAgIDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpCisgICAgICAgICwgbV9mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudCgwKQorICAgIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgZmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICJtb2NrIjsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qp
CisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisKKyAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIHJl
dHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIH0KKworICAgIGludCBmcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7
IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1vY2tJbWFnZURlY29kZXJfaApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDlmNDVl
NjVkZWE2ZmIyYTY2Mzc3MGM2ZmJiMGVkNjFlNmY5Y2RhNTkuLjRiODJlMWQ3ZTI4ZTMwNWYzZTYx
NmZmYWMzNDRmODIzM2E2ZWNlZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8
aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVy
cmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyB0byBEUlQuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAgICAgICAoVGVzdFNo
ZWxsOjpyZXNldFdlYlNldHRpbmdzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaDoKKyAgICAgICAgKFRlc3RTaGVsbDo6c2V0RGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpyZXNldCk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaDoKKyAgICAgICAgKFdlYlBy
ZWZlcmVuY2VzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0LnZpcnR1YWxfdGVzdF9zdWl0ZXMp
OgorCiAyMDEyLTEwLTA0ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKICAgICAgICAgW0VGTF0gQWRkIGxpYnhtbCAyLjguMCB0byBqaGJ1aWxkCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXgg
MzBjZTI4ODUxZmM5YTlhNDZiOGI2M2U2ZGJkMDBkYTFjM2ZlYTgzOC4uNWEzMjEwNDQ5NmY3OWIx
ZjJhNDU0OGIzNjUzNDU2YjQwNjFmYTZiNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY29u
c3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZFBhaW50aW5nW10gPSAiLS1lbmFibGUtYWNj
ZWxlcmF0ZWQtcGFpbgogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvclZpZGVvW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtdmlkZW8iOwogc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uVXNlR3JhcGhpY3NDb250ZXh0M0RJbXBsZW1lbnRhdGlvbltd
ID0gIi0tdXNlLWdyYXBoaWNzLWNvbnRleHQtM2QtaW1wbGVtZW50YXRpb249IjsKIHN0YXRpYyBj
b25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10
aWxlLXBhaW50aW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1h
Z2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIjsKIAogc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzT3B0W10gPSAiLS1zdHJlc3Mtb3B0IjsKIHN0YXRp
YyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc0Rlb3B0W10gPSAiLS1zdHJlc3MtZGVvcHQiOwpAQCAt
MTMzLDYgKzEzNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgYm9v
bCBkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQ
YWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQg
PSBmYWxzZTsKKyAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsK
ICAgICBib29sIHN0cmVzc09wdCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxz
ZTsKICAgICBib29sIGhhcmR3YXJlQWNjZWxlcmF0ZWRHTCA9IGZhbHNlOwpAQCAtMTgzLDYgKzE4
NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5rbm93biBHcmFwaGljQ29udGV4dDNEIGltcGxlbWVudGF0aW9uICVz
XG4iLCBpbXBsZW1lbnRhdGlvbi5jX3N0cigpKTsKICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVu
dCA9PSBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmcpCiAgICAgICAgICAgICBwZXJUaWxlUGFp
bnRpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9u
RW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nKQorICAgICAgICAgICAgZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlv
blN0cmVzc09wdCkKICAgICAgICAgICAgIHN0cmVzc09wdCA9IHRydWU7CiAgICAgICAgIGVsc2Ug
aWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc0Rlb3B0KQpAQCAtMjIyLDYgKzIyNiw3IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgIHNoZWxsLnNldERlZmVycmVk
MmRDYW52YXNFbmFibGVkKGRlZmVycmVkMkRDYW52YXNFbmFibGVkKTsKICAgICAgICAgc2hlbGwu
c2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQp
OwogICAgICAgICBzaGVsbC5zZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKHBlclRpbGVQYWludGlu
Z0VuYWJsZWQpOworICAgICAgICBzaGVsbC5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRKYXZhU2Ny
aXB0RmxhZ3MoamF2YVNjcmlwdEZsYWdzKTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzT3B0KHN0
cmVzc09wdCk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc0Rlb3B0KHN0cmVzc0Rlb3B0KTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDMyNTg1ZmFh
MWIyZDhhZDgxYTgzYjE1ZThmNzEyYmQ4Y2E3MjQ4OWIuLmFjNzc1OTY4MWEwNDZkMDNkNDcxOGZj
NDU4YzI3ZTgyZTE0NjE3OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcApAQCAtMTE0LDYgKzExNCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAg
ICAsIG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVk
MmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAg
ICAsIG1fc3RyZXNzT3B0KGZhbHNlKQogICAgICwgbV9zdHJlc3NEZW9wdChmYWxzZSkKICAgICAs
IG1fZHVtcFdoZW5GaW5pc2hlZCh0cnVlKQpAQCAtMjI5LDYgKzIzMCw3IEBAIHZvaWQgVGVzdFNo
ZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hY2Nl
bGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAg
ICAgbV9wcmVmcy5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IG1fZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQ7CiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IG1fYWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgbV9wcmVmcy5kZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkID0gbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIG1fcHJlZnMuYXBw
bHlUbygmd2ViVmlldyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmgKaW5kZXggNDRiNWFlMzg4YzY4ZDY1ZGU4OTBmYzgwMGZlZDUyMjllZWMyYTMyNC4uMzky
NjYyNDQ2OWI2OGNjYmM4NzRiNDkxZWE0ODNhMGI2MzkyY2U1NSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZl
cnJlZDJkQ2FudmFzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFjY2VsZXJhdGVk
UGFpbnRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFi
bGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29s
KTsKKyAgICB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KSB7IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICNpZiBkZWZp
bmVkKE9TX1dJTikKICAgICAvLyBBY2Nlc3MgdG8gdGhlIGZpbmlzaGVkIGV2ZW50LiBVc2VkIGJ5
IHRoZSBzdGF0aWMgV2F0Y2hEb2cgdGhyZWFkLgogICAgIEhBTkRMRSBmaW5pc2hlZEV2ZW50KCkg
eyByZXR1cm4gbV9maW5pc2hlZEV2ZW50OyB9CkBAIC0yMzUsNiArMjM2LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBtX2FjY2VsZXJh
dGVkUGFpbnRpbmdFbmFibGVkOwogICAgIGJvb2wgbV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOwor
ICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIFdlYlByZWZlcmVu
Y2VzIG1fcHJlZnM7CiAgICAgYm9vbCBtX3N0cmVzc09wdDsKICAgICBib29sIG1fc3RyZXNzRGVv
cHQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHAKaW5kZXggNWVlYmY1OTZkOTc2MjRkMTliN2Y3ZWRjM2VhY2FjYjQ2ZGI3NzUxOS4uMDk2Yzlm
YjhmY2ZlZjg1YzQxMDQ4OWI5YjNmYTkzOTI5YzdhNWYxMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTE2LDYgKzExNiw3IEBA
IHZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlc2V0KCkKICAgICBkZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZCA9IGZhbHNlOwogICAgIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAg
Zm9yY2VDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKKyAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkID0gZmFsc2U7CiAgICAgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBm
YWxzZTsKICAgICBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKICAgICBjc3NDdXN0b21G
aWx0ZXJFbmFibGVkID0gZmFsc2U7CkBAIC0yMjQsNiArMjI1LDcgQEAgdm9pZCBXZWJQcmVmZXJl
bmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZChhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0
dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMmRDYW52YXNFbmFibGVk
KTsKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0
ZWRQYWludGluZ0VuYWJsZWQpOworICAgIHNldHRpbmdzLT5zZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5z
ZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShtZWRpYVBsYXliYWNrUmVxdWlyZXNV
c2VyR2VzdHVyZSk7CiAgICAgc2V0dGluZ3MtPnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBcHBseURlZmF1bHREZXZpY2VT
Y2FsZUZhY3RvckluQ29tcG9zaXRvcihmb3JjZUNvbXBvc2l0aW5nTW9kZSk7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAppbmRleCBjMzY1NTNiMzU0
Njk2NGM3NmYyOTkxNmE5ZWE5YjllMmEyM2UyNGIyLi5lMDMxNWYyZDA3YzFlNWI5ODU1ZmU3YjNh
YTJlMTRjZjdlMWU0MGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmgKQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXMg
ewogICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBkZWZlcnJl
ZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOwor
ICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBib29sIG1lZGlhUGxh
eWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOwogICAgIGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVk
OwogICAgIGJvb2wgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGQ2OGJkNDZi
ZTljMzg1ZDYwN2VkZDNjMmQxOTYzYWU4ZmNkNTA4NmIuLjY1ZTg0YWE5MzMzOGM4YjllNzFmMTMw
MTU2NWY1M2QwOTQxMzM3ODcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzgzLDYgKzM4Myw5IEBAIGNsYXNzIENo
cm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvc29mdHdhcmVjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsnLS1lbmFibGUtc29mdHdhcmUtY29tcG9zaXRpbmcnXSksCisgICAgICAgICAgICBWaXJ0dWFs
VGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2Vz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycs
ICctLWVuYWJsZS1wZXItdGlsZS1wYWludGluZycsICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUn
XSksCiAgICAgICAgIF0KIAogICAgICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NDhjMzM5MDlkOGVlZjEyYTc1ZmIzZjRm
YzdlNzdiMTNiZDc5MjlkLi41ZDZhYmE5ZTRlZWFkNzZhYWY5M2YzOTA3NmRmMDBkZTdkMGQ4MDFh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgYSB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJy
ZWQgaW1hZ2UKKyAgICAgICAgZGVjb2RpbmcuCisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcyB3aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAg
IC0tZm9yY2UtY29tcG9zaXRpbmcgLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUt
ZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVkLgorCisyMDEyLTEw
LTAzICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW3NraWFdIERy
YXdpbmcgYSBzdWJyZWN0IG9mIGJpdG1hcCBpbWFnZSBpcyBtaXNhbGlnbmVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTEyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDMgbmV3IHRlc3RzIGFkZGVkLgor
CisgICAgICAgIC0gZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC5odG1sCisKKyAgICAgICAgVGhp
cyB0ZXN0IGVubGFyZ2VzIGEgMngxIGltYWdlIGluIGEgY2FudmFzIGZvciBlYXN5IHZlcmlmaWNh
dGlvbi4KKyAgICAgICAgMi8zIG9mIHRoZSBpbWFnZSBpcyB1c2VkIGFzIHNvdXJjZSByZWN0YW5n
bGUgdG8gZXhlcmNpc2UgdGhlIGNvZGUgcGF0aAorICAgICAgICBmb3IgcGFydGlhbCBwaXhlbCBh
ZGRyZXNzaW5nLgorCisgICAgICAgIFBpeGVsIHRlc3QgcmVzdWx0IHNob3VsZCBoYXZlIDEvMyBi
bHVlIG9uIHRoZSBsZWZ0IGFuZCAyLzMgZ3JlZW4gb24gdGhlCisgICAgICAgIHJpZ2h0IHdpdGgg
Z3JhZGllbnQgYWNjb3JkaW5nIHRvIGludGVycG9sYXRpb24gc2V0dGluZ3MuCisKKyAgICAgICAg
LSBmYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQuaHRtbAorCisgICAgICAgIERyYXdzIGEg
MTF4MTEgaW1hZ2UgaW50byBhIGNhbnZhcyBpbiA4IGZyYWdtZW50cyB3aXRoIHBhcnRpYWwgcGl4
ZWxzLgorICAgICAgICBDYW52YXMgc2hvdWxkIGxvb2sganVzdCBsaWtlIGEgc2luZ2xlIGltYWdl
IGVubGFyZ2VkLgorCisgICAgICAgIC0gZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQu
aHRtbAorCisgICAgICAgIFNjYWxlIGEgMzF4MzEgaW1hZ2UgdG8gNTV4NTUuIEEgYmx1ZSBzcXVh
cmUgbW92ZXMgYWNyb3NzIHRoZSBzY2FsZWQKKyAgICAgICAgaW1hZ2Ugc3VjaCB0aGF0IHRoZSBp
bWFnZSBpcyBwYXJ0aWFsbHkgaW52YWxpZGF0ZWQuIEFmdGVyIHRoZSBhbmltYXRpb24KKyAgICAg
ICAgdGhlIGltYWdlIHNob3VsZCBsb29rIHRoZSBzYW1lLgorCisgICAgICAgICogZmFzdC9pbWFn
ZXMvcGFpbnQtc3VicmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1h
Z2VzL3BhaW50LXN1YnJlY3QtZ3JpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2ltYWdlcy9wYWludC1zdWJyZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2Vz
L3JlcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvaW1hZ2VzL3Jlc291cmNlcy9ncmlkLWxhcmdlLnBuZzogQWRkZWQuCisgICAgICAgICogZmFz
dC9pbWFnZXMvcmVzb3VyY2VzL2dyaWQtc21hbGwucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOiBBZGRlZCBpbWFnZSBmYWlsdXJlIGV4cGVj
dGF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2ltYWdlcy9wYWludC1z
dWJyZWN0LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQt
ZXhwZWN0ZWQucG5nOiBBZGRlZC4KKwogMjAxMi0xMC0wNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBNb3JlIFF0IHJlYmFzZWxpbmVzIGFmdGVyIHIxMzA0MTEu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCA0Y2Q0MzlhNTRkOWVkMzY1NmJlY2ZiZDVhNDg5ODUzYTcyNzQ3ODUzLi5jNTAzYjQ5ZTc0N2Uz
NWU1MjYzMjQxN2MyYmI2MzE5ODMyMjlkZGQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM3ODYsMyArMzc4NiwyNiBAQCB3ZWJraXQu
b3JnL2IvOTUxMjEgZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJr
aXQtdHJhbnNmb3JtLXNjYQogCiAjIFRoaXMgaXMgY2F1c2VkIGJ5IG1pc2FsaWdubWVudCB3aXRo
IGJpdG1hcCB0aWxpbmcgd2hpY2ggaXMgbm90IHlldCBmaXhlZCBieSA5NTEyMS4KIHdlYmtpdC5v
cmcvYi85NTEyMSBmYXN0L2JvcmRlcnMvYm9yZGVyLWltYWdlLXNpZGUtcmVkdWN0aW9uLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0gCisKKyMgVGhlc2UgdGVzdHMgYXJlIGZhaWxpbmcgYWxyZWFk
eSBhbmQgYmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVycmVkCisjIGltYWdl
IGRlY29kaW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvYW5p
bWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9leGlmLW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9y
aWVudGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1sYW5kc2Nh
cGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQtd2Via2l0LXRyYW5z
Zm9ybS1zY2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFn
ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1leHBsaWNpdGx5
LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1m
b2N1cy1yaW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1yaW5nLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQt
ZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9pbWFnZXMv
cGFpbnQtc3VicmVjdC1ncmlkLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDg5ZjlhZmJhODRl
YTIxYWU5ODg1NTAyYzUyZDdiMzg1MTgyNDI2CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA0NTcy
CnpjbWVITGAhfTA7OHZrT1p2QFNjSD9sNShvPkNDQ01RPyFXR0NGcVNRaXghS3ptdlB3eW5RPT1p
IVdkUEBhZDdyYgp6eH44TUZqdVVDNkIlTXM4cWA5emQ3JkQ/YTRJK3xJKk5QPFNsOGd4VW8xWG5+
Jjs5ez5KVV9oZWQyaTRBSmZHK0QKemBGemomKT9TR1N1ez5nWDFPUS1wYE9Bd0AwR05DTmZOe0s7
RitCNnBBM3QpMkpDfndNQGtKUnFuSGlZRTt5aUV+CnpuUXs2fENMJHhsJVAwTjEyUW9kfjFBKWwm
ez5tJWtFNisxdEp8NX1NantrLUw7QXNCa2l8MWwpKyozKjtCWj1BYQp6IVAjVGl1VXN8bkZ0VmRu
S2QtKzF5clE8X0BaWHxZalBTblBERVRAMEloLTVlYz10NEope2JeTlRvYGx5Yk1LI3oKeiMwMnZt
UjFGUk4jezJ6TF9wS2xOa1l7ZUw2SGRTTlg/WHZ6WFcrKklzazhHJGFTSUE3PWVQbmVaP0FoPDBS
VjM+CnpJTCEjJEkoIU96ZCVFJntAV0R3TTAwWnc/Z1A8UkgjPXMwOG5JYDJCY0JVQVp4dyQjNmUq
TT9nKXojZXtaTj1YOQp6UWQ/Vl9uIUNSelh6PmRSM3VFUj5gQFd0WGtueUF9OUNySFltezM/YSRG
SWtreCtPalJTfjE+NUI5WkZyPiNNR1AKejQwdHVecnNtKzIkSiloXz1LWmFEMkBATjVWe0sre2Nj
LXdodXMqbiolZE5tKkYhfWthe3dtWUR4O2dAWkFrRHtSCnpXLWUmdTc1aDdDRjAtZW52JEV6N1A2
Qn0tZlN9dSllM0g9PmlAflBoQGhtMSZFMjZ8VEktPmVZd15zVlFrQWooPwp6dHlOciVmUHQ5XmJA
fTM1TkYpKytNMnFlNTw2XlArVDRHe2lhPFlUSHk/Xm5fdENeWFptNmVzTHNWUlhWMGBVXmYKej0h
Xj52NGk0RGU2dFhMJGhLR2lSOXp+T05JJGltV2wzQTdYRGN+Nj9CPGd6UyRXfiVoM2Imak1nSDlM
YmN1Z3J3CnpuMzZwMlgzKyRMIUdPKG5iIzwrNXEwP3xVOTBvKHReLUhCdkwkKjJfX2teelR3aE1i
TWhlNnJBI2A1dn5hQGB9TQp6aG8yIU5JYko4NzRVeVAyS0soOHhDbng5VT1pZG0pNmxgS3dFTWpk
JUx8TTYwVFUrYXlFbSpaQU1zLSZINkpqeV8KejhpMFVYK1Z7cSgrYFljT3pOdmdCT2hIWk1hKGE4
a1o7QlJ8bU8/XjgkUT5QU3NobEs9PXBSaUBzb2U1cE9Na3JQCnphYkZDa3RWfVAzUmxUVVFmZSkx
SGV9N3cqWGIocTMhPXx+cXk1NU56cE99RVBzOGxMUzlKTGpOQUo2cWhCOVNicQp6c3VfdWVtbFJ2
Mj9QSlNEekljPC1gKy0+UlcpZC1yek80IyFBJnVwe1FmeVVMUis9USowaU5qLVk/X3BmWEE7KyEK
eiRKKTJId3ZicXZlcSVKUyM+eFRCTlB4QHtreUhqWTRHJDBOXzQ+dWRFUzl3VTVQU19+d3t1fShm
eTNiI1ApbmBZCno2KTgpMGM2S1dDWndFfmg5UmFVanFJRGE5NDIla2Vfamd9Y3RKUEV5OHVENk08
ZnwtVVFLezVlM1ZhdHNxS3FKSwp6WHB8RTQxQnRUNHc8VXJjJjFOQzVnZ3ozWGNYeE1EQ3shIXIy
cT5HQE5jKGp3Nmwkbzt7QCN2U05SRGhDUyVrPGgKekZFMnh5dCo7bGJRdno/VSYlLW1uZUQ0ZjxX
flpvJmRfX0VuTDEqMFVud3BUe1Y5bFhXbS1jdFROS25wTG59VzRaCnpwRG1yeDs8WU0rOHVJZTsz
Sk1DKT11VUJOTH1YLU8jYT54JVpZfjxWdk1RenZnfkV8Nng7UXUxTTQ/Yz9nUk4zUgp6ZGl2e3Nr
OzNwTUJ3fD5UVFg9WjUxRkNmTUtQal9LNj1IZ31yPkNjI29nRiN5S0JzSlplUXxOfGQqP188JldL
azMKem8wP1ZlN2pmT0UrfSl2fkFuJXlBNDx7NUc4eWg2ej9DZFBnR31Id3VJSWNVJT1iUDhoRTR3
VmdPd31aa3JrZGBKCno0Jjl6PjQyK0c3cWQyPzJMTms7fjxAV1k9MmBpYThLXy0pJW53cWsrdlRX
PTU4Y2hrfVdzYUEld1JOYkF4dypPOAp6aVdyclpsQDttfChxUWpYdjhPazN3RXtDMkNiY0tEPH5E
OW43bHpzdmVsMjA0eXU3XjVve2RMNlZVT2s1YDwzTTgKejxtOUJLSjwjPD9sKDhtbzhlPSZTM0pX
VyVeN1VWdzRLMmZnIWpRPmlraypkTjl+dUZ4YWdKWlNoK1JJQ1JoWFNrCnptTUQ3P3grYldwSUY9
TF5DPUh2O15AajNkR01TSylHTS1BNlVweldmVkxePVFWS08wNDlxeVFidlEyeHF7YjJFLQp6SiNA
RV8xcHNjYm0pciZoOD1jaEJPSFVhTChWSFVKNSMmWCYlYDlaIXpgKiVDUzQyVHtAaWVRQkhsXnI8
Vi0/TGcKenE4VUg3N2wzYVlCXj15USZFfUB3aTc7UCYtd2RwTWI3Sz97LXs9JSprZDAhMz5Ve0Rm
ZXtoaUVAYzZ9eDdaN2wkCnpRbjs8SXUxMz40WjZCNzx0WmkldFZldDZ8dkspSUM0Wn10dHBtZ1da
SThJSzgzKz1fSldxZHYjaXRWbXZjNHZFbQp6ajYrfk9kKjwpcUBlfVN0MGtuLUROM3N3ITRvM3p7
aE48e2BuWnV0Kl94eH56dDNINllaKShWOFJ2MlJpWjV0S34KejJKRGt5K3ZFNisjZ1RtLSUqeDsx
U2k8QStzcTloKW9uRS03LS1jZUh0OD9jLV4rTjZMTHFTcWcqdCYoTFJNPz1HCnpaR0NITkR8JmBM
OGh+TFdQJC1sb0s/QDdjUV54IUlYQ1pGTWVWWmRsSWR0X3wzNl9oUkw+TDQ2aGckIVJ3cGE+Xgp6
cCE/WXVQNG9SVFMpM352OFRvNi1MUS0hNWlURCRaTShnZHBXKGgzO3k1aWx0Y09memNIcmx3Uz14
MXgzbElFQDgKemwlTnN6X3hERSleTFJuMnNxKGY5SEM5ZG1XZjBlVnJiSTU2M3gmfVhRRys5QF4h
NC1GJnE1a0RINSEkcmdAcnstCnpXU18xUHgmdGdMO0A7Vi15OXNiZWxOXzV+NlJeZ2VKQXdQSj4p
RWsqMEluT3UxP1ZzVFc2P1hmJD9PMXYwfD53WQp5MVAyaG5aLTRfWUlEcGBRMXFWVmZ7MTVtKUAm
ZWt2KFJjWD8lVCo9O1A0SVVPeE9eJCVWKXl5OUBCUiZuNC17JHUKCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRlcyBpbiB0aGlz
IGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNvZGUgcGF0aAor
IyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167233</attachid>
            <date>2012-10-04 19:42:31 -0700</date>
            <delta_ts>2012-10-04 23:41:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121004194140.patch</filename>
            <type>text/plain</type>
            <size>75747</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTViMTJjNzU5MGFmMzMz
MGNhM2EwNDM1NmM0YTU4ZTY0ZTlmNmI5Mi4uYWU2YmEwZWVjYjkwMmY1NGQ5NzgyYjc0MmMwYzli
NmI1MDIyZWY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KwogMjAxMi0xMC0wNCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENyYXNoIGluIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZCgpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA1Nzk2OTE4N2M0Njk2YTkyOTFiMTU0ZWEzZmE2MzI0NmIzZmY1NmZkLi4w
Y2NmZDRlY2YyYzFiMTdjMWI4YjY0MDQ4ZDQ5M2U0YTQ4NDI2ZGY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xh
bUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4K
KyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNvZGluZ0JyaWRnZVRl
c3QuY3BwLiBUaGV5IHZlcmlmeQorICAgICAgICBpbWFnZSBkZWNvZGluZyBoYXBwZW5zIG9ubHkg
d2hlbiBTa1BpY3R1cmUgaXMgcmFzdGVyaXplZCBmb3IgYm90aAorICAgICAgICBzY2FsZWQgYW5k
IG5vbi1zY2FsZWQgY2FzZXMuCisKKyAgICAgICAgVGVzdHM6IEltYWdlRGVjb2RpbmdCcmlkZ2VU
ZXN0LmRyYXdJbnRvU2tQaWN0dXJlCisgICAgICAgICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdl
VGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6Cisg
ICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dl
YlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0
ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nQnJpZGdlVGVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nQnJpZGdlVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Rf
Rik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrSW1hZ2VEZWNvZGVyOjpNb2NrSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk6CisKIDIwMTItMTAt
MDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gVXBkYXRlIHNvbWUgI2luY2x1ZGVzIGZvciBQbGF0Zm9ybSBkaXJlY3RvcnkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA3YzExZTc2NzdhNzVmNDAxZTI0NTQyYWU0MjYwNjZlZjJlODhhZDVmLi5m
ZTE2Y2QzN2NlMTI5MDM2Y2I1YjhkZWYxNDY3ZmNjMDRjNzcwYWE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC00ODk5LDYgKzQ4OTksMTYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlk
Z2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01l
ZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNr
aW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggOTgxNmU2MzQxZmViMjA3NTBlMzE2MTI3
ZjYwZGU1ZjgxZjliNjk5Ni4uOThmMDg1YmVhOWZhY2YwYzdjOTYyOTBjZTk2YzdiYjZmZDYyNjRj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyAr
ODIsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFp
bGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxs
IGJlCiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29k
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVh
dGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsK
KyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KE5h
dGl2ZUltYWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9X
Tl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1BlckRlY29k
ZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4
ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2
OWExNWIuLmYxYmRjYTkyYjhhZmUxNDFiNzE5NGUxNWZjYmUxMTVkMTIwZTEwOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDgsMTEg
KzQ4LDE5IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKIHR5cGVkZWYgQ0dJ
bWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCisjZWxpZiAhVVNFKFNL
SUEpIHx8ICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYg
SW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCitjbGFzcyBJbWFnZURlY29kaW5nQnJpZGdlOwordHlwZWRlZiBJbWFnZURl
Y29kaW5nQnJpZGdlIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKK3R5cGVkZWYgSW1hZ2VEZWNv
ZGluZ0JyaWRnZSogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CisjZWxzZQordHlwZWRlZiBJbWFnZURl
Y29kZXIgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OworI2VuZGlmCisKIC8vIFJpZ2h0IG5vdyBH
SUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFu
aW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUgY29uc3RhbnRzIGJlbG93
IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJRnMgaGF2ZSBhbiBvcHRpb25h
bCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2NyaWJlcyBob3cgYW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZlNzgwOWM4YjJkNmZiMmRj
Y2ZkNTM1NDQ0NDFlYTg5YTEzYmVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwCkBAIC0w
LDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1h
Z2VEZWNvZGluZ0JyaWRnZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZShJbWFnZURlY29kZXIqIGFjdHVh
bERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYWN0dWFs
RGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNvZGluZ0Jy
aWRnZTo6fkltYWdlRGVjb2RpbmdCcmlkZ2UoKQoreworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhl
IGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdlCisgICAg
Ly8gaXMgZGVmZXJyZWQgZGVjb2RlZC4KK30KKworSW1hZ2VEZWNvZGluZ0JyaWRnZSogSW1hZ2VE
ZWNvZGluZ0JyaWRnZTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3Vy
Y2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFj
dHVhbERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2Ft
bWFBbmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoYWN0dWFsRGVjb2Rlcik7
Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gSW1hZ2VEZWNvZGluZ0JyaWRn
ZTo6Y3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ0JyaWRnZShkZWNvZGVyLmxlYWtQdHIoKSkpOwor
fQorCitTdHJpbmcgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERl
Y29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWVFeHRlbnNp
b247Cit9CisKK0ltYWdlRnJhbWUqIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBpbWFnZSBkZWNvZGluZyBp
ZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29uIGlzCisgICAgLy8gYmVj
YXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlvbiBpcyBo
YW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFkYXRhIGZ1
bmN0aW9ucyB0aGF0IGRvZXMgc3luY2hyb25vdXMKKyAgICAvLyBpbWFnZSBkZWNvZGluZy4KKyAg
ICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCisgICAgICAg
ICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291
bnQoKSA9PSAxCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkp
IHsKKworICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICAgICAg
bV9maWxlbmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24o
KTsKKworICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFw
KG1fYWN0dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUu
c2V0U2tCaXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisgICAgICAgIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVkRnJhbWUu
Z2V0U2tCaXRtYXAoKSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgICAgIC8vIFNldCBmcmFtZSB0byBwYXJ0aWFsIGJlY2F1c2UgZGVjb2RlIGRpZG4ndCBoYXBw
ZW4geWV0IHNvIHdlIGNhbid0CisgICAgICAgIC8vIHByZWRpY3QgdGhpcyBjb3JyZWN0LiBUaGlz
IGZsYWcgb25seSBoYXMgZWZmZWN0IG9uIEdJRiBpbWFnZXMgc28KKyAgICAgICAgLy8gdGhlIHZh
bHVlIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICByZXR1cm4gJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9pZCBJbWFn
ZURlY29kaW5nQnJpZGdlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikgeworICAgICAgICAvLyBLZWVw
IGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgV2ViTGF6eURlY29kaW5nSW1hZ2UgaXMgY3JlYXRl
ZCwgYXQKKyAgICAgICAgLy8gd2hpY2ggcG9pbnQgbV9kYXRhIGlzIHRyYW5zZmVyZWQuCisgICAg
ICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJl
Y2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJl
Y2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7CisgICAgICAg
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YShtX2xh
enlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAg
ICAgICAgLy8gTk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGltcGwgdGhyZWFkIHN1Ym1p
dHMgZGF0YSB0byBpbXBsCisgICAgICAgIC8vIHRocmVhZCBoZXJlLgorICAgIH0KK30KKworYm9v
bCBJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2Fj
dHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWls
YWJsZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2RpbmdCcmlk
Z2U6OnNpemUoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJl
dHVybiBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitJ
bnRTaXplIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRGVmZXJyZWQg
aW1hZ2UgZGVjb2Rpbmcgb25seSBzdXBwb3J0cyBzaW5nbGUgZnJhbWUgaW1hZ2VzIGFuZCBoYXZl
CisgICAgLy8gdW5pZm9ybSBzaXplLgorICAgIHJldHVybiBtX3NpemU7Cit9CisKK3NpemVfdCBJ
bWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNv
ZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kaW5nQnJpZGdlOjpyZXBldGl0aW9uQ291bnQo
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgIHJldHVybiBjQW5pbWF0aW9uTm9u
ZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nQnJpZGdlOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1hZ2UgZGVjb2RpbmcgaXMg
ZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQorICAgIC8vIHRo
ZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAgICBpZiAobV9hY3R1YWxE
ZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShj
bGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMgc3RhdGUgd2l0aCBJ
bWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVhbGx5IGRlY29kZWQu
IFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcgYnV0Cisg
ICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBjb2RlIHBh
dGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2RpbmdCcmlkZ2U6
OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1
YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5dGVzQXRJ
bmRleChpbmRleCk7CisKKyAgICAvLyBJZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVu
IGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJuIDAgaGVy
ZS4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z0JyaWRnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YmVmODYwN2NmZDEyYWIwNzgwY2Q2NTk1
YTg5NjM5YzgzNzE5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmgKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ0JyaWRnZV9oCisjZGVmaW5lIEltYWdl
RGVjb2RpbmdCcmlkZ2VfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAi
SW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tCaXRtYXAu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNz
IEltYWdlRGVjb2RpbmdCcmlkZ2UgeworcHVibGljOgorICAgIH5JbWFnZURlY29kaW5nQnJpZGdl
KCk7CisgICAgc3RhdGljIEltYWdlRGVjb2RpbmdCcmlkZ2UqIGNyZWF0ZShjb25zdCBTaGFyZWRC
dWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIC8vIFVzZSBvbmx5IGluIHRlc3QuCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gY3JlYXRlKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsK
KworICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworCisg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25z
dDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAg
ICBzaXplX3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsK
KyAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wgZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IEltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsKKworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVk
OworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAgSW1hZ2VG
cmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5NGY5
NmQ5ZjEyZTA4MzAzMDNlZmU2ZGIzNDFjMzNlOTk0NDZkNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHAKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJT
a1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdl
X29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
CisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZi4KK2NvbnN0IGNo
YXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworCitJbWFnZURlY29kaW5nU3RvcmUqIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZU9uTWFp
blRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sKKyAgICBp
ZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsK
K30KK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlKCkKKyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6fklt
YWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIHNfaW5zdGFu
Y2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXpl
T25NYWluVGhyZWFkKCkKK3sKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29k
aW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0
b3JlOjpzaHV0ZG93bigpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoMCk7Cit9CisK
K2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAgICYmIGJpdG1h
cC5waXhlbFJlZigpLT5nZXRVUkkoKQorICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5waXhlbFJl
ZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURlY29kZWQp
KTsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNr
Qml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFTU0VSVChj
YWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNrSVNpemU6
Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7
CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRlRnJhbWVHZW5l
cmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6TWFrZVNp
emUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxS
ZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5nLgorICAg
IFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOworICAgIGJp
dG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0SWQsIGZ1bGxT
aXplLCBmdWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVudGlmeSB0
aGlzIGlzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNvZGluZ1Bp
eGVsUmVmLgorICAgIGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7
CisgICAgYml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUgZnJvbSBy
ZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0bWFwIEltYWdl
RGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYg
Yml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAg
ICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2FzdDxMYXp5RGVjb2Rp
bmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQoIXBpeGVsUmVmLT5p
c1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+aWQoKSktPnNpemUoKSkgJiYg
IXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAwOworICAgIFNr
SVNpemUgaW1hZ2VTaXplID0gU2tJU2l6ZTo6TWFrZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhl
aWdodCgpKTsKKworICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0Jp
dG1hcCByZXNpemVkQml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5o
ZWlnaHQoKSwgcm93Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExh
enlEZWNvZGluZ1BpeGVsUmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJz
ZXQpKS0+dW5yZWYoKTsKKyAgICByZXNpemVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2
ZW50cyBTa1BpY3R1cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVk
Qml0bWFwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9v
a3VwRnJhbWVHZW5lcmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OworfQorCit2b2lkKiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7Cisg
ICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJh
dG9yKiBnZW5lcmF0b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBm
dWxsU2l6ZSA9IGdlbmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2
ZXMgdGhlIGZ1bGwgc2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNo
ZSogZnJhbWVDYWNoZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0Jp
dG1hcCBiaXRtYXA7CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6
IFBpeGVscyBhcmUgb3duZWQgYnkgdGhlIEltYWdlRGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBG
aW5kCisgICAgICAgIC8vIGEgd2F5IHRvIHRyYW5zZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUu
CisgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZ2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1l
QnVmZmVyQXRJbmRleCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUg
aWYgdGhpcyBpcyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5k
KEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFw
KCksIHRydWUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVFbXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBk
ZWNvZGluZyBlcnJvci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1h
cCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRl
KCkpOworICAgICAgICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAg
ICBpZiAoZnVsbFNpemUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5n
IGlzIGRvbmUgb24tdGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAg
ICAvLyBhZnRlciB1c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVz
dGVkIGZyYWdtZW50LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVy
YXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5D
Wk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
bV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9s
b2NrZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4
ZWxzKCk7CisgICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVk
U3Vic2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0
b3JlOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkp
OworCisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNr
Qml0bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZh
bGlkVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRo
cmVhZCgpICYmIGlzTWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6
Y3JlYXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7
CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIElt
YWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5l
cmF0b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBj
b25zdAoreworICAgIHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQoaWQpOworfQorCitJbWFn
ZUZyYW1lR2VuZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9y
KGNvbnN0IFNrQml0bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTGF6eURlY29k
ZWQoYml0bWFwKSk7CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJhdG9yKHN0YXRpY19jYXN0
PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5pZCgpKTsKK30KKwor
SW1hZ2VGcmFtZUNhY2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50
IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Zy
YW1lQ2FjaGVbaV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJu
IG1fZnJhbWVDYWNoZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNo
ZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlk
LCBzY2FsZWRTaXplKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDgwYmUwYzdl
YTBiNmM3OTU4NmE3NTA3N2JmOTIzZGZlYTI1YjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gK
KyNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisj
aW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgSW1h
Z2VGcmFtZUdlbmVyYXRvcjsKK2NsYXNzIEltYWdlRnJhbWVDYWNoZTsKK2NsYXNzIFNoYXJlZEJ1
ZmZlcjsKKworY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBJbWFnZURlY29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOwor
CisgICAgc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsK
KyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZv
aWQgc2h1dGRvd24oKTsKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0
bWFwJik7CisKKyAgICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25Q
dHI8SW1hZ2VEZWNvZGVyPik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1h
cChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJl
Y3QmIHNjYWxlZFN1YnNldCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRt
YXAmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKwor
ICAgIC8vIExvY2sgYW5kIHVubG9jayBzdXBwb3J0cyBvbmx5IG9uZSBpbWFnZSBhdCBhIHRpbWUg
c28gY2FsbCB0aGVtIGkgcGFpci4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2
b2lkIHVubG9ja1BpeGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgp
OworICAgIGJvb2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRl
RnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZyYW1l
R2VuZXJhdG9yKiBsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIEltYWdl
RnJhbWVHZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikgY29u
c3Q7CisgICAgSW1hZ2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVGcmFtZUNhY2hlKGlu
dCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBIYXNoTWFwPGludCwgT3du
UHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVjdG9y
PE93blB0cjxJbWFnZUZyYW1lQ2FjaGU+ID4gbV9mcmFtZUNhY2hlOworCisgICAgaW50IG1fbmV4
dElkOworICAgIFNrQml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTNlY2I2YWE2MGQzYzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdkMWRmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVD
YWNoZS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCit7Cit9CisKK0ltYWdlRnJhbWVD
YWNoZTo6SW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9p
ZChpZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9iaXRtYXAoYml0
bWFwKQorICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCit7Cit9CisKK2Jvb2wgSW1hZ2VG
cmFtZUNhY2hlOjppc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVkU2l6
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xZDkyOGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIzMzBmYzEwNzllNGMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUNhY2hlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VG
cmFtZUNhY2hlX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hlX2gKKworI2luY2x1ZGUgIlNrQml0
bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEltYWdl
RnJhbWVDYWNoZSBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZp
ZWQKKy8vIGJ5IHR3byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdl
IHRoYXQgdGhpcyBmcmFnbWVudCBjb21lcyBmcm9tLgorLy8gMi4gU2NhbGVkIGltYWdlIHNpemUu
CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2FjaGUoaWQsIHNjYWxlZFNpemUsIGJp
dG1hcCwgaXNDb21wbGV0ZSkpOworICAgIH0KKworICAgIEltYWdlRnJhbWVDYWNoZShpbnQgaWQs
IGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAg
fkltYWdlRnJhbWVDYWNoZSgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0
IHsgcmV0dXJuIG1fYml0bWFwOyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1f
Yml0bWFwOyB9CisKKyAgICBib29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29tcGxldGU7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2Nh
bGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFiMjc1NzgzNjBiNTk3YmVhYTc4YWRm
OTU3ODRkZjI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdl
bmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAg
ICA6IG1fZGVjb2RlcihkZWNvZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9k
ZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQor
CitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0lt
YWdlRGVjb2RlciogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJu
IG1fZGVjb2Rlci5nZXQoKTsKK30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRh
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sK
KyAgICBtX2RhdGEgPSBkYXRhOworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2Rl
ci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZTdjOWNjNTA4N2VmMmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4ZTMxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVH
ZW5lcmF0b3JfaAorI2RlZmluZSBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNr
U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJh
bWVHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVH
ZW5lcmF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkZWNvZGVy
KSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBD
cmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRl
Y29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBTa0lTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9k
ZWNvZGVyOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1f
c2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5ZTNmNmZhMTVjMTkyZWIxZTY0
ZTgyNDcxNDlkMjMzNzBlN2VmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNv
ZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xhenlEZWNv
ZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxS
ZWYoMCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAg
ICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4
ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdAoreworICAg
IHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53
aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2FsZWRTaXplLmhlaWdodCgp
ICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKS0+bG9ja1BpeGVscyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsK
K30KKwordm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpLT51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNhMmQ1YzVhZGVlZDdiNGIwMzYyYWI3
MzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVs
UmVmX2gKKworI2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQ
aXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMg
U2tQaXhlbFJlZiB7CitwdWJsaWM6CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOwor
ICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7CisKKyAgICBTS19ERUNMQVJFX1VO
RkxBVFRFTkFCTEVfT0JKRUNUKCkKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7
IH0KKyAgICBib29sIGlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAg
ICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJl
ZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9y
VGFibGUqKik7CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVh
bCBib29sIG9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
aW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxl
ZFN1YnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlE
ZWNvZGluZ1BpeGVsUmVmX2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggOGRlOTUxMDY2MWNlODNh
MDBhNTI2MGRjYzEwNTBkOGY0N2M3MWE2Zi4uNmFjNzAwOGRjZWEyMDcwYmNlM2FiM2E3MzQ4NzU2
OWI5YzQ0YzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtMzksNiArMzksMTEgQEAKICNpbmNs
dWRlICJTa1BpeGVsUmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9S
TShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJU
cmFjZUV2ZW50LmgiCisjZW5kaWYKKwogdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBTa0Jp
dG1hcCogY29uc3QmIGltYWdlLCBXVEY6Ok1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pCiB7CiAgICAgV1RGOjpNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCBp
bWFnZSk7CkBAIC04MSw2ICs4NiwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXpl
ZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0Jp
dG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVk
SW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlE
ZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNj
YWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhh
c1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAg
ICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYm
IHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKaW5kZXggMzAzZDc1OTlhOWFhZjQxZTYyODRjZTAzN2ZlYzNiZjJmZGUxZGI1
Ni4uODU1MDM4NTIwYTk4M2M2MDA2YzY0MjQ3ZTZhZDQyZmM4ZWQyNDBlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
QEAgLTE0NSw2ICsxNDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAgICB9CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9IE5hdGl2ZUlt
YWdlU2tpYShiaXRtYXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU2tCaXRtYXAm
IGdldFNrQml0bWFwKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYml0
bWFwLmJpdG1hcCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IGludCB3aWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBmNDI4Y2IxMzBiN2Q2NjdlNThmOGI5ZmVkYjY1MWQ5
Yjc4MDA2MTgwLi4zMzA2YjY1OWI3NGJjNDk3YjcwNDc4YzYzOWRlM2JjMTU4NWQyMjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc3LDkgKzc3LDExIEBACiAgICAgICAgICAg
ICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZl
bERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCi0gICAgICAgICAg
ICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNv
ZGVyLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmluZGV4IGU4MTZlMTEzZDI3MzczNDE0YjA3OTQ3MDgy
NzhkMGE3NDgxZmEyMjkuLjNmNzhlMDM4ODQ5NjIyOGIzOTYzOWQ0NzZkZGUyN2ViZjE3MzNlZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApAQCAtODUs
NiArODUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVs
dFRpbGVTaXplKFdlYlNpemUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBv
cnRzTW91c2UoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1Rv
dWNoKGJvb2wpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCmluZGV4IDkz
MzFkMDUzYTJkNWJmNDRiOTVjMmY0YTYwNmNlOWJjMWYzN2IxNjAuLmMyMmI0NDQ0YzFlOTA4Mzkw
ZWVhNTAxYTg4ZmFkMWNkOWFhNmM2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldl
YktpdC5oIgogCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5
b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlci5oIgpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgc2h1dGRvd24oKQogICAgIH0K
ICNlbmRpZgogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKKyAgICBXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CiAgICAgUGxhdGZvcm06OnNodXRkb3duKCk7
CiAgICAgV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6c2h1dGRvd24oKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDE2YmM0MzExYjk3
M2I0OTMzOGNkZGEwZGViMDU1MWYxZTlkZGM5ZTIuLmZmNzY5Y2M3MjI0ZmVkMmRhNDIzZjkzZDcx
ZDAxYTFjNTI0YTJmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1w
bC5oIgogCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgpAQCAtNTQsNiArNTUs
NyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3Mp
CiAgICAgLCBtX3ZpZXdwb3J0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fYXBwbHlEZWZhdWx0RGV2
aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoZmFsc2UpCiAgICAgLCBtX2dlc3R1cmVUYXBIaWdo
bGlnaHRFbmFibGVkKHRydWUpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
ZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAs
IG1fbWF4VW50aWxlZExheWVyU2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ3NCw2ICs0
NzYsMTUgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKICAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQor
CiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDc4NmZmOTcx
OGRkYTk1YzZiOWU5Nzg4Y2ExMTI2NDJmYTcxNGQzZjEuLmI4Zjg1ZjQ3NTllZTNmNDUwNWQ5NTM0
ZTJkMTE0ODUyNDZiMzVkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5oCkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBv
cnRzTW91c2UoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2go
Ym9vbCk7CkBAIC0xNzUsNiArMTc2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdmlld3BvcnRF
bmFibGVkOwogICAgIGJvb2wgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9z
aXRvcjsKICAgICBib29sIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQ7CisgICAgYm9vbCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxl
U2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBhYmU4YTcyYzUwNDczYTMzZGEyZjAxM2RjMDYzY2Q3MjE1OGYzMGUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVj
b2RpbmdCcmlkZ2VUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUg
IkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk1vY2tJbWFnZURlY29kZXIuaCIKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1
ZGUgIlNrRGV2aWNlLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERl
Y29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXIt
PnNldFNpemUoNjAwLCA2MTMpOworICAgICAgICBtX2xhenlEZWNvZGVyID0gSW1hZ2VEZWNvZGlu
Z0JyaWRnZTo6Y3JlYXRlKGFkb3B0UHRyKG1fYWN0dWFsRGVjb2RlcikpOworICAgICAgICBtX2Nh
bnZhcy5zZXREZXZpY2UobmV3IFNrRGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
MTAwLCAxMDApKS0+dW5yZWYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24o
KQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIC8vIERvbid0IG93biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRl
ciB0byBxdWVyeSBzdGF0ZXMuCisgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVy
OworICAgIE93blB0cjxJbWFnZURlY29kaW5nQnJpZGdlPiBtX2xhenlEZWNvZGVyOworICAgIFNr
UGljdHVyZSBtX3BpY3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0Yo
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0
cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0
dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAg
ICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRt
YXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwo
KSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisg
ICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAx
MDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsK
KyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFs
RGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3
UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZy
YW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ0JyaWRn
ZVRlc3QsIGRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFn
ZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgw
KS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gaW1h
Z2UtPnJlc2l6ZWRCaXRtYXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0go
NTAsIDUxKSk7CisgICAgRVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1hcC5pc051bGwoKSk7CisgICAg
RVhQRUNUX1RSVUUoc2NhbGVkQml0bWFwLmlzSW1tdXRhYmxlKCkpOworICAgIEVYUEVDVF9FUSg1
MCwgc2NhbGVkQml0bWFwLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MSwgc2NhbGVkQml0bWFw
LmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJl
LmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNj
YWxlZEJpdG1hcCwgMCwgMCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVY
UEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOwor
CisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwg
bV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNv
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRiMzExMDFkMDViMzMwNzMyYzJm
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0lt
YWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tJbWFnZURl
Y29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworcHVi
bGljOgorICAgIE1vY2tJbWFnZURlY29kZXIoKQorICAgICAgICA6IEltYWdlRGVjb2RlcihJbWFn
ZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclBy
b2ZpbGVBcHBsaWVkKQorICAgICAgICAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAg
ICB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAibW9jayI7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZy
YW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50OworCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUo
MSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgp
LCBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVsw
XTsKKyAgICB9CisKKyAgICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1f
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBNb2NrSW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMDI5NTY5MmE1MjA1OWIxNjBhMjE3NjcxYzFkNWI5
Njg5YTQ2ZWYzLi40MzUyZDE2ODAwMzNmNjA5MmZhMmQyMmY4NzY3NTM5MGYwYzIwZmJhIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgLS1lbmFibGUtZGVm
ZXJyZWQtaW1hZ2UtZGVjb2RpbmcgdG8gRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVs
bDo6VGVzdFNoZWxsKToKKyAgICAgICAgKFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChU
ZXN0U2hlbGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoVGVz
dFNoZWxsKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6cmVzZXQpOgorICAgICAgICAoV2ViUHJl
ZmVyZW5jZXM6OmFwcGx5VG8pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmg6CisgICAgICAgIChXZWJQcmVmZXJlbmNlcyk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENo
cm9taXVtUG9ydC52aXJ0dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAxMi0xMC0wNCAgUnl1YW4gQ2hv
aSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBBZGQgQVBJ
cyB0byBnZXQvc2V0IHRoZSBmcmFtZSBmbGF0dGVuaW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDMwY2UyODg1MWZjOWE5YTQ2
YjhiNjNlNmRiZDAwZGExYzNmZWE4MzguLjVhMzIxMDQ0OTZmNzliMWYyYTQ1NDhiMzY1MzQ1NmI0
MDYxZmE2YjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBS
ZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5h
YmxlQWNjZWxlcmF0ZWRQYWludGluZ1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXBhaW4KIHN0
YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRl
b1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXZpZGVvIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvblVzZUdyYXBoaWNzQ29udGV4dDNESW1wbGVtZW50YXRpb25bXSA9ICItLXVzZS1ncmFwaGlj
cy1jb250ZXh0LTNkLWltcGxlbWVudGF0aW9uPSI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25F
bmFibGVQZXJUaWxlUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyI7Citz
dGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmdbXSA9ICIt
LWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyI7CiAKIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvblN0cmVzc09wdFtdID0gIi0tc3RyZXNzLW9wdCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25TdHJlc3NEZW9wdFtdID0gIi0tc3RyZXNzLWRlb3B0IjsKQEAgLTEzMyw2ICsxMzQsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIGJvb2wgZGVmZXJyZWQyRENhbnZh
c0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0g
ZmFsc2U7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CisgICAgYm9v
bCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NP
cHQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc0Rlb3B0ID0gZmFsc2U7CiAgICAgYm9vbCBoYXJk
d2FyZUFjY2VsZXJhdGVkR0wgPSBmYWxzZTsKQEAgLTE4Myw2ICsxODUsOCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVu
a25vd24gR3JhcGhpY0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiAlc1xuIiwgaW1wbGVtZW50YXRp
b24uY19zdHIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxl
UGVyVGlsZVBhaW50aW5nKQogICAgICAgICAgICAgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZURlZmVycmVkSW1h
Z2VEZWNvZGluZykKKyAgICAgICAgICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSB0
cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NPcHQpCiAgICAg
ICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBv
cHRpb25TdHJlc3NEZW9wdCkKQEAgLTIyMiw2ICsyMjYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciogYXJndltdKQogICAgICAgICBzaGVsbC5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChk
ZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwu
c2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVkKTsKKyAgICAg
ICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZsYWdzKGphdmFTY3Jp
cHRGbGFncyk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NPcHQpOwogICAgICAg
ICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCAzMjU4NWZhYTFiMmQ4YWQ4MWE4M2IxNWU4
ZjcxMmJkOGNhNzI0ODliLi5hYzc3NTk2ODFhMDQ2ZDAzZDQ3MThmYzQ1OGMyN2U4MmUxNDYxNzk5
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTEx
NCw2ICsxMTQsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgLCBtX2FjY2VsZXJhdGVk
MmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChm
YWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc09wdChm
YWxzZSkKICAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2UpCiAgICAgLCBtX2R1bXBXaGVuRmluaXNo
ZWQodHJ1ZSkKQEAgLTIyOSw2ICsyMzAsNyBAQCB2b2lkIFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0
aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWQyZENhbnZhc0Vu
YWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIG1fcHJlZnMuZGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQgPSBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIG1fcHJl
ZnMuYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFi
bGVkOworICAgIG1fcHJlZnMuZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcpOwog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IDQ0YjVh
ZTM4OGM2OGQ2NWRlODkwZmM4MDBmZWQ1MjI5ZWVjMmEzMjQuLjM5MjY2MjQ0NjliNjhjY2JjODc0
YjQ5MWVhNDgzYTBiNjM5MmNlNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0K
ICAgICB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAjaWYgZGVmaW5lZChPU19XSU4pCiAgICAg
Ly8gQWNjZXNzIHRvIHRoZSBmaW5pc2hlZCBldmVudC4gVXNlZCBieSB0aGUgc3RhdGljIFdhdGNo
RG9nIHRocmVhZC4KICAgICBIQU5ETEUgZmluaXNoZWRFdmVudCgpIHsgcmV0dXJuIG1fZmluaXNo
ZWRFdmVudDsgfQpAQCAtMjM1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RlZmVy
cmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZDsKICAgICBib29sIG1fcGVyVGlsZVBhaW50aW5nRW5hYmxlZDsKKyAgICBib29sIG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJQcmVmZXJlbmNlcyBtX3ByZWZzOwogICAg
IGJvb2wgbV9zdHJlc3NPcHQ7CiAgICAgYm9vbCBtX3N0cmVzc0Rlb3B0OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IDVlZWJmNTk2
ZDk3NjI0ZDE5YjdmN2VkYzNlYWNhY2I0NmRiNzc1MTkuLjA5NmM5ZmI4ZmNmZWY4NWM0MTA0ODli
OWIzZmE5MzkyOWM3YTVmMTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lkIFdlYlByZWZlcmVu
Y2VzOjpyZXNldCgpCiAgICAgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKICAgICBh
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGZvcmNlQ29tcG9zaXRpbmdN
b2RlID0gZmFsc2U7CisgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwog
ICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7CiAgICAgbW9ja1Nj
cm9sbGJhcnNFbmFibGVkID0gZmFsc2U7CiAgICAgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCA9IGZh
bHNlOwpAQCAtMjI0LDYgKzIyNSw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8oV2Vi
Vmlldyogd2ViVmlldykKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXREZWZlcnJl
ZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Mt
PnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVk
KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0TWVkaWFQbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUobWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUpOwogICAg
IHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobW9ja1Njcm9sbGJhcnNFbmFibGVk
KTsKICAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBv
c2l0b3IoZm9yY2VDb21wb3NpdGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggYzM2NTUzYjM1NDY5NjRjNzZmMjk5MTZhOWVh
OWI5ZTJhMjNlMjRiMi4uZTAzMTVmMmQwN2MxZTViOTg1NWZlN2IzYWEyZTE0Y2Y3ZTFlNDBiZiAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCkBA
IC0xMDksNiArMTA5LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzIHsKICAgICBib29sIGFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7
CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBib29sIGRlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2Vy
R2VzdHVyZTsKICAgICBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZDsKICAgICBib29sIGNzc0N1
c3RvbUZpbHRlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCBkNjhiZDQ2YmU5YzM4NWQ2MDdlZGQzYzJk
MTk2M2FlOGZjZDUwODZiLi42NWU4NGFhOTMzMzhjOGI5ZTcxZjEzMDE1NjVmNTNkMDk0MTMzNzg3
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW0ucHkKQEAgLTM4Myw2ICszODMsOSBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6
CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L3NvZnR3YXJlY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29t
cG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLXNvZnR3
YXJlLWNvbXBvc2l0aW5nJ10pLAorICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdmYXN0L2ltYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1lbmFibGUtcGVyLXRp
bGUtcGFpbnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAogICAgICAgICBdCiAK
ICAgICAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYTU5NjQxMGZlZDUwMGZjYWQ3NmExOWI1YjRlMTI4ZThjNTExYzY3Yy4u
NTYxOGRmMTQ1MWQ3MjE3ZWUzNmI0MWYxYjM4ZTdhNjE2ODU3ZDM0ZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgdmlydHVh
bCB0ZXN0IHN1aXRlIGZvciBDaHJvbWl1bSB0byB0ZXN0IGRlZmVycmVkIGltYWdlCisgICAgICAg
IGRlY29kaW5nLgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMgd2lsbCBiZSB0ZXN0ZWQgd2l0aAorICAgICAgICAtLWZvcmNlLWNvbXBvc2l0
aW5nIC0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRl
Y29kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9SRUFETUUudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0wNCAgRG91Z2xhcyBTdG9j
a3dlbGwgIDxkc3RvY2t3ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVu
cmV2aWV3ZWQuIFJlYmFzZWxpbmUgbWFjL3dpbiByZXN1bHRzIGFmdGVyIHIxMzAzNTUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ5MTE3
ZDhlMjRhMDg0NDIzZjZjM2NiYjQxOWRhZGVkMjA5NzYwZmQuLmNhZjczMTY2Y2VjODgwNzQwNzJl
ZWQ1OGNhOTNjNWRkMWMyMTk2MGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzc2OCwzICszNzY4LDI2IEBAIHdlYmtpdC5vcmcvYi85
NTEyMSBmYXN0L2ltYWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5kLXdlYmtpdC10cmFu
c2Zvcm0tc2NhCiAKICMgVGhpcyBpcyBjYXVzZWQgYnkgbWlzYWxpZ25tZW50IHdpdGggYml0bWFw
IHRpbGluZyB3aGljaCBpcyBub3QgeWV0IGZpeGVkIGJ5IDk1MTIxLgogd2Via2l0Lm9yZy9iLzk1
MTIxIGZhc3QvYm9yZGVycy9ib3JkZXItaW1hZ2Utc2lkZS1yZWR1Y3Rpb24uaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXSAKKworIyBUaGVzZSB0ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBi
ZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2Rp
bmcgdGhleSBuZWVkIHRvIGJlIHN1cHByZXNzZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1n
aWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYt
b3JpZW50YXRpb24tY3NzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRp
b24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvc3VwcG9ydC1icm9rZW4taW1hZ2UtZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvY29sb3ItanBlZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJy
ZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdlLWNoZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1jb3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNj
YWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmljb24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJp
dGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJp
bmctb3V0bGluZS1jb2xvci1ub3QtaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFp
bnQtc3VicmVjdC1ncmlkLmh0bWwgWyBUaW1lb3V0IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIx
OTg5OTljYjdkODUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEs
MiBAQAorIyBUZXN0IHN1aXRlcyBpbiB0aGlzIGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcnIGNvZGUgcGF0aAorIyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167262</attachid>
            <date>2012-10-04 23:41:43 -0700</date>
            <delta_ts>2012-10-05 11:50:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121004234051.patch</filename>
            <type>text/plain</type>
            <size>75777</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM0MDc1OWI0Y2JlZGJk
MmRkNjM4ZWJhOWQ2YWQxNmNiOGNmYTljMS4uYTM2M2VlZjRhZTBmNDAyMzZkMWZhZTk0Nzc5YWEy
MDE5MDIzZGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KwogMjAxMi0xMC0wNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGZvbnQgZm9yIGRhdGUvdGltZSBpbnB1dCB0eXBlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZGY5ZmY3MDhkY2U4OWJiZjYwMmE5MmZmOTA3NzZiYTMwNTBjNzNjOS4uN2Mz
OTNlMjVkNTQzZGM3NjlmZDQ0YmRkNGUwYzliZWI2MmY0YTZlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGlt
YWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBuZXcgdW5pdCB0ZXN0cyBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisg
ICAgICAgIFRoZXNlIHRlc3RzIGFyZSBkZWZpbmVkIGluIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0
LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdo
ZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBu
b24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kaW5nQnJpZGdlVGVz
dC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ0JyaWRnZVRl
c3QuZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpzaHV0ZG93bik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJT
ZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVz
dHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdCcmlkZ2VUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTA0
ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW1dIEltcHJvdmUgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKCkgc3RhYmlsaXR5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggM2YyMmFkMWQ1M2ZkYmU0MzE3MTk2MGRkMmE4MDJlMDE0ODllNTVjNC4u
N2Y4ZDAxYjM5YTNhZTRiNzcwNDg2Y2VjOWM3NmE5MjRmZDNjODFlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDkwMyw2ICs0OTAzLDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJp
ZGdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2Rp
bmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDk4MTZlNjM0MWZlYjIwNzUwZTMxNjEy
N2Y2MGRlNWY4MWY5YjY5OTYuLjk4ZjA4NWJlYTlmYWNmMGM3Yzk2MjkwY2U5NmM3YmI2ZmQ2MjY0
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc4LDcg
KzgyLDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZh
aWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2ls
bCBiZQogICAgIC8vIG1hZGUuCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNv
ZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7
CisgICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihO
YXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNv
ZGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBp
eGVsc1BlckRlY29kZWRJbWFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAppbmRleCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2
NjlhMTViLi5mMWJkY2E5MmI4YWZlMTQxYjcxOTRlMTVmY2JlMTE1ZDEyMGUxMDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ4LDEx
ICs0OCwxOSBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIENH
SW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQorI2VsaWYgIVVTRShT
S0lBKSB8fCAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVm
IEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZTsKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGluZ0JyaWRnZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBlZGVmIEltYWdlRGVj
b2RpbmdCcmlkZ2UqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vsc2UKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBSaWdodCBub3cg
R0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBh
bmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBiZWxv
dyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUgYW4gb3B0aW9u
YWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93IGFuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ZTc4MDljOGIyZDZmYjJk
Y2NmZDUzNTQ0NDQxZWE4OWExM2JlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmNwcApAQCAt
MCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kaW5nQnJpZGdlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lt
YWdlRGVjb2RpbmdCcmlkZ2U6OkltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FjdHVh
bERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdC
cmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdlKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQorICAg
IC8vIGlzIGRlZmVycmVkIGRlY29kZWQuCit9CisKK0ltYWdlRGVjb2RpbmdCcmlkZ2UqIEltYWdl
RGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24pCit7CisgICAgSW1hZ2VEZWNvZGVyKiBh
Y3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdh
bW1hQW5kQ29sb3JPcHRpb24pOworICAgIGlmICghYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29kaW5nQnJpZGdlKGFjdHVhbERlY29kZXIp
OworfQorCitQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IEltYWdlRGVjb2RpbmdCcmlk
Z2U6OmNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoZGVjb2Rlci5sZWFrUHRyKCkpKTsK
K30KKworU3RyaW5nIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5z
aW9uOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2Rpbmcg
aWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJl
Y2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMg
aGFuZGxlZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBm
dW5jdGlvbnMgdGhhdCBkb2VzIHN5bmNocm9ub3VzCisgICAgLy8gaW1hZ2UgZGVjb2RpbmcuCisg
ICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgICAg
ICAmJiBtX2FjdHVhbERlY29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNv
dW50KCkgPT0gMQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgp
KSB7CisKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgICAg
IG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1h
cChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1l
LnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1l
LmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKwor
ICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBkaWRuJ3QgaGFw
cGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29ycmVjdC4gVGhp
cyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAgIC8vIHRoZSB2
YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgSW1h
Z2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2Vl
cCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxhenlEZWNvZGluZ0ltYWdlIGlzIGNyZWF0
ZWQsIGF0CisgICAgICAgIC8vIHdoaWNoIHBvaW50IG1fZGF0YSBpcyB0cmFuc2ZlcmVkLgorICAg
ICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFS
ZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9s
YXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cisg
ICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVjb2RlZCBvbiBpbXBsIHRocmVhZCBzdWJt
aXRzIGRhdGEgdG8gaW1wbAorICAgICAgICAvLyB0aHJlYWQgaGVyZS4KKyAgICB9Cit9CisKK2Jv
b2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFp
bGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kaW5nQnJp
ZGdlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKwor
SW50U2l6ZSBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKKworICAgIC8vIERlZmVycmVk
IGltYWdlIGRlY29kaW5nIG9ubHkgc3VwcG9ydHMgc2luZ2xlIGZyYW1lIGltYWdlcyBhbmQgaGF2
ZQorICAgIC8vIHVuaWZvcm0gc2l6ZS4KKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3Qg
SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVDb3VudCgpCit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAg
IHJldHVybiAxOworfQorCitpbnQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1hdGlvbk5v
bmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQoreworICAgIC8vIElmIGltYWdlIGRlY29kaW5nIGlz
IGRlZmVycmVkIHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hlIGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0
aGUgY29tcG9zaXRvciBhbmQgdGhpcyBjYWxsIGlzIGlnbm9yZWQuCisgICAgaWYgKG1fYWN0dWFs
RGVjb2RlcikKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUo
Y2xlYXJCZWZvcmVGcmFtZSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKKworICAgIC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGgg
SW1hZ2VEZWNvZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVk
LiBSZXR1cm4gdHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAor
ICAgIC8vIG1heSBub3QgZ28gdGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBw
YXRoLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kaW5nQnJpZGdl
OjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0
SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhl
biBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhl
cmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWJlZjg2MDdjZmQxMmFiMDc4MGNkNjU5
NWE4OTYzOWM4MzcxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oCkBAIC0wLDAgKzEsNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdCcmlkZ2VfaAorI2RlZmluZSBJbWFn
ZURlY29kaW5nQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFz
cyBJbWFnZURlY29kaW5nQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGluZ0JyaWRn
ZSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nQnJpZGdlKiBjcmVhdGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisKKyAgICAvLyBVc2Ugb25seSBpbiB0ZXN0LgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IGNyZWF0ZShQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7
CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKwor
ICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAgSW50U2l6ZSBzaXplKCkgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7Cisg
ICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7
CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBib29sIGZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVC
eXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBJbWFnZURlY29kaW5nQnJpZGdlKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZl
ZDsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBTdHJp
bmcgbV9maWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIEltYWdl
RnJhbWUgbV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxOTRm
OTZkOWYxMmUwODMwMzAzZWZlNmRiMzQxYzMzZTk5NDQ2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuY3BwCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFn
ZV9vcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsK
KworLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYuCitjb25zdCBj
aGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKworSW1hZ2VEZWNvZGluZ1N0b3JlKiBz
X2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1h
aW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCit7CisgICAg
aWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWlu
VGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7
Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZSgpCisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmU6On5J
bWFnZURlY29kaW5nU3RvcmUoKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQoreworICAgIHJldHVybiBzX2luc3Rh
bmNlT25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uTWFpblRocmVhZCgpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6c2h1dGRvd24oKQoreworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworfQor
Citib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYg
Yml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4ZWxSZWYoKQorICAgICAgICAmJiBiaXRt
YXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgJiYgIW1lbWNtcChiaXRtYXAucGl4ZWxS
ZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQsIHNpemVvZihsYWJlbExhenlEZWNvZGVk
KSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRT
a0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQo
Y2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXpl
OjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2Vu
ZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VT
aXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVs
UmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAg
ICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBi
aXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxs
U2l6ZSwgZnVsbFJlY3QpKS0+dW5yZWYoKTsKKworICAgIC8vIFVzZSBVUkkgdG8gaWRlbnRpZnkg
dGhpcyBpcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgb2YgdHlwZSBMYXp5RGVjb2RpbmdQ
aXhlbFJlZi4KKyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQp
OworICAgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZyb20g
cmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFn
ZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVk
U3Vic2V0KSBjb25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisg
ICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29k
aW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+
aXNTY2FsZWQobG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYm
ICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICBT
a0lTaXplIGltYWdlU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5o
ZWlnaHQoKSk7CisKKyAgICByb3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkpOworCisgICAgU2tC
aXRtYXAgcmVzaXplZEJpdG1hcDsKKyAgICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQu
aGVpZ2h0KCksIHJvd0J5dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBM
YXp5RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vi
c2V0KSktPnVucmVmKCk7CisgICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJl
dmVudHMgU2tQaWN0dXJlIGZyb20gcmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gcmVzaXpl
ZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGxv
b2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKK30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorewor
ICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgSW1hZ2VGcmFtZUdlbmVy
YXRvciogZ2VuZXJhdG9yID0gbG9va3VwRnJhbWVHZW5lcmF0b3IoaWQpOworICAgIFNrSVNpemUg
ZnVsbFNpemUgPSBnZW5lcmF0b3ItPnNpemUoKTsKKworICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNh
dmVzIHRoZSBmdWxsIHNpemUgaW1hZ2UgYXQgdGhlIG1vbWVudC4KKyAgICBJbWFnZUZyYW1lQ2Fj
aGUqIGZyYW1lQ2FjaGUgPSBsb29rdXBGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSk7CisgICAgU2tC
aXRtYXAgYml0bWFwOworCisgICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1F
OiBQaXhlbHMgYXJlIG93bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4g
RmluZAorICAgICAgICAvLyBhIHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hl
LgorICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCk7CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hl
IGlmIHRoaXMgaXMgY29tcGxldGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVu
ZChJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShpZCwgZnVsbFNpemUsIGZyYW1lLT5nZXRTa0JpdG1h
cCgpLCB0cnVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEg
ZGVjb2RpbmcgZXJyb3IuIFJlcG9ydCB0aGlzIHRvIEJpdG1hcEltYWdlLgorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBiaXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRt
YXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0
ZSgpKTsKKyAgICAgICAgYml0bWFwID0gZnJhbWVDYWNoZS0+Yml0bWFwKCk7CisgICAgfQorCisg
ICAgaWYgKGZ1bGxTaXplICE9IHNjYWxlZFNpemUpIHsKKyAgICAgICAgLy8gSW1hZ2Ugc2NhbGlu
ZyBpcyBkb25lIG9uLXRoZS1mbHkgYW5kIHNjYWxlZCBpbWFnZSBpcyBkZXN0cm95ZWQKKyAgICAg
ICAgLy8gYWZ0ZXIgdXNlLgorICAgICAgICAvLyBGSVhNRTogUmVzaXplIGp1c3QgdGhlIHJlcXVl
c3RlZCBmcmFnbWVudC4KKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcCA9IHNraWE6OkltYWdlT3Bl
cmF0aW9uczo6UmVzaXplKGJpdG1hcCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFO
Q1pPUzMsIHNjYWxlZFNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
bG9ja2VkU2tCaXRtYXAgPSBiaXRtYXA7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAubG9ja1Bp
eGVscygpOworICAgIH0KKyAgICByZXR1cm4gbV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxl
ZFN1YnNldC54KCksIHNjYWxlZFN1YnNldC55KCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6dW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKKworICAgIG1fbG9ja2VkU2tCaXRtYXAudW5sb2NrUGl4ZWxzKCk7CisgICAgbV9sb2NrZWRT
a0JpdG1hcC5yZXNldCgpOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25W
YWxpZFRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5U
aHJlYWQoKSAmJiBpc01haW5UaHJlYWQoKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6
OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQor
eworICAgICsrbV9uZXh0SWQ7CisgICAgbV9mcmFtZUdlbmVyYXRvcnMuYWRkKG1fbmV4dElkLCBJ
bWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZGVjb2RlcikpOworfQorCitJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZUdlbmVyYXRvcnMuZ2V0KGlkKTsKK30KKworSW1h
Z2VGcmFtZUdlbmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRv
cihjb25zdCBTa0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNv
ZGVkKGJpdG1hcCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2Fz
dDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisK
K0ltYWdlRnJhbWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGlu
dCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9m
cmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBtX2ZyYW1lQ2FjaGVbaV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lk
IEltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2Fj
aGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChp
ZCwgc2NhbGVkU2l6ZSkpIHsKKyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ4MGJlMGM3
ZWEwYjZjNzk1ODZhNzUwNzdiZjkyM2RmZWEyNWIxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
CkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9o
CisjZGVmaW5lIEltYWdlRGVjb2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgor
I2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIElt
YWdlRnJhbWVHZW5lcmF0b3I7CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGU7CitjbGFzcyBTaGFyZWRC
dWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsK
KworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2
b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0Jp
dG1hcCYpOworCisgICAgU2tCaXRtYXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4pOworICAgIFNrQml0bWFwIHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRt
YXAoY29uc3QgU2tCaXRtYXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpIGNvbnN0OworCisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNrQml0
bWFwJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisK
KyAgICAvLyBMb2NrIGFuZCB1bmxvY2sgc3VwcG9ydHMgb25seSBvbmUgaW1hZ2UgYXQgYSB0aW1l
IHNvIGNhbGwgdGhlbSBpIHBhaXIuCisgICAgdm9pZCogbG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAg
dm9pZCB1bmxvY2tQaXhlbHMoKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUo
KTsKKyAgICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0
ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogbG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFn
ZUZyYW1lR2VuZXJhdG9yKiBsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNv
bnN0OworICAgIEltYWdlRnJhbWVDYWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworCisgICAgSGFzaE1hcDxpbnQsIE93
blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiA+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFZlY3Rv
cjxPd25QdHI8SW1hZ2VGcmFtZUNhY2hlPiA+IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25l
eHRJZDsKKyAgICBTa0JpdG1hcCBtX2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEzZWNiNmFhNjBkM2MyYjI3ZjQxZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
Q2FjaGUuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1l
Q2FjaGU6OkltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUs
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1f
aWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJp
dG1hcCkKKyAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdl
RnJhbWVDYWNoZTo6aXNFcXVhbChpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlkID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNp
emU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWQ5MjhiOTZiZWZmNTAyNjZiYzk4YmY0NDBiMzMwZmMxMDc5ZTRjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVDYWNoZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdl
RnJhbWVDYWNoZV9oCisjZGVmaW5lIEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0Jp
dG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbWFn
ZUZyYW1lQ2FjaGUgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlm
aWVkCisvLyBieSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFn
ZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXpl
LgorY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBzY2FsZWRTaXplLCBi
aXRtYXAsIGlzQ29tcGxldGUpKTsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlk
LCBjb25zdCBTa0lTaXplJiwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAg
IH5JbWFnZUZyYW1lQ2FjaGUoKTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25z
dCB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBt
X2JpdG1hcDsgfQorCisgICAgYm9vbCBpc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbXBsZXRlOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3Nj
YWxlZFNpemU7CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmM0MzBhYjI3NTc4MzYwYjU5N2JlYWE3OGFk
Zjk1Nzg0ZGYyNmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVH
ZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisg
ICAgOiBtX2RlY29kZXIoZGVjb2RlcikKK3sKKyAgICBtX3NpemUgPSBTa0lTaXplOjpNYWtlKG1f
ZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIG1fZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKK30K
KworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworfQorCitJ
bWFnZURlY29kZXIqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVy
biBtX2RlY29kZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0
YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29k
ZXItPnNldERhdGEobV9kYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGU3YzljYzUwODdlZjJlMjllYmE3MTUxYjVhNGExYWM4NDg1OGUzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVH
ZW5lcmF0b3IuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1l
R2VuZXJhdG9yX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJT
a1NpemUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZUZy
YW1lR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1l
R2VuZXJhdG9yPiBjcmVhdGUoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2Rl
cikpOworICAgIH0KKworICAgIGV4cGxpY2l0IEltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0
cjxJbWFnZURlY29kZXI+KTsKKyAgICB+SW1hZ2VGcmFtZUdlbmVyYXRvcigpOworCisgICAgLy8g
Q3JlYXRlcyB0aGUgaW1hZ2UgZGVjb2RlciBpZiBuZWVkZWQuCisgICAgSW1hZ2VEZWNvZGVyKiBk
ZWNvZGVyKCk7CisgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgY29uc3QgU2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1f
ZGVjb2RlcjsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgU2tJU2l6ZSBt
X3NpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwOWUzZjZmYTE1YzE5MmViMWU2
NGU4MjQ3MTQ5ZDIzMzcwZTdlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXp5RGVj
b2RpbmdQaXhlbFJlZi5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCisgICAgOiBTa1BpeGVs
UmVmKDApCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisg
ICAgLCBtX3NjYWxlZFN1YnNldChzY2FsZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1Bp
eGVsUmVmOjp+TGF6eURlY29kaW5nUGl4ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGlu
Z1BpeGVsUmVmOjppc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZnVsbFNpemUgIT0gbV9zY2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGlu
Z1BpeGVsUmVmOjppc0NsaXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUu
d2lkdGgoKSAhPSBtX3NjYWxlZFN1YnNldC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQo
KSAhPSBtX3NjYWxlZFN1YnNldC5oZWlnaHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4
ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWlu
VGhyZWFkKCktPmxvY2tQaXhlbHMoaWQoKSwgbV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7
Cit9CisKK3ZvaWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2VPbk1haW5UaHJlYWQoKS0+dW5sb2NrUGl4ZWxzKCk7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5n
UGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1Bp
eGVsUmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY5MWFjMjViNGVhMjIzYTJkNWM1YWRlZWQ3YjRiMDM2MmFi
NzMxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhl
bFJlZl9oCisKKyNpbmNsdWRlICJTa0ZsYXR0ZW5hYmxlQnVmZmVycy5oIgorI2luY2x1ZGUgIlNr
UGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGlj
IFNrUGl4ZWxSZWYgeworcHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwg
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsK
KyAgICB2aXJ0dWFsIH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9V
TkZMQVRURU5BQkxFX09CSkVDVCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lk
OyB9CisgICAgYm9vbCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7Cisg
ICAgYm9vbCBpc0NsaXBwZWQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIC8vIFNrUGl4ZWxS
ZWYgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xv
clRhYmxlKiopOworICAgIHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOworICAgIHZpcnR1
YWwgYm9vbCBvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGludCBtX2lkOworICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrSVJlY3QgbV9zY2Fs
ZWRTdWJzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBMYXp5
RGVjb2RpbmdQaXhlbFJlZl9oXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IDhkZTk1MTA2NjFjZTgz
YTAwYTUyNjBkY2MxMDUwZDhmNDdjNzFhNmYuLjZhYzcwMDhkY2VhMjA3MGJjZTNhYjNhNzM0ODc1
NjliOWM0NGMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTM5LDYgKzM5LDExIEBACiAjaW5j
bHVkZSAiU2tQaXhlbFJlZi5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgorI2VuZGlmCisKIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgU2tC
aXRtYXAqIGNvbnN0JiBpbWFnZSwgV1RGOjpNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKQogewogICAgIFdURjo6TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
aW1hZ2UpOwpAQCAtODEsNiArODYsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6
ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0kKIAogU2tC
aXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxl
ZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5
RGVjb2RlZChtX2ltYWdlKSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2VPbk1haW5UaHJlYWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBz
Y2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFo
YXNSZXNpemVkQml0bWFwKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkQ2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAm
JiBzaG91bGRDYWNoZVJlc2FtcGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNl
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCmluZGV4IDMwM2Q3NTk5YTlhYWY0MWU2Mjg0Y2UwMzdmZWMzYmYyZmRlMWRi
NTYuLjg1NTAzODUyMGE5ODNjNjAwNmM2NDI0N2U2YWQ0MmZjOGVkMjQwZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CkBAIC0xNDUsNiArMTQ1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJ
bWFnZVNraWEoYml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFw
JiBnZXRTa0JpdG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2Jp
dG1hcC5iaXRtYXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAg
ICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjQyOGNiMTMwYjdkNjY3ZTU4ZjhiOWZlZGI2NTFk
OWI3ODAwNjE4MC4uMzMwNmI2NTliNzRiYzQ5N2I3MDQ3OGM2MzlkZTNiYzE1ODVkMjI1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03Nyw5ICs3NywxMSBAQAogICAgICAgICAg
ICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCTGV2
ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5j
cHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAg
ICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKKyAgICAgICAg
ICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBlODE2ZTExM2QyNzM3MzQxNGIwNzk0NzA4
Mjc4ZDBhNzQ4MWZhMjI5Li4zZjc4ZTAzODg0OTYyMjhiMzk2MzlkNDc2ZGRlMjdlYmYxNzMzZWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTg1
LDYgKzg1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29k
aW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1
bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3Bl
ckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBw
b3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNU
b3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAppbmRleCA5
MzMxZDA1M2EyZDViZjQ0Yjk1YzJmNGE2MDZjZTliYzFmMzdiMTYwLi5jMjJiNDQ0NGMxZTkwODM5
MGVlYTUwMWE4OGZhZDFjZDlhYTZjNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktp
dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
ZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxh
eW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0
aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lkIHNodXRkb3duKCkKICAgICB9
CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7CisgICAgV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwogICAgIFBsYXRmb3JtOjpzaHV0ZG93bigp
OwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRkb3duKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCAxNmJjNDMxMWI5
NzNiNDkzMzhjZGRhMGRlYjA1NTFmMWU5ZGRjOWUyLi5mZjc2OWNjNzIyNGZlZDJkYTQyM2Y5M2Q3
MWQwMWExYzUyNGEyZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJTZXR0aW5nc0lt
cGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTU0LDYgKzU1
LDcgQEAgV2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdz
KQogICAgICwgbV92aWV3cG9ydEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERl
dmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGln
aGxpZ2h0RW5hYmxlZCh0cnVlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KGZhbHNlKQogICAgICwgbV9kZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSgyNTYsIDI1NikpCiAgICAg
LCBtX21heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSg1MTIsIDUxMikpCiB7CkBAIC00NzQsNiAr
NDc2LDE1IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1fZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCAmJiBlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6
OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkICYmICFlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRk
b3duKCk7CisgICAgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsKK30K
Kwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJsZWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCA3ODZmZjk3
MThkZGE5NWM2YjllOTc4OGNhMTEyNjQyZmE3MTRkM2YxLi5iOGY4NWY0NzU5ZWUzZjQ1MDVkOTUz
NGUyZDExNDg1MjQ2YjM1ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBw
b3J0c01vdXNlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNo
KGJvb2wpOwpAQCAtMTc1LDYgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZpZXdwb3J0
RW5hYmxlZDsKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBv
c2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOworICAgIGJvb2wg
bV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIFdlYlNpemUgbV9kZWZhdWx0VGls
ZVNpemU7CiAgICAgV2ViU2l6ZSBtX21heFVudGlsZWRMYXllclNpemU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYWJlOGE3MmM1MDQ3M2EzM2RhMmYwMTNkYzA2M2NkNzIxNThmMzBl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURl
Y29kaW5nQnJpZGdlVGVzdC5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitj
bGFzcyBJbWFnZURlY29kaW5nQnJpZGdlVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3Qgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgbV9hY3R1YWxE
ZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIoKTsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVy
LT5zZXRTaXplKDYwMCwgNjEzKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlciA9IEltYWdlRGVjb2Rp
bmdCcmlkZ2U6OmNyZWF0ZShhZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9j
YW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcs
IDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3du
KCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMgdGhlIHBvaW50
ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFsRGVjb2Rl
cjsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gbV9sYXp5RGVjb2RlcjsKKyAgICBT
a1BpY3R1cmUgbV9waWN0dXJlOworICAgIFNrQ2FudmFzIG1fY2FudmFzOworfTsKKworVEVTVF9G
KEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LCBkcmF3SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25Q
dHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIEVYUEVDVF9FUShtX2Fj
dHVhbERlY29kZXItPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+Yml0bWFwKCkud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpLCBpbWFnZS0+Yml0
bWFwKCkuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9GQUxTRShpbWFnZS0+Yml0bWFwKCkuaXNOdWxs
KCkpOworICAgIEVYUEVDVF9UUlVFKGltYWdlLT5iaXRtYXAoKS5pc0ltbXV0YWJsZSgpKTsKKwor
ICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwg
MTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKGltYWdlLT5iaXRtYXAoKSwgMCwgMCk7
CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVh
bERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJh
d1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5m
cmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdCcmlk
Z2VUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1h
Z2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
MCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IGlt
YWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVjdDo6TWFrZVdI
KDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNOdWxsKCkpOworICAg
IEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAgICBFWFBFQ1RfRVEo
NTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNjYWxlZEJpdG1h
cC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVy
ZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChz
Y2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAgICBF
WFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsK
KworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VRKDEs
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJ
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMxMTAxZDA1YjMzMDczMmMy
ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJ
bWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrSW1hZ2VE
ZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKK3B1
YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFnZURlY29kZXIoSW1h
Z2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KDApCisg
ICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VG
cmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7CisgICAgICAgICsrbV9mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXpl
KDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWU5YTViOWU5YTM2NDEyOTY1ZTQ3MGJmYWU2NDk1
M2VjNWU3NGIyZi4uMjMyZjc0M2I3MjQzNGM2NDQ4MGE2YjIxMjU3NGU3NWEzMTkyYjdmNiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIC0tZW5hYmxlLWRl
ZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hl
bGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAo
VGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFRl
c3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5j
ZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlBy
ZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgIChD
aHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAtMDQgIENocmlzdG9w
aGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtX
S1RSXSBJbXBsZW1lbnQgVUlDbGllbnQgZm9jdXMgY2FsbGJhY2tzIGluIFdlYktpdFRlc3RSdW5u
ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJU
cmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNw
cAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4YjYzZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0
NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2MWZhNmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVu
YWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRl
byI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVu
dGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwog
c3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFi
bGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVm
ZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2Rpbmci
OwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQi
Owogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9w
dCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
ICAgICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2Nl
bGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5n
RW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9
IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9w
dCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0x
ODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50
YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYg
KGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBl
clRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9
PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQg
PT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0
RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAg
ICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGls
ZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNl
dEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJl
c3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVv
cHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXgg
MzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3MTJiZDhjYTcyNDg5Yi4uYWM3NzU5NjgxYTA0NmQw
M2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hl
bGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRp
bmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZh
bHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNl
KQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMjksNiArMjMwLDcgQEAgdm9p
ZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3By
ZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0g
bV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9w
cmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUzODhjNjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJh
MzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0OTFlYTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkg
eyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNj
ZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWlu
dGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFi
bGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29s
IGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQog
I2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQu
IFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVk
RXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1f
YWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0Vu
YWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2Vi
UHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9z
dHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5NzYyNGQxOWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5
Li4wOTZjOWZiOGZjZmVmODVjNDEwNDg5YjliM2ZhOTM5MjljN2E1ZjEzIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiAr
MTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52
YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxz
ZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNz
c0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdl
YlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNl
dEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsK
ICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZh
c0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChh
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0
dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tS
ZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFi
bGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVs
dERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMz
NjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4
NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVm
ZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29s
IGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0Vu
YWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wg
bWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFy
c0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXgg
ZDY4YmQ0NmJlOWMzODVkNjA3ZWRkM2MyZDE5NjNhZThmY2Q1MDg2Yi4uNjVlODRhYTkzMzM4Yzhi
OWU3MWYxMzAxNTY1ZjUzZDA5NDEzMzc4NyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zODMsNiArMzgzLDkgQEAg
Y2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgn
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2NvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2FyZS1jb21wb3NpdGluZyddKSwKKyAgICAgICAgICAg
IFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRl
Y29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRp
bmctbW9kZSddKSwKICAgICAgICAgXQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGIyMDY1OTIyMzZhNDdjZjMz
MDAwYzdmNGVjZmZjOWViOTlkYWJhMmUuLjRmYTkxOGRkZDJlN2Y4ZjI3YTA5MjM4NmFkZWNiZDFm
MTY4YTMxY2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8
aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVy
cmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVz
dCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgK
KyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAt
LWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisK
IDIwMTItMTAtMDQgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNv
bT4KIAogICAgICAgICBbV0syXVtXS1RSXSBJbXBsZW1lbnQgVUlDbGllbnQgZm9jdXMgY2FsbGJh
Y2tzIGluIFdlYktpdFRlc3RSdW5uZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDliZmJmN2MyMDIxYTM0ZGUxMzkzMjgzNTBhY2I2NjQw
MmVjNDYxYjEuLjNmNDk5NGY1OTRmNTlmYTI4NmE4ZmRhMjI1ZTZlNDRkN2MwOWFlZGYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzc3
MiwzICszNzcyLDI2IEBAIHdlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2ltYWdlcy9waXhlbC1jcmFj
ay1pbWFnZS1iYWNrZ3JvdW5kLXdlYmtpdC10cmFuc2Zvcm0tc2NhCiAKICMgVGhpcyBpcyBjYXVz
ZWQgYnkgbWlzYWxpZ25tZW50IHdpdGggYml0bWFwIHRpbGluZyB3aGljaCBpcyBub3QgeWV0IGZp
eGVkIGJ5IDk1MTIxLgogd2Via2l0Lm9yZy9iLzk1MTIxIGZhc3QvYm9yZGVycy9ib3JkZXItaW1h
Z2Utc2lkZS1yZWR1Y3Rpb24uaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXSAKKworIyBUaGVzZSB0
ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBzdWl0
ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1cHByZXNz
ZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYt
YXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4taW1hZ2Ut
ZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRoLWNvbG9y
LXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdlLWNo
ZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1j
b3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdy
aWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2Ut
YmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmlj
b24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZv
Y3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1v
dXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QtaW5oZXJp
dGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJp
bmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5
Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBUaW1l
b3V0IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRlcyBpbiB0aGlz
IGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNvZGUgcGF0aAor
IyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167362</attachid>
            <date>2012-10-05 11:50:42 -0700</date>
            <delta_ts>2012-10-05 12:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121005114950.patch</filename>
            <type>text/plain</type>
            <size>75818</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM0MDc1OWI0Y2JlZGJk
MmRkNjM4ZWJhOWQ2YWQxNmNiOGNmYTljMS4uYTM2M2VlZjRhZTBmNDAyMzZkMWZhZTk0Nzc5YWEy
MDE5MDIzZGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KwogMjAxMi0xMC0wNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGZvbnQgZm9yIGRhdGUvdGltZSBpbnB1dCB0eXBlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZGY5ZmY3MDhkY2U4OWJiZjYwMmE5MmZmOTA3NzZiYTMwNTBjNzNjOS4uN2Mz
OTNlMjVkNTQzZGM3NjlmZDQ0YmRkNGUwYzliZWI2MmY0YTZlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGlt
YWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBuZXcgdW5pdCB0ZXN0cyBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisg
ICAgICAgIFRoZXNlIHRlc3RzIGFyZSBkZWZpbmVkIGluIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0
LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdo
ZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBu
b24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kaW5nQnJpZGdlVGVz
dC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ0JyaWRnZVRl
c3QuZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpzaHV0ZG93bik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJT
ZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVz
dHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdCcmlkZ2VUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTA0
ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW1dIEltcHJvdmUgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKCkgc3RhYmlsaXR5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggM2YyMmFkMWQ1M2ZkYmU0MzE3MTk2MGRkMmE4MDJlMDE0ODllNTVjNC4u
N2Y4ZDAxYjM5YTNhZTRiNzcwNDg2Y2VjOWM3NmE5MjRmZDNjODFlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDkwMyw2ICs0OTAzLDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJp
ZGdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2Rp
bmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDk4MTZlNjM0MWZlYjIwNzUwZTMxNjEy
N2Y2MGRlNWY4MWY5YjY5OTYuLjk4ZjA4NWJlYTlmYWNmMGM3Yzk2MjkwY2U5NmM3YmI2ZmQ2MjY0
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc4LDcg
KzgyLDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZh
aWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2ls
bCBiZQogICAgIC8vIG1hZGUuCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNv
ZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7
CisgICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihO
YXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNv
ZGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBp
eGVsc1BlckRlY29kZWRJbWFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAppbmRleCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2
NjlhMTViLi5mMWJkY2E5MmI4YWZlMTQxYjcxOTRlMTVmY2JlMTE1ZDEyMGUxMDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ4LDEx
ICs0OCwxOSBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIENH
SW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQorI2VsaWYgIVVTRShT
S0lBKSB8fCAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVm
IEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZTsKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGluZ0JyaWRnZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBlZGVmIEltYWdlRGVj
b2RpbmdCcmlkZ2UqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2Vsc2UKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBSaWdodCBub3cg
R0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBh
bmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBiZWxv
dyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUgYW4gb3B0aW9u
YWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93IGFuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ZTc4MDljOGIyZDZmYjJk
Y2NmZDUzNTQ0NDQxZWE4OWExM2JlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmNwcApAQCAt
MCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kaW5nQnJpZGdlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lt
YWdlRGVjb2RpbmdCcmlkZ2U6OkltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FjdHVh
bERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdC
cmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdlKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQorICAg
IC8vIGlzIGRlZmVycmVkIGRlY29kZWQuCit9CisKK0ltYWdlRGVjb2RpbmdCcmlkZ2UqIEltYWdl
RGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24pCit7CisgICAgSW1hZ2VEZWNvZGVyKiBh
Y3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdh
bW1hQW5kQ29sb3JPcHRpb24pOworICAgIGlmICghYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29kaW5nQnJpZGdlKGFjdHVhbERlY29kZXIp
OworfQorCitQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IEltYWdlRGVjb2RpbmdCcmlk
Z2U6OmNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoZGVjb2Rlci5sZWFrUHRyKCkpKTsK
K30KKworU3RyaW5nIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5z
aW9uOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2Rpbmcg
aWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJl
Y2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMg
aGFuZGxlZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBm
dW5jdGlvbnMgdGhhdCBkb2VzIHN5bmNocm9ub3VzCisgICAgLy8gaW1hZ2UgZGVjb2RpbmcuCisg
ICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgICAg
ICAmJiBtX2FjdHVhbERlY29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNv
dW50KCkgPT0gMQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgp
KSB7CisKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgICAg
IG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1h
cChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1l
LnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1l
LmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKwor
ICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBkaWRuJ3QgaGFw
cGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29ycmVjdC4gVGhp
cyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAgIC8vIHRoZSB2
YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgSW1h
Z2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2Vl
cCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxhenlEZWNvZGluZ0ltYWdlIGlzIGNyZWF0
ZWQsIGF0CisgICAgICAgIC8vIHdoaWNoIHBvaW50IG1fZGF0YSBpcyB0cmFuc2ZlcmVkLgorICAg
ICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFS
ZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9s
YXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cisg
ICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVjb2RlZCBvbiBpbXBsIHRocmVhZCBzdWJt
aXRzIGRhdGEgdG8gaW1wbAorICAgICAgICAvLyB0aHJlYWQgaGVyZS4KKyAgICB9Cit9CisKK2Jv
b2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFp
bGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kaW5nQnJp
ZGdlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKwor
SW50U2l6ZSBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKKworICAgIC8vIERlZmVycmVk
IGltYWdlIGRlY29kaW5nIG9ubHkgc3VwcG9ydHMgc2luZ2xlIGZyYW1lIGltYWdlcyBhbmQgaGF2
ZQorICAgIC8vIHVuaWZvcm0gc2l6ZS4KKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3Qg
SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVDb3VudCgpCit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAg
IHJldHVybiAxOworfQorCitpbnQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1hdGlvbk5v
bmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQoreworICAgIC8vIElmIGltYWdlIGRlY29kaW5nIGlz
IGRlZmVycmVkIHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hlIGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0
aGUgY29tcG9zaXRvciBhbmQgdGhpcyBjYWxsIGlzIGlnbm9yZWQuCisgICAgaWYgKG1fYWN0dWFs
RGVjb2RlcikKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUo
Y2xlYXJCZWZvcmVGcmFtZSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKKworICAgIC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGgg
SW1hZ2VEZWNvZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVk
LiBSZXR1cm4gdHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAor
ICAgIC8vIG1heSBub3QgZ28gdGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBw
YXRoLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kaW5nQnJpZGdl
OjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0
SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhl
biBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhl
cmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWJlZjg2MDdjZmQxMmFiMDc4MGNkNjU5
NWE4OTYzOWM4MzcxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oCkBAIC0wLDAgKzEsNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdCcmlkZ2VfaAorI2RlZmluZSBJbWFn
ZURlY29kaW5nQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFz
cyBJbWFnZURlY29kaW5nQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGluZ0JyaWRn
ZSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nQnJpZGdlKiBjcmVhdGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisKKyAgICAvLyBVc2Ugb25seSBpbiB0ZXN0LgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IGNyZWF0ZShQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7
CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKwor
ICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAgSW50U2l6ZSBzaXplKCkgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7Cisg
ICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7
CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBib29sIGZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVC
eXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBJbWFnZURlY29kaW5nQnJpZGdlKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZl
ZDsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBTdHJp
bmcgbV9maWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIEltYWdl
RnJhbWUgbV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5NTA5
ZmJjNDBlZGJhZDk0Mzk3YzcyNjI5YzJhZWM2OWExMzczZDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuY3BwCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFn
ZV9vcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsK
KworLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYuCitjb25zdCBj
aGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKworSW1hZ2VEZWNvZGluZ1N0b3JlKiBz
X2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1h
aW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCit7CisgICAg
aWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWlu
VGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7
Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZSgpCisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmU6On5J
bWFnZURlY29kaW5nU3RvcmUoKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQoreworICAgIHJldHVybiBzX2luc3Rh
bmNlT25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uTWFpblRocmVhZCgpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6c2h1dGRvd24oKQoreworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworfQor
Citib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYg
Yml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4ZWxSZWYoKQorICAgICAgICAmJiBiaXRt
YXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgJiYgIW1lbWNtcChiaXRtYXAucGl4ZWxS
ZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQsIHNpemVvZihsYWJlbExhenlEZWNvZGVk
KSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRT
a0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQo
Y2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXpl
OjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2Vu
ZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VT
aXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVs
UmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAg
ICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBi
aXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxs
U2l6ZSwgZnVsbFJlY3QpKS0+dW5yZWYoKTsKKworICAgIC8vIFVzZSBVUkkgdG8gaWRlbnRpZnkg
dGhpcyBpcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgb2YgdHlwZSBMYXp5RGVjb2RpbmdQ
aXhlbFJlZi4KKyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQp
OworICAgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZyb20g
cmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFn
ZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVk
U3Vic2V0KSBjb25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisg
ICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29k
aW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+
aXNTY2FsZWQobG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYm
ICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICBy
b3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkpOworCisgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1h
cDsKKyAgICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVz
KTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJl
ZihwaXhlbFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVucmVmKCk7Cisg
ICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZy
b20gcmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9p
ZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAg
IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9y
KGJpdG1hcCktPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCogSW1h
Z2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworCisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0g
bG9va3VwRnJhbWVHZW5lcmF0b3IoaWQpOworICAgIFNrSVNpemUgZnVsbFNpemUgPSBnZW5lcmF0
b3ItPnNpemUoKTsKKworICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNhdmVzIHRoZSBmdWxsIHNpemUg
aW1hZ2UgYXQgdGhlIG1vbWVudC4KKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGZyYW1lQ2FjaGUgPSBs
b29rdXBGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAgYml0bWFwOworCisg
ICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhlbHMgYXJlIG93bmVk
IGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAorICAgICAgICAvLyBh
IHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAgICAgICBJbWFnZUZy
YW1lKiBmcmFtZSA9IGdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7
CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlmIHRoaXMgaXMgY29tcGxl
dGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChJbWFnZUZyYW1lQ2FjaGU6
OmNyZWF0ZShpZCwgZnVsbFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3IuIFJl
cG9ydCB0aGlzIHRvIEJpdG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKworICAgICAgICBiaXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAgYml0
bWFwID0gZnJhbWVDYWNoZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXplICE9
IHNjYWxlZFNpemUpIHsKKyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRoZS1m
bHkgYW5kIHNjYWxlZCBpbWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNlLgor
ICAgICAgICAvLyBGSVhNRTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4KKyAg
ICAgICAgbV9sb2NrZWRTa0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJp
dG1hcCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUu
d2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAu
bG9ja1BpeGVscygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBi
aXRtYXA7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIH0KKyAg
ICByZXR1cm4gbV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxlZFN1YnNldC54KCksIHNjYWxl
ZFN1YnNldC55KCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxz
KCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIG1fbG9ja2Vk
U2tCaXRtYXAudW5sb2NrUGl4ZWxzKCk7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5yZXNldCgpOwor
fQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBpc01haW5U
aHJlYWQoKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJh
dG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgICsrbV9uZXh0SWQ7
CisgICAgbV9mcmFtZUdlbmVyYXRvcnMuYWRkKG1fbmV4dElkLCBJbWFnZUZyYW1lR2VuZXJhdG9y
OjpjcmVhdGUoZGVjb2RlcikpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yKiBJbWFnZURlY29k
aW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9mcmFtZUdlbmVyYXRvcnMuZ2V0KGlkKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvciog
SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYg
Yml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1hcCkpOworICAg
IHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhl
bFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJhbWVDYWNoZSog
SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJh
bWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0Vx
dWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVbaV0u
Z2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9y
ZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkpIHsK
KyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ4MGJlMGM3ZWEwYjZjNzk1ODZhNzUwNzdi
ZjkyM2RmZWEyNWIxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5lIEltYWdlRGVj
b2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5o
IgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7
CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGU7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIElt
YWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGlu
Z1N0b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFn
ZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7Cisg
ICAgc3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tC
aXRtYXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4p
OworICAgIFNrQml0bWFwIHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAm
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQp
IGNvbnN0OworCisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBMb2NrIGFuZCB1
bmxvY2sgc3VwcG9ydHMgb25seSBvbmUgaW1hZ2UgYXQgYSB0aW1lIHNvIGNhbGwgdGhlbSBpIHBh
aXIuCisgICAgdm9pZCogbG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdm9pZCB1bmxvY2tQaXhlbHMo
KTsKKworcHJpdmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNhbGxl
ZE9uVmFsaWRUaHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBh
c3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3Vw
RnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBs
b29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdlRnJh
bWVDYWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUpOworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxJbWFnZUZyYW1lR2Vu
ZXJhdG9yPiA+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFZlY3RvcjxPd25QdHI8SW1hZ2VGcmFt
ZUNhY2hlPiA+IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0JpdG1h
cCBtX2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2MyYjI3
ZjQxZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2FjaGU6
On5JbWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVD
YWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBi
aXRtYXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3Nj
YWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1faXND
b21wbGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNFcXVh
bChpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlkID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ5MjhiOTZi
ZWZmNTAyNjZiYzk4YmY0NDBiMzMwZmMxMDc5ZTRjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVm
aW5lIEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUg
IlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbWFnZUZyYW1lQ2FjaGUgaXMgYSBz
Y2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBieSB0d28gdGhp
bmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21l
bnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3MgSW1hZ2VGcmFt
ZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lQ2FjaGU+
IGNyZWF0ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlzQ29tcGxldGUp
KTsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiwg
Y29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZyYW1lQ2FjaGUo
KTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1h
cDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorCisgICAg
Ym9vbCBpc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Cisg
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3By
aXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tC
aXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iYmM0MzBhYjI3NTc4MzYwYjU5N2JlYWE3OGFkZjk1Nzg0ZGYyNmMxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKworI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0
b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2RlY29kZXIoZGVj
b2RlcikKK3sKKyAgICBtX3NpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+c2l6ZSgpLndp
ZHRoKCksIG1fZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKK30KKworSW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworfQorCitJbWFnZURlY29kZXIqIEltYWdl
RnJhbWVHZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7
Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9kYXRhID0gZGF0
YTsKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERhdGEobV9kYXRh
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3YzljYzUwODdlZjJlMjll
YmE3MTUxYjVhNGExYWM4NDg1OGUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNkZWZp
bmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVy
OworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUo
UGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2RlcikpOworICAgIH0KKworICAg
IGV4cGxpY2l0IEltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsK
KyAgICB+SW1hZ2VGcmFtZUdlbmVyYXRvcigpOworCisgICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2Ug
ZGVjb2RlciBpZiBuZWVkZWQuCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCk7CisgICAgdm9p
ZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgY29uc3QgU2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
Citwcml2YXRlOgorICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgU2tJU2l6ZSBtX3NpemU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxS
ZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjAwOWUzZjZmYTE1YzE5MmViMWU2NGU4MjQ3MTQ5ZDIzMzcwZTdl
ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgor
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6
eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCisgICAgOiBTa1BpeGVsUmVmKDApCisgICAgLCBtX2lk
KGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3NjYWxlZFN1YnNl
dChzY2FsZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURlY29k
aW5nUGl4ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxl
ZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnVsbFNpemUg
IT0gbV9zY2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBw
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAhPSBtX3NjYWxl
ZFN1YnNldC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3NjYWxlZFN1YnNl
dC5oZWlnaHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVs
cyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJl
dHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmxvY2tQaXhl
bHMoaWQoKSwgbV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Cit9CisKK3ZvaWQgTGF6eURl
Y29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+
dW5sb2NrUGl4ZWxzKCk7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1Bp
eGVsc0FyZVdyaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGY5MWFjMjViNGVhMjIzYTJkNWM1YWRlZWQ3YjRiMDM2MmFiNzMxMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGF6eURlY29k
aW5nUGl4ZWxSZWZfaAorI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisKKyNpbmNsdWRl
ICJTa0ZsYXR0ZW5hYmxlQnVmZmVycy5oIgorI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKKyNpbmNs
dWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgeworcHVi
bGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFsIH5MYXp5
RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxFX09CSkVD
VCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9vbCBpc1Nj
YWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NsaXBwZWQo
KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIC8vIFNrUGl4ZWxSZWYgaW1wbGVtZW50YXRpb24u
CisgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopOworICAgIHZp
cnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOworICAgIHZpcnR1YWwgYm9vbCBvbkxvY2tQaXhl
bHNBcmVXcml0YWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludCBtX2lkOworICAgIFNr
SVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZl9o
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRp
dmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9O
YXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IDhkZTk1MTA2NjFjZTgzYTAwYTUyNjBkY2MxMDUwZDhm
NDdjNzFhNmYuLjZhYzcwMDhkY2VhMjA3MGJjZTNhYjNhNzM0ODc1NjliOWM0NGMzNWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAKQEAgLTM5LDYgKzM5LDExIEBACiAjaW5jbHVkZSAiU2tQaXhlbFJlZi5o
IgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2Vu
ZGlmCisKIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgU2tCaXRtYXAqIGNvbnN0JiBpbWFn
ZSwgV1RGOjpNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKQogewogICAgIFdURjo6
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgaW1hZ2UpOwpAQCAtODEsNiAr
ODYsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0kKIAogU2tCaXRtYXAgTmF0aXZlSW1hZ2VT
a2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3Qg
U2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChtX2ltYWdlKSkK
KyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQo
KS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJbWFnZVNpemUsIHNj
YWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNpemVkQml0bWFwKHNj
YWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAgIGJvb2wgc2hvdWxk
Q2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2Ft
cGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4
IDMwM2Q3NTk5YTlhYWY0MWU2Mjg0Y2UwMzdmZWMzYmYyZmRlMWRiNTYuLjg1NTAzODUyMGE5ODNj
NjAwNmM2NDI0N2U2YWQ0MmZjOGVkMjQwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1LDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkg
KiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFwLCAx
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsKKyAg
ICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25z
dDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKaW5kZXggZjQyOGNiMTMwYjdkNjY3ZTU4ZjhiOWZlZGI2NTFkOWI3ODAwNjE4MC4uMzMwNmI2
NTliNzRiYzQ5N2I3MDQ3OGM2MzlkZTNiYzE1ODVkMjI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCkBAIC03Nyw5ICs3NywxMSBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBh
dGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAg
J3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
SW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAg
ICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0
ZW5lckxlYWtUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0
dGluZ3MuaAppbmRleCBlODE2ZTExM2QyNzM3MzQxNGIwNzk0NzA4Mjc4ZDBhNzQ4MWZhMjI5Li4z
Zjc4ZTAzODg0OTYyMjhiMzk2MzlkNDc2ZGRlMjdlYmYxNzMzZWYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJT
dHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXpl
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChi
b29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9v
bCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAppbmRleCA5MzMxZDA1M2EyZDViZjQ0Yjk1
YzJmNGE2MDZjZTliYzFmMzdiMTYwLi5jMjJiNDQ0NGMxZTkwODM5MGVlYTUwMWE4OGZhZDFjZDlh
YTZjNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAg
LTE2NSw2ICsxNjYsNyBAQCB2b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dl
YktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjpzaHV0ZG93bigpOwogICAgIFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRl
cmluZ1N1cHBvcnQ6OnNodXRkb3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCAxNmJjNDMxMWI5NzNiNDkzMzhjZGRhMGRlYjA1
NTFmMWU5ZGRjOWUyLi5mZjc2OWNjNzIyNGZlZDJkYTQyM2Y5M2Q3MWQwMWExYzUyNGEyZjUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUg
IkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTU0LDYgKzU1LDcgQEAgV2ViU2V0dGluZ3NJ
bXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgICwgbV92aWV3cG9y
dEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5D
b21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0cnVl
KQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9k
ZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSgyNTYsIDI1NikpCiAgICAgLCBtX21heFVudGlsZWRMYXll
clNpemUoV2ViU2l6ZSg1MTIsIDUxMikpCiB7CkBAIC00NzQsNiArNDc2LDE1IEBAIHZvaWQgV2Vi
U2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAg
ICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
K3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAm
JiBlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBpZiAobV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmICFlbmFi
bGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgbV9kZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsKK30KKwogdm9pZCBXZWJTZXR0aW5n
c0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChi
b29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCA3ODZmZjk3MThkZGE5NWM2YjllOTc4OGNh
MTEyNjQyZmE3MTRkM2YxLi5iOGY4NWY0NzU5ZWUzZjQ1MDVkOTUzNGUyZDExNDg1MjQ2YjM1ZDhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAt
NzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0
VGlsZVNpemUoV2ViU2l6ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNF
bmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVk
KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNoKGJvb2wpOwpAQCAtMTc1LDYg
KzE3Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZpZXdwb3J0RW5hYmxlZDsKICAgICBib29s
IG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3I7CiAgICAgYm9vbCBt
X2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkOwogICAgIFdlYlNpemUgbV9kZWZhdWx0VGlsZVNpemU7CiAgICAgV2ViU2l6
ZSBtX21heFVudGlsZWRMYXllclNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWJlOGE3MmM1MDQ3M2EzM2RhMmYwMTNkYzA2M2NkNzIxNThmMzBlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5j
cHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3Rv
cmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1h
Z2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0RldmljZS5oIgor
I2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBJbWFnZURlY29kaW5n
QnJpZGdlVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJ
bWFnZURlY29kZXIoKTsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXRTaXplKDYwMCwgNjEz
KTsKKyAgICAgICAgbV9sYXp5RGVjb2RlciA9IEltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZShh
ZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5l
dyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVm
KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVz
LgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8SW1h
Z2VEZWNvZGluZ0JyaWRnZT4gbV9sYXp5RGVjb2RlcjsKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJl
OworICAgIFNrQ2FudmFzIG1fY2FudmFzOworfTsKKworVEVTVF9GKEltYWdlRGVjb2RpbmdCcmlk
Z2VUZXN0LCBkcmF3SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lh
PiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFz
TmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29kZXItPnNpemUo
KS53aWR0aCgpLCBpbWFnZS0+Yml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0
dWFsRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpLCBpbWFnZS0+Yml0bWFwKCkuaGVpZ2h0KCkpOwor
ICAgIEVYUEVDVF9GQUxTRShpbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9U
UlVFKGltYWdlLT5iaXRtYXAoKS5pc0ltbXV0YWJsZSgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1w
Q2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2Fu
dmFzLT5kcmF3Qml0bWFwKGltYWdlLT5iaXRtYXAoKSwgMCwgMCk7CisgICAgbV9waWN0dXJlLmVu
ZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0dXJl
KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCgpKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LCBkcmF3U2NhbGVk
SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9w
dFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1h
Z2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFw
KFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVY
UEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxl
ZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAg
RVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7
CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygx
MDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDAp
OworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRy
YXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMxMTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAt
MCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1
ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJ
bWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1h
Z2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJl
bXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAg
ICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIm1vY2siOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dDsKKworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAg
aW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0lt
YWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggOWU5YTViOWU5YTM2NDEyOTY1ZTQ3MGJmYWU2NDk1M2VjNWU3NGIyZi4uMjMyZjc0
M2I3MjQzNGM2NDQ4MGE2YjIxMjU3NGU3NWEzMTkyYjdmNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4
ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29k
aW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5k
ZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6Cisg
ICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
V2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRv
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgor
ICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVh
bF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAtMDQgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3Rv
cGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtXS1RSXSBJbXBsZW1lbnQgVUlD
bGllbnQgZm9jdXMgY2FsbGJhY2tzIGluIFdlYktpdFRlc3RSdW5uZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFm
YzlhOWE0NmI4YjYzZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2
NTM0NTZiNDA2MWZhNmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1w
YWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10gPSAiLS11c2Ut
Z3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRp
bmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5n
W10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVk
MkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5h
YmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwor
ICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJv
b2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxl
bWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlv
bkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJs
ZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZl
cnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0
KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1l
bnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVy
YXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAg
IHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7
CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJ
bWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhq
YXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsK
ICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFh
ODNiMTVlOGY3MTJiZDhjYTcyNDg5Yi4uYWM3NzU5NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJl
MTQ2MTc5OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CkBAIC0xMTQsNiArMTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2Nl
bGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQor
ICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJl
c3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hl
bkZpbmlzaGVkKHRydWUpCkBAIC0yMjksNiArMjMwLDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0
V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRD
YW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZz
LmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAg
ICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJW
aWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRl
eCA0NGI1YWUzODhjNjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4
Y2NiYzg3NGI0OTFlYTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52
YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFi
bGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZv
aWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lO
KQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRp
YyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBt
X2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVm
czsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCA1
ZWViZjU5NmQ5NzYyNGQxOWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5Li4wOTZjOWZiOGZjZmVmODVj
NDEwNDg5YjliM2ZhOTM5MjljN2E1ZjEzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQ
cmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7
CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBv
c2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBm
YWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAg
IG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJs
ZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBs
eVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0
RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNl
dHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxh
eWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJl
KTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJz
RW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9y
SW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5
OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2Ux
ZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5j
ZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9v
bCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRlZmVycmVkMmRDYW52YXNF
bmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBk
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVp
cmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9v
bCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggZDY4YmQ0NmJlOWMzODVkNjA3
ZWRkM2MyZDE5NjNhZThmY2Q1MDg2Yi4uNjVlODRhYTkzMzM4YzhiOWU3MWYxMzAxNTY1ZjUzZDA5
NDEzMzc4NyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zODMsNiArMzgzLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0
KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2NvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJs
ZS1zb2Z0d2FyZS1jb21wb3NpdGluZyddKSwKKyAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUo
J3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxl
LXBlci10aWxlLXBhaW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSddKSwKICAgICAg
ICAgXQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGIyMDY1OTIyMzZhNDdjZjMzMDAwYzdmNGVjZmZjOWViOTlk
YWJhMmUuLjRmYTkxOGRkZDJlN2Y4ZjI3YTA5MjM4NmFkZWNiZDFmMTY4YTMxY2MgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBh
IHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQor
ICAgICAgICBkZWNvZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1j
b21wb3NpdGluZyAtLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1p
bWFnZS1kZWNvZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAtMDQgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbV0sy
XVtXS1RSXSBJbXBsZW1lbnQgVUlDbGllbnQgZm9jdXMgY2FsbGJhY2tzIGluIFdlYktpdFRlc3RS
dW5uZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDliZmJmN2MyMDIxYTM0ZGUxMzkzMjgzNTBhY2I2NjQwMmVjNDYxYjEuLmRkNWM4ZGQz
MTExN2JhNDA4ZDExOTM4OTlhYWJmYThiMWNhNDM5Y2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzc3MiwzICszNzcyLDI3IEBAIHdl
YmtpdC5vcmcvYi85NTEyMSBmYXN0L2ltYWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5k
LXdlYmtpdC10cmFuc2Zvcm0tc2NhCiAKICMgVGhpcyBpcyBjYXVzZWQgYnkgbWlzYWxpZ25tZW50
IHdpdGggYml0bWFwIHRpbGluZyB3aGljaCBpcyBub3QgeWV0IGZpeGVkIGJ5IDk1MTIxLgogd2Vi
a2l0Lm9yZy9iLzk1MTIxIGZhc3QvYm9yZGVycy9ib3JkZXItaW1hZ2Utc2lkZS1yZWR1Y3Rpb24u
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXSAKKworIyBUaGVzZSB0ZXN0cyBhcmUgZmFpbGluZyBh
bHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgZGVmZXJyZWQKKyMg
aW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1cHByZXNzZWQgYWdhaW4uCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4
aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWxh
bmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4taW1hZ2UtZGVsZWdhdGUuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdlLWNoZWNrZXJib2FyZC5odG1sIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1jb3VudC5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJraXQt
dHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVk
LWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmljb24tYXMtaW1hZ2UuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZvY3VzLXJpbmcuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLWV4cGxp
Y2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdl
bWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QtaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3Bh
bGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIE1pc3NpbmcgXQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9SRUFETUUudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmODgyZWIwNDMyZDVm
ZDAwYjgyODFlMjg4YjE5ODk5OWNiN2Q4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50
eHQKQEAgLTAsMCArMSwyIEBACisjIFRlc3Qgc3VpdGVzIGluIHRoaXMgZGlyZWN0b3J5IHRlc3Qg
dGhlICdkZWZlcnJlZCBpbWFnZSBkZWNvZGluZycgY29kZSBwYXRoCisjIHRocm91Z2ggQ2hyb21p
dW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167364</attachid>
            <date>2012-10-05 12:07:47 -0700</date>
            <delta_ts>2012-10-05 13:49:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121005120654.patch</filename>
            <type>text/plain</type>
            <size>75880</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM0MDc1OWI0Y2JlZGJk
MmRkNjM4ZWJhOWQ2YWQxNmNiOGNmYTljMS4uYTM2M2VlZjRhZTBmNDAyMzZkMWZhZTk0Nzc5YWEy
MDE5MDIzZGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KwogMjAxMi0xMC0wNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGZvbnQgZm9yIGRhdGUvdGltZSBpbnB1dCB0eXBlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZGY5ZmY3MDhkY2U4OWJiZjYwMmE5MmZmOTA3NzZiYTMwNTBjNzNjOS4uN2Mz
OTNlMjVkNTQzZGM3NjlmZDQ0YmRkNGUwYzliZWI2MmY0YTZlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGlt
YWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBuZXcgdW5pdCB0ZXN0cyBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisg
ICAgICAgIFRoZXNlIHRlc3RzIGFyZSBkZWZpbmVkIGluIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0
LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdo
ZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBu
b24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kaW5nQnJpZGdlVGVz
dC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ0JyaWRnZVRl
c3QuZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpzaHV0ZG93bik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJT
ZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVz
dHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdCcmlkZ2VUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTA0
ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW1dIEltcHJvdmUgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKCkgc3RhYmlsaXR5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggM2YyMmFkMWQ1M2ZkYmU0MzE3MTk2MGRkMmE4MDJlMDE0ODllNTVjNC4u
N2Y4ZDAxYjM5YTNhZTRiNzcwNDg2Y2VjOWM3NmE5MjRmZDNjODFlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDkwMyw2ICs0OTAzLDE2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJp
ZGdlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2Rp
bmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDk4MTZlNjM0MWZlYjIwNzUwZTMxNjEy
N2Y2MGRlNWY4MWY5YjY5OTYuLjk4ZjA4NWJlYTlmYWNmMGM3Yzk2MjkwY2U5NmM3YmI2ZmQ2MjY0
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc4LDcg
KzgyLDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZh
aWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2ls
bCBiZQogICAgIC8vIG1hZGUuCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNv
ZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7
CisgICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihO
YXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCiAgICAgICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNv
ZGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBp
eGVsc1BlckRlY29kZWRJbWFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAppbmRleCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2
NjlhMTViLi4xNjlhNzNlZWY4YzdjN2I1Mjc0ZjQ0NDc3NzExMTU3YWM4YWI2YWQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ4LDEx
ICs0OCwyMSBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIENH
SW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQorI2VsaWYgIVVTRShT
S0lBKSB8fCAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVm
IEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZTsKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGluZ0JyaWRnZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBlZGVmIEltYWdlRGVj
b2RpbmdCcmlkZ2UqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2VsaWYgVVNFKENHKQorI2RlZmlu
ZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3RvcnkgSW1hZ2VEZWNvZGVyCisjZWxzZQordHlwZWRlZiBJ
bWFnZURlY29kZXIgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OworI2VuZGlmCisKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUgY29uc3RhbnRz
IGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJRnMgaGF2ZSBhbiBv
cHRpb25hbCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2NyaWJlcyBob3cgYW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZlNzgwOWM4YjJk
NmZiMmRjY2ZkNTM1NDQ0NDFlYTg5YTEzYmVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3Bw
CkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW1hZ2VEZWNvZGluZ0JyaWRnZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZShJbWFnZURlY29kZXIq
IGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1f
YWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNv
ZGluZ0JyaWRnZTo6fkltYWdlRGVjb2RpbmdCcmlkZ2UoKQoreworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdl
CisgICAgLy8gaXMgZGVmZXJyZWQgZGVjb2RlZC4KK30KKworSW1hZ2VEZWNvZGluZ0JyaWRnZSog
SW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1h
Z2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlv
biwgZ2FtbWFBbmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoYWN0dWFsRGVj
b2Rlcik7Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gSW1hZ2VEZWNvZGlu
Z0JyaWRnZTo6Y3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ0JyaWRnZShkZWNvZGVyLmxlYWtQdHIo
KSkpOworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWVF
eHRlbnNpb247Cit9CisKK0ltYWdlRnJhbWUqIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBpbWFnZSBkZWNv
ZGluZyBpZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29uIGlzCisgICAg
Ly8gYmVjYXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlv
biBpcyBoYW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFk
YXRhIGZ1bmN0aW9ucyB0aGF0IGRvZXMgc3luY2hyb25vdXMKKyAgICAvLyBpbWFnZSBkZWNvZGlu
Zy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCisg
ICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmZy
YW1lQ291bnQoKSA9PSAxCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxh
YmxlKCkpIHsKKworICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAg
ICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRl
bnNpb24oKTsKKworICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNr
Qml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVk
RnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisgICAgICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVk
RnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgICAgIC8vIFNldCBmcmFtZSB0byBwYXJ0aWFsIGJlY2F1c2UgZGVjb2RlIGRpZG4n
dCBoYXBwZW4geWV0IHNvIHdlIGNhbid0CisgICAgICAgIC8vIHByZWRpY3QgdGhpcyBjb3JyZWN0
LiBUaGlzIGZsYWcgb25seSBoYXMgZWZmZWN0IG9uIEdJRiBpbWFnZXMgc28KKyAgICAgICAgLy8g
dGhlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9p
ZCBJbWFnZURlY29kaW5nQnJpZGdlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikgeworICAgICAgICAv
LyBLZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgV2ViTGF6eURlY29kaW5nSW1hZ2UgaXMg
Y3JlYXRlZCwgYXQKKyAgICAgICAgLy8gd2hpY2ggcG9pbnQgbV9kYXRhIGlzIHRyYW5zZmVyZWQu
CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxs
RGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7Cisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0
YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgLy8gTk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGltcGwgdGhyZWFk
IHN1Ym1pdHMgZGF0YSB0byBpbXBsCisgICAgICAgIC8vIHRocmVhZCBoZXJlLgorICAgIH0KK30K
KworYm9vbCBJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlm
IChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6
ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2Rp
bmdCcmlkZ2U6OnNpemUoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAg
ICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICByZXR1cm4gbV9zaXplOwor
fQorCitJbnRTaXplIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRGVm
ZXJyZWQgaW1hZ2UgZGVjb2Rpbmcgb25seSBzdXBwb3J0cyBzaW5nbGUgZnJhbWUgaW1hZ2VzIGFu
ZCBoYXZlCisgICAgLy8gdW5pZm9ybSBzaXplLgorICAgIHJldHVybiBtX3NpemU7Cit9CisKK3Np
emVfdCBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1
YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7
CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kaW5nQnJpZGdlOjpyZXBldGl0aW9u
Q291bnQoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgIHJldHVybiBjQW5pbWF0
aW9uTm9uZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nQnJpZGdlOjpjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1hZ2UgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQorICAg
IC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJD
YWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nQnJpZGdlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMgc3RhdGUg
d2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVhbGx5IGRl
Y29kZWQuIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcg
YnV0CisgICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBj
b2RlIHBhdGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2RpbmdC
cmlkZ2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBJZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJl
ZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJu
IDAgaGVyZS4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ0JyaWRnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YmVmODYwN2NmZDEyYWIwNzgw
Y2Q2NTk1YTg5NjM5YzgzNzE5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmgKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ0JyaWRnZV9oCisjZGVmaW5l
IEltYWdlRGVjb2RpbmdCcmlkZ2VfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIEltYWdlRGVjb2RpbmdCcmlkZ2UgeworcHVibGljOgorICAgIH5JbWFnZURlY29kaW5n
QnJpZGdlKCk7CisgICAgc3RhdGljIEltYWdlRGVjb2RpbmdCcmlkZ2UqIGNyZWF0ZShjb25zdCBT
aGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIC8vIFVzZSBvbmx5IGluIHRlc3Qu
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gY3JlYXRlKFBhc3NP
d25QdHI8SW1hZ2VEZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdDsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
OworCisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOworCisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUo
KSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBj
b25zdDsKKyAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wg
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IEltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsK
KworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJl
Y2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAg
IFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAg
SW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODk1MDlmYmM0MGVkYmFkOTQzOTdjNzI2MjljMmFlYzY5YTEzNzNkMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZy
YW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNs
dWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0
L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZi4KK2Nv
bnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworCitJbWFnZURlY29kaW5nU3Rv
cmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5j
ZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sK
KyAgICBpZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2VP
bk1haW5UaHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdT
dG9yZTsKK30KK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlKCkKKyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9y
ZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0
aWFsaXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFn
ZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoMCk7
Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAgICYm
IGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKQorICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5w
aXhlbFJlZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURl
Y29kZWQpKTsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVj
b2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFT
U0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNr
SVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWln
aHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRlRnJh
bWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6
TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVkIFNr
UGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5n
LgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOwor
ICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0SWQs
IGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVu
dGlmeSB0aGlzIGlzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNv
ZGluZ1BpeGVsUmVmLgorICAgIGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVj
b2RlZCk7CisgICAgYml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUg
ZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0bWFw
IEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBz
Y2FsZWRTdWJzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2FzdDxMYXp5
RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQoIXBpeGVs
UmVmLT5pc1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+aWQoKSktPnNpemUo
KSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAwOwor
ICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVk
Qml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93
Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1Bp
eGVsUmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYo
KTsKKyAgICByZXNpemVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1
cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQor
Cit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9va3VwRnJhbWVHZW5l
cmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lk
KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0
b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IGdl
bmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2ZXMgdGhlIGZ1bGwg
c2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNoZSogZnJhbWVDYWNo
ZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRtYXA7
CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFBpeGVscyBhcmUg
b3duZWQgYnkgdGhlIEltYWdlRGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBGaW5kCisgICAgICAg
IC8vIGEgd2F5IHRvIHRyYW5zZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUuCisgICAgICAgIElt
YWdlRnJhbWUqIGZyYW1lID0gZ2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1lQnVmZmVyQXRJbmRl
eCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUgaWYgdGhpcyBpcyBj
b21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKEltYWdlRnJhbWVD
YWNoZTo6Y3JlYXRlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNvZGluZyBlcnJv
ci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAg
ICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVsbFNp
emUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24t
dGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1
c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVkIGZyYWdtZW50
LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVk
U2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9sb2NrZWRTa0Jp
dG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1h
cCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAg
fQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vic2V0LngoKSwg
c2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQ
aXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgbV9s
b2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0bWFwLnJlc2V0
KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgpICYmIGlz
TWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVH
ZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgKyttX25l
eHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIEltYWdlRnJhbWVHZW5l
cmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdl
RGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAg
IHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQoaWQpOworfQorCitJbWFnZUZyYW1lR2VuZXJh
dG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTGF6eURlY29kZWQoYml0bWFwKSk7
CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJhdG9yKHN0YXRpY19jYXN0PExhenlEZWNvZGlu
Z1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5pZCgpKTsKK30KKworSW1hZ2VGcmFtZUNh
Y2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0t
PmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVDYWNo
ZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXpl
KSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDgwYmUwYzdlYTBiNmM3OTU4NmE3
NTA3N2JmOTIzZGZlYTI1YjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKyNkZWZpbmUgSW1h
Z2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tS
ZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgSW1hZ2VGcmFtZUdlbmVy
YXRvcjsKK2NsYXNzIEltYWdlRnJhbWVDYWNoZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xh
c3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURl
Y29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3RhdGlj
IEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24o
KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisKKyAg
ICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGVyPik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1
YnNldCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIExvY2sg
YW5kIHVubG9jayBzdXBwb3J0cyBvbmx5IG9uZSBpbWFnZSBhdCBhIHRpbWUgc28gY2FsbCB0aGVt
IGkgcGFpci4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9ja1Bp
eGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOworICAgIGJvb2wg
Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlRnJhbWVHZW5lcmF0
b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBs
b29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIEltYWdlRnJhbWVHZW5lcmF0
b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAgSW1h
Z2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEltYWdlRnJh
bWVHZW5lcmF0b3I+ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVjdG9yPE93blB0cjxJbWFn
ZUZyYW1lQ2FjaGU+ID4gbV9mcmFtZUNhY2hlOworCisgICAgaW50IG1fbmV4dElkOworICAgIFNr
Qml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNlY2I2YWE2MGQz
YzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdkMWRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkltYWdlRnJhbWVDYWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVD
YWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCit7Cit9CisKK0ltYWdlRnJhbWVDYWNoZTo6SW1hZ2VG
cmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9pZChpZCkKKyAgICAs
IG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwg
bV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCit7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjpp
c0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDky
OGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIzMzBmYzEwNzllNGMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hl
LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUNhY2hlX2gK
KyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEltYWdlRnJhbWVDYWNoZSBp
cyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKKy8vIGJ5IHR3
byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBm
cmFnbWVudCBjb21lcyBmcm9tLgorLy8gMi4gU2NhbGVkIGltYWdlIHNpemUuCitjbGFzcyBJbWFn
ZUZyYW1lQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVD
YWNoZT4gY3JlYXRlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2FjaGUoaWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21w
bGV0ZSkpOworICAgIH0KKworICAgIEltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNp
emUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVD
YWNoZSgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0bWFwOyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisK
KyAgICBib29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25z
dDsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0K
KworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAg
ICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFiMjc1NzgzNjBiNTk3YmVhYTc4YWRmOTU3ODRkZjI2YzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgor
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdl
bmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2Rl
cihkZWNvZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXpl
KCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1l
R2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2Rlciog
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5n
ZXQoKTsKK30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEg
PSBkYXRhOworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YSht
X2RhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTdjOWNjNTA4N2Vm
MmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAor
I2RlZmluZSBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURl
Y29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3Ig
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNy
ZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAgfQor
CisgICAgZXhwbGljaXQgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rl
cj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRoZSBp
bWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsKKyAg
ICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CisKKyAgICBjb25zdCBTa0lTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5ZTNmNmZhMTVjMTkyZWIxZTY0ZTgyNDcxNDlkMjMz
NzBlN2VmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVm
LmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xhenlEZWNvZGluZ1BpeGVsUmVm
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUs
IGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAgICAs
IG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVk
U3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5
RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Omlz
U2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBmdWxs
U2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Omlz
Q2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1f
c2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVk
U3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2Nr
UGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9j
a1BpeGVscyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVh
ZCgpLT51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25M
b2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNhMmQ1YzVhZGVlZDdiNGIwMzYyYWI3MzEzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6
eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5
RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2lu
Y2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgor
I2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7
CitwdWJsaWM6CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1YWwg
fkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7CisKKyAgICBTS19ERUNMQVJFX1VORkxBVFRFTkFCTEVf
T0JKRUNUKCkKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29s
IGlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xp
cHBlZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7Cisg
ICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9j
a1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7Cisg
ICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVs
UmVmX2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggOGRlOTUxMDY2MWNlODNhMDBhNTI2MGRjYzEw
NTBkOGY0N2M3MWE2Zi4uNmFjNzAwOGRjZWEyMDcwYmNlM2FiM2E3MzQ4NzU2OWI5YzQ0YzM1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJ
bWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlICJTa1BpeGVs
UmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkK
KyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisjZW5kaWYKKwogdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBTa0JpdG1hcCogY29uc3Qm
IGltYWdlLCBXVEY6Ok1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pCiB7CiAgICAg
V1RGOjpNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCBpbWFnZSk7CkBAIC04
MSw2ICs4NiwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25z
dCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJ
bWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBj
b25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKG1faW1h
Z2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRo
cmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNjYWxlZEltYWdlU2l6
ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRt
YXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAgICAgICAgYm9vbCBz
aG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYmIHNob3VsZENhY2hl
UmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
aW5kZXggMzAzZDc1OTlhOWFhZjQxZTYyODRjZTAzN2ZlYzNiZjJmZGUxZGI1Ni4uODU1MDM4NTIw
YTk4M2M2MDA2YzY0MjQ3ZTZhZDQyZmM4ZWQyNDBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTE0NSw2ICsx
NDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMg
KyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAgICB9CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFw
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9IE5hdGl2ZUltYWdlU2tpYShiaXRt
YXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU2tCaXRtYXAmIGdldFNrQml0bWFw
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmJpdG1hcCgp
OworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGludCB3aWR0aCgp
IGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCBmNDI4Y2IxMzBiN2Q2NjdlNThmOGI5ZmVkYjY1MWQ5Yjc4MDA2MTgwLi4z
MzA2YjY1OWI3NGJjNDk3YjcwNDc4YzYzOWRlM2JjMTU4NWQyMjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTc3LDkgKzc3LDExIEBACiAgICAgICAgICAgICAndGVzdHMvSURC
S2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvS1VS
TFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0tV
UkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJTZXR0aW5ncy5oCmluZGV4IGU4MTZlMTEzZDI3MzczNDE0YjA3OTQ3MDgyNzhkMGE3NDgxZmEy
MjkuLjNmNzhlMDM4ODQ5NjIyOGIzOTYzOWQ0NzZkZGUyN2ViZjE3MzNlZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApAQCAtODUsNiArODUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0
IFdlYlN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdl
YlNpemUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQo
Ym9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9v
bCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNoKGJvb2wpID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCmluZGV4IDkzMzFkMDUzYTJkNWJm
NDRiOTVjMmY0YTYwNmNlOWJjMWYzN2IxNjAuLmMyMmI0NDQ0YzFlOTA4MzkwZWVhNTAxYTg4ZmFk
MWNkOWFhNmM2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktp
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdFN1cHBv
cnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5o
IgpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgc2h1dGRvd24oKQogICAgIH0KICNlbmRpZgogICAg
IHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKKyAgICBXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OnNodXRkb3duKCk7CiAgICAgUGxhdGZvcm06OnNodXRkb3duKCk7CiAgICAgV2ViUHJl
cmVuZGVyaW5nU3VwcG9ydDo6c2h1dGRvd24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDE2YmM0MzExYjk3M2I0OTMzOGNkZGEw
ZGViMDU1MWYxZTlkZGM5ZTIuLmZmNzY5Y2M3MjI0ZmVkMmRhNDIzZjkzZDcxZDAxYTFjNTI0YTJm
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogCiAjaW5j
bHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5o
IgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgpAQCAtNTQsNiArNTUsNyBAQCBXZWJTZXR0
aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX3Zp
ZXdwb3J0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0
b3JJbkNvbXBvc2l0b3IoZmFsc2UpCiAgICAgLCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVk
KHRydWUpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX2RlZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxl
ZExheWVyU2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ3NCw2ICs0NzYsMTUgQEAgdm9p
ZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsK
IH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYg
IWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNl
dHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDc4NmZmOTcxOGRkYTk1YzZiOWU5
Nzg4Y2ExMTI2NDJmYTcxNGQzZjEuLmI4Zjg1ZjQ3NTllZTNmNDUwNWQ5NTM0ZTJkMTE0ODUyNDZi
MzVkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdz
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5o
CkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERl
ZmF1bHRUaWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0Vu
YWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0x
NzUsNiArMTc2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdmlld3BvcnRFbmFibGVkOwogICAg
IGJvb2wgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcjsKICAgICBi
b29sIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6ZTsKICAgICBX
ZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBhYmU4YTcyYzUwNDczYTMzZGEyZjAxM2RjMDYzY2Q3MjE1OGYzMGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VU
ZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIk1vY2tJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOYXRp
dmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrRGV2aWNl
LmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEltYWdlRGVj
b2RpbmdCcmlkZ2VUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcg
TW9ja0ltYWdlRGVjb2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAw
LCA2MTMpOworICAgICAgICBtX2xhenlEZWNvZGVyID0gSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y3Jl
YXRlKGFkb3B0UHRyKG1fYWN0dWFsRGVjb2RlcikpOworICAgICAgICBtX2NhbnZhcy5zZXREZXZp
Y2UobmV3IFNrRGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApKS0+
dW5yZWYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAg
ICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIC8vIERvbid0IG93biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRlciB0byBxdWVyeSBz
dGF0ZXMuCisgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVyOworICAgIE93blB0
cjxJbWFnZURlY29kaW5nQnJpZGdlPiBtX2xhenlEZWNvZGVyOworICAgIFNrUGljdHVyZSBtX3Bp
Y3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0YoSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFn
ZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgw
KS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+
c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
bV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQ
RUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMq
IHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRl
bXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1
cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3Bp
Y3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QsIGRyYXdT
Y2FsZWRJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdl
KGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRp
dmVJbWFnZSgpKSk7CisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gaW1hZ2UtPnJlc2l6ZWRC
aXRtYXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0goNTAsIDUxKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1hcC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUo
c2NhbGVkQml0bWFwLmlzSW1tdXRhYmxlKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2NhbGVkQml0
bWFwLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MSwgc2NhbGVkQml0bWFwLmhlaWdodCgpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dCgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3Jk
aW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJpdG1hcCwg
MCwgMCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52
YXMuZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNv
ZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRiMzExMDFkMDViMzMwNzMyYzJmZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tJbWFnZURlY29kZXJfaAorCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIE1v
Y2tJbWFnZURlY29kZXIoKQorICAgICAgICA6IEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxw
aGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVk
KQorICAgICAgICAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0KKworICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAibW9jayI7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90KQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50OworCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCkpOworICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICB9CisK
KyAgICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBN
b2NrSW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA5ZTlhNWI5ZTlhMzY0MTI5NjVlNDcwYmZhZTY0OTUzZWM1ZTc0YjJmLi4y
MzJmNzQzYjcyNDM0YzY0NDgwYTZiMjEyNTc0ZTc1YTMxOTJiN2Y2IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTIt
MDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2Ut
ZGVjb2RpbmcgdG8gRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVt
cFJlbmRlclRyZWUuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxs
KToKKyAgICAgICAgKFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OnNl
dERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAg
ICAgIChXZWJQcmVmZXJlbmNlczo6cmVzZXQpOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmFw
cGx5VG8pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2Vz
Lmg6CisgICAgICAgIChXZWJQcmVmZXJlbmNlcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVtUG9ydC52
aXJ0dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAxMi0xMC0wNCAgQ2hyaXN0b3BoZSBEdW1leiAgPGNo
cmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdW1dLVFJdIEltcGxlbWVu
dCBVSUNsaWVudCBmb2N1cyBjYWxsYmFja3MgaW4gV2ViS2l0VGVzdFJ1bm5lcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDMwY2Uy
ODg1MWZjOWE5YTQ2YjhiNjNlNmRiZDAwZGExYzNmZWE4MzguLjVhMzIxMDQ0OTZmNzliMWYyYTQ1
NDhiMzY1MzQ1NmI0MDYxZmE2YjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRQYWludGluZ1tdID0gIi0tZW5hYmxlLWFjY2VsZXJh
dGVkLXBhaW4KIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JWaWRlb1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXZpZGVvIjsKIHN0YXRpYyBj
b25zdCBjaGFyIG9wdGlvblVzZUdyYXBoaWNzQ29udGV4dDNESW1wbGVtZW50YXRpb25bXSA9ICIt
LXVzZS1ncmFwaGljcy1jb250ZXh0LTNkLWltcGxlbWVudGF0aW9uPSI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1wZXItdGlsZS1w
YWludGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVj
b2RpbmdbXSA9ICItLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyI7CiAKIHN0YXRpYyBj
b25zdCBjaGFyIG9wdGlvblN0cmVzc09wdFtdID0gIi0tc3RyZXNzLW9wdCI7CiBzdGF0aWMgY29u
c3QgY2hhciBvcHRpb25TdHJlc3NEZW9wdFtdID0gIi0tc3RyZXNzLWRlb3B0IjsKQEAgLTEzMyw2
ICsxMzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIGJvb2wgZGVm
ZXJyZWQyRENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRp
bmdFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gZmFs
c2U7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAg
Ym9vbCBzdHJlc3NPcHQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc0Rlb3B0ID0gZmFsc2U7CiAg
ICAgYm9vbCBoYXJkd2FyZUFjY2VsZXJhdGVkR0wgPSBmYWxzZTsKQEAgLTE4Myw2ICsxODUsOCBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlVua25vd24gR3JhcGhpY0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiAlc1xuIiwg
aW1wbGVtZW50YXRpb24uY19zdHIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0g
b3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nKQogICAgICAgICAgICAgcGVyVGlsZVBhaW50aW5n
RW5hYmxlZCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJs
ZURlZmVycmVkSW1hZ2VEZWNvZGluZykKKyAgICAgICAgICAgIGRlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJl
c3NPcHQpCiAgICAgICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChh
cmd1bWVudCA9PSBvcHRpb25TdHJlc3NEZW9wdCkKQEAgLTIyMiw2ICsyMjYsNyBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBzaGVsbC5zZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEFj
Y2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKTsKICAg
ICAgICAgc2hlbGwuc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFi
bGVkKTsKKyAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZs
YWdzKGphdmFTY3JpcHRGbGFncyk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NP
cHQpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCAzMjU4NWZhYTFiMmQ4
YWQ4MWE4M2IxNWU4ZjcxMmJkOGNhNzI0ODliLi5hYzc3NTk2ODFhMDQ2ZDAzZDQ3MThmYzQ1OGMy
N2U4MmUxNDYxNzk5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgLCBt
X2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoZmFs
c2UpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3N0cmVzc09wdChmYWxzZSkKICAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2UpCiAgICAgLCBtX2R1
bXBXaGVuRmluaXNoZWQodHJ1ZSkKQEAgLTIyOSw2ICsyMzAsNyBAQCB2b2lkIFRlc3RTaGVsbDo6
cmVzZXRXZWJTZXR0aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJlZnMuYWNjZWxlcmF0
ZWQyZENhbnZhc0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIG1f
cHJlZnMuZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVk
OwogICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVk
UGFpbnRpbmdFbmFibGVkOworICAgIG1fcHJlZnMuZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZCA9IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBtX3ByZWZzLmFwcGx5VG8o
JndlYlZpZXcpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5o
CmluZGV4IDQ0YjVhZTM4OGM2OGQ2NWRlODkwZmM4MDBmZWQ1MjI5ZWVjMmEzMjQuLjM5MjY2MjQ0
NjliNjhjY2JjODc0YjQ5MWVhNDgzYTBiNjM5MmNlNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCk7Cisg
ICAgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAjaWYgZGVmaW5lZChP
U19XSU4pCiAgICAgLy8gQWNjZXNzIHRvIHRoZSBmaW5pc2hlZCBldmVudC4gVXNlZCBieSB0aGUg
c3RhdGljIFdhdGNoRG9nIHRocmVhZC4KICAgICBIQU5ETEUgZmluaXNoZWRFdmVudCgpIHsgcmV0
dXJuIG1fZmluaXNoZWRFdmVudDsgfQpAQCAtMjM1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZFBh
aW50aW5nRW5hYmxlZDsKICAgICBib29sIG1fcGVyVGlsZVBhaW50aW5nRW5hYmxlZDsKKyAgICBi
b29sIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJQcmVmZXJlbmNlcyBt
X3ByZWZzOwogICAgIGJvb2wgbV9zdHJlc3NPcHQ7CiAgICAgYm9vbCBtX3N0cmVzc0Rlb3B0Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmlu
ZGV4IDVlZWJmNTk2ZDk3NjI0ZDE5YjdmN2VkYzNlYWNhY2I0NmRiNzc1MTkuLjA5NmM5ZmI4ZmNm
ZWY4NWM0MTA0ODliOWIzZmE5MzkyOWM3YTVmMTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lk
IFdlYlByZWZlcmVuY2VzOjpyZXNldCgpCiAgICAgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBm
YWxzZTsKICAgICBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGZvcmNl
Q29tcG9zaXRpbmdNb2RlID0gZmFsc2U7CisgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZCA9IGZhbHNlOwogICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7
CiAgICAgbW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7CiAgICAgY3NzQ3VzdG9tRmlsdGVy
RW5hYmxlZCA9IGZhbHNlOwpAQCAtMjI0LDYgKzIyNSw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6
OmFwcGx5VG8oV2ViVmlldyogd2ViVmlldykKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQy
ZENhbnZhc0VuYWJsZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdz
LT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk7CiAg
ICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkKTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZChkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0TWVk
aWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUobWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUpOwogICAgIHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobW9ja1Njcm9s
bGJhcnNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVG
YWN0b3JJbkNvbXBvc2l0b3IoZm9yY2VDb21wb3NpdGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggYzM2NTUzYjM1NDY5NjRj
NzZmMjk5MTZhOWVhOWI5ZTJhMjNlMjRiMi4uZTAzMTVmMmQwN2MxZTViOTg1NWZlN2IzYWEyZTE0
Y2Y3ZTFlNDBiZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVm
ZXJlbmNlcy5oCkBAIC0xMDksNiArMTA5LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzIHsKICAg
ICBib29sIGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgZGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBi
b29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtZWRpYVBsYXliYWNr
UmVxdWlyZXNVc2VyR2VzdHVyZTsKICAgICBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZDsKICAg
ICBib29sIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCBkNjhiZDQ2YmU5YzM4
NWQ2MDdlZGQzYzJkMTk2M2FlOGZjZDUwODZiLi42NWU4NGFhOTMzMzhjOGI5ZTcxZjEzMDE1NjVm
NTNkMDk0MTMzNzg3IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKQEAgLTM4Myw2ICszODMsOSBAQCBjbGFzcyBDaHJvbWl1
bVBvcnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0t
ZW5hYmxlLXNvZnR3YXJlLWNvbXBvc2l0aW5nJ10pLAorICAgICAgICAgICAgVmlydHVhbFRlc3RT
dWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2ltYWdlcycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1l
bmFibGUtcGVyLXRpbGUtcGFpbnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAog
ICAgICAgICBdCiAKICAgICAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjIwNjU5MjIzNmE0N2NmMzMwMDBjN2Y0ZWNmZmM5
ZWI5OWRhYmEyZS4uNGZhOTE4ZGRkMmU3ZjhmMjdhMDkyMzg2YWRlY2JkMWYxNjhhMzFjYyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVj
b2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0
MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aW5nIGEgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBDaHJvbWl1bSB0byB0ZXN0IGRlZmVycmVkIGlt
YWdlCisgICAgICAgIGRlY29kaW5nLgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMgd2lsbCBiZSB0ZXN0ZWQgd2l0aAorICAgICAgICAtLWZv
cmNlLWNvbXBvc2l0aW5nIC0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIC0tZW5hYmxlLWRlZmVy
cmVkLWltYWdlLWRlY29kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0wNCAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAg
IFtXSzJdW1dLVFJdIEltcGxlbWVudCBVSUNsaWVudCBmb2N1cyBjYWxsYmFja3MgaW4gV2ViS2l0
VGVzdFJ1bm5lcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggOWJmYmY3YzIwMjFhMzRkZTEzOTMyODM1MGFjYjY2NDAyZWM0NjFiMS4uZGQ1
YzhkZDMxMTE3YmE0MDhkMTE5Mzg5OWFhYmZhOGIxY2E0MzljYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNzcyLDMgKzM3NzIsMjcg
QEAgd2Via2l0Lm9yZy9iLzk1MTIxIGZhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tn
cm91bmQtd2Via2l0LXRyYW5zZm9ybS1zY2EKIAogIyBUaGlzIGlzIGNhdXNlZCBieSBtaXNhbGln
bm1lbnQgd2l0aCBiaXRtYXAgdGlsaW5nIHdoaWNoIGlzIG5vdCB5ZXQgZml4ZWQgYnkgOTUxMjEu
CiB3ZWJraXQub3JnL2IvOTUxMjEgZmFzdC9ib3JkZXJzL2JvcmRlci1pbWFnZS1zaWRlLXJlZHVj
dGlvbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdIAorCisjIFRoZXNlIHRlc3RzIGFyZSBmYWls
aW5nIGFscmVhZHkgYW5kIGJlY2F1c2Ugb2YgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBkZWZlcnJl
ZAorIyBpbWFnZSBkZWNvZGluZyB0aGV5IG5lZWQgdG8gYmUgc3VwcHJlc3NlZCBhZ2Fpbi4KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi1jc3MuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvZXhpZi1vcmllbnRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1h
Z2UtbGFuZHNjYXBlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9zdXBwb3J0LWJyb2tlbi1pbWFnZS1kZWxlZ2F0ZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmlsZS5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbGFyZ2UtY2hlY2tlcmJvYXJkLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sb29wLWNvdW50Lmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5kLXdl
YmtpdC10cmFuc2Zvcm0tc2NhbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
ZW1iZWQtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFnZS5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1jaXJjbGUtZm9jdXMtcmluZy5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3It
ZXhwbGljaXRseS1pbmhlcml0ZWQtZnJvbS1tYXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
aW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLW5vdC1pbmhlcml0ZWQtZnJvbS1tYXAu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNv
bG9yLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLXBvbHlnb24tZm9jdXMtcmlu
Zy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9vYmplY3QtaW1hZ2UuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvcGFsZXR0ZWQtcG5nLXdpdGgtY29sb3ItcHJvZmlsZS5odG1sIFsgTWlzc2luZyBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL1JFQURNRS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0
MzJkNWZkMDBiODI4MWUyODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVB
RE1FLnR4dApAQCAtMCwwICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3Rvcnkg
dGVzdCB0aGUgJ2RlZmVycmVkIGltYWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBD
aHJvbWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167377</attachid>
            <date>2012-10-05 13:49:51 -0700</date>
            <delta_ts>2012-10-15 11:29:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121005134859.patch</filename>
            <type>text/plain</type>
            <size>76035</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA3YWM1NzM5NWRmNmVk
NzgxNGFmYTkzMWQ3YjIyOGY0YTgyNjRjZS4uMDEwM2Y1ZWI0ZmI3NzkyNDBjZjczYzg3ZTNkMDdl
NWI3NGU4Y2JmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXIKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgdW50aWwgU2tDYW52YXMgcmVmZXJl
bmNpbmcgdGhlIGltYWdlIGlzIHJhc3Rlcml6ZWQuCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFu
ZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgRGVz
aWduOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0bWFwSW1hZ2UgaXMgdGhl
IGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4gV2hlbgorICAgICAgICBk
cmF3aW5nIEJpdG1hcEltYWdlIGludG8gYSBHcmFwaGljc0NvbnRleHQgaXQgbWFrZXMgYSByZXF1
ZXN0IHRvCisgICAgICAgIGNyZWF0ZSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0aXR1dGUgdGhl
IGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBpdCBpcyBsYXpp
bHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAgICAgICAgVGhp
cyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNvZGVyIGZvciBD
aHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVpdGhlciBkZWxl
Z2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIgb3IgY3JlYXRl
IGEgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscworICAgICAgICB0
byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlCisKKyAg
ICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0IGtlZXBzIHRy
YWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBJbWFnZURlY29k
ZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQgaXMKKyAgICAgICAgYWxzbyByZXNwb25z
aWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2RlZCBTa0JpdG1hcHMuIFRoaXMgU2tCaXRt
YXAKKyAgICAgICAgY29udGFpbnMgYSBMYXp5RGVjb2RpbmdQaXhlbFJlZiBvYmplY3Qgd2hpY2gg
cmVmZXJlbmNlcyB0byBhbiBpbWFnZQorICAgICAgICBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBUaGlzIG9iamVj
dCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVuYWJsZSBsYXp5IGRlY29kaW5nLiBXaGVu
CisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2VzcyBwaXhlbHMgTGF6eURlY29kaW5nUGl4
ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiB0byBsb2Nh
dGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhlc2UKKyAgICAgICAgaW5mb3JtYXRpb24g
aXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVs
cy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJlIGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0
aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBydW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0
aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0ZXN0cy4gQWRkZWQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29kaW5nIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ0JyaWRnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpJbWFnZURlY29kaW5nQnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmaWxlbmFtZUV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0Jy
aWRnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2Rl
ZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZy
YW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVG
cmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVj
b2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xp
cHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1Bp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4
ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToK
KwogMjAxMi0xMC0wNSAgVGFiIEF0a2lucyAgPGphY2thbG1hZ2VAZ21haWwuY29tPgogCiAgICAg
ICAgIDxtYXJxdWVlPiBlbGVtZW50IGZvcmNlcyBpdHNlbGYgdG8gYmUgYXQgbGVhc3QgMWVtIGhp
Z2gsIHJlZ2FyZGxlc3Mgb2YgJ2hlaWdodCcgZGVjbGFyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggM2ZmZWQ2OGZmNGE2MDk2YWNkZmIzNGNmNmM5NmZhOTI1YzkzN2NkNi4uM2Rm
YjFhNDFjNjBjOGE5MjcyMGQ1OTJiMzMzNDlkZTM2ZDIwOTJiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGlt
YWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBuZXcgdW5pdCB0ZXN0cyBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisg
ICAgICAgIFRoZXNlIHRlc3RzIGFyZSBkZWZpbmVkIGluIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0
LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdo
ZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBu
b24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBJbWFnZURlY29kaW5nQnJpZGdlVGVz
dC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ0JyaWRnZVRl
c3QuZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpzaHV0ZG93bik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJT
ZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVz
dHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdCcmlkZ2VUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTA1
ICBZdXN1ZiBPenV5c2FsICA8eXVzdWZvQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVt
XSBTdXBwb3J0IHpvb21pbmcgZm9jdXNlZCBub2RlIGZvciBtb2JpbGUgZGV2aWNlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IGQxMjFiN2QxMGIwOGJiODY0MGVkOTIyNjhhMGM0MzRjY2YxMjRlYjMuLjY0
MGQzYzZhZWU4MjA3MTEzODZmMmJmOTYwZTkzNjcwZDJlM2JiMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTQ5MDUsNiArNDkwNSwxNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRn
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29k
aW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZURlY29kaW5nU3RvcmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVk
aWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tp
bmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYxMjdm
NjBkZTVmODFmOWI2OTk2Li45OGYwODViZWE5ZmFjZjBjN2M5NjI5MGNlOTZjN2JiNmZkNjI2NGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ0JyaWRnZS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkBAIC03OCw3ICs4
Miw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWls
YWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwg
YmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0
ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwor
ICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oTmF0
aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQogICAgICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2Rl
ZEltYWdlKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhl
bHNQZXJEZWNvZGVkSW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKaW5kZXggNjg3OWVkYTA1NWFiODdkMjU1NjAyMWYzZTdmOTAyZGU1NjY5
YTE1Yi4uMTY5YTczZWVmOGM3YzdiNTI3NGY0NDQ3NzcxMTE1N2FjOGFiNmFkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00OCwxMSAr
NDgsMjEgQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBDR0lt
YWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2Vsc2UKKyNlbGlmICFVU0UoU0tJ
QSkgfHwgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRlZiBJ
bWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShDSFJPTUlVTSkKK2NsYXNzIEltYWdlRGVjb2RpbmdCcmlkZ2U7Cit0eXBlZGVmIEltYWdlRGVj
b2RpbmdCcmlkZ2UgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OwordHlwZWRlZiBJbWFnZURlY29k
aW5nQnJpZGdlKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKKyNlbGlmIFVTRShDRykKKyNkZWZpbmUg
TmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5IEltYWdlRGVjb2RlcgorI2Vsc2UKK3R5cGVkZWYgSW1h
Z2VEZWNvZGVyIE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTsKKyNlbmRpZgorCiAvLyBSaWdodCBu
b3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0
cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBi
ZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhhdmUgYW4gb3B0
aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMgaG93IGFuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ZTc4MDljOGIyZDZm
YjJkY2NmZDUzNTQ0NDQxZWE4OWExM2JlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmNwcApA
QCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nQnJpZGdlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRGVjb2RpbmdCcmlkZ2U6OkltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBh
Y3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2Fj
dHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisKK0ltYWdlRGVjb2Rp
bmdCcmlkZ2U6On5JbWFnZURlY29kaW5nQnJpZGdlKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQor
ICAgIC8vIGlzIGRlZmVycmVkIGRlY29kZWQuCit9CisKK0ltYWdlRGVjb2RpbmdCcmlkZ2UqIElt
YWdlRGVjb2RpbmdCcmlkZ2U6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdl
U291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24pCit7CisgICAgSW1hZ2VEZWNvZGVy
KiBhY3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24s
IGdhbW1hQW5kQ29sb3JPcHRpb24pOworICAgIGlmICghYWN0dWFsRGVjb2RlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29kaW5nQnJpZGdlKGFjdHVhbERlY29k
ZXIpOworfQorCitQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IEltYWdlRGVjb2RpbmdC
cmlkZ2U6OmNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoZGVjb2Rlci5sZWFrUHRyKCkp
KTsKK30KKworU3RyaW5nIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1
YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX2ZpbGVuYW1lRXh0
ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2Rp
bmcgaWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8v
IGJlY2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24g
aXMgaGFuZGxlZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0
YSBmdW5jdGlvbnMgdGhhdCBkb2VzIHN5bmNocm9ub3VzCisgICAgLy8gaW1hZ2UgZGVjb2Rpbmcu
CisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAg
ICAgICAmJiBtX2FjdHVhbERlY29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFt
ZUNvdW50KCkgPT0gMQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJs
ZSgpKSB7CisKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAg
ICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5z
aW9uKCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0Jp
dG1hcChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZy
YW1lLnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOworICAgICAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZy
YW1lLmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsK
KworICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBkaWRuJ3Qg
aGFwcGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29ycmVjdC4g
VGhpcyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAgIC8vIHRo
ZSB2YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFN0
YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmIChtX2FjdHVh
bERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQg
SW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8g
S2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxhenlEZWNvZGluZ0ltYWdlIGlzIGNy
ZWF0ZWQsIGF0CisgICAgICAgIC8vIHdoaWNoIHBvaW50IG1fZGF0YSBpcyB0cmFuc2ZlcmVkLgor
ICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERh
dGFSZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAg
ICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEo
bV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVjb2RlZCBvbiBpbXBsIHRocmVhZCBz
dWJtaXRzIGRhdGEgdG8gaW1wbAorICAgICAgICAvLyB0aHJlYWQgaGVyZS4KKyAgICB9Cit9CisK
K2Jvb2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kaW5n
QnJpZGdlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAg
ICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30K
KworSW50U2l6ZSBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4g
bV9hY3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKKworICAgIC8vIERlZmVy
cmVkIGltYWdlIGRlY29kaW5nIG9ubHkgc3VwcG9ydHMgc2luZ2xlIGZyYW1lIGltYWdlcyBhbmQg
aGF2ZQorICAgIC8vIHVuaWZvcm0gc2l6ZS4KKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXpl
X3QgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVDb3VudCgpCit7CisgICAgaWYgKG1fYWN0dWFs
RGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpOwor
ICAgIHJldHVybiAxOworfQorCitpbnQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6cmVwZXRpdGlvbkNv
dW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4g
bV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1hdGlv
bk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQoreworICAgIC8vIElmIGltYWdlIGRlY29kaW5n
IGlzIGRlZmVycmVkIHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hlIGlzIG1hbmFnZWQgYnkKKyAgICAv
LyB0aGUgY29tcG9zaXRvciBhbmQgdGhpcyBjYWxsIGlzIGlnbm9yZWQuCisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2Fj
aGUoY2xlYXJCZWZvcmVGcmFtZSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJh
bWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVh
bERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KTsKKworICAgIC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdp
dGggSW1hZ2VEZWNvZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNv
ZGVkLiBSZXR1cm4gdHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1
dAorICAgIC8vIG1heSBub3QgZ28gdGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29k
ZSBwYXRoLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kaW5nQnJp
ZGdlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1f
YWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRl
c0F0SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQg
dGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAw
IGhlcmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdCcmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWJlZjg2MDdjZmQxMmFiMDc4MGNk
NjU5NWE4OTYzOWM4MzcxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdCcmlkZ2VfaAorI2RlZmluZSBJ
bWFnZURlY29kaW5nQnJpZGdlX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1
ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNrQml0
bWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitj
bGFzcyBJbWFnZURlY29kaW5nQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGluZ0Jy
aWRnZSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nQnJpZGdlKiBjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisKKyAgICAvLyBVc2Ugb25seSBpbiB0ZXN0Lgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdCcmlkZ2U+IGNyZWF0ZShQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4pOworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3Q7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
KworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7
CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29u
c3Q7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBib29sIGZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJh
bWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBJbWFnZURlY29kaW5nQnJpZGdlKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisK
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNl
aXZlZDsKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBT
dHJpbmcgbV9maWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIElt
YWdlRnJhbWUgbV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5
NTA5ZmJjNDBlZGJhZDk0Mzk3YzcyNjI5YzJhZWM2OWExMzczZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuY3BwCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFt
ZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVk
ZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9p
bWFnZV9vcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IHsKKworLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYuCitjb25z
dCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKworSW1hZ2VEZWNvZGluZ1N0b3Jl
KiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5zdGFuY2VP
bk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCit7Cisg
ICAgaWYgKCFpbWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlT25N
YWluVGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3Rv
cmU7Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZSgpCisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmU6
On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQoreworICAgIHJldHVybiBzX2lu
c3RhbmNlT25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlh
bGl6ZU9uTWFpblRocmVhZCgpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2Rp
bmdTdG9yZTo6c2h1dGRvd24oKQoreworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOwor
fQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1h
cCYgYml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4ZWxSZWYoKQorICAgICAgICAmJiBi
aXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgJiYgIW1lbWNtcChiaXRtYXAucGl4
ZWxSZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQsIHNpemVvZihsYWJlbExhenlEZWNv
ZGVkKSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29k
ZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lT
aXplOjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0
KCkpOworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1l
R2VuZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1h
a2VTaXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1Bp
eGVsUmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4K
KyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAg
ICBiaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBm
dWxsU2l6ZSwgZnVsbFJlY3QpKS0+dW5yZWYoKTsKKworICAgIC8vIFVzZSBVUkkgdG8gaWRlbnRp
ZnkgdGhpcyBpcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgb2YgdHlwZSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZi4KKyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29k
ZWQpOworICAgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJlIGZy
b20gcmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJ
bWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2Nh
bGVkU3Vic2V0KSBjb25zdAoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURl
Y29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJl
Zi0+aXNTY2FsZWQobG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkp
ICYmICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAg
ICByb3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4
ODhfQ29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkpOworCisgICAgU2tCaXRtYXAgcmVzaXplZEJp
dG1hcDsKKyAgICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5
dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhl
bFJlZihwaXhlbFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVucmVmKCk7
CisgICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsgLy8gUHJldmVudHMgU2tQaWN0dXJl
IGZyb20gcmVjb3JkaW5nIHBpeGVscy4KKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwor
dm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorewor
ICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJh
dG9yKGJpdG1hcCktPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCog
SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9y
ID0gbG9va3VwRnJhbWVHZW5lcmF0b3IoaWQpOworICAgIFNrSVNpemUgZnVsbFNpemUgPSBnZW5l
cmF0b3ItPnNpemUoKTsKKworICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNhdmVzIHRoZSBmdWxsIHNp
emUgaW1hZ2UgYXQgdGhlIG1vbWVudC4KKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGZyYW1lQ2FjaGUg
PSBsb29rdXBGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAgYml0bWFwOwor
CisgICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhlbHMgYXJlIG93
bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAorICAgICAgICAv
LyBhIHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAgICAgICBJbWFn
ZUZyYW1lKiBmcmFtZSA9IGdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
MCk7CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlmIHRoaXMgaXMgY29t
cGxldGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChJbWFnZUZyYW1lQ2Fj
aGU6OmNyZWF0ZShpZCwgZnVsbFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1w
dHkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3Iu
IFJlcG9ydCB0aGlzIHRvIEJpdG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKworICAgICAgICBiaXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAg
Yml0bWFwID0gZnJhbWVDYWNoZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXpl
ICE9IHNjYWxlZFNpemUpIHsKKyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRo
ZS1mbHkgYW5kIHNjYWxlZCBpbWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNl
LgorICAgICAgICAvLyBGSVhNRTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4K
KyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXpl
KGJpdG1hcCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNp
emUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbG9ja2VkU2tCaXRt
YXAubG9ja1BpeGVscygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAg
PSBiaXRtYXA7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIH0K
KyAgICByZXR1cm4gbV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxlZFN1YnNldC54KCksIHNj
YWxlZFN1YnNldC55KCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4
ZWxzKCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIG1fbG9j
a2VkU2tCaXRtYXAudW5sb2NrUGl4ZWxzKCk7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5yZXNldCgp
OworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBpc01h
aW5UaHJlYWQoKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2Vu
ZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgICsrbV9uZXh0
SWQ7CisgICAgbV9mcmFtZUdlbmVyYXRvcnMuYWRkKG1fbmV4dElkLCBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpjcmVhdGUoZGVjb2RlcikpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yKiBJbWFnZURl
Y29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9mcmFtZUdlbmVyYXRvcnMuZ2V0KGlkKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRv
ciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1h
cCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1hcCkpOwor
ICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQ
aXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJhbWVDYWNo
ZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5p
c0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVb
aV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdT
dG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkp
IHsKKyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ4MGJlMGM3ZWEwYjZjNzk1ODZhNzUw
NzdiZjkyM2RmZWEyNWIxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5lIEltYWdl
RGVjb2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVj
dC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0
b3I7CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGU7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNz
IEltYWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1h
Z2VEZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNv
ZGluZ1N0b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJ
bWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7
CisgICAgc3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAg
U2tCaXRtYXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rl
cj4pOworICAgIFNrQml0bWFwIHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRt
YXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJz
ZXQpIGNvbnN0OworCisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBMb2NrIGFu
ZCB1bmxvY2sgc3VwcG9ydHMgb25seSBvbmUgaW1hZ2UgYXQgYSB0aW1lIHNvIGNhbGwgdGhlbSBp
IHBhaXIuCisgICAgdm9pZCogbG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdm9pZCB1bmxvY2tQaXhl
bHMoKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9y
KFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9v
a3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdl
RnJhbWVDYWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpOworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxJbWFnZUZyYW1l
R2VuZXJhdG9yPiA+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFZlY3RvcjxPd25QdHI8SW1hZ2VG
cmFtZUNhY2hlPiA+IG1fZnJhbWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0Jp
dG1hcCBtX2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2My
YjI3ZjQxZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJ
bWFnZUZyYW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2Fj
aGU6On5JbWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJh
bWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBt
X3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1f
aXNDb21wbGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNF
cXVhbChpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlkID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ5Mjhi
OTZiZWZmNTAyNjZiYzk4YmY0NDBiMzMwZmMxMDc5ZTRjMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5o
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisj
ZGVmaW5lIEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1
ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbWFnZUZyYW1lQ2FjaGUgaXMg
YSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBieSB0d28g
dGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJh
Z21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3MgSW1hZ2VG
cmFtZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lQ2Fj
aGU+IGNyZWF0ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlzQ29tcGxl
dGUpKTsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZyYW1lQ2Fj
aGUoKTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2Jp
dG1hcDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorCisg
ICAgYm9vbCBpc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7
CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisK
K3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAg
U2tCaXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iYmM0MzBhYjI3NTc4MzYwYjU5N2JlYWE3OGFkZjk1Nzg0ZGYyNmMxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKwor
I2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5l
cmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2RlY29kZXIo
ZGVjb2RlcikKK3sKKyAgICBtX3NpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+c2l6ZSgp
LndpZHRoKCksIG1fZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKK30KKworSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworfQorCitJbWFnZURlY29kZXIqIElt
YWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29kZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9kYXRhID0g
ZGF0YTsKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERhdGEobV9k
YXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3YzljYzUwODdlZjJl
MjllYmE3MTUxYjVhNGExYWM4NDg1OGUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNk
ZWZpbmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNv
ZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVh
dGUoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2RlcikpOworICAgIH0KKwor
ICAgIGV4cGxpY2l0IEltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+
KTsKKyAgICB+SW1hZ2VGcmFtZUdlbmVyYXRvcigpOworCisgICAgLy8gQ3JlYXRlcyB0aGUgaW1h
Z2UgZGVjb2RlciBpZiBuZWVkZWQuCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCk7CisgICAg
dm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOworCisgICAgY29uc3QgU2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorCitwcml2YXRlOgorICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgU2tJU2l6ZSBtX3NpemU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwOWUzZjZmYTE1YzE5MmViMWU2NGU4MjQ3MTQ5ZDIzMzcw
ZTdlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5o
IgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
TGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBj
b25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCisgICAgOiBTa1BpeGVsUmVmKDApCisgICAgLCBt
X2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3NjYWxlZFN1
YnNldChzY2FsZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURl
Y29kaW5nUGl4ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc1Nj
YWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnVsbFNp
emUgIT0gbV9zY2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0Ns
aXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAhPSBtX3Nj
YWxlZFN1YnNldC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3NjYWxlZFN1
YnNldC5oZWlnaHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1Bp
eGVscyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmxvY2tQ
aXhlbHMoaWQoKSwgbV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Cit9CisKK3ZvaWQgTGF6
eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQo
KS0+dW5sb2NrUGl4ZWxzKCk7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9j
a1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGY5MWFjMjViNGVhMjIzYTJkNWM1YWRlZWQ3YjRiMDM2MmFiNzMxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlE
ZWNvZGluZ1BpeGVsUmVmLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGF6eURl
Y29kaW5nUGl4ZWxSZWZfaAorI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisKKyNpbmNs
dWRlICJTa0ZsYXR0ZW5hYmxlQnVmZmVycy5oIgorI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKKyNp
bmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgewor
cHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFsIH5M
YXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxFX09C
SkVDVCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9vbCBp
c1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NsaXBw
ZWQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIC8vIFNrUGl4ZWxSZWYgaW1wbGVtZW50YXRp
b24uCisgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopOworICAg
IHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOworICAgIHZpcnR1YWwgYm9vbCBvbkxvY2tQ
aXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludCBtX2lkOworICAg
IFNrSVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBMYXp5RGVjb2RpbmdQaXhlbFJl
Zl9oXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9O
YXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IDhkZTk1MTA2NjFjZTgzYTAwYTUyNjBkY2MxMDUw
ZDhmNDdjNzFhNmYuLjZhYzcwMDhkY2VhMjA3MGJjZTNhYjNhNzM0ODc1NjliOWM0NGMzNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAKQEAgLTM5LDYgKzM5LDExIEBACiAjaW5jbHVkZSAiU2tQaXhlbFJl
Zi5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgor
I2VuZGlmCisKIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgU2tCaXRtYXAqIGNvbnN0JiBp
bWFnZSwgV1RGOjpNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKQogewogICAgIFdU
Rjo6TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgaW1hZ2UpOwpAQCAtODEs
NiArODYsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0kKIAogU2tCaXRtYXAgTmF0aXZlSW1h
Z2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29u
c3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChtX2ltYWdl
KSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJbWFnZVNpemUs
IHNjYWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNpemVkQml0bWFw
KHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAgIGJvb2wgc2hv
dWxkQ2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJl
c2FtcGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmlu
ZGV4IDMwM2Q3NTk5YTlhYWY0MWU2Mjg0Y2UwMzdmZWMzYmYyZmRlMWRiNTYuLjg1NTAzODUyMGE5
ODNjNjAwNmM2NDI0N2U2YWQ0MmZjOGVkMjQwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1
LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsg
KHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFw
LCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsK
KyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBj
b25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZjQyOGNiMTMwYjdkNjY3ZTU4ZjhiOWZlZGI2NTFkOWI3ODAwNjE4MC4uMzMw
NmI2NTliNzRiYzQ5N2I3MDQ3OGM2MzlkZTNiYzE1ODVkMjI1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC03Nyw5ICs3NywxMSBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktl
eVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAg
ICAgJ3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxU
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJM
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9M
aXN0ZW5lckxlYWtUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2V0dGluZ3MuaAppbmRleCBhYmQ4NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0
Li4wOGNkMTk3NDVjYzcwYWFlMzc5Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBX
ZWJTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJT
aXplKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJv
b2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQo
Ym9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAw
MTU2ZDZjZmFiZDUwZWRiM2VkMmY3ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZm
Zjg1ZThhNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIK
QEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBz
X3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpzaHV0ZG93bigpOwogICAgIFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJl
bmRlcmluZ1N1cHBvcnQ6OnNodXRkb3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJh
NDdjYTA3OGRmMzg2MDk4Li5kYzc3MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1
ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAj
aW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0lt
cGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVm
YXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJl
VGFwSGlnaGxpZ2h0RW5hYmxlZCh0cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9M
ZWdpYmxlU2NhbGUoZmFsc2UpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
ZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAs
IG1fbWF4VW50aWxlZExheWVyU2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0
ODIsMTUgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKICAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQor
CiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFj
ZjNlYjJhZTgwZmRhMWY4ODVjZDA4NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3
N2U2ZTJhZGYwMmQ3MmQ2NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5oCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBv
cnRzTW91c2UoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2go
Ym9vbCk7CkBAIC0xNzgsNiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZh
dWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBI
aWdobGlnaHRFbmFibGVkOwogICAgIGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxl
U2NhbGU7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2Vi
U2l6ZSBtX2RlZmF1bHRUaWxlU2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6
ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVj
b2RpbmdCcmlkZ2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VE
ZWNvZGluZ0JyaWRnZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhYmU4YTcyYzUwNDczYTMzZGEyZjAx
M2RjMDYzY2Q3MjE1OGYzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlk
Z2UuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk1vY2tJ
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJT
a0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgi
CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0IDogcHVibGljIDo6
dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2RlcigpOworICAgICAg
ICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOworICAgICAgICBtX2xhenlEZWNv
ZGVyID0gSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y3JlYXRlKGFkb3B0UHRyKG1fYWN0dWFsRGVjb2Rl
cikpOworICAgICAgICBtX2NhbnZhcy5zZXREZXZpY2UobmV3IFNrRGV2aWNlKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApKS0+dW5yZWYoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpz
aHV0ZG93bigpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIC8vIERvbid0IG93biB0aGlzIGJ1
dCBzYXZlcyB0aGUgcG9pbnRlciB0byBxdWVyeSBzdGF0ZXMuCisgICAgTW9ja0ltYWdlRGVjb2Rl
ciogbV9hY3R1YWxEZWNvZGVyOworICAgIE93blB0cjxJbWFnZURlY29kaW5nQnJpZGdlPiBtX2xh
enlEZWNvZGVyOworICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52
YXM7Cit9OworCitURVNUX0YoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QsIGRyYXdJbnRvU2tQaWN0
dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6
eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7Cisg
ICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRt
YXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVp
Z2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdl
LT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlz
SW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVn
aW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2Ut
PmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQ
RUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisK
KyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0Yo
SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QsIGRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlKQoreworICAg
IE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgU2tCaXRtYXAg
c2NhbGVkQml0bWFwID0gaW1hZ2UtPnJlc2l6ZWRCaXRtYXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEp
LCBTa0lSZWN0OjpNYWtlV0goNTAsIDUxKSk7CisgICAgRVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1h
cC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoc2NhbGVkQml0bWFwLmlzSW1tdXRhYmxlKCkp
OworICAgIEVYUEVDVF9FUSg1MCwgc2NhbGVkQml0bWFwLndpZHRoKCkpOworICAgIEVYUEVDVF9F
USg1MSwgc2NhbGVkQml0bWFwLmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxE
ZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1w
Q2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2Fu
dmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJpdG1hcCwgMCwgMCk7CisgICAgbV9waWN0dXJlLmVuZFJl
Y29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0dXJlKTsK
KyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRi
MzExMDFkMDViMzMwNzMyYzJmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE1vY2tJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJ
bWFnZURlY29kZXIgeworcHVibGljOgorICAgIE1vY2tJbWFnZURlY29kZXIoKQorICAgICAgICA6
IEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKQorICAgICAgICAsIG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAibW9jayI7CisgICAgfQorCisg
ICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KQorICAgIHsK
KyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworCisgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRT
aXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gJm1f
ZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICB9CisKKyAgICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OyB9CisKK3By
aXZhdGU6CisgICAgaW50IG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNb2NrSW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlNDc2MjhiMmY5ODVk
YmFlYzYxMzQ3NDU1MTk2MTQ1Y2UxNzk3MzBjLi40NWMxMThjZTY5M2ZlYzQ5MDhkMzNlNzE2YWYw
NWMwNmYxZGE4NTY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcgdG8gRFJULgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoK
KyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKyAgICAgICAgKFRlc3RTaGVsbDo6cmVz
ZXRXZWJTZXR0aW5ncyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQpOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6cmVzZXQp
OgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8pOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmg6CisgICAgICAgIChXZWJQcmVmZXJlbmNl
cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weToKKyAgICAgICAgKENocm9taXVtUG9ydC52aXJ0dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAx
Mi0xMC0wNSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAg
IFtHdGtdIGZhc3QveHNsL3hzbHQtbWlzc2luZy1uYW1lc3BhY2UtaW4teHNsdC54bWwgaXMgZmFp
bGluZyBvbiB0aGUgNjQtYml0IERlYnVnIGJ1aWxkZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4
YjYzZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2
MWZhNmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRl
clRyZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJs
ZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0
aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9b
XSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3Mt
Y29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5h
YmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1l
bmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
U3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRDYW52YXNF
bmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wg
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0
ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdh
cmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtu
b3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9u
LmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBl
clRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVl
OworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdl
RGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAg
ICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uU3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVm
ZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNl
dFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAg
IHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0
RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAg
c2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3
MTJiZDhjYTcyNDg5Yi4uYWM3NzU5NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQs
NiArMTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9k
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFs
c2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVk
KHRydWUpCkBAIC0yMjksNiArMjMwLDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGlu
Z3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFi
bGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVk
MmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZz
LmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUz
ODhjNjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0
OTFlYTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVk
MmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVk
ID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAg
ICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8v
IEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERv
ZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVk
RXZlbnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJl
ZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7
CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBi
b29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCA1ZWViZjU5NmQ5
NzYyNGQxOWI3ZjdlZGMzZWFjYWNiNDZkYjc3NTE5Li4wOTZjOWZiOGZjZmVmODVjNDEwNDg5Yjli
M2ZhOTM5MjljN2E1ZjEzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNl
czo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNj
ZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9k
ZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAg
ICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3Jv
bGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxz
ZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVk
KGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5z
ZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7
CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJ
bWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBz
ZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7
CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3Np
dG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTli
OWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAt
MTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwog
ICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0
b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggZDY4YmQ0NmJlOWMzODVkNjA3ZWRkM2MyZDE5
NjNhZThmY2Q1MDg2Yi4uNjVlODRhYTkzMzM4YzhiOWU3MWYxMzAxNTY1ZjUzZDA5NDEzMzc4NyAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtLnB5CkBAIC0zODMsNiArMzgzLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgog
ICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9z
b2Z0d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBv
c2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2Fy
ZS1jb21wb3NpdGluZyddKSwKKyAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxl
LXBhaW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAg
ICAgIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDE0OGVmMDMxNGE5ZWViMzc3NTVkNTRjNjE1YjhjNDRlNjllMzUwNDMuLmEx
YjVhNTIzNWNhZDAwYjMwNDIxZTJmZmRkMmY1M2U2ZWZmNzY5ZjQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwg
dGVzdCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBk
ZWNvZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGlu
ZyAtLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNv
ZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAtMDUgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgR1RLKyBhbmQgUXQgcmViYXNlbGluZXMgYWZ0
ZXIgcjEzMDUzMi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IDY4NzEwZDk1MzFmYzYyODhiY2NkYzRlOTVjYjExYjM4YTk3NTdiNzkuLjc4
MDRiMWEzZDdhNTZlN2U1MzRjNmQxN2ZiMzc0MjJlZDExYWY5MmUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzc4OSwzICszNzg5LDI3
IEBAIHdlYmtpdC5vcmcvYi85NTEyMSBmYXN0L2JvcmRlcnMvYm9yZGVyLWltYWdlLXNpZGUtcmVk
dWN0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsCiAjIGZhaWxpbmcgYWZ0ZXIgcjEzMDQ0MyBidXQg
d2UncmUgbm90IHN1cmUgaWYgdGhpcyBpcyBhIHJlYWwgYnVnIG9yIGp1c3QgbmVlZHMgcmViYXNl
bGluaW5nCiB3ZWJraXQub3JnL2IvOTg1NDUgWyBNYWMgXSBmYXN0L3RleHQvaW50ZXJuYXRpb25h
bC90ZXh0LXNwbGljZWQtZm9udC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvOTg1NDUg
WyBNYWMgXSBmYXN0L3dyaXRpbmctbW9kZS9LdXNhLU1ha3VyYS1iYWNrZ3JvdW5kLWNhbnZhcy5o
dG1sIFsgRmFpbHVyZSBdCisKKyMgVGhlc2UgdGVzdHMgYXJlIGZhaWxpbmcgYWxyZWFkeSBhbmQg
YmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVycmVkCisjIGltYWdlIGRlY29k
aW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvYW5pbWF0ZWQt
Z2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlm
LW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0
aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1sYW5kc2NhcGUuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQtd2Via2l0LXRyYW5zZm9ybS1z
Y2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1leHBsaWNpdGx5LWluaGVy
aXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1y
aW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJy
ZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9yZXBh
aW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWxldHRlZC1wbmct
d2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBNaXNzaW5nIF0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1F
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4
OGIxOTg5OTljYjdkODUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAg
KzEsMiBAQAorIyBUZXN0IHN1aXRlcyBpbiB0aGlzIGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJy
ZWQgaW1hZ2UgZGVjb2RpbmcnIGNvZGUgcGF0aAorIyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168622</attachid>
            <date>2012-10-14 22:08:31 -0700</date>
            <delta_ts>2012-10-14 23:26:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121014220723.patch</filename>
            <type>text/plain</type>
            <size>75880</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODUzNTgzNmI5ZDg3NDNh
ZDBiMDUzMThhY2I3OTcyYThkNDdkNzQ5Ni4uYWMxYjZjMTA5OWQ1ODVhZmMyM2I4YjRmMWNmZTg2
YzQ2YjhkNjNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltYWdlIGRlY29kaW5nIGhhcHBlbnMgd2hlbiBhIEJpdG1hcElt
YWdlIGlzIGRyYXduIGludG8gYQorICAgICAgICBHcmFwaGljc0NvbnRleHQuIFdoZW4gcGVyLXRp
bGUgcGFpbnRpbmcgaXMgZW5hYmxlZCBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaXMgYmFja2Vk
IGJ5IFNrQ2FudmFzIGluIHJlY29yZGluZyBtb2RlLiBUaGlzIFNrQ2FudmFzIHJlY29yZHMgZHJh
d2luZworICAgICAgICBhbmQgaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBzaG91bGQgYWxzbyBi
ZSByZWNvcmRlZCB0byBtaW5pbWl6ZQorICAgICAgICByZWNvcmRpbmcgdGltZS4KKworICAgICAg
ICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXItdGlsZSBwYWludGluZyB0aGlzIGZl
YXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5nIHVudGlsIHRoZSBTa0NhbnZhcyBy
ZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4KKyAgICAgICAgQm90aCByZWNvcmRp
bmcgYW5kIHJhc3Rlcml6YXRpb24gaGFwcGVuIG9uIHRoZSBtYWluIHRocmVhZC4KKworICAgICAg
ICBEZXNpZ246CisKKyAgICAgICAgQml0bWFwSW1hZ2UKKworICAgICAgICBCaXRtYXBJbWFnZSBp
cyB0aGUgZW50cnkgcG9pbnQgZm9yIGRlZmVycmVkIGltYWdlIGRlY29kaW5nLiBXaGVuCisgICAg
ICAgIGRyYXdpbmcgYSBCaXRtYXBJbWFnZSBpbnRvIGEgR3JhcGhpY3NDb250ZXh0IGl0IG1ha2Vz
IGEgcmVxdWVzdCB0bworICAgICAgICBjcmVhdGUgYSBOYXRpdmVJbWFnZVNraWEuIFdlIHN1YnN0
aXR1dGUgdGhlIGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1Y2ggdGhhdCBp
dCBpcyBsYXppbHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nQnJpZGdlCisKKyAg
ICAgICAgVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgYSBpbWFnZSBkZWNv
ZGVyIGZvciBDaHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBsYXllciB0aGF0IGVp
dGhlciBkZWxlZ2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJbWFnZURlY29kZXIg
b3IgY3JlYXRlIGEgbGF6aWx5LWRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVnYXRlcyBjYWxscwor
ICAgICAgICB0byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2RlZCBpbWFnZXMuIEl0
IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgdGhlIGNvcnJlc3BvbmRp
bmcgSW1hZ2VEZWNvZGVyIGZvciBkb2luZyBhY3R1YWwgZGVjb2RpbmcuIEl0CisgICAgICAgIGlz
IGFsc28gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbGF6aWx5IGRlY29kZWQgU2tCaXRtYXBz
LiBUaGlzCisgICAgICAgIFNrQml0bWFwIGNvbnRhaW5zIGEgTGF6eURlY29kaW5nUGl4ZWxSZWYg
b2JqZWN0IHdoaWNoIHJlZmVyZW5jZXMgdG8gYW4KKyAgICAgICAgaW1hZ2UgZW50cnkgaW4gSW1h
Z2VEZWNvZGluZ1N0b3JlLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVsUmVmCisKKyAgICAg
ICAgVGhpcyBvYmplY3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBlbmFibGUgbGF6eSBk
ZWNvZGluZy4gV2hlbgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nlc3MgcGl4ZWxzIExh
enlEZWNvZGluZ1BpeGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29udGFpbnMgaW5mb3Jt
YXRpb24gdG8gbG9jYXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRoZXNlCisgICAgICAg
IGluZm9ybWF0aW9uIGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3RvcmUgdG8gYWNjZXNz
IGFjdHVhbCBwaXhlbHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVyZSBhcmUgYWJvdXQg
ODAgdGVzdHMgaW4gdGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAgcnVubmluZyB0aGlz
IGZlYXR1cmUgaW4gdGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQgdGVzdHMuIEFkZGVk
IEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAorICAgICAgICBpbWFn
ZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6SW1hZ2VEZWNvZGlu
Z0JyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjp+SW1hZ2VE
ZWNvZGluZ0JyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZmlsZW5hbWVF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVC
dWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OnNl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6aXNTaXplQXZh
aWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVTaXplQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OnJlcGV0aXRpb25Db3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpjbGVhckZyYW1lQnVmZmVyQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVC
eXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RGVjb2RpbmdCcmlkZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKElt
YWdlRGVjb2RpbmdCcmlkZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVP
bk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0
ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29k
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVj
b2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVz
aXplTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjps
b2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2Nr
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25W
YWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0
ZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6
bG9va3VwRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb29rdXBGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6ZGVsZXRlRnJhbWVDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVDYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0VxdWFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6Omlz
Q29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Okxh
enlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjp+TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29k
aW5nUGl4ZWxSZWY6OmlzU2NhbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1Bp
eGVsUmVmOjppc0NsaXBwZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxS
ZWY6Om9uTG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJl
Zjo6b25VbmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxS
ZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoTGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6
TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAoSW1hZ2VGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpn
ZXRTa0JpdG1hcCk6CisKIDIwMTItMTAtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBTaW1wbGlmeSB1c2VyIGNvbnRlbnQgaW4gV2ViS2l0MiBieSB1c2luZyBXZWJD
b3JlOjpVc2VyU3R5bGVTaGVldCBhbmQgV2ViQ29yZTo6VXNlclNjcmlwdCBkaXJlY3RseQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NjI3YTRlNDg0ZWE5MGE3YzdlYTExYzkwNzc4MzA1
N2UwOTI2ZWVjLi5kZTllZTgyMmYyNDgwZTQyZjg3OTBkOWI0ZWVhZmVjNGIzMGNhNGQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTA4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gSW1hZ2VEZWNv
ZGluZ0JyaWRnZVRlc3QuY3BwLiBUaGV5IHZlcmlmeQorICAgICAgICBpbWFnZSBkZWNvZGluZyBo
YXBwZW5zIG9ubHkgd2hlbiBTa1BpY3R1cmUgaXMgcmFzdGVyaXplZCBmb3IgYm90aAorICAgICAg
ICBzY2FsZWQgYW5kIG5vbi1zY2FsZWQgY2FzZXMuCisKKyAgICAgICAgVGVzdHM6IEltYWdlRGVj
b2RpbmdCcmlkZ2VUZXN0LmRyYXdJbnRvU2tQaWN0dXJlCisgICAgICAgICAgICAgICBJbWFnZURl
Y29kaW5nQnJpZGdlVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3Jj
L1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpz
ZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToK
KyAgICAgICAgKiB0ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nQnJpZGdlVGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlVGVzdDo6U2V0VXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpNb2NrSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk6
CisKIDIwMTItMTAtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
YWtlIFVzZXJTY3JpcHQgYW5kIFVzZXJTdHlsZVNoZWV0IHZhbHVlIG9iamVjdHMgdGhhdCBhcmUg
Y29weWFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyMTRhYzI3ZTgzMDlmY2Q2YmE3MWIwMmQ2MjQz
ZmZlYjI4NGNkOTk2Li45YjZhZjBmNTc1YWI4Yjc3ZjY1ZDBiNGI3ZTIxZDNmYzQ3M2U4YmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC00OTE1LDYgKzQ5MTUsMTYgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z0JyaWRnZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdCcmlkZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVy
YXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVj
b2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
T3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggOTgxNmU2MzQx
ZmViMjA3NTBlMzE2MTI3ZjYwZGU1ZjgxZjliNjk5Ni4uOThmMDg1YmVhOWZhY2YwYzdjOTYyOTBj
ZTk2YzdiYjZmZDYyNjRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQpAQCAtNzgsNyArODIsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50
IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNv
ZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2Rlcikgewot
ICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pKTsKKyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1h
Z2VTb3VyY2VQdHI+KE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTo6Y3JlYXRlKCpkYXRhLCBtX2Fs
cGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21h
eFBpeGVsc1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVt
UGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYw
MjFmM2U3ZjkwMmRlNTY2OWExNWIuLjczZTE4MWNhODEyNTAxN2QwMjY3ZDhjNmY1YjM0NGEyNzU1
MzllYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaApAQCAtNDgsMTEgKzQ4LDIxIEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShD
RykKIHR5cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNl
CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVm
IEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZTsKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGluZ0JyaWRnZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBlZGVmIEltYWdlRGVj
b2RpbmdCcmlkZ2UqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2VsaWYgVVNFKENHKQorI2RlZmlu
ZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3RvcnkgSW1hZ2VEZWNvZGVyCisjZWxzZQordHlwZWRlZiBJ
bWFnZURlY29kZXIgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OworI2VuZGlmCisKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUgY29uc3RhbnRz
IGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJRnMgaGF2ZSBhbiBv
cHRpb25hbCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2NyaWJlcyBob3cgYW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzZlNzgwOWM4YjJk
NmZiMmRjY2ZkNTM1NDQ0NDFlYTg5YTEzYmVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3Bw
CkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW1hZ2VEZWNvZGluZ0JyaWRnZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZShJbWFnZURlY29kZXIq
IGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1f
YWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30KKworSW1hZ2VEZWNv
ZGluZ0JyaWRnZTo6fkltYWdlRGVjb2RpbmdCcmlkZ2UoKQoreworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdl
CisgICAgLy8gaXMgZGVmZXJyZWQgZGVjb2RlZC4KK30KKworSW1hZ2VEZWNvZGluZ0JyaWRnZSog
SW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1h
Z2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlv
biwgZ2FtbWFBbmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RpbmdCcmlkZ2UoYWN0dWFsRGVj
b2Rlcik7Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gSW1hZ2VEZWNvZGlu
Z0JyaWRnZTo6Y3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ0JyaWRnZShkZWNvZGVyLmxlYWtQdHIo
KSkpOworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2Fj
dHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWVF
eHRlbnNpb247Cit9CisKK0ltYWdlRnJhbWUqIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBpbWFnZSBkZWNv
ZGluZyBpZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29uIGlzCisgICAg
Ly8gYmVjYXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlv
biBpcyBoYW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFk
YXRhIGZ1bmN0aW9ucyB0aGF0IGRvZXMgc3luY2hyb25vdXMKKyAgICAvLyBpbWFnZSBkZWNvZGlu
Zy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCisg
ICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmZy
YW1lQ291bnQoKSA9PSAxCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxh
YmxlKCkpIHsKKworICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAg
ICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRl
bnNpb24oKTsKKworICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNr
Qml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVk
RnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisgICAgICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVk
RnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgICAgIC8vIFNldCBmcmFtZSB0byBwYXJ0aWFsIGJlY2F1c2UgZGVjb2RlIGRpZG4n
dCBoYXBwZW4geWV0IHNvIHdlIGNhbid0CisgICAgICAgIC8vIHByZWRpY3QgdGhpcyBjb3JyZWN0
LiBUaGlzIGZsYWcgb25seSBoYXMgZWZmZWN0IG9uIEdJRiBpbWFnZXMgc28KKyAgICAgICAgLy8g
dGhlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9p
ZCBJbWFnZURlY29kaW5nQnJpZGdlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikgeworICAgICAgICAv
LyBLZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgV2ViTGF6eURlY29kaW5nSW1hZ2UgaXMg
Y3JlYXRlZCwgYXQKKyAgICAgICAgLy8gd2hpY2ggcG9pbnQgbV9kYXRhIGlzIHRyYW5zZmVyZWQu
CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxs
RGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7Cisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0
YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgLy8gTk9URTogV2hlbiBpbWFnZSBpcyBkZWNvZGVkIG9uIGltcGwgdGhyZWFk
IHN1Ym1pdHMgZGF0YSB0byBpbXBsCisgICAgICAgIC8vIHRocmVhZCBoZXJlLgorICAgIH0KK30K
KworYm9vbCBJbWFnZURlY29kaW5nQnJpZGdlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlm
IChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6
ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIEltYWdlRGVjb2Rp
bmdCcmlkZ2U6OnNpemUoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAg
ICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICByZXR1cm4gbV9zaXplOwor
fQorCitJbnRTaXplIEltYWdlRGVjb2RpbmdCcmlkZ2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRGVm
ZXJyZWQgaW1hZ2UgZGVjb2Rpbmcgb25seSBzdXBwb3J0cyBzaW5nbGUgZnJhbWUgaW1hZ2VzIGFu
ZCBoYXZlCisgICAgLy8gdW5pZm9ybSBzaXplLgorICAgIHJldHVybiBtX3NpemU7Cit9CisKK3Np
emVfdCBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1
YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7
CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBJbWFnZURlY29kaW5nQnJpZGdlOjpyZXBldGl0aW9u
Q291bnQoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgIHJldHVybiBjQW5pbWF0
aW9uTm9uZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nQnJpZGdlOjpjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1hZ2UgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQorICAg
IC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJD
YWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nQnJpZGdlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMgc3RhdGUg
d2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVhbGx5IGRl
Y29kZWQuIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcg
YnV0CisgICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBj
b2RlIHBhdGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2RpbmdC
cmlkZ2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBJZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJl
ZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJu
IDAgaGVyZS4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ0JyaWRnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YmVmODYwN2NmZDEyYWIwNzgw
Y2Q2NTk1YTg5NjM5YzgzNzE5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nQnJpZGdlLmgKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ0JyaWRnZV9oCisjZGVmaW5l
IEltYWdlRGVjb2RpbmdCcmlkZ2VfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIEltYWdlRGVjb2RpbmdCcmlkZ2UgeworcHVibGljOgorICAgIH5JbWFnZURlY29kaW5n
QnJpZGdlKCk7CisgICAgc3RhdGljIEltYWdlRGVjb2RpbmdCcmlkZ2UqIGNyZWF0ZShjb25zdCBT
aGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIC8vIFVzZSBvbmx5IGluIHRlc3Qu
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gY3JlYXRlKFBhc3NP
d25QdHI8SW1hZ2VEZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdDsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
OworCisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOworCisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUo
KSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBj
b25zdDsKKyAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wg
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IEltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsK
KworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJl
Y2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAg
IFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAg
SW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODk1MDlmYmM0MGVkYmFkOTQzOTdjNzI2MjljMmFlYzY5YTEzNzNkMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZy
YW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNs
dWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0
L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZi4KK2Nv
bnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworCitJbWFnZURlY29kaW5nU3Rv
cmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5j
ZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sK
KyAgICBpZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2VP
bk1haW5UaHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdT
dG9yZTsKK30KK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlKCkKKyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9y
ZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0
aWFsaXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFn
ZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoMCk7
Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAgICYm
IGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKQorICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5w
aXhlbFJlZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURl
Y29kZWQpKTsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVj
b2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFT
U0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNr
SVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWln
aHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRlRnJh
bWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6
TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVkIFNr
UGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5n
LgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOwor
ICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0SWQs
IGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVu
dGlmeSB0aGlzIGlzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNv
ZGluZ1BpeGVsUmVmLgorICAgIGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVj
b2RlZCk7CisgICAgYml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1cmUg
ZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0bWFw
IEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBz
Y2FsZWRTdWJzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2FzdDxMYXp5
RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQoIXBpeGVs
UmVmLT5pc1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+aWQoKSktPnNpemUo
KSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAwOwor
ICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVk
Qml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93
Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1Bp
eGVsUmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYo
KTsKKyAgICByZXNpemVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1
cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQor
Cit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9va3VwRnJhbWVHZW5l
cmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lk
KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0
b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IGdl
bmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2ZXMgdGhlIGZ1bGwg
c2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNoZSogZnJhbWVDYWNo
ZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRtYXA7
CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFBpeGVscyBhcmUg
b3duZWQgYnkgdGhlIEltYWdlRGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBGaW5kCisgICAgICAg
IC8vIGEgd2F5IHRvIHRyYW5zZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUuCisgICAgICAgIElt
YWdlRnJhbWUqIGZyYW1lID0gZ2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1lQnVmZmVyQXRJbmRl
eCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUgaWYgdGhpcyBpcyBj
b21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKEltYWdlRnJhbWVD
YWNoZTo6Y3JlYXRlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNvZGluZyBlcnJv
ci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAg
ICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVsbFNp
emUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24t
dGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1
c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVkIGZyYWdtZW50
LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVk
U2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9sb2NrZWRTa0Jp
dG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1h
cCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAg
fQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vic2V0LngoKSwg
c2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQ
aXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgbV9s
b2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0bWFwLnJlc2V0
KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgpICYmIGlz
TWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVH
ZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgKyttX25l
eHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIEltYWdlRnJhbWVHZW5l
cmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdl
RGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAoreworICAg
IHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQoaWQpOworfQorCitJbWFnZUZyYW1lR2VuZXJh
dG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTGF6eURlY29kZWQoYml0bWFwKSk7
CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJhdG9yKHN0YXRpY19jYXN0PExhenlEZWNvZGlu
Z1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5pZCgpKTsKK30KKworSW1hZ2VGcmFtZUNh
Y2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0t
PmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVDYWNo
ZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXpl
KSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDgwYmUwYzdlYTBiNmM3OTU4NmE3
NTA3N2JmOTIzZGZlYTI1YjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKyNkZWZpbmUgSW1h
Z2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tS
ZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgSW1hZ2VGcmFtZUdlbmVy
YXRvcjsKK2NsYXNzIEltYWdlRnJhbWVDYWNoZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xh
c3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURl
Y29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3RhdGlj
IEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24o
KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisKKyAg
ICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGVyPik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1
YnNldCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIExvY2sg
YW5kIHVubG9jayBzdXBwb3J0cyBvbmx5IG9uZSBpbWFnZSBhdCBhIHRpbWUgc28gY2FsbCB0aGVt
IGkgcGFpci4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9ja1Bp
eGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOworICAgIGJvb2wg
Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlRnJhbWVHZW5lcmF0
b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBs
b29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIEltYWdlRnJhbWVHZW5lcmF0
b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAgSW1h
Z2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEltYWdlRnJh
bWVHZW5lcmF0b3I+ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVjdG9yPE93blB0cjxJbWFn
ZUZyYW1lQ2FjaGU+ID4gbV9mcmFtZUNhY2hlOworCisgICAgaW50IG1fbmV4dElkOworICAgIFNr
Qml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNlY2I2YWE2MGQz
YzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdkMWRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkltYWdlRnJhbWVDYWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVD
YWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCit7Cit9CisKK0ltYWdlRnJhbWVDYWNoZTo6SW1hZ2VG
cmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9pZChpZCkKKyAgICAs
IG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwg
bV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCit7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjpp
c0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDky
OGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIzMzBmYzEwNzllNGMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hl
LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUNhY2hlX2gK
KyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEltYWdlRnJhbWVDYWNoZSBp
cyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKKy8vIGJ5IHR3
byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBm
cmFnbWVudCBjb21lcyBmcm9tLgorLy8gMi4gU2NhbGVkIGltYWdlIHNpemUuCitjbGFzcyBJbWFn
ZUZyYW1lQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVD
YWNoZT4gY3JlYXRlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2FjaGUoaWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21w
bGV0ZSkpOworICAgIH0KKworICAgIEltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNp
emUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVD
YWNoZSgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0bWFwOyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisK
KyAgICBib29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25z
dDsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0K
KworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAg
ICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFiMjc1NzgzNjBiNTk3YmVhYTc4YWRmOTU3ODRkZjI2YzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgor
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdl
bmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2Rl
cihkZWNvZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXpl
KCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1l
R2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2Rlciog
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5n
ZXQoKTsKK30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEg
PSBkYXRhOworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YSht
X2RhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTdjOWNjNTA4N2Vm
MmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAor
I2RlZmluZSBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURl
Y29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3Ig
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNy
ZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAgfQor
CisgICAgZXhwbGljaXQgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rl
cj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRoZSBp
bWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsKKyAg
ICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CisKKyAgICBjb25zdCBTa0lTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5ZTNmNmZhMTVjMTkyZWIxZTY0ZTgyNDcxNDlkMjMz
NzBlN2VmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVm
LmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xhenlEZWNvZGluZ1BpeGVsUmVm
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUs
IGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAgICAs
IG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVk
U3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5
RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Omlz
U2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBmdWxs
U2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Omlz
Q2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1f
c2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVk
U3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2Nr
UGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9j
a1BpeGVscyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVh
ZCgpLT51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25M
b2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNhMmQ1YzVhZGVlZDdiNGIwMzYyYWI3MzEzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6
eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5
RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2lu
Y2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgor
I2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7
CitwdWJsaWM6CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1YWwg
fkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7CisKKyAgICBTS19ERUNMQVJFX1VORkxBVFRFTkFCTEVf
T0JKRUNUKCkKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29s
IGlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xp
cHBlZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7Cisg
ICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9j
a1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7Cisg
ICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVs
UmVmX2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2Nl
NmYyNGQ0YWFmNTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2NGZmZDQwNTZhNzQzYTI1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJ
bWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVs
UmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkK
KyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2
ZUltYWdlU2tpYSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFz
UmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQog
CiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYg
c2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QK
IHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
c0xhenlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1h
Z2UsIHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBp
ZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkp
IHsKICAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAg
ICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdl
U3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggMzAzZDc1OTlhOWFhZjQxZTYyODRjZTAzN2ZlYzNiZjJm
ZGUxZGI1Ni4uODU1MDM4NTIwYTk4M2M2MDA2YzY0MjQ3ZTZhZDQyZmM4ZWQyNDBlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKQEAgLTE0NSw2ICsxNDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAgICB9
CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChjb25z
dCBTa0JpdG1hcCYgYml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9IE5h
dGl2ZUltYWdlU2tpYShiaXRtYXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU2tC
aXRtYXAmIGdldFNrQml0bWFwKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fYml0bWFwLmJpdG1hcCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAyNGNhZTI5OGZmNTA0OTFmZWMxM2ZhYjQz
YmQ5MDg2OTY2Nzg2YzBmLi5iY2Y1ZjhlYjkwODBlOGNlNDg0YzFlMDExOGE3MmI0MmJhYzkyOGE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc3LDkgKzc3LDExIEBACiAgICAg
ICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9J
REJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RU
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCi0gICAg
ICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1h
Z2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxE
QlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmluZGV4IGFiZDg0ZWQwZTU3YWZlOTgzMWZm
ZmQwNjM5MWU0MjkxZTVkYzJiZTQuLjA4Y2QxOTc0NWNjNzBhYWUzNzljODk1MWU2NGExNDgyN2Y2
YTQ1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRp
bmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApA
QCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVmYXVsdFRpbGVTaXplKFdlYlNpemUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmlj
ZVN1cHBvcnRzTW91c2UoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBw
b3J0c1RvdWNoKGJvb2wpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCmlu
ZGV4IGUzNTdmMjhlNDI4M2E3MDAxNTZkNmNmYWJkNTBlZGIzZWQyZjc4OTcuLjI0M2QwOGU2Mjk0
ODA1Njk3OTM2MmRmY2Y4NThjNmZmODVlOGE3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViS2l0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdC5oIgogCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TXV0YXRpb25PYnNlcnZlci5oIgpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgc2h1dGRvd24oKQog
ICAgIH0KICNlbmRpZgogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKKyAgICBXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CiAgICAgUGxhdGZvcm06OnNodXRk
b3duKCk7CiAgICAgV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6c2h1dGRvd24oKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDk4OGM1
ZTY2YjFlMTNjMTZlOWY2N2QwMmE0N2NhMDc4ZGYzODYwOTguLmRjNzczNmQ5YTIxYjA5MDc0Y2Zi
MWQ5MTU5Y2I4ZjdiMTljOTA5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlNldHRp
bmdzSW1wbC5oIgogCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CkBAIC01NSw2ICs1
Niw3IEBAIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBsKFNldHRpbmdzKiBzZXR0aW5n
cykKICAgICAsIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoZmFs
c2UpCiAgICAgLCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkKHRydWUpCiAgICAgLCBtX2F1
dG9ab29tRm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZShmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJ
bWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmYXVsdFRpbGVTaXplKFdlYlNp
emUoMjU2LCAyNTYpKQogICAgICwgbV9tYXhVbnRpbGVkTGF5ZXJTaXplKFdlYlNpemUoNTEyLCA1
MTIpKQogewpAQCAtNDgwLDYgKzQ4MiwxNSBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3MtPnNldERl
ZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKCFtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgZW5hYmxlZCkKKyAgICAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgaWYgKG1f
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAhZW5hYmxlZCkKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZChlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmgKaW5kZXggMTE2OWMzMWNmM2ViMmFlODBmZGExZjg4NWNkMDg2OTE2OGY0NmE0MS4uOTA1
MWJhYjYxN2Y4NmJmZTA0OWIwYjc3ZTZlMmFkZjAyZDcyZDY1OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJT
dHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdlYlNpemUpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKTsKQEAgLTE3OCw2ICsxNzksNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcjsKICAg
ICBib29sIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQ7CiAgICAgYm9vbCBtX2F1dG9ab29t
Rm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZTsKKyAgICBib29sIG1fZGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZDsKICAgICBXZWJTaXplIG1fZGVmYXVsdFRpbGVTaXplOwogICAgIFdlYlNpemUg
bV9tYXhVbnRpbGVkTGF5ZXJTaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFi
ZThhNzJjNTA0NzNhMzNkYTJmMDEzZGMwNjNjZDcyMTU4ZjMwZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3Bw
CkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGluZ0JyaWRnZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNp
bmNsdWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGluZ0Jy
aWRnZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFs
aXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1h
Z2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSg2MDAsIDYxMyk7
CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBJbWFnZURlY29kaW5nQnJpZGdlOjpjcmVhdGUoYWRv
cHRQdHIobV9hY3R1YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzLnNldERldmljZShuZXcg
U2tEZXZpY2UoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAsIDEwMCkpLT51bnJlZigp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
Ly8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRoZSBwb2ludGVyIHRvIHF1ZXJ5IHN0YXRlcy4K
KyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVhbERlY29kZXI7CisgICAgT3duUHRyPEltYWdl
RGVjb2RpbmdCcmlkZ2U+IG1fbGF6eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsK
KyAgICBTa0NhbnZhcyBtX2NhbnZhczsKK307CisKK1RFU1RfRihJbWFnZURlY29kaW5nQnJpZGdl
VGVzdCwgZHJhd0ludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4g
aW1hZ2UoYWRvcHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05l
d05hdGl2ZUltYWdlKCkpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCku
d2lkdGgoKSwgaW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUShtX2FjdHVh
bERlY29kZXItPnNpemUoKS5oZWlnaHQoKSwgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoaW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShpbWFnZS0+Yml0bWFwKCkuaXNJbW11dGFibGUoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENh
bnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZh
cy0+ZHJhd0JpdG1hcChpbWFnZS0+Yml0bWFwKCksIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7
CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQoKSk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kaW5nQnJpZGdlVGVzdCwgZHJhd1NjYWxlZElu
dG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UoYWRvcHRQ
dHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05hdGl2ZUltYWdl
KCkpKTsKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBpbWFnZS0+cmVzaXplZEJpdG1hcChT
a0lTaXplOjpNYWtlKDUwLCA1MSksIFNrSVJlY3Q6Ok1ha2VXSCg1MCwgNTEpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uoc2NhbGVkQml0bWFwLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShzY2FsZWRC
aXRtYXAuaXNJbW11dGFibGUoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzY2FsZWRCaXRtYXAud2lk
dGgoKSk7CisgICAgRVhQRUNUX0VRKDUxLCBzY2FsZWRCaXRtYXAuaGVpZ2h0KCkpOworICAgIEVY
UEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOwor
CisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAw
LCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoc2NhbGVkQml0bWFwLCAwLCAwKTsK
KyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFs
RGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3
UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZy
YW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
Y2YyMzc0NGU1MWZkZTQzYzE2NGIzMTEwMWQwNWIzMzA3MzJjMmZkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja0ltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrSW1h
Z2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgTW9ja0ltYWdl
RGVjb2RlcigpCisgICAgICAgIDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYVByZW11
bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpCisgICAg
ICAgICwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgwKQorICAgIHsgfQorCisgICAgdmlydHVh
bCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICJtb2NrIjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QpCisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7
CisKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7
CisgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIH0KKworICAgIGlu
dCBmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1vY2tJbWFn
ZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGM1NGZkODFkNGZiOGJjZTAwYzM2NGE5ZGM4MzkwNDg0MTlhYzViYjYuLmM4YWIwZGQ0
NWQxNzVhNzRiOWZiZTYzYTMzZjcwZDk1NDhlY2FhMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOS0wOCAg
QWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGlu
ZyB0byBEUlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAg
ICAgICAoVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoKKyAgICAgICAgKFRlc3RTaGVsbDo6c2V0RGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdl
YlByZWZlcmVuY2VzOjpyZXNldCk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaDoKKyAg
ICAgICAgKFdlYlByZWZlcmVuY2VzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0LnZpcnR1YWxf
dGVzdF9zdWl0ZXMpOgorCiAyMDEyLTEwLTE0ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBBbGxvdyBub3RpZmljYXRpb24gb3JpZ2luIHBlcm1pc3Npb24gcmVxdWVzdCB3
aGVuIG5vIGpzIGNhbGxiYWNrIGlzIHByb3ZpZGVkCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMzBjZTI4ODUxZmM5YTlhNDZiOGI2
M2U2ZGJkMDBkYTFjM2ZlYTgzOC4uNWEzMjEwNDQ5NmY3OWIxZjJhNDU0OGIzNjUzNDU2YjQwNjFm
YTZiNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRl
clRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVB
Y2NlbGVyYXRlZFBhaW50aW5nW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtcGFpbgogc3RhdGlj
IGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvW10g
PSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtdmlkZW8iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
VXNlR3JhcGhpY3NDb250ZXh0M0RJbXBsZW1lbnRhdGlvbltdID0gIi0tdXNlLWdyYXBoaWNzLWNv
bnRleHQtM2QtaW1wbGVtZW50YXRpb249IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJs
ZVBlclRpbGVQYWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsKK3N0YXRp
YyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5h
YmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
U3RyZXNzT3B0W10gPSAiLS1zdHJlc3Mtb3B0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0
cmVzc0Rlb3B0W10gPSAiLS1zdHJlc3MtZGVvcHQiOwpAQCAtMTMzLDYgKzEzNCw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgYm9vbCBkZWZlcnJlZDJEQ2FudmFzRW5h
YmxlZCA9IGZhbHNlOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxz
ZTsKICAgICBib29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc09wdCA9
IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKICAgICBib29sIGhhcmR3YXJl
QWNjZWxlcmF0ZWRHTCA9IGZhbHNlOwpAQCAtMTgzLDYgKzE4NSw4IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93
biBHcmFwaGljQ29udGV4dDNEIGltcGxlbWVudGF0aW9uICVzXG4iLCBpbXBsZW1lbnRhdGlvbi5j
X3N0cigpKTsKICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVQZXJU
aWxlUGFpbnRpbmcpCiAgICAgICAgICAgICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURl
Y29kaW5nKQorICAgICAgICAgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IHRydWU7
CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc09wdCkKICAgICAgICAg
ICAgIHN0cmVzc09wdCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlv
blN0cmVzc0Rlb3B0KQpAQCAtMjIyLDYgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAgICAgICAgIHNoZWxsLnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVy
cmVkMkRDYW52YXNFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRQ
ZXJUaWxlUGFpbnRpbmdFbmFibGVkKHBlclRpbGVQYWludGluZ0VuYWJsZWQpOworICAgICAgICBz
aGVsbC5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRKYXZhU2NyaXB0RmxhZ3MoamF2YVNjcmlwdEZs
YWdzKTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzT3B0KHN0cmVzc09wdCk7CiAgICAgICAgIHNo
ZWxsLnNldFN0cmVzc0Rlb3B0KHN0cmVzc0Rlb3B0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDMyNTg1ZmFhMWIyZDhhZDgxYTgzYjE1ZThmNzEy
YmQ4Y2E3MjQ4OWIuLmFjNzc1OTY4MWEwNDZkMDNkNDcxOGZjNDU4YzI3ZTgyZTE0NjE3OTkgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTE0LDYg
KzExNCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICAsIG1fYWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkKGZhbHNl
KQogICAgICwgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc3RyZXNzT3B0KGZhbHNl
KQogICAgICwgbV9zdHJlc3NEZW9wdChmYWxzZSkKICAgICAsIG1fZHVtcFdoZW5GaW5pc2hlZCh0
cnVlKQpAQCAtMjI5LDYgKzIzMCw3IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdz
KFdlYlZpZXcmIHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZCA9IG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5kZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZCA9IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5h
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7
CisgICAgbV9wcmVmcy5kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gbV9kZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkOwogICAgIG1fcHJlZnMuYXBwbHlUbygmd2ViVmlldyk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggNDRiNWFlMzg4
YzY4ZDY1ZGU4OTBmYzgwMGZlZDUyMjllZWMyYTMyNC4uMzkyNjYyNDQ2OWI2OGNjYmM4NzRiNDkx
ZWE0ODNhMGI2MzkyY2U1NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogICAg
IHZvaWQgc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldERlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICNpZiBkZWZpbmVkKE9TX1dJTikKICAgICAvLyBB
Y2Nlc3MgdG8gdGhlIGZpbmlzaGVkIGV2ZW50LiBVc2VkIGJ5IHRoZSBzdGF0aWMgV2F0Y2hEb2cg
dGhyZWFkLgogICAgIEhBTkRMRSBmaW5pc2hlZEV2ZW50KCkgeyByZXR1cm4gbV9maW5pc2hlZEV2
ZW50OyB9CkBAIC0yMzUsNiArMjM2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOwog
ICAgIGJvb2wgbV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgbV9kZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkOwogICAgIFdlYlByZWZlcmVuY2VzIG1fcHJlZnM7CiAgICAgYm9v
bCBtX3N0cmVzc09wdDsKICAgICBib29sIG1fc3RyZXNzRGVvcHQ7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggM2JjMmNkZDlmMmFl
NDE3MGMzM2FkNjQxMDZkNGE3ZjJkMDkwMjFmNS4uNWM4YzkyYzk5OTQyNjQ0ZGQxOWE0OWM5OGU2
NmMxYTRmMDZkNDQ0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlByZWZlcmVuY2VzLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6
OnJlc2V0KCkKICAgICBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGFjY2Vs
ZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgZm9yY2VDb21wb3NpdGluZ01vZGUg
PSBmYWxzZTsKKyAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAg
bWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsKICAgICBtb2NrU2Nyb2xs
YmFyc0VuYWJsZWQgPSBmYWxzZTsKICAgICBjc3NDdXN0b21GaWx0ZXJFbmFibGVkID0gZmFsc2U7
CkBAIC0yMjQsNiArMjI1LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChh
Y2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKGRlZmVycmVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0
QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOwor
ICAgIHNldHRpbmdzLT5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRNZWRpYVBsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZShtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSk7CiAgICAgc2V0
dGluZ3MtPnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOwog
ICAgIHNldHRpbmdzLT5zZXRBcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRv
cihmb3JjZUNvbXBvc2l0aW5nTW9kZSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuaAppbmRleCBjMzY1NTNiMzU0Njk2NGM3NmYyOTkxNmE5ZWE5Yjll
MmEyM2UyNGIyLi5lMDMxNWYyZDA3YzFlNWI5ODU1ZmU3YjNhYTJlMTRjZjdlMWU0MGJmIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKQEAgLTEw
OSw2ICsxMDksNyBAQCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXMgewogICAgIGJvb2wgYWNjZWxlcmF0
ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAg
ICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZDsKICAgICBib29sIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlOwogICAgIGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVkOwogICAgIGJvb2wgY3NzQ3VzdG9t
RmlsdGVyRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGMzMTBlYjE1YjE5NTRkZGVkZGMzMzNiOTgwZjY2
NWQ1ZmNkYjkxY2UuLmE2OWY1YTgyMmFhM2ZlMzI4NDZmOTE3MDExNjQxOTNjYzIyMzhmNTIgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQpAQCAtMzkwLDYgKzM5MCw5IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAg
ICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvc29m
dHdhcmVjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3Np
dGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtc29mdHdhcmUt
Y29tcG9zaXRpbmcnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyctLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVuYWJsZS1wZXItdGlsZS1w
YWludGluZycsICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAgICAgICAgIF0KIAogICAg
ICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBlNzhjYTlkOGU1ODgwMTlkZTlkMzNiOTIxMGY5NjRhNGIzM2VhNDdlLi41NzBi
ZTRkM2IzODlmMjJiNzQ5MDMwNmY0N2I4MWI2MjU0ZTliODZkIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSB2aXJ0dWFsIHRl
c3Qgc3VpdGUgZm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJyZWQgaW1hZ2UKKyAgICAgICAgZGVj
b2RpbmcuCisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcyB3aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAgIC0tZm9yY2UtY29tcG9zaXRpbmcg
LS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2Rp
bmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVkLgorCiAyMDEyLTEwLTE0ICBTaGlueWEgS2F3YW5ha2Eg
IDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQg
Z2FyZGVuaW5nLCBUZXN0RXhwZWN0YXRpb25zIHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkYzIwNjk5Mzg4NmZkYjYxYTU4
ZTM0Y2M1MGRiZmE4NDQxN2Q1ZmVkLi4zMzQ1YTBjNDcxOWIwYjVhYzg0MjM0ZmYxNDMyNjJiMmY2
NjcxNGI0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTQwMjksMyArNDAyOSwyNyBAQCB3ZWJraXQub3JnL2IvOTkwODkgdHJhbnNmb3Jt
cy8zZC9nZW5lcmFsL3BlcnNwZWN0aXZlLXVuaXRzLmh0bWwgWyBQYXNzIEltYWdlT25seQogd2Vi
a2l0Lm9yZy9iLzk5MTM0IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3RpbnktbGF5ZXIt
cm90YXRlZC5odG1sIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIEZhaWx1cmUgXQogCiB3ZWJraXQu
b3JnL2IvOTkxMzggWyBTbm93TGVvcGFyZCBdIHN2Zy9jdXN0b20vZm9yZWlnbi1vYmplY3Qtc2tl
dy5zdmcgWyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQorCisjIFRoZXNlIHRlc3RzIGFyZSBmYWls
aW5nIGFscmVhZHkgYW5kIGJlY2F1c2Ugb2YgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBkZWZlcnJl
ZAorIyBpbWFnZSBkZWNvZGluZyB0aGV5IG5lZWQgdG8gYmUgc3VwcHJlc3NlZCBhZ2Fpbi4KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi1jc3MuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvZXhpZi1vcmllbnRhdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1h
Z2UtbGFuZHNjYXBlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9zdXBwb3J0LWJyb2tlbi1pbWFnZS1kZWxlZ2F0ZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmlsZS5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbGFyZ2UtY2hlY2tlcmJvYXJkLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sb29wLWNvdW50Lmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5kLXdl
YmtpdC10cmFuc2Zvcm0tc2NhbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
ZW1iZWQtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFnZS5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1jaXJjbGUtZm9jdXMtcmluZy5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3It
ZXhwbGljaXRseS1pbmhlcml0ZWQtZnJvbS1tYXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
aW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLW5vdC1pbmhlcml0ZWQtZnJvbS1tYXAu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNv
bG9yLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLXBvbHlnb24tZm9jdXMtcmlu
Zy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9vYmplY3QtaW1hZ2UuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvcmVwYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvcGFsZXR0ZWQtcG5nLXdpdGgtY29sb3ItcHJvZmlsZS5odG1sIFsgTWlzc2luZyBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL1JFQURNRS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0
MzJkNWZkMDBiODI4MWUyODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVB
RE1FLnR4dApAQCAtMCwwICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3Rvcnkg
dGVzdCB0aGUgJ2RlZmVycmVkIGltYWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBD
aHJvbWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168629</attachid>
            <date>2012-10-14 23:26:27 -0700</date>
            <delta_ts>2012-10-15 12:45:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121014232518.patch</filename>
            <type>text/plain</type>
            <size>77090</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODUzNTgzNmI5ZDg3NDNh
ZDBiMDUzMThhY2I3OTcyYThkNDdkNzQ5Ni4uMjUzOTNmMjU3ZDJmZTc4MWQ2NGMwZWI2Y2ZmZDg3
ZjZhNmJjOWE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3OSBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gSG93ZXZlciB0aGUgZXhpc3RpbmcKKyAgICAgICAgZGVjb2Rl
LW9uLWRyYXcgcmVzdHJpY3RzIHRoYXQgcmVjb3JkaW5nIGhhcyB0byBibG9jayBvbiBleHBlbnNp
dmUKKyAgICAgICAgZGVjb2Rpbmcgb3BlcmF0aW9ucy4gVGhpcyBjaGFuZ2UgaXMgdG8gYWxsb3cg
cmVjb3JkaW5nIG9mIGltYWdlCisgICAgICAgIGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBh
aW50IHRpbWUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGVuYWJsZXMgcGxheWJhY2sgYW5kIGRl
Y29kaW5nIHN0cmF0ZWd5IHRoYXQgcnVucyBvbgorICAgICAgICBtdWx0aXBsZSB0aHJlYWRzLgor
CisgICAgICAgIERlc2lnbjoKKworICAgICAgICBJbWFnZSBkZWNvZGluZyBoYXBwZW5zIHdoZW4g
YSBCaXRtYXBJbWFnZSBpcyBkcmF3biBpbnRvIGEKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0LiBX
aGVuIHBlci10aWxlIHBhaW50aW5nIGlzIGVuYWJsZWQgR3JhcGhpY3NDb250ZXh0CisgICAgICAg
IGlzIGJhY2tlZCBieSBTa0NhbnZhcyBpbiByZWNvcmRpbmcgbW9kZS4gVGhpcyBTa0NhbnZhcyBy
ZWNvcmRzIGRyYXdpbmcKKyAgICAgICAgYW5kIGltYWdlIGRlY29kaW5nIG9wZXJhdGlvbnMgdG8g
bWluaW1pemUgcmVjb3JkaW5nIHRpbWUuCisKKyAgICAgICAgQW4gaW1hZ2UgZGVjb2Rpbmcgb3Bl
cmF0aW9uIGlzIHJlY29yZGVkIGFzIGEgU2tQaXhlbFJlZiBvYmplY3QKKyAgICAgICAgaW1wbGVt
ZW50ZWQgYnkgTGF6eURlY29kaW5nUGl4ZWxSZWYuIFRoaXMgb2JqZWN0IHJlZmVyZW5jZXMgcmF3
IGVuY29kZWQKKyAgICAgICAgZGF0YSwgcmVnaW9ucyB0byBiZSBkZWNvZGVkIGFuZCBzY2FsaW5n
IGluZm9ybWF0aW9uLgorCisgICAgICAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBl
ci10aWxlIHBhaW50aW5nIHRoaXMgZmVhdHVyZSBkZWZlcnMKKyAgICAgICAgaW1hZ2UgZGVjb2Rp
bmcgdW50aWwgdGhlIFNrQ2FudmFzIHJlZmVyZW5jaW5nIHRoZSBpbWFnZSBpcyByYXN0ZXJpemVk
LgorCisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFuZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0
aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgUGVyZm9ybWFuY2UgSW1wYWN0OgorCisgICAgICAg
IFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IFdlYktpdDo6c2V0RGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZCgpCisgICAgICAgIGFuZCBkb2VzIG5vdCBoYXZlIGFuIGltcGFjdCB3aGVuIGRp
c2FibGVkLgorCisgICAgICAgIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Lgor
CisgICAgICAgIFVwY29taW5nIENoYW5nZXM6CisKKyAgICAgICAgMS4gSW1wbGVtZW50IGEgZnVs
bC1mZWF0dXJlZCBpbWFnZSBjYWNoZSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisgICAgICAgIDIu
IEFsbG93IHJhc3Rlcml6YXRpb24gYW5kIGRlY29kaW5nIG9uIGltcGwgdGhyZWFkLgorCisgICAg
ICAgIENsYXNzZXMgSW52b2x2ZWQ6CisKKyAgICAgICAgQml0bWFwSW1hZ2UKKworICAgICAgICBC
aXRtYXBJbWFnZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGRlZmVycmVkIGltYWdlIGRlY29kaW5n
LiBXaGVuCisgICAgICAgIGRyYXdpbmcgYSBCaXRtYXBJbWFnZSBpbnRvIGEgR3JhcGhpY3NDb250
ZXh0IGl0IG1ha2VzIGEgcmVxdWVzdCB0bworICAgICAgICBjcmVhdGUgYSBOYXRpdmVJbWFnZVNr
aWEuIFdlIHN1YnN0aXR1dGUgdGhlIGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAg
IHN1Y2ggdGhhdCBpdCBpcyBsYXppbHkgZGVjb2RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5n
QnJpZGdlCisKKyAgICAgICAgVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2Yg
YSBpbWFnZSBkZWNvZGVyIGZvciBDaHJvbWl1bS4KKyAgICAgICAgVGhpcyBpcyBhIGJyaWRnZSBs
YXllciB0aGF0IGVpdGhlciBkZWxlZ2F0ZXMgY2FsbHMgdG8gdGhlIGFjdHVhbAorICAgICAgICBJ
bWFnZURlY29kZXIgb3IgY3JlYXRlIGEgbGF6aWx5LWRlY29kZWQgU2tCaXRtYXAgYW5kIGRlbGVn
YXRlcyBjYWxscworICAgICAgICB0byBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWFuYWdlcyBhbGwgZW5jb2Rl
ZCBpbWFnZXMuIEl0IGtlZXBzIHRyYWNrIG9mIGVuY29kZWQKKyAgICAgICAgZGF0YSBhbmQgdGhl
IGNvcnJlc3BvbmRpbmcgSW1hZ2VEZWNvZGVyIGZvciBkb2luZyBhY3R1YWwgZGVjb2RpbmcuIEl0
CisgICAgICAgIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbGF6aWx5IGRlY29k
ZWQgU2tCaXRtYXBzLiBUaGlzCisgICAgICAgIFNrQml0bWFwIGNvbnRhaW5zIGEgTGF6eURlY29k
aW5nUGl4ZWxSZWYgb2JqZWN0IHdoaWNoIHJlZmVyZW5jZXMgdG8gYW4KKyAgICAgICAgaW1hZ2Ug
ZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVs
UmVmCisKKyAgICAgICAgVGhpcyBvYmplY3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBl
bmFibGUgbGF6eSBkZWNvZGluZy4gV2hlbgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nl
c3MgcGl4ZWxzIExhenlEZWNvZGluZ1BpeGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29u
dGFpbnMgaW5mb3JtYXRpb24gdG8gbG9jYXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRo
ZXNlCisgICAgICAgIGluZm9ybWF0aW9uIGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3Rv
cmUgdG8gYWNjZXNzIGFjdHVhbCBwaXhlbHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVy
ZSBhcmUgYWJvdXQgODAgdGVzdHMgaW4gdGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAg
cnVubmluZyB0aGlzIGZlYXR1cmUgaW4gdGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQg
dGVzdHMuIEFkZGVkIEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAor
ICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6
SW1hZ2VEZWNvZGluZ0JyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJp
ZGdlOjp+SW1hZ2VEZWNvZGluZ0JyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRn
ZTo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0Jy
aWRnZTo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdCcmlkZ2U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRn
ZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlk
Z2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVT
aXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdCcmlkZ2U6OnJlcGV0aXRp
b25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlOjpjbGVhckZy
YW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZTo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0Jy
aWRnZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEltYWdlRGVjb2RpbmdCcmlkZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURl
Y29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OmluaXRpYWxpemVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpzaHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OmlzTGF6eURlY29kZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpj
cmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6dW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9y
ZTo6Y2FsbGVkT25WYWxpZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0VxdWFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OmlzQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5n
UGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlE
ZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzU2NhbGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
enlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6OmlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
YXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoSW1hZ2VGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpnZXRTa0JpdG1hcCk6CisKIDIwMTItMTAtMTQgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBTaW1wbGlmeSB1c2VyIGNvbnRlbnQgaW4gV2ViS2l0MiBi
eSB1c2luZyBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCBhbmQgV2ViQ29yZTo6VXNlclNjcmlwdCBk
aXJlY3RseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NjI3YTRlNDg0ZWE5MGE3Yzdl
YTExYzkwNzc4MzA1N2UwOTI2ZWVjLi5kZTllZTgyMmYyNDgwZTQyZjg3OTBkOWI0ZWVhZmVjNGIz
MGNhNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEy
LTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBk
ZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQg
aW4gSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwLiBUaGV5IHZlcmlmeQorICAgICAgICBpbWFn
ZSBkZWNvZGluZyBoYXBwZW5zIG9ubHkgd2hlbiBTa1BpY3R1cmUgaXMgcmFzdGVyaXplZCBmb3Ig
Ym90aAorICAgICAgICBzY2FsZWQgYW5kIG5vbi1zY2FsZWQgY2FzZXMuCisKKyAgICAgICAgVGVz
dHM6IEltYWdlRGVjb2RpbmdCcmlkZ2VUZXN0LmRyYXdJbnRvU2tQaWN0dXJlCisgICAgICAgICAg
ICAgICBJbWFnZURlY29kaW5nQnJpZGdlVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6Cisg
ICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAg
ICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0
dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0
dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nQnJpZGdl
VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nQnJpZGdlVGVzdDo6U2V0VXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Q6OlRlYXJEb3duKToK
KyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0ltYWdlRGVj
b2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpNb2NrSW1hZ2VEZWNv
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5z
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCk6CisKIDIwMTItMTAtMTQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBNYWtlIFVzZXJTY3JpcHQgYW5kIFVzZXJTdHlsZVNoZWV0IHZhbHVlIG9iamVj
dHMgdGhhdCBhcmUgY29weWFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyMTRhYzI3ZTgzMDlmY2Q2
YmE3MWIwMmQ2MjQzZmZlYjI4NGNkOTk2Li45YjZhZjBmNTc1YWI4Yjc3ZjY1ZDBiNGI3ZTIxZDNm
YzQ3M2U4YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00OTE1LDYgKzQ5MTUsMTYgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJE
YXRhU2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2lu
Z0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5k
ZXggOTgxNmU2MzQxZmViMjA3NTBlMzE2MTI3ZjYwZGU1ZjgxZjliNjk5Ni4uOThmMDg1YmVhOWZh
Y2YwYzdjOTYyOTBjZTk2YzdiYjZmZDYyNjRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNs
dWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyArODIsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYg
aW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0
eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1f
ZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNv
dXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nh
c3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KE5hdGl2ZUltYWdlU291cmNlRmFjdG9yeTo6Y3JlYXRl
KCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVj
b2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rl
ci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEw
NTVhYjg3ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIuLjczZTE4MWNhODEyNTAxN2QwMjY3ZDhj
NmY1YjM0NGEyNzU1MzllYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaApAQCAtNDgsMTEgKzQ4LDIxIEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IAogI2lmIFVTRShDRykKIHR5cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKLSNlbHNlCisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29k
ZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorY2xhc3MgSW1hZ2VEZWNvZGluZ0JyaWRnZTsKK3R5
cGVkZWYgSW1hZ2VEZWNvZGluZ0JyaWRnZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3Rvcnk7Cit0eXBl
ZGVmIEltYWdlRGVjb2RpbmdCcmlkZ2UqIE5hdGl2ZUltYWdlU291cmNlUHRyOworI2VsaWYgVVNF
KENHKQorI2RlZmluZSBOYXRpdmVJbWFnZVNvdXJjZUZhY3RvcnkgSW1hZ2VEZWNvZGVyCisjZWxz
ZQordHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VTb3VyY2VGYWN0b3J5OworI2VuZGlm
CisKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1h
dCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0
aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJ
RnMgaGF2ZSBhbiBvcHRpb25hbCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2Ny
aWJlcyBob3cgYW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ0JyaWRnZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmVhNDU2YzEyYzE3MGY2MjgwYTk2NDJkMjdmNzA0OGNiMmU5NzNmMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdCcmlkZ2UuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdCcmlkZ2UuaCIKKworI2luY2x1ZGUgIkltYWdl
RGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW1hZ2VEZWNvZGluZ0JyaWRnZTo6SW1hZ2VEZWNvZGluZ0JyaWRnZShJ
bWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxz
ZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30K
KworSW1hZ2VEZWNvZGluZ0JyaWRnZTo6fkltYWdlRGVjb2RpbmdCcmlkZ2UoKQoreworICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0
b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworSW1hZ2VEZWNvZGlu
Z0JyaWRnZSogSW1hZ2VEZWNvZGluZ0JyaWRnZTo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYg
ZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJ
bWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBh
bHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvck9wdGlvbik7CisgICAgaWYgKCFhY3R1YWxEZWNvZGVy
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IEltYWdlRGVjb2RpbmdCcmlkZ2Uo
YWN0dWFsRGVjb2Rlcik7Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ0JyaWRnZT4gSW1h
Z2VEZWNvZGluZ0JyaWRnZTo6Y3JlYXRlRm9yVGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2Rl
cj4gZGVjb2RlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdCcmlk
Z2UoZGVjb2Rlci5sZWFrUHRyKCkpKTsKK30KKworU3RyaW5nIEltYWdlRGVjb2RpbmdCcmlkZ2U6
OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQor
ICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAg
IHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29k
aW5nQnJpZGdlOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIE9u
bHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4g
VGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5p
bWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdo
aWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBkb2VzIHN5bmNocm9ub3VzCisg
ICAgLy8gaW1hZ2UgZGVjb2RpbmcuCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2VPbk1haW5UaHJlYWQoKQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIKKyAgICAgICAgJiYg
bV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCkgPT0gMQorICAgICAgICAmJiBtX2FjdHVhbERl
Y29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxE
ZWNvZGVyLT5zaXplKCk7CisgICAgICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERl
Y29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29k
ZWRTa0JpdG1hcCA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+
Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAg
ICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXAp
OworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNl
dERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxlYXNlKCks
IG1fYWxsRGF0YVJlY2VpdmVkKTsKKworICAgICAgICAvLyBTZXQgZnJhbWUgdG8gcGFydGlhbCBi
ZWNhdXNlIGRlY29kZSBkaWRuJ3QgaGFwcGVuIHlldCBzbyB3ZSBjYW4ndAorICAgICAgICAvLyBw
cmVkaWN0IHRoaXMgY29ycmVjdC4gVGhpcyBmbGFnIG9ubHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1h
Z2VzIHNvCisgICAgICAgIC8vIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgbV9s
YXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAg
IH0KKworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERl
Y29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuICZtX2xhenlEZWNv
ZGVkRnJhbWU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6c2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpIHsKKyAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxh
enlEZWNvZGluZ0ltYWdlIGlzIGNyZWF0ZWQsIGF0CisgICAgICAgIC8vIHdoaWNoIHBvaW50IG1f
ZGF0YSBpcyB0cmFuc2ZlcmVkLgorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2Fs
bERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVy
LT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKCFtX2RhdGEpOworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25N
YWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVj
b2RlZCBvbiBpbXBsIHRocmVhZCBzdWJtaXRzIGRhdGEgdG8gaW1wbAorICAgICAgICAvLyB0aHJl
YWQgaGVyZS4KKyAgICB9Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6aXNTaXplQXZh
aWxhYmxlKCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
SW50U2l6ZSBJbWFnZURlY29kaW5nQnJpZGdlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9h
Y3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7Cisg
ICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFt
ZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNv
ZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGlu
ZGV4KTsKKworICAgIC8vIERlZmVycmVkIGltYWdlIGRlY29kaW5nIG9ubHkgc3VwcG9ydHMgc2lu
Z2xlIGZyYW1lIGltYWdlcyBhbmQgaGF2ZQorICAgIC8vIHVuaWZvcm0gc2l6ZS4KKyAgICByZXR1
cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVDb3VudCgp
Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVDb3VudCgpOworICAgIHJldHVybiAxOworfQorCitpbnQgSW1hZ2VEZWNvZGlu
Z0JyaWRnZTo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNv
ZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsK
KyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ0JyaWRn
ZTo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQoreworICAg
IC8vIElmIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hl
IGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0aGUgY29tcG9zaXRvciBhbmQgdGhpcyBjYWxsIGlzIGln
bm9yZWQuCisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVy
LT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Cit9CisKK2Jvb2wgSW1h
Z2VEZWNvZGluZ0JyaWRnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERl
Y29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKworICAgIC8vIEZJWE1FOiBTeW5j
aHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNvZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMK
KyAgICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4gdHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4g
dGVybXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1heSBub3QgZ28gdGhyb3VnaCBzb21lIG9w
dGltaXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNp
Z25lZCBJbWFnZURlY29kaW5nQnJpZGdlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJhbWUg
ZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNo
ZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdCcmlkZ2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MGYzNmViNTc5ZTI1YzEyMTZhNTIyZDkyYTZlODA4M2E0ZTVlMDMwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z0JyaWRnZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2Rp
bmdCcmlkZ2VfaAorI2RlZmluZSBJbWFnZURlY29kaW5nQnJpZGdlX2gKKworI2luY2x1ZGUgIklt
YWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nQnJpZGdlIHsKK3B1YmxpYzoK
KyAgICB+SW1hZ2VEZWNvZGluZ0JyaWRnZSgpOworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nQnJp
ZGdlKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFP
cHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJbWFnZURlY29kaW5nQnJpZGdlPiBjcmVhdGVGb3JUZXN0aW5nKFBh
c3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdDsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpOworCisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOworCisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNp
emUoKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQo
KSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJv
b2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IEltYWdlRGVjb2RpbmdCcmlkZ2UoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVy
KTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0
YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKwor
ICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisg
ICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODk1MDlmYmM0MGVkYmFkOTQzOTdjNzI2MjljMmFlYzY5YTEzNzNkMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNp
bmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEv
ZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZi4K
K2NvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworCitJbWFnZURlY29kaW5n
U3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0aWMgdm9pZCBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkK
K3sKKyAgICBpZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVsZXRlIHNfaW5zdGFu
Y2VPbk1haW5UaHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2Rp
bmdTdG9yZTsKK30KK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlKCkKKyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdT
dG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSog
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJu
IHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bml0aWFsaXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJ
bWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQo
MCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAg
ICYmIGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKQorICAgICAgICAmJiAhbWVtY21wKGJpdG1h
cC5waXhlbFJlZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6
eURlY29kZWQpKTsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5
RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9
IFNrSVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGRlY29kZXItPnNpemUoKS5o
ZWlnaHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRl
RnJhbWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVj
dDo6TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVk
IFNrUGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2Fs
aW5nLgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkp
OworICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0
SWQsIGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBp
ZGVudGlmeSB0aGlzIGlzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlE
ZWNvZGluZ1BpeGVsUmVmLgorICAgIGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5
RGVjb2RlZCk7CisgICAgYml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1BpY3R1
cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0
bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBT
a0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0
JiBzY2FsZWRTdWJzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQo
KSk7CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2FzdDxM
YXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQoIXBp
eGVsUmVmLT5pc1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+aWQoKSktPnNp
emUoKSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAw
OworICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNp
emVkQml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwg
cm93Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGlu
Z1BpeGVsUmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5y
ZWYoKTsKKyAgICByZXNpemVkQml0bWFwLnNldEltbXV0YWJsZSgpOyAvLyBQcmV2ZW50cyBTa1Bp
Y3R1cmUgZnJvbSByZWNvcmRpbmcgcGl4ZWxzLgorICAgIHJldHVybiByZXNpemVkQml0bWFwOwor
fQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0
bWFwLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9va3VwRnJhbWVH
ZW5lcmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2
b2lkKiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJU
KGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5l
cmF0b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9
IGdlbmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2ZXMgdGhlIGZ1
bGwgc2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNoZSogZnJhbWVD
YWNoZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRt
YXA7CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFBpeGVscyBh
cmUgb3duZWQgYnkgdGhlIEltYWdlRGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBGaW5kCisgICAg
ICAgIC8vIGEgd2F5IHRvIHRyYW5zZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUuCisgICAgICAg
IEltYWdlRnJhbWUqIGZyYW1lID0gZ2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUgaWYgdGhpcyBp
cyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKEltYWdlRnJh
bWVDYWNoZTo6Y3JlYXRlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUp
KTsKKyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNvZGluZyBl
cnJvci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAg
ICAgICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVs
bFNpemUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUg
b24tdGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRl
ciB1c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVkIGZyYWdt
ZW50LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpS
ZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2Nh
bGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9sb2NrZWRT
a0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sb2NrZWRTa0Jp
dG1hcCA9IGJpdG1hcDsKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vic2V0Lngo
KSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxv
Y2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAg
bV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0bWFwLnJl
c2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgpICYm
IGlzTWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJh
bWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgKytt
X25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIEltYWdlRnJhbWVH
ZW5lcmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3IqIElt
YWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQoaWQpOworfQorCitJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTGF6eURlY29kZWQoYml0bWFw
KSk7CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJhdG9yKHN0YXRpY19jYXN0PExhenlEZWNv
ZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5pZCgpKTsKK30KKworSW1hZ2VGcmFt
ZUNhY2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVb
aV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVD
YWNoZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRT
aXplKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDgwYmUwYzdlYTBiNmM3OTU4
NmE3NTA3N2JmOTIzZGZlYTI1YjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTAsMCAr
MSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKyNkZWZpbmUg
SW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgSW1hZ2VGcmFtZUdl
bmVyYXRvcjsKK2NsYXNzIEltYWdlRnJhbWVDYWNoZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKwor
Y2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFn
ZURlY29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3Rh
dGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRv
d24oKTsKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisK
KyAgICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBT
a0JpdG1hcCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxl
ZFN1YnNldCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIExv
Y2sgYW5kIHVubG9jayBzdXBwb3J0cyBvbmx5IG9uZSBpbWFnZSBhdCBhIHRpbWUgc28gY2FsbCB0
aGVtIGkgcGFpci4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9j
a1BpeGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOworICAgIGJv
b2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlRnJhbWVHZW5l
cmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIEltYWdlRnJhbWVHZW5l
cmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAg
SW1hZ2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEltYWdl
RnJhbWVHZW5lcmF0b3I+ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVjdG9yPE93blB0cjxJ
bWFnZUZyYW1lQ2FjaGU+ID4gbV9mcmFtZUNhY2hlOworCisgICAgaW50IG1fbmV4dElkOworICAg
IFNrQml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNlY2I2YWE2
MGQzYzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdkMWRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJh
bWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCit7Cit9CisKK0ltYWdlRnJhbWVDYWNoZTo6SW1h
Z2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9pZChpZCkKKyAg
ICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAg
ICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCit7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hl
Ojppc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ZDkyOGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIzMzBmYzEwNzllNGMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUNhY2hl
X2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisj
aW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEltYWdlRnJhbWVDYWNo
ZSBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKKy8vIGJ5
IHR3byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhp
cyBmcmFnbWVudCBjb21lcyBmcm9tLgorLy8gMi4gU2NhbGVkIGltYWdlIHNpemUuCitjbGFzcyBJ
bWFnZUZyYW1lQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJh
bWVDYWNoZT4gY3JlYXRlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2FjaGUoaWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXND
b21wbGV0ZSkpOworICAgIH0KKworICAgIEltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNr
SVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJh
bWVDYWNoZSgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0bWFwOyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9
CisKKyAgICBib29sIGlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBj
b25zdDsKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7
IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsK
KyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFiMjc1NzgzNjBiNTk3YmVhYTc4YWRmOTU3ODRkZjI2
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5o
IgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFt
ZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVj
b2RlcihkZWNvZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5z
aXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZy
YW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2Rl
ciogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rl
ci5nZXQoKTsKK30KKwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2Rh
dGEgPSBkYXRhOworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0
YShtX2RhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTdjOWNjNTA4
N2VmMmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5o
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3Jf
aAorI2RlZmluZSBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0
b3IgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+
IGNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAg
fQorCisgICAgZXhwbGljaXQgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRo
ZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsK
KyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFS
ZWNlaXZlZCk7CisKKyAgICBjb25zdCBTa0lTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOwor
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2Rp
bmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5ZTNmNmZhMTVjMTkyZWIxZTY0ZTgyNDcxNDlk
MjMzNzBlN2VmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVs
UmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xhenlEZWNvZGluZ1BpeGVs
UmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAg
ICAsIG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2Nh
bGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5M
YXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6
OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBm
dWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6
OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9
IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2Nh
bGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25M
b2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+
bG9ja1BpeGVscyhpZCgpLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9p
ZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRo
cmVhZCgpLT51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNhMmQ1YzVhZGVlZDdiNGIwMzYyYWI3MzEzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBM
YXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKwor
I2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5o
IgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJl
ZiB7CitwdWJsaWM6CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1
YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7CisKKyAgICBTS19ERUNMQVJFX1VORkxBVFRFTkFC
TEVfT0JKRUNUKCkKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBi
b29sIGlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlz
Q2xpcHBlZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1l
bnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7
CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9u
TG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7
CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1Bp
eGVsUmVmX2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkw
M2NlNmYyNGQ0YWFmNTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2NGZmZDQwNTZhNzQzYTI1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRp
dmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1Bp
eGVsUmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5h
dGl2ZUltYWdlU2tpYSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6
aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNr
SQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6
ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29u
c3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojppc0xhenlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1f
aW1hZ2UsIHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAg
ICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNl
dCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAg
ICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZElt
YWdlU3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggMzAzZDc1OTlhOWFhZjQxZTYyODRjZTAzN2ZlYzNi
ZjJmZGUxZGI1Ni4uODU1MDM4NTIwYTk4M2M2MDA2YzY0MjQ3ZTZhZDQyZmM4ZWQyNDBlMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgKQEAgLTE0NSw2ICsxNDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAg
ICB9CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChj
b25zdCBTa0JpdG1hcCYgYml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9
IE5hdGl2ZUltYWdlU2tpYShiaXRtYXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
U2tCaXRtYXAmIGdldFNrQml0bWFwKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fYml0bWFwLmJpdG1hcCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6
CiAgICAgICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAyNGNhZTI5OGZmNTA0OTFmZWMxM2Zh
YjQzYmQ5MDg2OTY2Nzg2YzBmLi5iY2Y1ZjhlYjkwODBlOGNlNDg0YzFlMDExOGE3MmI0MmJhYzky
OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc3LDkgKzc3LDExIEBACiAg
ICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVl
c3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCi0g
ICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9Nb2Nr
SW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAor
ICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2
ZWxEQlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0VGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmluZGV4IGFiZDg0ZWQwZTU3YWZlOTgz
MWZmZmQwNjM5MWU0MjkxZTVkYzJiZTQuLjA4Y2QxOTc0NWNjNzBhYWUzNzljODk1MWU2NGExNDgy
N2Y2YTQ1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNl
dHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3Mu
aApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRU
ZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmYXVsdFRpbGVTaXplKFdlYlNpemUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
ZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERl
dmljZVN1cHBvcnRzTW91c2UoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VT
dXBwb3J0c1RvdWNoKGJvb2wpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3Bw
CmluZGV4IGUzNTdmMjhlNDI4M2E3MDAxNTZkNmNmYWJkNTBlZGIzZWQyZjc4OTcuLjI0M2QwOGU2
Mjk0ODA1Njk3OTM2MmRmY2Y4NThjNmZmODVlOGE3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViS2l0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYktpdC5oIgogCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5j
bHVkZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTXV0YXRpb25PYnNlcnZlci5oIgpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgc2h1dGRvd24o
KQogICAgIH0KICNlbmRpZgogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKKyAgICBX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CiAgICAgUGxhdGZvcm06OnNo
dXRkb3duKCk7CiAgICAgV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6c2h1dGRvd24oKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDk4
OGM1ZTY2YjFlMTNjMTZlOWY2N2QwMmE0N2NhMDc4ZGYzODYwOTguLmRjNzczNmQ5YTIxYjA5MDc0
Y2ZiMWQ5MTU5Y2I4ZjdiMTljOTA5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlNl
dHRpbmdzSW1wbC5oIgogCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
PHB1YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CkBAIC01NSw2
ICs1Niw3IEBAIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBsKFNldHRpbmdzKiBzZXR0
aW5ncykKICAgICAsIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3Io
ZmFsc2UpCiAgICAgLCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkKHRydWUpCiAgICAgLCBt
X2F1dG9ab29tRm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZShmYWxzZSkKKyAgICAsIG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmYXVsdFRpbGVTaXplKFdl
YlNpemUoMjU2LCAyNTYpKQogICAgICwgbV9tYXhVbnRpbGVkTGF5ZXJTaXplKFdlYlNpemUoNTEy
LCA1MTIpKQogewpAQCAtNDgwLDYgKzQ4MiwxNSBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3MtPnNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7Cisg
ICAgaWYgKCFtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgZW5hYmxlZCkKKyAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgaWYg
KG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAhZW5hYmxlZCkKKyAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIG1fZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewog
ICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZChlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmgKaW5kZXggMTE2OWMzMWNmM2ViMmFlODBmZGExZjg4NWNkMDg2OTE2OGY0NmE0MS4u
OTA1MWJhYjYxN2Y4NmJmZTA0OWIwYjc3ZTZlMmFkZjAyZDcyZDY1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTc4LDYgKzc4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBX
ZWJTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdlYlNpemUp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKTsKQEAgLTE3OCw2ICsxNzksNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcjsK
ICAgICBib29sIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQ7CiAgICAgYm9vbCBtX2F1dG9a
b29tRm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZTsKKyAgICBib29sIG1fZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZDsKICAgICBXZWJTaXplIG1fZGVmYXVsdFRpbGVTaXplOwogICAgIFdlYlNp
emUgbV9tYXhVbnRpbGVkTGF5ZXJTaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nQnJpZGdlVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTcyOTdjNTFkMmIxN2RkNzc1Mjk3OGJiMjNkZGRlMmRlZDgyZGRlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Qu
Y3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ0JyaWRnZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0
b3JlLmgiCisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlU2tpYS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIK
KyNpbmNsdWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGlu
Z0JyaWRnZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0
aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IG5ldyBNb2Nr
SW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSg2MDAsIDYx
Myk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBJbWFnZURlY29kaW5nQnJpZGdlOjpjcmVhdGVG
b3JUZXN0aW5nKGFkb3B0UHRyKG1fYWN0dWFsRGVjb2RlcikpOworICAgICAgICBtX2NhbnZhcy5z
ZXREZXZpY2UobmV3IFNrRGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAx
MDApKS0+dW5yZWYoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAg
IHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIC8vIERvbid0IG93biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRlciB0byBx
dWVyeSBzdGF0ZXMuCisgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVyOworICAg
IE93blB0cjxJbWFnZURlY29kaW5nQnJpZGdlPiBtX2xhenlEZWNvZGVyOworICAgIFNrUGljdHVy
ZSBtX3BpY3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0YoSW1hZ2VE
ZWNvZGluZ0JyaWRnZVRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRp
dmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVj
b2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRtYXAoKS5o
ZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisgICAgU2tD
YW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOwor
ICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKKyAgICBt
X3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rl
ci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVy
ZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ0JyaWRnZVRlc3Qs
IGRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+
IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNO
ZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gaW1hZ2UtPnJl
c2l6ZWRCaXRtYXAoU2tJU2l6ZTo6TWFrZSg1MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0goNTAsIDUx
KSk7CisgICAgRVhQRUNUX0ZBTFNFKHNjYWxlZEJpdG1hcC5pc051bGwoKSk7CisgICAgRVhQRUNU
X1RSVUUoc2NhbGVkQml0bWFwLmlzSW1tdXRhYmxlKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2Nh
bGVkQml0bWFwLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSg1MSwgc2NhbGVkQml0bWFwLmhlaWdo
dCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2lu
UmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJp
dG1hcCwgMCwgMCk7CisgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9F
USgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAg
bV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWNmMjM3NDRlNTFmZGU0M2MxNjRiMzExMDFkMDViMzMwNzMyYzJmZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tJbWFnZURlY29kZXJf
aAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworcHVibGljOgor
ICAgIE1vY2tJbWFnZURlY29kZXIoKQorICAgICAgICA6IEltYWdlRGVjb2RlcihJbWFnZVNvdXJj
ZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVB
cHBsaWVkKQorICAgICAgICAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAibW9jayI7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50OworCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7Cisg
ICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAg
ICB9CisKKyAgICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWVC
dWZmZXJSZXF1ZXN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBNb2NrSW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBjNTRmZDgxZDRmYjhiY2UwMGMzNjRhOWRjODM5MDQ4NDE5YWM1
YmI2Li5jOGFiMGRkNDVkMTc1YTc0YjlmYmU2M2EzM2Y3MGQ5NTQ4ZWNhYTI2IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgLS1lbmFibGUtZGVmZXJyZWQt
aW1hZ2UtZGVjb2RpbmcgdG8gRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVz
dFNoZWxsKToKKyAgICAgICAgKFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hl
bGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoVGVzdFNoZWxs
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6cmVzZXQpOgorICAgICAgICAoV2ViUHJlZmVyZW5j
ZXM6OmFwcGx5VG8pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmg6CisgICAgICAgIChXZWJQcmVmZXJlbmNlcyk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVt
UG9ydC52aXJ0dWFsX3Rlc3Rfc3VpdGVzKToKKwogMjAxMi0xMC0xNCAgSm9uIExlZSAgPGpvbmxl
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgbm90aWZpY2F0aW9uIG9yaWdpbiBwZXJtaXNz
aW9uIHJlcXVlc3Qgd2hlbiBubyBqcyBjYWxsYmFjayBpcyBwcm92aWRlZApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDMwY2UyODg1
MWZjOWE5YTQ2YjhiNjNlNmRiZDAwZGExYzNmZWE4MzguLjVhMzIxMDQ0OTZmNzliMWYyYTQ1NDhi
MzY1MzQ1NmI0MDYxZmE2YjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRQYWludGluZ1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVk
LXBhaW4KIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JWaWRlb1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXZpZGVvIjsKIHN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvblVzZUdyYXBoaWNzQ29udGV4dDNESW1wbGVtZW50YXRpb25bXSA9ICItLXVz
ZS1ncmFwaGljcy1jb250ZXh0LTNkLWltcGxlbWVudGF0aW9uPSI7CiBzdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1wZXItdGlsZS1wYWlu
dGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2Rp
bmdbXSA9ICItLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyI7CiAKIHN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvblN0cmVzc09wdFtdID0gIi0tc3RyZXNzLW9wdCI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25TdHJlc3NEZW9wdFtdID0gIi0tc3RyZXNzLWRlb3B0IjsKQEAgLTEzMyw2ICsx
MzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIGJvb2wgZGVmZXJy
ZWQyRENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7
CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYm9v
bCBzdHJlc3NPcHQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc0Rlb3B0ID0gZmFsc2U7CiAgICAg
Ym9vbCBoYXJkd2FyZUFjY2VsZXJhdGVkR0wgPSBmYWxzZTsKQEAgLTE4Myw2ICsxODUsOCBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlVua25vd24gR3JhcGhpY0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiAlc1xuIiwgaW1w
bGVtZW50YXRpb24uY19zdHIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nKQogICAgICAgICAgICAgcGVyVGlsZVBhaW50aW5nRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZURl
ZmVycmVkSW1hZ2VEZWNvZGluZykKKyAgICAgICAgICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NP
cHQpCiAgICAgICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1
bWVudCA9PSBvcHRpb25TdHJlc3NEZW9wdCkKQEAgLTIyMiw2ICsyMjYsNyBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBzaGVsbC5zZXREZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZChkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEFjY2Vs
ZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKTsKICAgICAg
ICAgc2hlbGwuc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVk
KTsKKyAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZsYWdz
KGphdmFTY3JpcHRGbGFncyk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NPcHQp
OwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCAzMjU4NWZhYTFiMmQ4YWQ4
MWE4M2IxNWU4ZjcxMmJkOGNhNzI0ODliLi5hYzc3NTk2ODFhMDQ2ZDAzZDQ3MThmYzQ1OGMyN2U4
MmUxNDYxNzk5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKQEAgLTExNCw2ICsxMTQsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgLCBtX2Fj
Y2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZChmYWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoZmFsc2Up
CisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3N0
cmVzc09wdChmYWxzZSkKICAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2UpCiAgICAgLCBtX2R1bXBX
aGVuRmluaXNoZWQodHJ1ZSkKQEAgLTIyOSw2ICsyMzAsNyBAQCB2b2lkIFRlc3RTaGVsbDo6cmVz
ZXRXZWJTZXR0aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWQy
ZENhbnZhc0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIG1fcHJl
ZnMuZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwog
ICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkOworICAgIG1fcHJlZnMuZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9
IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBtX3ByZWZzLmFwcGx5VG8oJndl
YlZpZXcpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmlu
ZGV4IDQ0YjVhZTM4OGM2OGQ2NWRlODkwZmM4MDBmZWQ1MjI5ZWVjMmEzMjQuLjM5MjY2MjQ0Njli
NjhjY2JjODc0YjQ5MWVhNDgzYTBiNjM5MmNlNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGVu
YWJsZWQ7IH0KICAgICB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCk7CisgICAg
dm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAjaWYgZGVmaW5lZChPU19X
SU4pCiAgICAgLy8gQWNjZXNzIHRvIHRoZSBmaW5pc2hlZCBldmVudC4gVXNlZCBieSB0aGUgc3Rh
dGljIFdhdGNoRG9nIHRocmVhZC4KICAgICBIQU5ETEUgZmluaXNoZWRFdmVudCgpIHsgcmV0dXJu
IG1fZmluaXNoZWRFdmVudDsgfQpAQCAtMjM1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZDsKICAgICBib29sIG1fcGVyVGlsZVBhaW50aW5nRW5hYmxlZDsKKyAgICBib29s
IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJQcmVmZXJlbmNlcyBtX3By
ZWZzOwogICAgIGJvb2wgbV9zdHJlc3NPcHQ7CiAgICAgYm9vbCBtX3N0cmVzc0Rlb3B0OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4
IDNiYzJjZGQ5ZjJhZTQxNzBjMzNhZDY0MTA2ZDRhN2YyZDA5MDIxZjUuLjVjOGM5MmM5OTk0MjY0
NGRkMTlhNDljOThlNjZjMWE0ZjA2ZDQ0NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lkIFdl
YlByZWZlcmVuY2VzOjpyZXNldCgpCiAgICAgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBmYWxz
ZTsKICAgICBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGZvcmNlQ29t
cG9zaXRpbmdNb2RlID0gZmFsc2U7CisgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9
IGZhbHNlOwogICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7CiAg
ICAgbW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7CiAgICAgY3NzQ3VzdG9tRmlsdGVyRW5h
YmxlZCA9IGZhbHNlOwpAQCAtMjI0LDYgKzIyNSw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmFw
cGx5VG8oV2ViVmlldyogd2ViVmlldykKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5z
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAg
c2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRp
bmdFbmFibGVkKTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZChkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0TWVkaWFQ
bGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUobWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUpOwogICAgIHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobW9ja1Njcm9sbGJh
cnNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0
b3JJbkNvbXBvc2l0b3IoZm9yY2VDb21wb3NpdGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggYzM2NTUzYjM1NDY5NjRjNzZm
Mjk5MTZhOWVhOWI5ZTJhMjNlMjRiMi4uZTAzMTVmMmQwN2MxZTViOTg1NWZlN2IzYWEyZTE0Y2Y3
ZTFlNDBiZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5oCkBAIC0xMDksNiArMTA5LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzIHsKICAgICBi
b29sIGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgZGVmZXJyZWQyZENhbnZh
c0VuYWJsZWQ7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBib29s
IGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtZWRpYVBsYXliYWNrUmVx
dWlyZXNVc2VyR2VzdHVyZTsKICAgICBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZDsKICAgICBi
b29sIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCBjMzEwZWIxNWIxOTU0ZGRl
ZGRjMzMzYjk4MGY2NjVkNWZjZGI5MWNlLi5hNjlmNWE4MjJhYTNmZTMyODQ2ZjkxNzAxMTY0MTkz
Y2MyMjM4ZjUyIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHkKQEAgLTM5MCw2ICszOTAsOSBAQCBjbGFzcyBDaHJvbWl1bVBv
cnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5h
YmxlLXNvZnR3YXJlLWNvbXBvc2l0aW5nJ10pLAorICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0
ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2ltYWdlcycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsnLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1lbmFi
bGUtcGVyLXRpbGUtcGFpbnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAogICAg
ICAgICBdCiAKICAgICAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTc4Y2E5ZDhlNTg4MDE5ZGU5ZDMzYjkyMTBmOTY0YTRi
MzNlYTQ3ZS4uNTcwYmU0ZDNiMzg5ZjIyYjc0OTAzMDZmNDdiODFiNjI1NGU5Yjg2ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2Rp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
IGEgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBDaHJvbWl1bSB0byB0ZXN0IGRlZmVycmVkIGltYWdl
CisgICAgICAgIGRlY29kaW5nLgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMgd2lsbCBiZSB0ZXN0ZWQgd2l0aAorICAgICAgICAtLWZvcmNl
LWNvbXBvc2l0aW5nIC0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIC0tZW5hYmxlLWRlZmVycmVk
LWltYWdlLWRlY29kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0xNCAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBVbnJldmlld2VkIGdhcmRlbmluZywgVGVzdEV4cGVjdGF0aW9ucyB1cGRhdGVkLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGMyMDY5
OTM4ODZmZGI2MWE1OGUzNGNjNTBkYmZhODQ0MTdkNWZlZC4uMzM0NWEwYzQ3MTliMGI1YWM4NDIz
NGZmMTQzMjYyYjJmNjY3MTRiNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zCkBAIC00MDI5LDMgKzQwMjksMjcgQEAgd2Via2l0Lm9yZy9iLzk5
MDg5IHRyYW5zZm9ybXMvM2QvZ2VuZXJhbC9wZXJzcGVjdGl2ZS11bml0cy5odG1sIFsgUGFzcyBJ
bWFnZU9ubHkKIHdlYmtpdC5vcmcvYi85OTEzNCBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGlu
Zy90aW55LWxheWVyLXJvdGF0ZWQuaHRtbCBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBGYWlsdXJl
IF0KIAogd2Via2l0Lm9yZy9iLzk5MTM4IFsgU25vd0xlb3BhcmQgXSBzdmcvY3VzdG9tL2ZvcmVp
Z24tb2JqZWN0LXNrZXcuc3ZnIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KKworIyBUaGVzZSB0
ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBzdWl0
ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1cHByZXNz
ZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYt
YXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4taW1hZ2Ut
ZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRoLWNvbG9y
LXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdlLWNo
ZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1j
b3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdy
aWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2Ut
YmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmlj
b24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZv
Y3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1v
dXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QtaW5oZXJp
dGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJp
bmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5
Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBUaW1l
b3V0IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIE1p
c3NpbmcgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJmODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNiN2Q4NTMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisjIFRlc3Qgc3VpdGVzIGluIHRo
aXMgZGlyZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBkZWNvZGluZycgY29kZSBwYXRo
CisjIHRocm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168759</attachid>
            <date>2012-10-15 12:45:30 -0700</date>
            <delta_ts>2012-10-15 13:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121015124421.patch</filename>
            <type>text/plain</type>
            <size>78566</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODI2ODI1ZDllYzJiZGRm
ZmY4YTJmOWY0N2YwMDljNzdmNTcwMDIzNy4uOTdlZTM2OTBjMDAwZGJlOTM2MDAzOTAxOWNlMDNh
NTE2ODA3NTMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxS
ZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVu
YWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2Vz
cyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250
YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhl
c2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJl
IGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBy
dW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0
ZXN0cy4gQWRkZWQgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAor
ICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdlbmVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hl
Ojp+SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNF
cXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpiaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
bWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3I6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGlu
Z1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKElt
YWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorCiAyMDEyLTEwLTE1
ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAg
ICAgW0VGTF1bV0syXSBJbXBsZW1lbnQgRmF2aWNvbnMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDc0OGI1ZDcxMDlmYmFiZTMzZWZjNjNlMzRkODc3OTFiM2YxMGEzNjEuLmRmYTgw
NTQ4YzQxN2U5ZDUwMmQ0NGE3NjRjM2VhYTNjNjc5YTA0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgbmV3IHVuaXQgdGVzdHMgZm9yIGRlZmVycmVkIGltYWdlIGRlY29kaW5nLgorICAg
ICAgICBUaGVzZSB0ZXN0cyBhcmUgZGVmaW5lZCBpbiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Qu
Y3BwLiBUaGV5IHZlcmlmeQorICAgICAgICBpbWFnZSBkZWNvZGluZyBoYXBwZW5zIG9ubHkgd2hl
biBTa1BpY3R1cmUgaXMgcmFzdGVyaXplZCBmb3IgYm90aAorICAgICAgICBzY2FsZWQgYW5kIG5v
bi1zY2FsZWQgY2FzZXMuCisKKyAgICAgICAgVGVzdHM6IERlZmVycmVkSW1hZ2VEZWNvZGVyVGVz
dC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgRGVmZXJyZWRJbWFnZURlY29kZXJU
ZXN0LmRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMvV2ViS2l0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2Vi
U2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAqIHRl
c3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpTZXRVcCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpNb2NrSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk6CisKIDIwMTIt
MTAtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyMTRhYzI3
ZTgzMDlmY2Q2YmE3MWIwMmQ2MjQzZmZlYjI4NGNkOTk2Li5lOGNjZDVhZTg2ZmU0YjY2N2VlMTQ5
NTM5MjI3MmE3ZjllYTliMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00ODk2LDYgKzQ4OTYsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURG
b250QXRsYXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jv
c3NQcm9jZXNzRm9udExvYWRpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0nLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAnLApAQCAtNDkxNSw2ICs0OTE3LDE0IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVy
RGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxl
Z2F0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1
ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDk4MTZlNjM0MWZlYjIw
NzUwZTMxNjEyN2Y2MGRlNWY4MWY5YjY5OTYuLmU2YzkxNThjYzRjZjVkMmZkNWIwMzc3YjNlZTBj
NTEwNjBiMTA4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRh
dGlvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CkBAIC03OCw3ICs4Miw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0
ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIg
cGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAg
ICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFnZURl
Y29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbikpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZURl
Y29kZXJQdHI+KE5hdGl2ZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9u
LCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1Bl
ckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNf
bWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYwMjFmM2U3Zjkw
MmRlNTY2OWExNWIuLjg2NzMxMGRlZWNjYjAwN2M1ODdmMjI1ODgwZDk3OGNkYjM1NGQzYTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAt
NDcsMTAgKzQ3LDIwIEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNp
ZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7
Ci0jZWxzZQordHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsK
KyNlbGlmICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKLXR5cGVkZWYg
SW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVkZWYgSW1hZ2VEZWNvZGVy
KiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXI7Cit0eXBlZGVmIERlZmVycmVkSW1hZ2VEZWNv
ZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIqIE5h
dGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbGlmIFVTRShDRykKKyNkZWZpbmUgTmF0aXZlSW1hZ2VE
ZWNvZGVyIEltYWdlRGVjb2RlcgorI2Vsc2UKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUlt
YWdlRGVjb2RlcjsKICNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVj
b2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCkBAIC0xNTYsNyAr
MTY2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTmF0aXZlSW1hZ2VTb3Vy
Y2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0ciBtX2RlY29kZXI7CiAK
ICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNjNGM4ZGVjYWMyNWRmYjQyMWFi
MjAwZGM0YzRkYmY3ZjY2YjhmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcApAQCAtMCww
ICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWZl
cnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FjdHVh
bERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisKK0RlZmVycmVkSW1hZ2VE
ZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQoreworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdlCisg
ICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVmZXJyZWRJbWFnZURlY29kZXIqIERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNv
dXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAgIEltYWdlRGVjb2Rlciog
YWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEsIGFscGhhT3B0aW9uLCBn
YW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICBpZiAoIWFjdHVhbERlY29kZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoYWN0dWFsRGVjb2Rl
cik7Cit9CisKK1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVy
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rl
ci5sZWFrUHRyKCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAg
cmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAgICByZXR1cm4g
bV9maWxlbmFtZUV4dGVuc2lvbjsKK30KKworSW1hZ2VGcmFtZSogRGVmZXJyZWRJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZl
ciBpbWFnZSBkZWNvZGluZyBpZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVh
c29uIGlzCisgICAgLy8gYmVjYXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBH
SUYuIEFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNl
cyBzb21lIG1ldGFkYXRhIGZ1bmN0aW9ucyB0aGF0IGRvZXMgc3luY2hyb25vdXMKKyAgICAvLyBp
bWFnZSBkZWNvZGluZy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFp
blRocmVhZCgpCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVh
bERlY29kZXItPmZyYW1lQ291bnQoKSA9PSAxCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+
aXNTaXplQXZhaWxhYmxlKCkpIHsKKworICAgICAgICBtX3NpemUgPSBtX2FjdHVhbERlY29kZXIt
PnNpemUoKTsKKyAgICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9IG1fYWN0dWFsRGVjb2Rlci0+
ZmlsZW5hbWVFeHRlbnNpb24oKTsKKworICAgICAgICBTa0JpdG1hcCBsYXp5RGVjb2RlZFNrQml0
bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5jcmVhdGVM
YXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxlYXNlKCkpOworICAgICAgICBt
X2xhenlEZWNvZGVkRnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29kZWRTa0JpdG1hcCk7CisgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YSht
X2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxE
YXRhUmVjZWl2ZWQpOworCisgICAgICAgIC8vIFNldCBmcmFtZSB0byBwYXJ0aWFsIGJlY2F1c2Ug
ZGVjb2RlIGRpZG4ndCBoYXBwZW4geWV0IHNvIHdlIGNhbid0CisgICAgICAgIC8vIHByZWRpY3Qg
dGhpcyBjb3JyZWN0LiBUaGlzIGZsYWcgb25seSBoYXMgZWZmZWN0IG9uIEdJRiBpbWFnZXMgc28K
KyAgICAgICAgLy8gdGhlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICBtX2xhenlEZWNv
ZGVkRnJhbWUuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisg
ICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gJm1fbGF6eURlY29kZWRGcmFt
ZTsKK30KKwordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIp
IHsKKyAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIFdlYkxhenlEZWNv
ZGluZ0ltYWdlIGlzIGNyZWF0ZWQsIGF0CisgICAgICAgIC8vIHdoaWNoIHBvaW50IG1fZGF0YSBp
cyB0cmFuc2ZlcmVkLgorICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICBtX2FsbERhdGFS
ZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KCFtX2RhdGEpOworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhy
ZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIGRhdGEsIGFs
bERhdGFSZWNlaXZlZCk7CisgICAgICAgIC8vIE5PVEU6IFdoZW4gaW1hZ2UgaXMgZGVjb2RlZCBv
biBpbXBsIHRocmVhZCBzdWJtaXRzIGRhdGEgdG8gaW1wbAorICAgICAgICAvLyB0aHJlYWQgaGVy
ZS4KKyAgICB9Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFs
RGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNp
emUgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNpemUoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVh
bERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICBy
ZXR1cm4gbV9zaXplOworfQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZVNp
emVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVy
KQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4
KTsKKworICAgIC8vIERlZmVycmVkIGltYWdlIGRlY29kaW5nIG9ubHkgc3VwcG9ydHMgc2luZ2xl
IGZyYW1lIGltYWdlcyBhbmQgaGF2ZQorICAgIC8vIHVuaWZvcm0gc2l6ZS4KKyAgICByZXR1cm4g
bV9zaXplOworfQorCitzaXplX3QgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQor
eworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29k
ZXItPmZyYW1lQ291bnQoKTsKKyAgICByZXR1cm4gMTsKK30KKworaW50IERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAoreworICAgIGlmIChtX2FjdHVhbERlY29k
ZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOwor
ICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKK30KKwordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rl
cjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQoreworICAg
IC8vIElmIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hl
IGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0aGUgY29tcG9zaXRvciBhbmQgdGhpcyBjYWxsIGlzIGln
bm9yZWQuCisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgbV9hY3R1YWxEZWNvZGVy
LT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Cit9CisKK2Jvb2wgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1YWxE
ZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBGSVhNRTogU3lu
Y2hyb25pemUgdGhpcyBzdGF0ZSB3aXRoIEltYWdlRGVjb2RpbmdTdG9yZSB3aGVuIGltYWdlIGlz
CisgICAgLy8gYWN0dWFsbHkgZGVjb2RlZC4gUmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGlu
IHRlcm1zIG9mIHJlbmRlcmluZyBidXQKKyAgICAvLyBtYXkgbm90IGdvIHRocm91Z2ggc29tZSBv
cHRpbWl6ZWQgcmVuZGVyaW5nIGNvZGUgcGF0aC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5z
aWduZWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBJZiBmcmFt
ZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNh
Y2hlCisgICAgLy8gc28gcmV0dXJuIDAgaGVyZS4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmIzM2ZlMzVlMGVjNmIzMjE1YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVk
SW1hZ2VEZWNvZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVmZXJy
ZWRJbWFnZURlY29kZXJfaAorI2RlZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgewor
cHVibGljOgorICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBEZWZlcnJl
ZEltYWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3Vy
Y2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZv
clRlc3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAg
IEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXpl
X3QgaW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0
aXRpb25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCk7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgRGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBh
Y3R1YWxEZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBi
b29sIG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFs
RGVjb2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUg
bV9zaXplOworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2EzMWY5OGFhODY3MTA5MzM5OTQ4YjYwOGU5OGRmN2JiZWM3OTA3NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNp
bmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4
ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2lu
Y2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29kZWQg
U2tQaXhlbFJlZi4KK2NvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOworCitJ
bWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0aWMg
dm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVj
b2RpbmdTdG9yZSkKK3sKKyAgICBpZiAoIWltYWdlRGVjb2RpbmdTdG9yZSkKKyAgICAgICAgZGVs
ZXRlIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9
IGltYWdlRGVjb2RpbmdTdG9yZTsKK30KK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdT
dG9yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkKKyAgICA6IG1fbmV4dElkKDApCit7Cit9CisKK0lt
YWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVj
b2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFp
blRocmVhZDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5U
aHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2V0SW5zdGFuY2VP
bk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQor
Cit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoMCk7Cit9CisKK2Jvb2wg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAp
Cit7CisgICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCisgICAgICAgICYmIGJpdG1hcC5waXhl
bFJlZigpLT5nZXRVUkkoKQorICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5waXhlbFJlZigpLT5n
ZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURlY29kZWQpKTsKK30K
KworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFw
KFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNrSVNpemU6Ok1ha2Uo
ZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAg
QVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRlRnJhbWVHZW5lcmF0b3Io
ZGVjb2Rlcik7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6TWFrZVNpemUoZnVs
bFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgdGhh
dCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5nLgorICAgIFNrQml0
bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOworICAgIGJpdG1hcC5z
ZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0SWQsIGZ1bGxTaXplLCBm
dWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVudGlmeSB0aGlzIGlz
IGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNvZGluZ1BpeGVsUmVm
LgorICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBhY3R1YWwgVVJJIGlzIG1vcmUgdXNlZnVsLgorICAg
IGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7CisKKyAgICAvLyBJ
bmZvcm0gdGhlIGJpdG1hcCB0aGF0IHdlIHdpbGwgbmV2ZXIgY2hhbmdlIHRoZSBwaXhlbHMuIFRo
aXMgaXMgYSBwZXJmb3JtYW5jZSBoaW50CisgICAgLy8gc3Vic3lzdGVtcyB0aGF0IG1heSB0cnkg
dG8gY2FjaGUgdGhpcyBiaXRtYXAgKGUuZy4gcGljdHVyZXMsIHBpcGVzLCBncHUsIHBkZiwgZXRj
LikKKyAgICBiaXRtYXAuc2V0SW1tdXRhYmxlKCk7CisKKyAgICAvLyBGSVhNRTogU2V0dGluZyBi
aXRtYXAuc2V0SXNPcGFxdWUoKSBpcyBiaWcgcGVyZm9ybWFuY2UgZ2FpbiBpZiBwb3NzaWJsZS4g
V2UgY2FuCisgICAgLy8gZG8gc28gc2FmZWx5IGlmIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQg
YW5kIGl0IGlzIGEgSlBFRyBpbWFnZSwgb3IgaW1hZ2Ugd2FzCisgICAgLy8gZGVjb2RlZCBiZWZv
cmUuCisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIExhenlEZWNvZGlu
Z1BpeGVsUmVmKiBwaXhlbFJlZiA9IHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4o
Yml0bWFwLnBpeGVsUmVmKCkpOworICAgIEFTU0VSVCghcGl4ZWxSZWYtPmlzU2NhbGVkKGxvb2t1
cEZyYW1lR2VuZXJhdG9yKHBpeGVsUmVmLT5pZCgpKS0+c2l6ZSgpKSAmJiAhcGl4ZWxSZWYtPmlz
Q2xpcHBlZCgpKTsKKworICAgIGludCByb3dCeXRlcyA9IDA7CisgICAgcm93Qnl0ZXMgPSBTa0Jp
dG1hcDo6Q29tcHV0ZVJvd0J5dGVzKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVk
U2l6ZS53aWR0aCgpKTsKKworICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CisgICAgcmVzaXpl
ZEJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJz
ZXQud2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisgICAgcmVzaXpl
ZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYocGl4ZWxSZWYtPmlk
KCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigpOworCisgICAgLy8gSW5mb3Jt
IHRoZSBiaXRtYXAgdGhhdCB3ZSB3aWxsIG5ldmVyIGNoYW5nZSB0aGUgcGl4ZWxzLiBUaGlzIGlz
IGEgcGVyZm9ybWFuY2UgaGludAorICAgIC8vIHN1YnN5c3RlbXMgdGhhdCBtYXkgdHJ5IHRvIGNh
Y2hlIHRoaXMgYml0bWFwIChlLmcuIHBpY3R1cmVzLCBwaXBlcywgZ3B1LCBwZGYsIGV0Yy4pCisg
ICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsKKworICAgIC8vIEZJWE1FOiBTZXR0aW5n
IGJpdG1hcC5zZXRJc09wYXF1ZSgpIGlzIGJpZyBwZXJmb3JtYW5jZSBnYWluIGlmIHBvc3NpYmxl
LiBXZSBjYW4KKyAgICAvLyBkbyBzbyBzYWZlbHkgaWYgdGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRl
ZCBhbmQgaXQgaXMgYSBKUEVHIGltYWdlLCBvciBpbWFnZSB3YXMKKyAgICAvLyBkZWNvZGVkIGJl
Zm9yZS4KKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29kaW5n
U3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERh
dGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojpsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJ
UmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkp
OworCisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0gbG9va3VwRnJhbWVHZW5l
cmF0b3IoaWQpOworICAgIFNrSVNpemUgZnVsbFNpemUgPSBnZW5lcmF0b3ItPnNpemUoKTsKKwor
ICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNhdmVzIHRoZSBmdWxsIHNpemUgaW1hZ2UgYXQgdGhlIG1v
bWVudC4KKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGZyYW1lQ2FjaGUgPSBsb29rdXBGcmFtZUNhY2hl
KGlkLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAgYml0bWFwOworCisgICAgaWYgKCFmcmFtZUNh
Y2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhlbHMgYXJlIG93bmVkIGJ5IHRoZSBJbWFnZURl
Y29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAorICAgICAgICAvLyBhIHdheSB0byB0cmFuc2Zl
ciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGdl
bmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisKKyAgICAgICAgLy8g
U2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlmIHRoaXMgaXMgY29tcGxldGUuCisgICAgICAgIGlm
IChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgeworICAgICAg
ICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShpZCwgZnVs
bFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
ZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3IuIFJlcG9ydCB0aGlzIHRvIEJp
dG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBi
aXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAgYml0bWFwID0gZnJhbWVDYWNo
ZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXplICE9IHNjYWxlZFNpemUpIHsK
KyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRoZS1mbHkgYW5kIHNjYWxlZCBp
bWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNlLgorICAgICAgICAvLyBGSVhN
RTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4KKyAgICAgICAgbV9sb2NrZWRT
a0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJpdG1hcCwgc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUud2lkdGgoKSwgc2NhbGVk
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBiaXRtYXA7CisgICAgICAg
IG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIH0KKyAgICByZXR1cm4gbV9sb2Nr
ZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxlZFN1YnNldC54KCksIHNjYWxlZFN1YnNldC55KCkpOwor
fQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIG1fbG9ja2VkU2tCaXRtYXAudW5sb2Nr
UGl4ZWxzKCk7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5yZXNldCgpOworfQorCitib29sIEltYWdl
RGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBpc01haW5UaHJlYWQoKTsKK30KKwor
dm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgICsrbV9uZXh0SWQ7CisgICAgbV9mcmFtZUdl
bmVyYXRvcnMuYWRkKG1fbmV4dElkLCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZGVjb2Rl
cikpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1
cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZUdlbmVy
YXRvcnMuZ2V0KGlkKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYgYml0bWFwKSBjb25zdAor
eworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1hcCkpOworICAgIHJldHVybiBsb29rdXBG
cmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5w
aXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJhbWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVbaV0uZ2V0KCk7CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVD
YWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
ZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkpIHsKKyAgICAgICAgICAgIG1f
ZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3Jl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjQ4MGJlMGM3ZWEwYjZjNzk1ODZhNzUwNzdiZjkyM2RmZWEyNWIxMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5lIEltYWdlRGVjb2RpbmdTdG9yZV9oCisK
KyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNr
U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlRGVjb2RlcjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CitjbGFzcyBJbWFnZUZy
YW1lQ2FjaGU7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RpbmdTdG9y
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQorICAg
IH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUq
IGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uTWFp
blRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIGJvb2wg
aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisgICAgU2tCaXRtYXAgY3JlYXRlTGF6
eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIFNrQml0bWFw
IHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpIGNvbnN0OworCisgICAg
dm9pZCBzZXREYXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBMb2NrIGFuZCB1bmxvY2sgc3VwcG9ydHMg
b25seSBvbmUgaW1hZ2UgYXQgYSB0aW1lIHNvIGNhbGwgdGhlbSBpIHBhaXIuCisgICAgdm9pZCog
bG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJl
Y3QmIHNjYWxlZFN1YnNldCk7CisgICAgdm9pZCB1bmxvY2tQaXhlbHMoKTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQo
KSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJhbWVHZW5lcmF0b3Io
aW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBsb29rdXBGcmFtZUdlbmVy
YXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdlRnJhbWVDYWNoZSogbG9va3Vw
RnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAg
IHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
OworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiA+IG1fZnJh
bWVHZW5lcmF0b3JzOworICAgIFZlY3RvcjxPd25QdHI8SW1hZ2VGcmFtZUNhY2hlPiA+IG1fZnJh
bWVDYWNoZTsKKworICAgIGludCBtX25leHRJZDsKKyAgICBTa0JpdG1hcCBtX2xvY2tlZFNrQml0
bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFhNjBkM2MyYjI3ZjQxZDA4MDhmZGVjM2Nm
Zjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2Fj
aGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShpbnQgaWQsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IGJv
b2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVk
U2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBs
ZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNFcXVhbChpbnQgaWQsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlkID09IG1faWQgJiYg
c2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ5MjhiOTZiZWZmNTAyNjZiYzk4YmY0
NDBiMzMwZmMxMDc5ZTRjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVmaW5lIEltYWdlRnJhbWVD
YWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2lu
Y2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBJbWFnZUZyYW1lQ2FjaGUgaXMgYSBzY2FsZWQgdmVyc2lvbiBv
ZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBieSB0d28gdGhpbmdzOgorLy8gMS4gSW1h
Z2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4K
Ky8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShpbnQgaWQs
IGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wg
aXNDb21wbGV0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VGcmFt
ZUNhY2hlKGlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlzQ29tcGxldGUpKTsKKyAgICB9CisKKyAg
ICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiwgY29uc3QgU2tCaXRtYXAm
LCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZyYW1lQ2FjaGUoKTsKKworICAgIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIFNrQml0
bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorCisgICAgYm9vbCBpc0VxdWFsKGlu
dCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBs
ZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3ByaXZhdGU6CisgICAgaW50
IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7
CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmM0
MzBhYjI3NTc4MzYwYjU5N2JlYWE3OGFkZjk1Nzg0ZGYyNmMxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVy
YXRvci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJ
bWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2RlY29kZXIoZGVjb2RlcikKK3sKKyAgICBt
X3NpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIG1fZGVjb2Rl
ci0+c2l6ZSgpLmhlaWdodCgpKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJh
bWVHZW5lcmF0b3IoKQoreworfQorCitJbWFnZURlY29kZXIqIEltYWdlRnJhbWVHZW5lcmF0b3I6
OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW1h
Z2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBpZiAobV9k
ZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERhdGEobV9kYXRhLmdldCgpLCBhbGxEYXRh
UmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
R2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3YzljYzUwODdlZjJlMjllYmE3MTUxYjVhNGExYWM4
NDg1OGUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUdl
bmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2hhcmVk
QnVmZmVyOworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUoUGFzc093blB0cjxJbWFn
ZURlY29kZXI+IGRlY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IElt
YWdlRnJhbWVHZW5lcmF0b3IoZGVjb2RlcikpOworICAgIH0KKworICAgIGV4cGxpY2l0IEltYWdl
RnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICB+SW1hZ2VGcmFt
ZUdlbmVyYXRvcigpOworCisgICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZGVjb2RlciBpZiBuZWVk
ZWQuCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCk7CisgICAgdm9pZCBzZXREYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgY29uc3Qg
U2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAg
IE93blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2RhdGE7CisgICAgU2tJU2l6ZSBtX3NpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAwOWUzZjZmYTE1YzE5MmViMWU2NGU4MjQ3MTQ5ZDIzMzcwZTdlZjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVj
b2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorCisjaW5jbHVkZSAiSW1h
Z2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxS
ZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2Fs
ZWRTdWJzZXQpCisgICAgOiBTa1BpeGVsUmVmKDApCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9z
Y2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3NjYWxlZFN1YnNldChzY2FsZWRTdWJzZXQp
Cit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+TGF6eURlY29kaW5nUGl4ZWxSZWYoKQor
eworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZChjb25zdCBTa0lTaXpl
JiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnVsbFNpemUgIT0gbV9zY2FsZWRTaXpl
OworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAhPSBtX3NjYWxlZFN1YnNldC53aWR0aCgp
IHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3NjYWxlZFN1YnNldC5oZWlnaHQoKTsKK30K
Kwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUq
KikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmxvY2tQaXhlbHMoaWQoKSwgbV9zY2Fs
ZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Cit9CisKK3ZvaWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6
Om9uVW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+dW5sb2NrUGl4ZWxzKCk7
Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY5MWFjMjViNGVh
MjIzYTJkNWM1YWRlZWQ3YjRiMDM2MmFiNzMxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAor
I2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisKKyNpbmNsdWRlICJTa0ZsYXR0ZW5hYmxl
QnVmZmVycy5oIgorI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
KyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExhenlE
ZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgeworcHVibGljOgorICAgIExhenlE
ZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3Qg
U2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFsIH5MYXp5RGVjb2RpbmdQaXhlbFJl
ZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxFX09CSkVDVCgpCisKKyAgICBpbnQg
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgYm9vbCBpc1NjYWxlZChjb25zdCBTa0lT
aXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBpc0NsaXBwZWQoKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIC8vIFNrUGl4ZWxSZWYgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopOworICAgIHZpcnR1YWwgdm9pZCBvblVu
bG9ja1BpeGVscygpOworICAgIHZpcnR1YWwgYm9vbCBvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGludCBtX2lkOworICAgIFNrSVNpemUgbV9zY2FsZWRT
aXplOworICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwCmluZGV4IDE4NjJhMmFmYzZlMzUwNDkzNmRjYmM5MDNjZTZmMjRkNGFhZjUwYWQuLmQwODRl
YzhmNDFjZmFmNDY0YzhiNjQ4NjRmZmQ0MDU2YTc0M2EyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAK
QEAgLTQwLDYgKzQwLDExIEBACiAjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgogI2luY2x1ZGUgIlNr
aWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQpAQCAtNzMs
NiArNzgsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0kKIAogU2tCaXRtYXAgTmF0aXZlSW1h
Z2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29u
c3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChtX2ltYWdl
KSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJbWFnZVNpemUs
IHNjYWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNpemVkQml0bWFw
KHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAgIGJvb2wgc2hv
dWxkQ2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJl
c2FtcGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmlu
ZGV4IDMwM2Q3NTk5YTlhYWY0MWU2Mjg0Y2UwMzdmZWMzYmYyZmRlMWRiNTYuLjg1NTAzODUyMGE5
ODNjNjAwNmM2NDI0N2U2YWQ0MmZjOGVkMjQwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDUsNiArMTQ1
LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsg
KHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFw
LCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsK
KyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBj
b25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4NmMwZi4uNjQw
NjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ29tcG9z
aXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9EYXRl
VGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFsVGVzdC5jcHAn
LAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9F
dmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJDb21wb3Np
dG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAgICAgICd0ZXN0
cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVl
c3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5j
cHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVz
dHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3Qu
Y3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBhYmQ4NGVkMGU1
N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFlMzc5Yzg5NTFl
NjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNl
dHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
S2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2VkMmY3ODk3Li4y
NDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5o
IgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lkIHNo
dXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7
CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwogICAgIFBsYXRm
b3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRkb3duKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApp
bmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5kYzc3MzZkOWEy
MWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgpA
QCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5n
cyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21w
b3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0cnVlKQog
ICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2UpCisgICAgLCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVyU2l6ZShXZWJT
aXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJTZXR0aW5nc0lt
cGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtX3NldHRp
bmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJT
ZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQp
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQpCisgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQ
b3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVjZDA4NjkxNjhm
NDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03OCw2ICs3OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUo
Y29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShX
ZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9v
bCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiArMTc5LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBv
c2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwogICAgIGJvb2wg
bV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6ZTsKICAg
ICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURl
Y29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJJbWFn
ZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJT
a0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBE
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rl
ciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0
U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsKKyAgICAg
ICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRl
YXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMgdGhl
IHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFs
RGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6eURlY29kZXI7
CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZhczsKK307CisK
K1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQorewor
ICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNU
X0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0
aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGlt
YWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAo
KS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxl
KCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRp
bmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgp
LCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAs
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2Nh
bnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERl
Y29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8
TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZl
ckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxlZEJp
dG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVj
dDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNOdWxs
KCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAgICBF
WFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNj
YWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9
IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJh
d0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmco
KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQ
RUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9j
a0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMxMTAxZDA1
YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBN
b2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFnZURl
Y29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAgIHZpcnR1
YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7CisgICAgICAg
ICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVm
ZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2YXRlOgor
ICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjFiM2RjZWQ3ZDM0YjMxNWM4NmU5
NjI4NGFmOWE3YWIzMmM1MzU4NS4uZGVhZjM5MTYyY2YyNTE1ZmE0YTJlZjQ5ZmFjMWIyNzUwMWE5
NjA2YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2Rp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIC0t
ZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAg
IChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0
dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgor
ICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAg
ICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6Cisg
ICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAtMTUg
IEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJT
b2NrZXRdIFVwZGF0ZSBweXdlYnNvY2tldCB0byAwLjcuOApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDMwY2UyODg1MWZjOWE5YTQ2
YjhiNjNlNmRiZDAwZGExYzNmZWE4MzguLjVhMzIxMDQ0OTZmNzliMWYyYTQ1NDhiMzY1MzQ1NmI0
MDYxZmE2YjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBS
ZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5h
YmxlQWNjZWxlcmF0ZWRQYWludGluZ1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXBhaW4KIHN0
YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRl
b1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXZpZGVvIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvblVzZUdyYXBoaWNzQ29udGV4dDNESW1wbGVtZW50YXRpb25bXSA9ICItLXVzZS1ncmFwaGlj
cy1jb250ZXh0LTNkLWltcGxlbWVudGF0aW9uPSI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25F
bmFibGVQZXJUaWxlUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyI7Citz
dGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmdbXSA9ICIt
LWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyI7CiAKIHN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvblN0cmVzc09wdFtdID0gIi0tc3RyZXNzLW9wdCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25TdHJlc3NEZW9wdFtdID0gIi0tc3RyZXNzLWRlb3B0IjsKQEAgLTEzMyw2ICsxMzQsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIGJvb2wgZGVmZXJyZWQyRENhbnZh
c0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0g
ZmFsc2U7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CisgICAgYm9v
bCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NP
cHQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc0Rlb3B0ID0gZmFsc2U7CiAgICAgYm9vbCBoYXJk
d2FyZUFjY2VsZXJhdGVkR0wgPSBmYWxzZTsKQEAgLTE4Myw2ICsxODUsOCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVu
a25vd24gR3JhcGhpY0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiAlc1xuIiwgaW1wbGVtZW50YXRp
b24uY19zdHIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxl
UGVyVGlsZVBhaW50aW5nKQogICAgICAgICAgICAgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZURlZmVycmVkSW1h
Z2VEZWNvZGluZykKKyAgICAgICAgICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSB0
cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NPcHQpCiAgICAg
ICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBv
cHRpb25TdHJlc3NEZW9wdCkKQEAgLTIyMiw2ICsyMjYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciogYXJndltdKQogICAgICAgICBzaGVsbC5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChk
ZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwu
c2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVkKTsKKyAgICAg
ICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZsYWdzKGphdmFTY3Jp
cHRGbGFncyk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NPcHQpOwogICAgICAg
ICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCBiMmYyOTY2NGYyYWRkNTMyNzVlYTgyZjMx
NjdmOTczZTNhMzEzMmU2Li5kNmMwZjFkOTJlN2QxZTg2MzcwNWRkZGUyYmVjMzA1Yjk5YTUyODI1
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTEx
NCw2ICsxMTQsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCiAgICAgLCBtX2FjY2VsZXJhdGVk
MmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChm
YWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc09wdChm
YWxzZSkKICAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2UpCiAgICAgLCBtX2R1bXBXaGVuRmluaXNo
ZWQodHJ1ZSkKQEAgLTIyOSw2ICsyMzAsNyBAQCB2b2lkIFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0
aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWQyZENhbnZhc0Vu
YWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIG1fcHJlZnMuZGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQgPSBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIG1fcHJl
ZnMuYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFi
bGVkOworICAgIG1fcHJlZnMuZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcpOwog
fQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IDQ0YjVh
ZTM4OGM2OGQ2NWRlODkwZmM4MDBmZWQ1MjI5ZWVjMmEzMjQuLjM5MjY2MjQ0NjliNjhjY2JjODc0
YjQ5MWVhNDgzYTBiNjM5MmNlNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0K
ICAgICB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAjaWYgZGVmaW5lZChPU19XSU4pCiAgICAg
Ly8gQWNjZXNzIHRvIHRoZSBmaW5pc2hlZCBldmVudC4gVXNlZCBieSB0aGUgc3RhdGljIFdhdGNo
RG9nIHRocmVhZC4KICAgICBIQU5ETEUgZmluaXNoZWRFdmVudCgpIHsgcmV0dXJuIG1fZmluaXNo
ZWRFdmVudDsgfQpAQCAtMjM1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RlZmVy
cmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZDsKICAgICBib29sIG1fcGVyVGlsZVBhaW50aW5nRW5hYmxlZDsKKyAgICBib29sIG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJQcmVmZXJlbmNlcyBtX3ByZWZzOwogICAg
IGJvb2wgbV9zdHJlc3NPcHQ7CiAgICAgYm9vbCBtX3N0cmVzc0Rlb3B0OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IDNiYzJjZGQ5
ZjJhZTQxNzBjMzNhZDY0MTA2ZDRhN2YyZDA5MDIxZjUuLjVjOGM5MmM5OTk0MjY0NGRkMTlhNDlj
OThlNjZjMWE0ZjA2ZDQ0NGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lkIFdlYlByZWZlcmVu
Y2VzOjpyZXNldCgpCiAgICAgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKICAgICBh
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGZvcmNlQ29tcG9zaXRpbmdN
b2RlID0gZmFsc2U7CisgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwog
ICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7CiAgICAgbW9ja1Nj
cm9sbGJhcnNFbmFibGVkID0gZmFsc2U7CiAgICAgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCA9IGZh
bHNlOwpAQCAtMjI0LDYgKzIyNSw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8oV2Vi
Vmlldyogd2ViVmlldykKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXREZWZlcnJl
ZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Mt
PnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVk
KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0TWVkaWFQbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUobWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUpOwogICAg
IHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobW9ja1Njcm9sbGJhcnNFbmFibGVk
KTsKICAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBv
c2l0b3IoZm9yY2VDb21wb3NpdGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggYzM2NTUzYjM1NDY5NjRjNzZmMjk5MTZhOWVh
OWI5ZTJhMjNlMjRiMi4uZTAzMTVmMmQwN2MxZTViOTg1NWZlN2IzYWEyZTE0Y2Y3ZTFlNDBiZiAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCkBA
IC0xMDksNiArMTA5LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzIHsKICAgICBib29sIGFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7
CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBib29sIGRlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2Vy
R2VzdHVyZTsKICAgICBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZDsKICAgICBib29sIGNzc0N1
c3RvbUZpbHRlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCBjMzEwZWIxNWIxOTU0ZGRlZGRjMzMzYjk4
MGY2NjVkNWZjZGI5MWNlLi5hNjlmNWE4MjJhYTNmZTMyODQ2ZjkxNzAxMTY0MTkzY2MyMjM4ZjUy
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW0ucHkKQEAgLTM5MCw2ICszOTAsOSBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6
CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L3NvZnR3YXJlY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29t
cG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLXNvZnR3
YXJlLWNvbXBvc2l0aW5nJ10pLAorICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdmYXN0L2ltYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcnLCAnLS1lbmFibGUtcGVyLXRp
bGUtcGFpbnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlJ10pLAogICAgICAgICBdCiAK
ICAgICAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZjZjZDBkMmI0OTQ5ZmFhMWVhZjI4ZGE3MjY1NzgzZTRmN2M1OTc1OS4u
YmM0ZjA2NTU5YmIyNWY3NDVmNjJkN2E0MmY4ODgyMDNjYWNhZjNmMCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgdmlydHVh
bCB0ZXN0IHN1aXRlIGZvciBDaHJvbWl1bSB0byB0ZXN0IGRlZmVycmVkIGltYWdlCisgICAgICAg
IGRlY29kaW5nLgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMgd2lsbCBiZSB0ZXN0ZWQgd2l0aAorICAgICAgICAtLWZvcmNlLWNvbXBvc2l0
aW5nIC0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRl
Y29kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9SRUFETUUudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0xNSAgSm9zaHVhIEJlbGwg
IDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCBn
YXJkZW5pbmcuIEZpeCBidWcgbGluayBpbiBUZXN0RXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMzJkNmIyNTVkNTRm
NGRhOWIwM2FlM2QzMTAyYzhlZTE3MGFmZDc5ZC4uZDAxMjNmZmVlODI4NTQ4NjU4NDE1MjQ4NGFh
YjJjZDhiZmY5MTE2OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0
RXhwZWN0YXRpb25zCkBAIC00MDMwLDMgKzQwMzAsMjcgQEAgd2Via2l0Lm9yZy9iLzk5MDg5IHRy
YW5zZm9ybXMvM2QvZ2VuZXJhbC9wZXJzcGVjdGl2ZS11bml0cy5odG1sIFsgUGFzcyBJbWFnZU9u
bHkKIHdlYmtpdC5vcmcvYi85OTEzNCBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy90aW55
LWxheWVyLXJvdGF0ZWQuaHRtbCBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBGYWlsdXJlIF0KIAog
d2Via2l0Lm9yZy9iLzk5MTM4IFsgU25vd0xlb3BhcmQgXSBzdmcvY3VzdG9tL2ZvcmVpZ24tb2Jq
ZWN0LXNrZXcuc3ZnIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KKworIyBUaGVzZSB0ZXN0cyBh
cmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3Ig
ZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1cHByZXNzZWQgYWdh
aW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRm
LWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1h
Z2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4taW1hZ2UtZGVsZWdh
dGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRoLWNvbG9yLXByb2Zp
bGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdlLWNoZWNrZXJi
b2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9vcC1jb3VudC5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0LWdyaWQuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1hZ2UtYmFja2dy
b3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zhdmljb24tYXMt
aW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xlLWZvY3VzLXJp
bmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5l
LWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QtaW5oZXJpdGVkLWZy
b20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0
bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1wb2x5Z29uLWZv
Y3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdlLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBUaW1lb3V0IF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIE1pc3Npbmcg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJm
ODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNiN2Q4NTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1h
Z2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisjIFRlc3Qgc3VpdGVzIGluIHRoaXMgZGly
ZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBkZWNvZGluZycgY29kZSBwYXRoCisjIHRo
cm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168773</attachid>
            <date>2012-10-15 13:52:01 -0700</date>
            <delta_ts>2012-10-16 12:18:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121015135051.patch</filename>
            <type>text/plain</type>
            <size>78518</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhiYjhjZDQ0ZTk4Yzlm
YmE5YTM2MzI2NjhmNGE5MjRmZDI1NjljNS4uMmI2MWY2ZmY4ZWExMDRlNjBmMmMwN2IwOWZiOTRm
ZGE4NjdiZmI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxS
ZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVu
YWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2Vz
cyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250
YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhl
c2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJl
IGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBy
dW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0
ZXN0cy4gQWRkZWQgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAor
ICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdlbmVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hl
Ojp+SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNF
cXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpiaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
bWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3I6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGlu
Z1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKElt
YWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorCiAyMDEyLTEwLTE1
ICBFdW5taSBMZWUgIDxldW5taTE1LmxlZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtX
SzJdIFJlZmFjdG9yaW5nIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93biBjb2RlcyBvZiBFRkwg
bGlicmFyaWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NDhiNWQ3MTA5ZmJhYmUz
M2VmYzYzZTM0ZDg3NzkxYjNmMTBhMzYxLi5kZmE4MDU0OGM0MTdlOWQ1MDJkNDRhNzY0YzNlYWEz
YzY3OWEwNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisy
MDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZv
ciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmlu
ZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAg
aW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQg
Zm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAgICAg
IFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAgICAg
ICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVy
ZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdz
Lmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3du
KToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAo
V2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJbWFn
ZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVz
dDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpU
ZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL01v
Y2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1v
Y2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6TW9j
a0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmaWxl
bmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE1ICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVkIERF
UFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjE0YWMyN2U4MzA5ZmNkNmJhNzFiMDJkNjI0M2ZmZWIy
ODRjZDk5Ni4uZThjY2Q1YWU4NmZlNGI2NjdlZTE0OTUzOTIyNzJhN2Y5ZWE5YjEyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtNDg5Niw2ICs0ODk2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRM
b2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZl
cnJlZEltYWdlRGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3Bw
JywKQEAgLTQ5MTUsNiArNDkxNywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUNhY2hlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUNhY2hlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRl
Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcAppbmRleCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYxMjdmNjBkZTVmODFmOWI2OTk2
Li5lNmM5MTU4Y2M0Y2Y1ZDJmZDViMDM3N2IzZWUwYzUxMDYwYjEwODNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNCw2ICsz
NCwxMCBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiRGVmZXJyZWRJ
bWFnZURlY29kZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgsNyArODIsNyBAQCB2b2lkIElt
YWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJt
aW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8gbWFk
ZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxw
aGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAgICAgbV9kZWNv
ZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VEZWNvZGVyUHRyPihOYXRpdmVJbWFnZURlY29k
ZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAg
IGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCiAgICAgICAgICAg
ICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRl
eCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2NjlhMTViLi44NjczMTBkZWVjY2Iw
MDdjNTg3ZjIyNTg4MGQ5NzhjZGIzNTRkM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ3LDEwICs0NywyMCBAQCBjbGFzcyBJbnRT
aXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENHKQotdHlwZWRlZiBDR0ltYWdl
U291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2Vsc2UKK3R5cGVkZWYgQ0dJbWFnZVNv
dXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0p
CiBjbGFzcyBJbWFnZURlY29kZXI7Ci10eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VT
b3VyY2VQdHI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIERlZmVycmVkSW1hZ2VEZWNv
ZGVyOwordHlwZWRlZiBEZWZlcnJlZEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29kZXI7Cit0
eXBlZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZWxp
ZiBVU0UoQ0cpCisjZGVmaW5lIE5hdGl2ZUltYWdlRGVjb2RlciBJbWFnZURlY29kZXIKKyNlbHNl
Cit0eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29kZXI7CiAjZW5kaWYKIAogLy8g
UmlnaHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJlY29nbml6ZWQgaW1hZ2UgZm9ybWF0IHRoYXQg
c3VwcG9ydHMgYW5pbWF0aW9uLgpAQCAtMTU2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1fZGVjb2RlcjsKKyAgICBOYXRp
dmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCiAjaWYgIVVTRShDRykKICAgICBBbHBoYU9w
dGlvbiBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQzYzRjOGRlY2FjMjVkZmI0MjFhYjIwMGRjNGM0ZGJmN2Y2NmI4ZjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFnZURlY29kZXIuaCIKKworI2lu
Y2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGVmZXJyZWRJbWFnZURlY29kZXI6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlcikKKyAgICA6IG1fYWxsRGF0
YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9hY3R1YWxEZWNvZGVyKGFkb3B0UHRyKGFjdHVhbERl
Y29kZXIpKQoreworfQorCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNv
ZGVyKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGlu
IEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQorICAgIC8vIGlzIGRlZmVyLWRlY29kZWQuCit9
CisKK0RlZmVycmVkSW1hZ2VEZWNvZGVyKiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
ck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIgPSBJbWFnZURlY29k
ZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvck9wdGlvbik7CisgICAg
aWYgKCFhY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IERl
ZmVycmVkSW1hZ2VEZWNvZGVyKGFjdHVhbERlY29kZXIpOworfQorCitQYXNzT3duUHRyPERlZmVy
cmVkSW1hZ2VEZWNvZGVyPiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhQ
YXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlZmVycmVkSW1hZ2VEZWNvZGVyKGRlY29kZXIubGVha1B0cigpKSk7Cit9CisKK1N0cmlu
ZyBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAg
IGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZp
bGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisK
K0ltYWdlRnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBp
cyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBt
dWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBi
eQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMg
dGhhdCBkb2VzIHN5bmNocm9ub3VzCisgICAgLy8gaW1hZ2UgZGVjb2RpbmcuCisgICAgaWYgKElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgICAgICAmJiBtX2Fj
dHVhbERlY29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCkgPT0g
MQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisKKyAg
ICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgICAgIG1fZmlsZW5h
bWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisKKyAg
ICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChtX2FjdHVh
bERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFNrQml0
bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0
bWFwKCksIG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKworICAgICAgICAv
LyBTZXQgZnJhbWUgdG8gcGFydGlhbCBiZWNhdXNlIGRlY29kZSBkaWRuJ3QgaGFwcGVuIHlldCBz
byB3ZSBjYW4ndAorICAgICAgICAvLyBwcmVkaWN0IHRoaXMgY29ycmVjdC4gVGhpcyBmbGFnIG9u
bHkgaGFzIGVmZmVjdCBvbiBHSUYgaW1hZ2VzIHNvCisgICAgICAgIC8vIHRoZSB2YWx1ZSBkb2Vz
bid0IG1hdHRlci4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1cyhJbWFnZUZy
YW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisg
ICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7
CisgICAgcmV0dXJuICZtX2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgRGVmZXJyZWRJbWFn
ZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZl
cmVuY2UgdG8gZGF0YSB1bnRpbCBXZWJMYXp5RGVjb2RpbmdJbWFnZSBpcyBjcmVhdGVkLCBhdAor
ICAgICAgICAvLyB3aGljaCBwb2ludCBtX2RhdGEgaXMgdHJhbnNmZXJlZC4KKyAgICAgICAgbV9k
YXRhID0gZGF0YTsKKyAgICAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7
CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRhKTsKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29k
ZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAv
LyBOT1RFOiBXaGVuIGltYWdlIGlzIGRlY29kZWQgb24gaW1wbCB0aHJlYWQgc3VibWl0cyBkYXRh
IHRvIGltcGwKKyAgICAgICAgLy8gdGhyZWFkIGhlcmUuCisgICAgfQorfQorCitib29sIERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIHJldHVybiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgp
OworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpz
aXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4g
bV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworSW50U2l6
ZSBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFs
RGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisKKyAgICAvLyBEZWZlcnJlZCBpbWFn
ZSBkZWNvZGluZyBvbmx5IHN1cHBvcnRzIHNpbmdsZSBmcmFtZSBpbWFnZXMgYW5kIGhhdmUKKyAg
ICAvLyB1bmlmb3JtIHNpemUuCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVy
KQorICAgICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAgcmV0
dXJuIDE7Cit9CisKK2ludCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICByZXR1cm4gbV9hY3R1
YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7
Cit9CisKK3ZvaWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShz
aXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNvZGluZyBpcyBk
ZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5CisgICAgLy8gdGhl
IGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmIChtX2FjdHVhbERl
Y29kZXIpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNs
ZWFyQmVmb3JlRnJhbWUpOworfQorCitib29sIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0dWFsRGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoaW5kZXgpOworCisgICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMgc3RhdGUgd2l0aCBJ
bWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVhbGx5IGRlY29kZWQu
IFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcgYnV0Cisg
ICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBjb2RlIHBh
dGguCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikKKyAgICAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0
SW5kZXgoaW5kZXgpOworCisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhl
biBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhl
cmUuCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMzNmZTM1ZTBlYzZiMzIxNWE5NDNk
Mjc2MTZmMGMzZDljMzhiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUg
RGVmZXJyZWRJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIERlZmVycmVkSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICB+RGVmZXJyZWRJbWFn
ZURlY29kZXIoKTsKKyAgICBzdGF0aWMgRGVmZXJyZWRJbWFnZURlY29kZXIqIGNyZWF0ZShjb25z
dCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PERlZmVycmVkSW1hZ2VEZWNvZGVyPiBjcmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKworICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworCisgICAgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICBzaXpl
X3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERlZmVy
cmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKKyAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBTdHJpbmcgbV9m
aWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIEltYWdlRnJhbWUg
bV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMzFmOThhYTg2
NzEwOTMzOTk0OGI2MDhlOThkZjdiYmVjNzkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0
LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVy
YXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworLy8g
VVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYuCitjb25zdCBjaGFyIGxh
YmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKworSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3Rh
bmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJl
YWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCit7CisgICAgaWYgKCFp
bWFnZURlY29kaW5nU3RvcmUpCisgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFk
OworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7Cit9Cit9
IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgp
CisgICAgOiBtX25leHRJZCgwKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURl
Y29kaW5nU3RvcmUoKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgcmV0dXJuIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdT
dG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6
OnNodXRkb3duKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNldEluc3Rh
bmNlT25NYWluVGhyZWFkKDApOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5
RGVjb2RlZChjb25zdCBTa0JpdG1hcCYgYml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4
ZWxSZWYoKQorICAgICAgICAmJiBiaXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAg
JiYgIW1lbWNtcChiaXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQs
IHNpemVvZihsYWJlbExhenlEZWNvZGVkKSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdT
dG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4g
ZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNr
SVNpemUgZnVsbFNpemUgPSBTa0lTaXplOjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBk
ZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgp
KTsKKworICAgIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBm
dWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMg
YSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGlt
YWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNl
dENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1
bGxTaXplLmhlaWdodCgpKTsKKyAgICBiaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGlu
Z1BpeGVsUmVmKG1fbmV4dElkLCBmdWxsU2l6ZSwgZnVsbFJlY3QpKS0+dW5yZWYoKTsKKworICAg
IC8vIFVzZSBVUkkgdG8gaWRlbnRpZnkgdGhpcyBpcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxS
ZWYgb2YgdHlwZSBMYXp5RGVjb2RpbmdQaXhlbFJlZi4KKyAgICAvLyBGSVhNRTogR2l2ZSB0aGUg
YWN0dWFsIFVSSSBpcyBtb3JlIHVzZWZ1bC4KKyAgICBiaXRtYXAucGl4ZWxSZWYoKS0+c2V0VVJJ
KGxhYmVsTGF6eURlY29kZWQpOworCisgICAgLy8gSW5mb3JtIHRoZSBiaXRtYXAgdGhhdCB3ZSB3
aWxsIG5ldmVyIGNoYW5nZSB0aGUgcGl4ZWxzLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaGludAor
ICAgIC8vIHN1YnN5c3RlbXMgdGhhdCBtYXkgdHJ5IHRvIGNhY2hlIHRoaXMgYml0bWFwIChlLmcu
IHBpY3R1cmVzLCBwaXBlcywgZ3B1LCBwZGYsIGV0Yy4pCisgICAgYml0bWFwLnNldEltbXV0YWJs
ZSgpOworCisgICAgLy8gRklYTUU6IFNldHRpbmcgYml0bWFwLnNldElzT3BhcXVlKCkgaXMgYmln
IHBlcmZvcm1hbmNlIGdhaW4gaWYgcG9zc2libGUuIFdlIGNhbgorICAgIC8vIGRvIHNvIHNhZmVs
eSBpZiB0aGUgaW1hZ2UgaXMgZnVsbHkgbG9hZGVkIGFuZCBpdCBpcyBhIEpQRUcgaW1hZ2UsIG9y
IGltYWdlIHdhcworICAgIC8vIGRlY29kZWQgYmVmb3JlLgorICAgIHJldHVybiBiaXRtYXA7Cit9
CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1h
cChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFs
aWRUaHJlYWQoKSk7CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0
aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBB
U1NFUlQoIXBpeGVsUmVmLT5pc1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+
aWQoKSktPnNpemUoKSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93
Qnl0ZXMgPSAwOworICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0Jp
dG1hcCByZXNpemVkQml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5o
ZWlnaHQoKSwgcm93Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExh
enlEZWNvZGluZ1BpeGVsUmVmKHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJz
ZXQpKS0+dW5yZWYoKTsKKworICAgIC8vIEluZm9ybSB0aGUgYml0bWFwIHRoYXQgd2Ugd2lsbCBu
ZXZlciBjaGFuZ2UgdGhlIHBpeGVscy4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGhpbnQKKyAgICAv
LyBzdWJzeXN0ZW1zIHRoYXQgbWF5IHRyeSB0byBjYWNoZSB0aGlzIGJpdG1hcCAoZS5nLiBwaWN0
dXJlcywgcGlwZXMsIGdwdSwgcGRmLCBldGMuKQorICAgIHJlc2l6ZWRCaXRtYXAuc2V0SW1tdXRh
YmxlKCk7CisKKyAgICAvLyBGSVhNRTogU2V0dGluZyBiaXRtYXAuc2V0SXNPcGFxdWUoKSBpcyBi
aWcgcGVyZm9ybWFuY2UgZ2FpbiBpZiBwb3NzaWJsZS4gV2UgY2FuCisgICAgLy8gZG8gc28gc2Fm
ZWx5IGlmIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQgYW5kIGl0IGlzIGEgSlBFRyBpbWFnZSwg
b3IgaW1hZ2Ugd2FzCisgICAgLy8gZGVjb2RlZCBiZWZvcmUuCisgICAgcmV0dXJuIHJlc2l6ZWRC
aXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBsb29r
dXBGcmFtZUdlbmVyYXRvcihiaXRtYXApLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7
Cit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAg
ICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIEltYWdlRnJhbWVHZW5lcmF0
b3IqIGdlbmVyYXRvciA9IGxvb2t1cEZyYW1lR2VuZXJhdG9yKGlkKTsKKyAgICBTa0lTaXplIGZ1
bGxTaXplID0gZ2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAvLyBUaGUgY2FjaGUgb25seSBzYXZl
cyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQuCisgICAgSW1hZ2VGcmFtZUNhY2hl
KiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShpZCwgZnVsbFNpemUpOworICAgIFNrQml0
bWFwIGJpdG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkgeworICAgICAgICAvLyBGSVhNRTog
UGl4ZWxzIGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVyIGluIHRoZSBnZW5lcmF0b3IuIEZp
bmQKKyAgICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4K
KyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0b3ItPmRlY29kZXIoKS0+ZnJhbWVC
dWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVzIHRoZSBmcmFtZSBpbiBjYWNoZSBp
ZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5hcHBlbmQo
SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUoaWQsIGZ1bGxTaXplLCBmcmFtZS0+Z2V0U2tCaXRtYXAo
KSwgdHJ1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIGRl
Y29kaW5nIGVycm9yLiBSZXBvcnQgdGhpcyB0byBCaXRtYXBJbWFnZS4KKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFw
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lQ2FjaGUtPmlzQ29tcGxldGUo
KSk7CisgICAgICAgIGJpdG1hcCA9IGZyYW1lQ2FjaGUtPmJpdG1hcCgpOworICAgIH0KKworICAg
IGlmIChmdWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIC8vIEltYWdlIHNjYWxpbmcg
aXMgZG9uZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQgaW1hZ2UgaXMgZGVzdHJveWVkCisgICAgICAg
IC8vIGFmdGVyIHVzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlc2l6ZSBqdXN0IHRoZSByZXF1ZXN0
ZWQgZnJhZ21lbnQuCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJh
dGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNa
T1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBt
X2xvY2tlZFNrQml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2xv
Y2tlZFNrQml0bWFwID0gYml0bWFwOworICAgICAgICBtX2xvY2tlZFNrQml0bWFwLmxvY2tQaXhl
bHMoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbG9ja2VkU2tCaXRtYXAuZ2V0QWRkcihzY2FsZWRT
dWJzZXQueCgpLCBzY2FsZWRTdWJzZXQueSgpKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3Rv
cmU6OnVubG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
CisKKyAgICBtX2xvY2tlZFNrQml0bWFwLnVubG9ja1BpeGVscygpOworICAgIG1fbG9ja2VkU2tC
aXRtYXAucmVzZXQoKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFs
aWRUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiB0aGlzID09IGluc3RhbmNlT25NYWluVGhy
ZWFkKCkgJiYgaXNNYWluVGhyZWFkKCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpj
cmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sK
KyAgICArK21fbmV4dElkOworICAgIG1fZnJhbWVHZW5lcmF0b3JzLmFkZChtX25leHRJZCwgSW1h
Z2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGRlY29kZXIpKTsKK30KKworSW1hZ2VGcmFtZUdlbmVy
YXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7Cit9CisKK0ltYWdl
RnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3Io
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNMYXp5RGVjb2Rl
ZChiaXRtYXApKTsKKyAgICByZXR1cm4gbG9va3VwRnJhbWVHZW5lcmF0b3Ioc3RhdGljX2Nhc3Q8
TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSktPmlkKCkpOworfQorCitJ
bWFnZUZyYW1lQ2FjaGUqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZShpbnQg
aWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJh
bWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4g
bV9mcmFtZUNhY2hlW2ldLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hl
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaWQs
IHNjYWxlZFNpemUpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ODBiZTBjN2Vh
MGI2Yzc5NTg2YTc1MDc3YmY5MjNkZmVhMjViMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApA
QCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAor
I2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNp
bmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFn
ZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFtZUNhY2hlOworY2xhc3MgU2hhcmVkQnVm
ZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIo
bmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KKyAgICB+SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisK
KyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5jZU9uTWFpblRocmVhZCgpOwor
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyBib29sIGlzTGF6eURlY29kZWQoY29uc3QgU2tCaXRt
YXAmKTsKKworICAgIFNrQml0bWFwIGNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoUGFzc093blB0
cjxJbWFnZURlY29kZXI+KTsKKyAgICBTa0JpdG1hcCByZXNpemVMYXp5RGVjb2RlZFNrQml0bWFw
KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KSBjb25zdDsKKworICAgIHZvaWQgc2V0RGF0YShjb25zdCBTa0JpdG1h
cCYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgLy8gTG9jayBhbmQgdW5sb2NrIHN1cHBvcnRzIG9ubHkgb25lIGltYWdlIGF0IGEgdGltZSBz
byBjYWxsIHRoZW0gaSBwYWlyLgorICAgIHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZv
aWQgdW5sb2NrUGl4ZWxzKCk7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7
CisgICAgYm9vbCBjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVG
cmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIEltYWdlRnJhbWVH
ZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3Q7CisgICAgSW1hZ2VG
cmFtZUdlbmVyYXRvciogbG9va3VwRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tCaXRtYXAmKSBjb25z
dDsKKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50
IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKworICAgIEhhc2hNYXA8aW50LCBPd25Q
dHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gPiBtX2ZyYW1lR2VuZXJhdG9yczsKKyAgICBWZWN0b3I8
T3duUHRyPEltYWdlRnJhbWVDYWNoZT4gPiBtX2ZyYW1lQ2FjaGU7CisKKyAgICBpbnQgbV9uZXh0
SWQ7CisgICAgU2tCaXRtYXAgbV9sb2NrZWRTa0JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
M2VjYjZhYTYwZDNjMmIyN2Y0MWQwODA4ZmRlYzNjZmY4N2QxZGYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFtZUNhY2hlKCkKK3sKK30KKworSW1hZ2VGcmFtZUNh
Y2hlOjpJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBj
b25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUpCisgICAgOiBtX2lk
KGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX2JpdG1hcChiaXRt
YXApCisgICAgLCBtX2lzQ29tcGxldGUoaXNDb21wbGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZy
YW1lQ2FjaGU6OmlzRXF1YWwoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25z
dAoreworICAgIHJldHVybiBpZCA9PSBtX2lkICYmIHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXpl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFkOTI4Yjk2YmVmZjUwMjY2YmM5OGJmNDQwYjMzMGZjMTA3OWU0YzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lQ2FjaGUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZy
YW1lQ2FjaGVfaAorI2RlZmluZSBJbWFnZUZyYW1lQ2FjaGVfaAorCisjaW5jbHVkZSAiU2tCaXRt
YXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSW1hZ2VG
cmFtZUNhY2hlIGlzIGEgc2NhbGVkIHZlcnNpb24gb2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmll
ZAorLy8gYnkgdHdvIHRoaW5nczoKKy8vIDEuIEltYWdlIElELiBUaGUgb3JpZ2luYWwgaW1hZ2Ug
dGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20uCisvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4K
K2NsYXNzIEltYWdlRnJhbWVDYWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
LCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29sIGlzQ29tcGxldGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRnJhbWVDYWNoZShpZCwgc2NhbGVkU2l6ZSwgYml0
bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgfQorCisgICAgSW1hZ2VGcmFtZUNhY2hlKGludCBpZCwg
Y29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICB+
SW1hZ2VGcmFtZUNhY2hlKCk7CisKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9i
aXRtYXA7IH0KKworICAgIGJvb2wgaXNFcXVhbChpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXND
b21wbGV0ZTsgfQorCitwcml2YXRlOgorICAgIGludCBtX2lkOworICAgIFNrSVNpemUgbV9zY2Fs
ZWRTaXplOworICAgIFNrQml0bWFwIG1fYml0bWFwOworICAgIGJvb2wgbV9pc0NvbXBsZXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJjNDMwYWIyNzU3ODM2MGI1OTdiZWFhNzhhZGY5
NTc4NGRmMjZjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lR2VuZXJhdG9yOjpJ
bWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAg
IDogbV9kZWNvZGVyKGRlY29kZXIpCit7CisgICAgbV9zaXplID0gU2tJU2l6ZTo6TWFrZShtX2Rl
Y29kZXItPnNpemUoKS53aWR0aCgpLCBtX2RlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7Cit9CisK
K0ltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKK3sKK30KKworSW1h
Z2VEZWNvZGVyKiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVyKCkKK3sKKyAgICByZXR1cm4g
bV9kZWNvZGVyLmdldCgpOworfQorCit2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorewor
ICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVy
LT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBl
N2M5Y2M1MDg3ZWYyZTI5ZWJhNzE1MWI1YTRhMWFjODQ4NThlMzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdl
bmVyYXRvcl9oCisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tT
aXplLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFt
ZUdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VGcmFtZUdl
bmVyYXRvcj4gY3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIp
KTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPik7CisgICAgfkltYWdlRnJhbWVHZW5lcmF0b3IoKTsKKworICAgIC8vIENy
ZWF0ZXMgdGhlIGltYWdlIGRlY29kZXIgaWYgbmVlZGVkLgorICAgIEltYWdlRGVjb2RlciogZGVj
b2RlcigpOworICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2Rl
Y29kZXI7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIFNrSVNpemUgbV9z
aXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1Bp
eGVsUmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
enlEZWNvZGluZ1BpeGVsUmVmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDllM2Y2ZmExNWMxOTJlYjFlNjRl
ODI0NzE0OWQyMzM3MGU3ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF6eURlY29k
aW5nUGl4ZWxSZWYuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF6eURlY29k
aW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJl
ZigwKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAg
ICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQoreworfQorCitMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKCkKK3sKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZ1bGxTaXplICE9IG1fc2NhbGVkU2l6ZTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2FsZWRTaXplLndp
ZHRoKCkgIT0gbV9zY2FsZWRTdWJzZXQud2lkdGgoKSB8fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkg
IT0gbV9zY2FsZWRTdWJzZXQuaGVpZ2h0KCk7Cit9CisKK3ZvaWQqIExhenlEZWNvZGluZ1BpeGVs
UmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRo
cmVhZCgpLT5sb2NrUGl4ZWxzKGlkKCksIG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOwor
fQorCit2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
T25NYWluVGhyZWFkKCktPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGluZ1Bp
eGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhl
bFJlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBmOTFhYzI1YjRlYTIyM2EyZDVjNWFkZWVkN2I0YjAzNjJhYjcz
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxS
ZWZfaAorCisjaW5jbHVkZSAiU2tGbGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1Bp
eGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBT
a1BpeGVsUmVmIHsKK3B1YmxpYzoKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7Cisg
ICAgdmlydHVhbCB+TGF6eURlY29kaW5nUGl4ZWxSZWYoKTsKKworICAgIFNLX0RFQ0xBUkVfVU5G
TEFUVEVOQUJMRV9PQkpFQ1QoKQorCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0OworICAg
IGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVm
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JU
YWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25VbmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBp
bnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVk
U3Vic2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURl
Y29kaW5nUGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCAxODYyYTJhZmM2ZTM1MDQ5
MzZkY2JjOTAzY2U2ZjI0ZDRhYWY1MGFkLi5kMDg0ZWM4ZjQxY2ZhZjQ2NGM4YjY0ODY0ZmZkNDA1
NmE3NDNhMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC00MCw2ICs0MCwxMSBAQAogI2luY2x1
ZGUgIlNrUGl4ZWxSZWYuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdl
U2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKQEAgLTczLDYgKzc4LDExIEBAIGJvb2wgTmF0aXZlSW1h
Z2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwg
Y29uc3QgU2tJCiAKIFNrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChjb25z
dCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZEltYWdlU3Vi
c2V0KSBjb25zdAogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGlmIChJbWFnZURlY29k
aW5nU3RvcmU6OmlzTGF6eURlY29kZWQobV9pbWFnZSkpCisgICAgICAgIHJldHVybiBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnJlc2l6ZUxhenlEZWNvZGVkU2tC
aXRtYXAobV9pbWFnZSwgc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CisjZW5k
aWYKKwogICAgIGlmICghaGFzUmVzaXplZEJpdG1hcChzY2FsZWRJbWFnZVNpemUsIHNjYWxlZElt
YWdlU3Vic2V0KSkgewogICAgICAgICBib29sIHNob3VsZENhY2hlID0gaXNEYXRhQ29tcGxldGUo
KQogICAgICAgICAgICAgJiYgc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHNjYWxlZEltYWdlU2l6ZSwg
c2NhbGVkSW1hZ2VTdWJzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAzMDNkNzU5OWE5YWFmNDFlNjI4NGNl
MDM3ZmVjM2JmMmZkZTFkYjU2Li44NTUwMzg1MjBhOTgzYzYwMDZjNjQyNDdlNmFkNDJmYzhlZDI0
MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuaApAQCAtMTQ1LDYgKzE0NSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwogI2VuZGlm
CiAgICAgICAgIH0KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2b2lkIHNldFNr
Qml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
Yml0bWFwID0gTmF0aXZlSW1hZ2VTa2lhKGJpdG1hcCwgMSk7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBTa0JpdG1hcCYgZ2V0U2tCaXRtYXAoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9iaXRtYXAuYml0bWFwKCk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGludCBoZWlnaHQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDI0Y2FlMjk4ZmY1MDQ5
MWZlYzEzZmFiNDNiZDkwODY5NjY3ODZjMGYuLjY0MDYzYTAyMWM0NjcxNGQ5ZDU5ODU2YWNlYzQy
MmVmODdiZGU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEsNiArNjEs
NyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvRGF0ZVRpbWVGb3JtYXRUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvRGVjaW1hbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9EZWZl
cnJlZEltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9GYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2UuaCcsCkBAIC03
OCw4ICs3OSw5IEBACiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0ZXN0cy9L
VVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCiAg
ICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
S1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvTGlzdGVuZXJMZWFrVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKaW5kZXggYWJkODRlZDBlNTdhZmU5ODMxZmZmZDA2MzkxZTQyOTFlNWRj
MmJlNC4uMDhjZDE5NzQ1Y2M3MGFhZTM3OWM4OTUxZTY0YTE0ODI3ZjZhNDU0NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04Niw2ICs4Niw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29u
c3QgV2ViU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUo
V2ViU2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxl
ZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShi
b29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCkg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggZTM1N2YyOGU0Mjgz
YTcwMDE1NmQ2Y2ZhYmQ1MGVkYjNlZDJmNzg5Ny4uMjQzZDA4ZTYyOTQ4MDU2OTc5MzYyZGZjZjg1
OGM2ZmY4NWU4YTc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
S2l0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAK
KyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3Vw
cG9ydC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVy
LmgiCkBAIC0xNjUsNiArMTY2LDcgQEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQogI2VuZGlmCiAg
ICAgc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQgPSAwOworICAgIFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6c2h1dGRvd24oKTsKICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsKICAgICBXZWJQ
cmVyZW5kZXJpbmdTdXBwb3J0OjpzaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggOTg4YzVlNjZiMWUxM2MxNmU5ZjY3
ZDAyYTQ3Y2EwNzhkZjM4NjA5OC4uZGM3NzM2ZDlhMjFiMDkwNzRjZmIxZDkxNTljYjhmN2IxOWM5
MDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBsLmgiCiAKICNp
bmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5o
PgogI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KQEAgLTU1LDYgKzU2LDcgQEAgV2ViU2V0dGlu
Z3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgICwgbV9hcHBs
eURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmYWxzZSkKICAgICAsIG1fZ2Vz
dHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fYXV0b1pvb21Gb2N1c2VkTm9k
ZVRvTGVnaWJsZVNjYWxlKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKGZhbHNlKQogICAgICwgbV9kZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSgyNTYsIDI1NikpCiAg
ICAgLCBtX21heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSg1MTIsIDUxMikpCiB7CkBAIC00ODAs
NiArNDgyLDE1IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1fZGVmZXJyZWRJ
bWFnZURlY29kaW5nRW5hYmxlZCAmJiBlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3Rv
cmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkICYmICFlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNo
dXRkb3duKCk7CisgICAgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsK
K30KKwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJsZWQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCAxMTY5
YzMxY2YzZWIyYWU4MGZkYTFmODg1Y2QwODY5MTY4ZjQ2YTQxLi45MDUxYmFiNjE3Zjg2YmZlMDQ5
YjBiNzdlNmUyYWRmMDJkNzJkNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSk7CiAgICAgdmlydHVhbCB2b2lk
IHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VT
dXBwb3J0c01vdXNlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1Rv
dWNoKGJvb2wpOwpAQCAtMTc4LDYgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5
RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yOwogICAgIGJvb2wgbV9nZXN0dXJl
VGFwSGlnaGxpZ2h0RW5hYmxlZDsKICAgICBib29sIG1fYXV0b1pvb21Gb2N1c2VkTm9kZVRvTGVn
aWJsZVNjYWxlOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAg
IFdlYlNpemUgbV9kZWZhdWx0VGlsZVNpemU7CiAgICAgV2ViU2l6ZSBtX21heFVudGlsZWRMYXll
clNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZl
cnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MjU0OTgwNWM3NmE4MWJl
MzFhM2RmNDhjNDc0MWUzMmU0ZWRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTAsMCArMSwx
MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZlcnJlZElt
YWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2lu
Y2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNsdWRlICJTa1Bp
Y3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IDog
cHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVw
KCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2Rlcigp
OworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOworICAgICAgICBt
X2xhenlEZWNvZGVyID0gRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUZvclRlc3RpbmcoYWRv
cHRQdHIobV9hY3R1YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzLnNldERldmljZShuZXcg
U2tEZXZpY2UoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAsIDEwMCkpLT51bnJlZigp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
Ly8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRoZSBwb2ludGVyIHRvIHF1ZXJ5IHN0YXRlcy4K
KyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVhbERlY29kZXI7CisgICAgT3duUHRyPERlZmVy
cmVkSW1hZ2VEZWNvZGVyPiBtX2xhenlEZWNvZGVyOworICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7
CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0YoRGVmZXJyZWRJbWFnZURlY29k
ZXJUZXN0LCBkcmF3SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lh
PiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFz
TmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29kZXItPnNpemUo
KS53aWR0aCgpLCBpbWFnZS0+Yml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0
dWFsRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpLCBpbWFnZS0+Yml0bWFwKCkuaGVpZ2h0KCkpOwor
ICAgIEVYUEVDVF9GQUxTRShpbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9U
UlVFKGltYWdlLT5iaXRtYXAoKS5pc0ltbXV0YWJsZSgpKTsKKworICAgIFNrQ2FudmFzKiB0ZW1w
Q2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0ZW1wQ2Fu
dmFzLT5kcmF3Qml0bWFwKGltYWdlLT5iaXRtYXAoKSwgMCwgMCk7CisgICAgbV9waWN0dXJlLmVu
ZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0dXJl
KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCgpKTsKK30KKworVEVTVF9GKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCwgZHJhd1NjYWxl
ZEludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UoYWRv
cHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05hdGl2ZUlt
YWdlKCkpKTsKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBpbWFnZS0+cmVzaXplZEJpdG1h
cChTa0lTaXplOjpNYWtlKDUwLCA1MSksIFNrSVJlY3Q6Ok1ha2VXSCg1MCwgNTEpKTsKKyAgICBF
WFBFQ1RfRkFMU0Uoc2NhbGVkQml0bWFwLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShzY2Fs
ZWRCaXRtYXAuaXNJbW11dGFibGUoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzY2FsZWRCaXRtYXAu
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUxLCBzY2FsZWRCaXRtYXAuaGVpZ2h0KCkpOworICAg
IEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkp
OworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmco
MTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoc2NhbGVkQml0bWFwLCAwLCAw
KTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5k
cmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXIt
PmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41Y2YyMzc0NGU1MWZkZTQzYzE2NGIzMTEwMWQwNWIzMzA3MzJjMmZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAg
LTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja0ltYWdlRGVjb2Rlcl9oCisKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2Nr
SW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgTW9ja0lt
YWdlRGVjb2RlcigpCisgICAgICAgIDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYVBy
ZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpCisg
ICAgICAgICwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgwKQorICAgIHsgfQorCisgICAgdmly
dHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICJtb2NrIjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QpCisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQ7CisKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQo
KSk7CisgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIH0KKworICAg
IGludCBmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1vY2tJ
bWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDFlN2JjYmM4MjllMzFlZjk0MmY2NGU3MWY5MmM5ZGJlODUyZTQ4YjkuLjQwYjk3
Mzc3NWRhYWUzOGJmNWZkNmZkMGQ0NWJjODMwZTE5YWQxNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOS0w
OCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNv
ZGluZyB0byBEUlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgor
ICAgICAgICAoVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoKKyAgICAgICAgKFRlc3RTaGVsbDo6c2V0RGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAg
KFdlYlByZWZlcmVuY2VzOjpyZXNldCk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6YXBwbHlU
byk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaDoK
KyAgICAgICAgKFdlYlByZWZlcmVuY2VzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0LnZpcnR1
YWxfdGVzdF9zdWl0ZXMpOgorCiAyMDEyLTEwLTE1ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgTG93ZXIgdGhlIG1pbmltdW0gdGltZSByZXF1aXJlZCB0byBrZWVw
IGEgdGVzdCBpbiB0aGUgdGVzdCByZXN1bHRzIGpzb24KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4
YjYzZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2
MWZhNmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRl
clRyZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJs
ZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0
aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9b
XSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3Mt
Y29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5h
YmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1l
bmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
U3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRDYW52YXNF
bmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wg
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0
ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdh
cmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtu
b3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9u
LmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBl
clRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVl
OworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdl
RGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAg
ICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uU3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVm
ZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNl
dFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAg
IHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0
RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAg
c2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3
MTJiZDhjYTcyNDg5Yi4uYWM3NzU5NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQs
NiArMTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9k
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFs
c2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVk
KHRydWUpCkBAIC0yMjksNiArMjMwLDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGlu
Z3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFi
bGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVk
MmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZz
LmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUz
ODhjNjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0
OTFlYTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVk
MmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVk
ID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAg
ICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8v
IEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERv
ZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVk
RXZlbnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJl
ZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7
CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBi
b29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCAzYmMyY2RkOWYy
YWU0MTcwYzMzYWQ2NDEwNmQ0YTdmMmQwOTAyMWY1Li41YzhjOTJjOTk5NDI2NDRkZDE5YTQ5Yzk4
ZTY2YzFhNGYwNmQ0NDRkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNl
czo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNj
ZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9k
ZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAg
ICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3Jv
bGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxz
ZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVk
KGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5z
ZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7
CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJ
bWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBz
ZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7
CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3Np
dG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTli
OWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAt
MTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwog
ICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0
b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggYzMxMGViMTViMTk1NGRkZWRkYzMzM2I5ODBm
NjY1ZDVmY2RiOTFjZS4uYTY5ZjVhODIyYWEzZmUzMjg0NmY5MTcwMTE2NDE5M2NjMjIzOGY1MiAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtLnB5CkBAIC0zOTAsNiArMzkwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgog
ICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9z
b2Z0d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBv
c2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2Fy
ZS1jb21wb3NpdGluZyddKSwKKyAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxl
LXBhaW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAg
ICAgIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGJkZDE0NTE4ZTNmYzFlN2NmODhlYjViZTcwOTI5YTE3Njk1MDc2OTcuLmYz
MzBkYmU0YzExZDJlNzY1MDA2OTMxN2E0NWI3YWY2YmZjZTg4MDMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwg
dGVzdCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBk
ZWNvZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGlu
ZyAtLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNv
ZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAtMTUgIE1paG5lYSBPdmlkZW5p
ZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNdQWRkIHN1cHBvcnQg
Zm9yIGF1dG8taGVpZ2h0IHJlZ2lvbnMgKHdpdGhvdXQgcmVnaW9uLWJyZWFrcykKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDU3YmI2M2Zi
MzU4MGIzNGMwYTAyM2M0MDExZTkyNmM5Nzk4MTk4MmIuLjI2ZDA3ZTVkZjhmMmZiZjkyNjExZTBm
ZTk2M2QxOGMzNTMzY2U0NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwpAQCAtNDAzMiwzICs0MDMyLDI2IEBAIHdlYmtpdC5vcmcvYi85OTEz
NCBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy90aW55LWxheWVyLXJvdGF0ZWQuaHRtbCBb
IFBhc3MKIAogd2Via2l0Lm9yZy9iLzk5MTM4IFsgU25vd0xlb3BhcmQgXSBzdmcvY3VzdG9tL2Zv
cmVpZ24tb2JqZWN0LXNrZXcuc3ZnIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KIAorIyBUaGVz
ZSB0ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVzdCBz
dWl0ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1cHBy
ZXNzZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hl
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9w
ZGYtYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4taW1h
Z2UtZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRoLWNv
bG9yLXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxhcmdl
LWNoZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYtbG9v
cC1jb3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJyZWN0
LWdyaWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2staW1h
Z2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2Zh
dmljb24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2lyY2xl
LWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmlu
Zy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3QtaW5o
ZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3Vz
LXJpbmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1w
b2x5Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWltYWdl
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBU
aW1lb3V0IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBb
IE1pc3NpbmcgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJmODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNiN2Q4NTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisjIFRlc3Qgc3VpdGVzIGlu
IHRoaXMgZGlyZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBkZWNvZGluZycgY29kZSBw
YXRoCisjIHRocm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168882</attachid>
            <date>2012-10-16 01:06:20 -0700</date>
            <delta_ts>2012-10-16 12:18:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121016010509.patch</filename>
            <type>text/plain</type>
            <size>77792</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI3NjJlZGQxZTRkMGZj
ZWQxMWYwNmUwOTQzMDVjZDI2ZGVhYTU5Ny4uODE4ZmE0NDg1MDhiMDU2MjkxNTk5YzA4ZDdhZTRh
MDA3NmZhMjlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxS
ZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVu
YWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2Vz
cyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250
YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhl
c2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJl
IGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBy
dW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0
ZXN0cy4gQWRkZWQgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAor
ICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdlbmVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hl
Ojp+SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNF
cXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpiaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
bWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3I6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGlu
Z1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKElt
YWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorCiAyMDEyLTEwLTE2
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTMxNDE4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBmYmU1MDdhOGU1YjY2OTZjOTAwYTZkM2ExNzZlZWE0N2FmZGJkODcyLi40ODk4NjNlYzVk
ZmM5ZTA3NDc5YWZkYzViMTIyM2QxMTJkYzFlMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVj
b2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0
MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAg
VGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4g
VGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQ
aWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2Nh
bGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJh
d0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5k
cmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAg
ICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRp
bmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE1
ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIEVuYWJsZSBGQVNUX01PQklMRV9TQ1JPTExJTkcgZm9yIEFuZHJvaWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAxZWM3ZGQ4Y2RmYTE0NjQ2OTU1ZDYyNDQwYTZiYzc2Njc2N2NmNDg5Li5iMjQ0M2Zj
NTJiMzM3NWQ2MTcyYmQxYjQ5NjJkY2EwODA5NjNlZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00
OTA0LDYgKzQ5MDQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbXBvc2l0b3JIVURGb250QXRsYXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0nLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAnLApAQCAtNDkyMyw2ICs0
OTI1LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNo
cm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVy
YXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdD
b250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IDk4MTZlNjM0MWZlYjIwNzUwZTMxNjEyN2Y2MGRlNWY4MWY5YjY5OTYuLmU2YzkxNThjYzRjZjVk
MmZkNWIwMzc3YjNlZTBjNTEwNjBiMTA4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCkBAIC03OCw3ICs4Miw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBp
bnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5
cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9k
ZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291
cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVJbWFnZURlY29kZXJQdHI+KE5hdGl2ZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRh
LCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAm
JiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3
ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIuLjg2NzMxMGRlZWNjYjAwN2M1ODdmMjI1ODgwZDk3
OGNkYjM1NGQzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaApAQCAtNDcsMTAgKzQ3LDIwIEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZl
SW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQordHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUlt
YWdlRGVjb2RlclB0cjsKKyNlbGlmICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVj
b2RlcjsKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVk
ZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXI7Cit0eXBlZGVmIERl
ZmVycmVkSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJ
bWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbGlmIFVTRShDRykKKyNkZWZp
bmUgTmF0aXZlSW1hZ2VEZWNvZGVyIEltYWdlRGVjb2RlcgorI2Vsc2UKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKICNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBh
cmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRp
b24uCkBAIC0xNTYsNyArMTY2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAg
TmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0
ciBtX2RlY29kZXI7CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjUzMGJk
NmI2NWI1YjFjMjBiNWI4YWU4YWQ0YmM5YjA5YWQyNWQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1h
Z2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisK
K0RlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQoreworICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0
b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVmZXJyZWRJbWFn
ZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAg
IEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICByZXR1cm4gYWN0dWFsRGVj
b2RlciA/IG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihhY3R1YWxEZWNvZGVyKSA6IDA7Cit9CisK
K1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rlci5sZWFrUHRy
KCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rl
ci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdl
RnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNp
bmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZy
YW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQorICAg
IC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBk
byBzeW5jaHJvbm91cyBpbWFnZQorICAgIC8vIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpID09IDEKKyAgICAg
ICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgeworCisgICAgICAgIG1f
c2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAgICBtX2ZpbGVuYW1lRXh0ZW5z
aW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworCisgICAgICAgIFNr
Qml0bWFwIGxhenlEZWNvZGVkU2tCaXRtYXAgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
T25NYWluVGhyZWFkKCktPmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAobV9hY3R1YWxEZWNvZGVy
LnJlbGVhc2UoKSk7CisgICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTa0JpdG1hcChsYXp5
RGVjb2RlZFNrQml0bWFwKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9u
TWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBt
X2RhdGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CisKKyAgICAgICAgLy8gRG9uJ3Qg
bWFyayB0aGUgZnJhbWUgYXMgY29tcGxldGVseSBkZWNvZGVkIHVudGlsIHRoZSB1bmRlcmx5aW5n
CisgICAgICAgIC8vIGRlY29kZXIgaGFzIHJlYWxseSBkZWNvZGVkIGl0LiBVbnRpbCB0aGVuLCBv
dXIgZGF0YSBhbmQgbWV0YWRhdGEgbWF5CisgICAgICAgIC8vIGJlIGluY29ycmVjdCwgc28gY2Fs
bGVycyBjYW4ndCByZWx5IG9uIHRoZW0uCisgICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
IDogJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAg
IGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBk
YXRhIHVudGlsIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkLgorICAgICAgICAvLyBXaGVuIGlt
YWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gb3duZXJzaGlwIG9mIG1fZGF0YSBpcworICAg
ICAgICAvLyB0cmFuc2ZlcnJlZCB0byBJbWFnZURlY29kaW5nU3RvcmUuCisgICAgICAgIG1fZGF0
YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOwor
ICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7CisgICAgICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVk
RnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9Cit9CisK
K2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgLy8g
bV9hY3R1YWxEZWNvZGVyIGlzIDAgb25seSBpZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCBh
bmQgdGhhdAorICAgIC8vIG1lYW5zIGltYWdlIGhlYWRlciBkZWNvZGVkIHN1Y2Nlc3NmdWxseSBh
bmQgc2l6ZSBpcyBhdmFpbGFibGUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgOiB0cnVlOworfQorCitJbnRTaXplIERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNv
ZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCkgOiBtX3NpemU7Cit9CisKK0ludFNpemUgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAor
eworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6
ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplOworfQorCitzaXplX3QgRGVmZXJyZWRJbWFnZURlY29k
ZXI6OmZyYW1lQ291bnQoKQoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPmZyYW1lQ291bnQoKSA6IDE7Cit9CisKK2ludCBEZWZlcnJlZEltYWdlRGVjb2Rl
cjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVy
ID8gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6IGNBbmltYXRpb25Ob25lOwor
fQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVm
ZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQorICAgIC8vIHRoZSBj
b21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAgICBpZiAobV9hY3R1YWxEZWNv
ZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVh
ckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTeW5jaHJv
bml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNvZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMKKyAg
ICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4gdHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4gdGVy
bXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1heSBub3QgZ28gdGhyb3VnaCBzb21lIG9wdGlt
aXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBt
X2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KSA6IHRydWU7Cit9CisK
K3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Cit7CisgICAgLy8gSWYgZnJhbWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhl
biBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhl
cmUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVC
eXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJy
ZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIzM2ZlMzVlMGVjNmIzMjE1
YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVmZXJyZWRJbWFnZURlY29kZXJfaAorI2Rl
ZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIH5EZWZlcnJl
ZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBEZWZlcnJlZEltYWdlRGVjb2RlciogY3JlYXRl
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZvclRlc3RpbmcoUGFzc093blB0cjxJ
bWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Owor
CisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAg
ICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0Owor
ICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0
ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
RGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKTsKKworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVk
OworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVjb2RlcjsKKworICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9zaXplOworCisgICAgSW1hZ2VG
cmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk0MWEx
MzQyODAzNzUwOTRmNDI5MmE3ZTFhODc2ZDM1MDM4NDAxMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJT
a1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdl
X29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
CitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0
aWMgdm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdl
RGVjb2RpbmdTdG9yZSkKK3sKKyAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAg
ICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3JlOworfQorfSAvLyBu
YW1lc3BhY2UKKworSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAg
IDogbV9uZXh0SWQoMCkKK3sKK30KKworSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGlu
Z1N0b3JlKCkKK3sKK30KKworSW1hZ2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlT25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIHJldHVybiBzX2luc3RhbmNlT25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6
OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0
ZG93bigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0YW5jZU9u
TWFpblRocmVhZCgwKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29k
ZWQoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWZlcnJl
ZFNrQml0bWFwSWRzLmNvbnRhaW5zKGJpdG1hcC5nZXRHZW5lcmF0aW9uSUQoKSk7Cit9CisKK1Nr
Qml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNz
T3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXplOjpNYWtlKGRlY29k
ZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIEFTU0VS
VCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKGRlY29k
ZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1bGxTaXpl
KTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVm
ZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBTa0JpdG1hcCBi
aXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcs
IGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBiaXRtYXAuc2V0UGl4
ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElkLCBmdWxsU2l6ZSwgZnVsbFJl
Y3QpKS0+dW5yZWYoKTsKKworICAgIC8vIEluZm9ybSB0aGUgYml0bWFwIHRoYXQgd2Ugd2lsbCBu
ZXZlciBjaGFuZ2UgdGhlIHBpeGVscy4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGhpbnQKKyAgICAv
LyBzdWJzeXN0ZW1zIHRoYXQgbWF5IHRyeSB0byBjYWNoZSB0aGlzIGJpdG1hcCAoZS5nLiBwaWN0
dXJlcywgcGlwZXMsIGdwdSwgcGRmLCBldGMuKQorICAgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsK
KworICAgIC8vIEZJWE1FOiBTZXR0aW5nIGJpdG1hcC5zZXRJc09wYXF1ZSgpIGlzIGJpZyBwZXJm
b3JtYW5jZSBnYWluIGlmIHBvc3NpYmxlLiBXZSBjYW4KKyAgICAvLyBkbyBzbyBzYWZlbHkgaWYg
dGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRlZCBhbmQgaXQgaXMgYSBKUEVHIGltYWdlLCBvciBpbWFn
ZSB3YXMKKyAgICAvLyBkZWNvZGVkIGJlZm9yZS4KKworICAgIG1fZGVmZXJyZWRTa0JpdG1hcElk
cy5hZGQoYml0bWFwLmdldEdlbmVyYXRpb25JRCgpKTsKKyAgICByZXR1cm4gYml0bWFwOworfQor
CitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAo
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3Qg
U2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworCisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8
TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFw
aXhlbFJlZi0+aXNTY2FsZWQobG9va3VwRnJhbWVHZW5lcmF0b3IocGl4ZWxSZWYtPmlkKCkpLT5z
aXplKCkpICYmICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOworCisgICAgaW50IHJvd0J5dGVzID0g
MDsKKyAgICByb3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkpOworCisgICAgU2tCaXRtYXAgcmVz
aXplZEJpdG1hcDsKKyAgICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQuaGVpZ2h0KCks
IHJvd0J5dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZihwaXhlbFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVu
cmVmKCk7CisKKyAgICAvLyBTZWUgY29tbWVudHMgaW4gY3JlYXRlTGF6eURlY29kZWRTa0JpdG1h
cCgpLgorICAgIHJlc2l6ZWRCaXRtYXAuc2V0SW1tdXRhYmxlKCk7CisgICAgbV9kZWZlcnJlZFNr
Qml0bWFwSWRzLmFkZChyZXNpemVkQml0bWFwLmdldEdlbmVyYXRpb25JRCgpKTsKKyAgICByZXR1
cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEo
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkp
OworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNldERhdGEoZGF0YSwgYWxsRGF0
YVJlY2VpdmVkKTsKK30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKGlu
dCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vi
c2V0KQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X2xvY2tlZFNrQml0bWFwLmlzTnVsbCgpKTsKKworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGdl
bmVyYXRvciA9IGxvb2t1cEZyYW1lR2VuZXJhdG9yKGlkKTsKKyAgICBTa0lTaXplIGZ1bGxTaXpl
ID0gZ2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAvLyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUg
ZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQuCisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFt
ZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShpZCwgZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJp
dG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkgeworICAgICAgICAvLyBGSVhNRTogUGl4ZWxz
IGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVyIGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAg
ICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAg
ICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJB
dEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVzIHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlz
IGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5hcHBlbmQoSW1hZ2VG
cmFtZUNhY2hlOjpjcmVhdGUoaWQsIGZ1bGxTaXplLCBmcmFtZS0+Z2V0U2tCaXRtYXAoKSwgdHJ1
ZSkpOworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIGRlY29kaW5n
IGVycm9yLiBSZXBvcnQgdGhpcyB0byBCaXRtYXBJbWFnZS4KKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisKKyAgICAgICAgYml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lQ2FjaGUtPmlzQ29tcGxldGUoKSk7Cisg
ICAgICAgIGJpdG1hcCA9IGZyYW1lQ2FjaGUtPmJpdG1hcCgpOworICAgIH0KKworICAgIGlmIChm
dWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIC8vIEltYWdlIHNjYWxpbmcgaXMgZG9u
ZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQgaW1hZ2UgaXMgZGVzdHJveWVkCisgICAgICAgIC8vIGFm
dGVyIHVzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlc2l6ZSBqdXN0IHRoZSByZXF1ZXN0ZWQgZnJh
Z21lbnQuCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6
OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBz
Y2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIH0gZWxzZQorICAg
ICAgICBtX2xvY2tlZFNrQml0bWFwID0gYml0bWFwOworICAgIG1fbG9ja2VkU2tCaXRtYXAubG9j
a1BpeGVscygpOworICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIoc2NhbGVkU3Vi
c2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xvY2tlZFNrQml0
bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVh
ZCgpICYmIGlzTWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3Jl
YXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7Cisg
ICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5hZGQobV9uZXh0SWQsIEltYWdl
RnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0
b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoaW50IGlkKSBjb25z
dAoreworICAgIHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQoaWQpOworfQorCitJbWFnZUZy
YW1lR2VuZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGNv
bnN0IFNrQml0bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTGF6eURlY29kZWQo
Yml0bWFwKSk7CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJhdG9yKHN0YXRpY19jYXN0PExh
enlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5pZCgpKTsKK30KKworSW1h
Z2VGcmFtZUNhY2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1l
Q2FjaGVbaV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG1f
ZnJhbWVDYWNoZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGlkLCBz
Y2FsZWRTaXplKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDJkNWRhODZjZDhj
N2ZkYjViY2I0MDRjOGUwZTdkZDM3YWZjNGZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKyNk
ZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFt
ZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KKyAgICB+
SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bnN0YW5jZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworCisgICAgYm9vbCBpc0xhenlE
ZWNvZGVkKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAgU2tCaXRtYXAgY3JlYXRlTGF6eURl
Y29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIFNrQml0bWFwIHJl
c2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworCisgICAgdm9pZCBzZXRE
YXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CisKKyAgICAvLyBZb3UgbWF5IG9ubHkgbG9jayBvbmUgc2V0IG9mIHBpeGVs
cyBhdCBhIHRpbWU7IG92ZXJsYXBwaW5nIGxvY2sgY2FsbHMgYXJlIG5vdCBhbGxvd2VkLgorICAg
IHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKK3By
aXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2Vu
ZXJhdG9yKGludCBpZCkgY29uc3Q7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJh
bWVHZW5lcmF0b3IoY29uc3QgU2tCaXRtYXAmKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lQ2FjaGUq
IGxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25z
dDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKTsKKworICAgIEhhc2hNYXA8aW50LCBPd25QdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4g
PiBtX2ZyYW1lR2VuZXJhdG9yczsKKyAgICBWZWN0b3I8T3duUHRyPEltYWdlRnJhbWVDYWNoZT4g
PiBtX2ZyYW1lQ2FjaGU7CisgICAgSGFzaFNldDx1bnNpZ25lZD4gbV9kZWZlcnJlZFNrQml0bWFw
SWRzOworCisgICAgaW50IG1fbmV4dElkOworICAgIFNrQml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVD
YWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNlY2I2YWE2MGQzYzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdk
MWRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgp
Cit7Cit9CisKK0ltYWdlRnJhbWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBp
c0NvbXBsZXRlKQorICAgIDogbV9pZChpZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXpl
KQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUp
Cit7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjppc0VxdWFsKGludCBpZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2Fs
ZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDkyOGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIz
MzBmYzEwNzllNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUNhY2hlX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hl
X2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVk
ZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIEltYWdlRnJhbWVDYWNoZSBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEg
aW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKKy8vIGJ5IHR3byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJ
RC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBmcmFnbWVudCBjb21lcyBmcm9tLgorLy8g
Mi4gU2NhbGVkIGltYWdlIHNpemUuCitjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0Nv
bXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2Fj
aGUoaWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOworICAgIH0KKworICAgIElt
YWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJv
b2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVDYWNoZSgpOworCisgICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9CisgICAgU2tCaXRtYXAm
IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBib29sIGlzRXF1YWwoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ29tcGxldGUo
KSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9p
ZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAg
ICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFi
Mjc1NzgzNjBiNTk3YmVhYTc4YWRmOTU3ODRkZjI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNvZGVyKQoreworICAgIG1fc2l6
ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5z
aXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdl
bmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVj
b2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKK30KKwordm9pZCBJbWFnZUZy
YW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIGlmIChtX2RlY29k
ZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIGFsbERhdGFSZWNl
aXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZTdjOWNjNTA4N2VmMmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4
ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorI2RlZmluZSBJbWFnZUZyYW1lR2VuZXJh
dG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VG
cmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW1hZ2VGcmFt
ZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2Vu
ZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4K
KyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBTa0lT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgT3du
UHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
ZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDA5ZTNmNmZhMTVjMTkyZWIxZTY0ZTgyNDcxNDlkMjMzNzBlN2VmMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1
YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX3NjYWxl
ZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sK
K30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9
CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1
bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9
CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwg
bV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2
b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVscyhpZCgpLCBtX3NjYWxlZFNp
emUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25V
bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT51bmxvY2tQaXhlbHMoKTsKK30K
KworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNh
MmQ1YzVhZGVlZDdiNGIwMzYyYWI3MzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVm
aW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZm
ZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2lu
Y2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29k
aW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7CitwdWJsaWM6CisgICAgTGF6eURlY29k
aW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7
CisKKyAgICBTS19ERUNMQVJFX1VORkxBVFRFTkFCTEVfT0JKRUNUKCkKKworICAgIGludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29sIGlzU2NhbGVkKGNvbnN0IFNrSVNpemUm
IGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQq
IG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2Nr
UGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7
CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVsUmVmX2hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAK
aW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0YWFmNTBhZC4uMmE5ZTU2YTQy
ODU3N2MxZmExYzZjMzRkOGU0ODRlOGM4MGE1YzJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAt
NDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0
aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCkBAIC03Myw2ICs3
OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lT
aXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBT
a0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpICYm
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+aXNMYXp5RGVjb2Rl
ZChtX2ltYWdlKSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VP
bk1haW5UaHJlYWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJ
bWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNp
emVkQml0bWFwKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAg
IGJvb2wgc2hvdWxkQ2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91
bGRDYWNoZVJlc2FtcGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCmluZGV4IGQwY2M1M2IxNDc1N2QxNzQ0MjJmNzY4Nzk4NDBlY2IzNWFmOTUyNDYuLjIw
YWI4YzFhYmMzNzAyYTA4YjM5MGMwOTdkMzU2NzI5NjFiZjVkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0x
NDUsNiArMTQ1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBt
X2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNr
aWEoYml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRT
a0JpdG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5i
aXRtYXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4
NmMwZi4uNjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVz
dHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0
ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFs
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VX
ZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAg
ICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQlJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXli
b2FyZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hp
Z2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBh
YmQ4NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFl
Mzc5Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2Vk
MmY3ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2Rp
bmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBA
QCB2b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3Vw
cG9ydCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwog
ICAgIFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNo
dXRkb3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5k
Yzc3MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1w
bChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFj
dG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxl
ZCh0cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2Up
CisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2Rl
ZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVy
U2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJT
ZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAg
ICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAor
dm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYm
IGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJs
ZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVj
ZDA4NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03
OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRU
aWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQo
Ym9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiAr
MTc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0
b3JJbkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwog
ICAgIGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxl
U2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNp
bmNsdWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ugewor
CitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0
dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVj
b2Rlci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIp
KTsKKyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1
dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQg
c2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIq
IG1fYWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6
eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZh
czsKK307CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0
dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6
eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7Cisg
ICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRt
YXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVp
Z2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdl
LT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlz
SW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVn
aW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2Ut
PmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQ
RUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisK
KyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0Yo
RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAg
ICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFw
IHNjYWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUx
KSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRt
YXAuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgp
KTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RVEoNTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFs
RGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVt
cENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENh
bnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7
CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0
YjMxMTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMg
SW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAg
OiBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKwor
ICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7
CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0
U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitw
cml2YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWY5MGQxYjgzMjcy
ZTI1ZDNhODdkYTU2NjMzMWI4NzRlMzAxYjhhMS4uOTlkZDAwZjFjOGM0OTNkNGJmOTYyY2Q5Zjk5
NjIwOWQ0M2Q5ODAwNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1h
Z2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6
CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJl
c2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0
KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5j
ZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIw
MTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4K
IAogICAgICAgICBbRUZMXVtXSzJdIERpc3BsYXkgcGFnZSBmYXZpY29ucyBpbiBNaW5pQnJvd3Nl
cgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRy
ZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3Bw
CmluZGV4IDMwY2UyODg1MWZjOWE5YTQ2YjhiNjNlNmRiZDAwZGExYzNmZWE4MzguLjVhMzIxMDQ0
OTZmNzliMWYyYTQ1NDhiMzY1MzQ1NmI0MDYxZmE2YjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRQYWludGluZ1tdID0gIi0tZW5h
YmxlLWFjY2VsZXJhdGVkLXBhaW4KIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLXZpZGVv
IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblVzZUdyYXBoaWNzQ29udGV4dDNESW1wbGVtZW50
YXRpb25bXSA9ICItLXVzZS1ncmFwaGljcy1jb250ZXh0LTNkLWltcGxlbWVudGF0aW9uPSI7CiBz
dGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmdbXSA9ICItLWVuYWJs
ZS1wZXItdGlsZS1wYWludGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVEZWZl
cnJlZEltYWdlRGVjb2RpbmdbXSA9ICItLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZyI7
CiAKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc09wdFtdID0gIi0tc3RyZXNzLW9wdCI7
CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NEZW9wdFtdID0gIi0tc3RyZXNzLWRlb3B0
IjsKQEAgLTEzMyw2ICsxMzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQog
ICAgIGJvb2wgZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIGFjY2Vs
ZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmdF
bmFibGVkID0gZmFsc2U7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0g
ZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NPcHQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc0Rlb3B0
ID0gZmFsc2U7CiAgICAgYm9vbCBoYXJkd2FyZUFjY2VsZXJhdGVkR0wgPSBmYWxzZTsKQEAgLTE4
Myw2ICsxODUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gR3JhcGhpY0NvbnRleHQzRCBpbXBsZW1lbnRh
dGlvbiAlc1xuIiwgaW1wbGVtZW50YXRpb24uY19zdHIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
YXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nKQogICAgICAgICAgICAgcGVy
VGlsZVBhaW50aW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09
IG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZykKKyAgICAgICAgICAgIGRlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9
PSBvcHRpb25TdHJlc3NPcHQpCiAgICAgICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwogICAgICAg
ICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NEZW9wdCkKQEAgLTIyMiw2ICsyMjYs
NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBzaGVsbC5zZXRE
ZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCk7CiAgICAgICAg
IHNoZWxsLnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxl
UGFpbnRpbmdFbmFibGVkKTsKKyAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZChkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0
SmF2YVNjcmlwdEZsYWdzKGphdmFTY3JpcHRGbGFncyk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVz
c09wdChzdHJlc3NPcHQpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9w
dCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCAz
MjU4NWZhYTFiMmQ4YWQ4MWE4M2IxNWU4ZjcxMmJkOGNhNzI0ODliLi5hYzc3NTk2ODFhMDQ2ZDAz
ZDQ3MThmYzQ1OGMyN2U4MmUxNDYxNzk5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVs
bCgpCiAgICAgLCBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9k
ZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3N0cmVzc09wdChmYWxzZSkKICAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2Up
CiAgICAgLCBtX2R1bXBXaGVuRmluaXNoZWQodHJ1ZSkKQEAgLTIyOSw2ICsyMzAsNyBAQCB2b2lk
IFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJl
ZnMuYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFi
bGVkOwogICAgIG1fcHJlZnMuZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBtX2RlZmVycmVkMmRD
YW52YXNFbmFibGVkOwogICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBt
X2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOworICAgIG1fcHJlZnMuZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCA9IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBtX3By
ZWZzLmFwcGx5VG8oJndlYlZpZXcpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5oCmluZGV4IDQ0YjVhZTM4OGM2OGQ2NWRlODkwZmM4MDBmZWQ1MjI5ZWVjMmEz
MjQuLjM5MjY2MjQ0NjliNjhjY2JjODc0YjQ5MWVhNDgzYTBiNjM5MmNlNTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7
IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZFBhaW50aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZFBhaW50
aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJs
ZWQoYm9vbCk7CisgICAgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAj
aWYgZGVmaW5lZChPU19XSU4pCiAgICAgLy8gQWNjZXNzIHRvIHRoZSBmaW5pc2hlZCBldmVudC4g
VXNlZCBieSB0aGUgc3RhdGljIFdhdGNoRG9nIHRocmVhZC4KICAgICBIQU5ETEUgZmluaXNoZWRF
dmVudCgpIHsgcmV0dXJuIG1fZmluaXNoZWRFdmVudDsgfQpAQCAtMjM1LDYgKzIzNiw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgbV9h
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKICAgICBib29sIG1fcGVyVGlsZVBhaW50aW5nRW5h
YmxlZDsKKyAgICBib29sIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJQ
cmVmZXJlbmNlcyBtX3ByZWZzOwogICAgIGJvb2wgbV9zdHJlc3NPcHQ7CiAgICAgYm9vbCBtX3N0
cmVzc0Rlb3B0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVy
ZW5jZXMuY3BwCmluZGV4IDNiYzJjZGQ5ZjJhZTQxNzBjMzNhZDY0MTA2ZDRhN2YyZDA5MDIxZjUu
LjVjOGM5MmM5OTk0MjY0NGRkMTlhNDljOThlNjZjMWE0ZjA2ZDQ0NGQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTExNiw2ICsx
MTYsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjpyZXNldCgpCiAgICAgZGVmZXJyZWQyZENhbnZh
c0VuYWJsZWQgPSBmYWxzZTsKICAgICBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNl
OwogICAgIGZvcmNlQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7CisgICAgZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlID0gZmFsc2U7CiAgICAgbW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7CiAgICAgY3Nz
Q3VzdG9tRmlsdGVyRW5hYmxlZCA9IGZhbHNlOwpAQCAtMjI0LDYgKzIyNSw3IEBAIHZvaWQgV2Vi
UHJlZmVyZW5jZXM6OmFwcGx5VG8oV2ViVmlldyogd2ViVmlldykKICAgICBzZXR0aW5ncy0+c2V0
QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQpOwog
ICAgIHNldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChkZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGFj
Y2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKICAgICBzZXR0
aW5ncy0+c2V0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUobWVkaWFQbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUpOwogICAgIHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQobW9ja1Njcm9sbGJhcnNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZWZhdWx0
RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoZm9yY2VDb21wb3NpdGluZ01vZGUpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggYzM2
NTUzYjM1NDY5NjRjNzZmMjk5MTZhOWVhOWI5ZTJhMjNlMjRiMi4uZTAzMTVmMmQwN2MxZTViOTg1
NWZlN2IzYWEyZTE0Y2Y3ZTFlNDBiZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJQcmVmZXJlbmNlcy5oCkBAIC0xMDksNiArMTA5LDcgQEAgc3RydWN0IFdlYlByZWZl
cmVuY2VzIHsKICAgICBib29sIGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wg
ZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5h
YmxlZDsKKyAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBt
ZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZTsKICAgICBib29sIG1vY2tTY3JvbGxiYXJz
RW5hYmxlZDsKICAgICBib29sIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQppbmRleCBj
MzEwZWIxNWIxOTU0ZGRlZGRjMzMzYjk4MGY2NjVkNWZjZGI5MWNlLi5hNjlmNWE4MjJhYTNmZTMy
ODQ2ZjkxNzAxMTY0MTkzY2MyMjM4ZjUyIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKQEAgLTM5MCw2ICszOTAsOSBAQCBj
bGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnY29tcG9zaXRpbmcnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbJy0tZW5hYmxlLXNvZnR3YXJlLWNvbXBvc2l0aW5nJ10pLAorICAgICAgICAgICAg
VmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYXN0L2ltYWdlcycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVj
b2RpbmcnLCAnLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcnLCAnLS1mb3JjZS1jb21wb3NpdGlu
Zy1tb2RlJ10pLAogICAgICAgICBdCiAKICAgICAjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWM4MWE4N2U4MTc5ZmU1N2Fj
YTFkMGYwZDc2MzY0MzU4YzVlYjVhYS4uYjQwMWQzYzZhNTBlYjY2NjI1OTYxMGYxNWU4NjI1NjNl
YjJmOThkOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxo
Y2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJy
ZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkaW5nIGEgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBDaHJvbWl1bSB0byB0ZXN0
IGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLgorCisgICAgICAgIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMgd2lsbCBiZSB0ZXN0ZWQgd2l0aAor
ICAgICAgICAtLWZvcmNlLWNvbXBvc2l0aW5nIC0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIC0t
ZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0OiBBZGRlZC4KKwog
MjAxMi0xMC0xNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Rml4IHNvbWUgYXBwZWFyYW5jZSBnbGl0Y2hlcyBvZiBtdWx0aXBsZSBmaWVsZHMgaW5wdXQgZWxl
bWVudHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDZhNDExNzA4MjJlYzQwMTg2MzA5YzhjZTU5MDNjYTEwZGU2Njg1NDkuLmQxMDM3YTFl
YzM0MGRjNzFlY2E4OTU5ZTVkMTIxMmE1ZjY3Njk5ZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDA1NSwzICs0MDU1LDI2IEBAIHdl
YmtpdC5vcmcvYi85OTEzNCBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy90aW55LWxheWVy
LXJvdGF0ZWQuaHRtbCBbIFBhc3MKIAogd2Via2l0Lm9yZy9iLzk5MTM4IFsgU25vd0xlb3BhcmQg
XSBzdmcvY3VzdG9tL2ZvcmVpZ24tb2JqZWN0LXNrZXcuc3ZnIFsgUGFzcyBJbWFnZU9ubHlGYWls
dXJlIF0KIAorIyBUaGVzZSB0ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9m
IHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBu
ZWVkIHRvIGJlIHN1cHByZXNzZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9y
ZWQtZnJvbS1iZmNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRp
b24tY3NzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3Vw
cG9ydC1icm9rZW4taW1hZ2UtZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29s
b3ItanBlZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvZ2lmLWxhcmdlLWNoZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9naWYtbG9vcC1jb3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9wYWludC1zdWJyZWN0LWdyaWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
cGl4ZWwtY3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2Zhdmljb24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
aW1hZ2VtYXAtY2lyY2xlLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1h
Z2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20t
bWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGlu
ZS1jb2xvci1ub3QtaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2Vz
L2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9pbWFnZW1hcC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFn
ZXMvb2JqZWN0LWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVj
dC1ncmlkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9y
LXByb2ZpbGUuaHRtbCBbIE1pc3NpbmcgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9S
RUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNi
N2Q4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisj
IFRlc3Qgc3VpdGVzIGluIHRoaXMgZGlyZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBk
ZWNvZGluZycgY29kZSBwYXRoCisjIHRocm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168994</attachid>
            <date>2012-10-16 12:19:03 -0700</date>
            <delta_ts>2012-10-16 13:06:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121016121751.patch</filename>
            <type>text/plain</type>
            <size>78048</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI3NjJlZGQxZTRkMGZj
ZWQxMWYwNmUwOTQzMDVjZDI2ZGVhYTU5Ny4uODE4ZmE0NDg1MDhiMDU2MjkxNTk5YzA4ZDdhZTRh
MDA3NmZhMjlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6eURlY29kaW5nUGl4ZWxS
ZWYKKworICAgICAgICBUaGlzIG9iamVjdCBpcyBlbWJlZGRlZCBpbiBhIFNrQml0bWFwIHRvIGVu
YWJsZSBsYXp5IGRlY29kaW5nLiBXaGVuCisgICAgICAgIFNrQml0bWFwIG5lZWRzIHRvIGFjY2Vz
cyBwaXhlbHMgTGF6eURlY29kaW5nUGl4ZWxSZWYgaXMgbG9ja2VkLiBJdAorICAgICAgICBjb250
YWlucyBpbmZvcm1hdGlvbiB0byBsb2NhdGUgYW4gaW1hZ2UgYW5kIHNjYWxpbmcgaW5mbywgdGhl
c2UKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZSB0byBhY2Nlc3MgYWN0dWFsIHBpeGVscy4KKworICAgICAgICBMYXlvdXQgdGVzdHMuIFRoZXJl
IGFyZSBhYm91dCA4MCB0ZXN0cyBpbiB0aGlzIHZpcnR1YWwgdGVzdCBzdWl0ZQorICAgICAgICBy
dW5uaW5nIHRoaXMgZmVhdHVyZSBpbiB0aGlzIGRpcmVjdG9yeToKKworICAgICAgICBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzCisKKyAgICAgICAgVW5pdCB0
ZXN0cy4gQWRkZWQgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IHRvIHZlcmlmeSBkZWZlcnJlZAor
ICAgICAgICBpbWFnZSBkZWNvZGluZyBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdlbmVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hl
Ojp+SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6
SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNF
cXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpiaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjppc0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6ZGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
bWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3I6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNv
ZGluZ1BpeGVsUmVmLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGlu
Z1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjppZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKElt
YWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorCiAyMDEyLTEwLTE2
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTMxNDE4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBmYmU1MDdhOGU1YjY2OTZjOTAwYTZkM2ExNzZlZWE0N2FmZGJkODcyLi40ODk4NjNlYzVk
ZmM5ZTA3NDc5YWZkYzViMTIyM2QxMTJkYzFlMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVj
b2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0
MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAg
VGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4g
VGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQ
aWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2Nh
bGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJh
d0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5k
cmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAg
ICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRp
bmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE1
ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIEVuYWJsZSBGQVNUX01PQklMRV9TQ1JPTExJTkcgZm9yIEFuZHJvaWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCAxZWM3ZGQ4Y2RmYTE0NjQ2OTU1ZDYyNDQwYTZiYzc2Njc2N2NmNDg5Li5iMjQ0M2Zj
NTJiMzM3NWQ2MTcyYmQxYjQ5NjJkY2EwODA5NjNlZjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00
OTA0LDYgKzQ5MDQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbXBvc2l0b3JIVURGb250QXRsYXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0nLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAnLApAQCAtNDkyMyw2ICs0
OTI1LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNo
cm9taXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVy
YXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdD
b250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IDk4MTZlNjM0MWZlYjIwNzUwZTMxNjEyN2Y2MGRlNWY4MWY5YjY5OTYuLmU2YzkxNThjYzRjZjVk
MmZkNWIwMzc3YjNlZTBjNTEwNjBiMTA4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCkBAIC03OCw3ICs4Miw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBp
bnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5
cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9k
ZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291
cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVJbWFnZURlY29kZXJQdHI+KE5hdGl2ZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRh
LCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAm
JiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3
ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2OWExNWIuLjg2NzMxMGRlZWNjYjAwN2M1ODdmMjI1ODgwZDk3
OGNkYjM1NGQzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaApAQCAtNDcsMTAgKzQ3LDIwIEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiAKICNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZl
SW1hZ2VTb3VyY2VQdHI7Ci0jZWxzZQordHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUlt
YWdlRGVjb2RlclB0cjsKKyNlbGlmICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVj
b2RlcjsKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVk
ZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXI7Cit0eXBlZGVmIERl
ZmVycmVkSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJ
bWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbGlmIFVTRShDRykKKyNkZWZp
bmUgTmF0aXZlSW1hZ2VEZWNvZGVyIEltYWdlRGVjb2RlcgorI2Vsc2UKK3R5cGVkZWYgSW1hZ2VE
ZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKICNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBh
cmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRp
b24uCkBAIC0xNTYsNyArMTY2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAg
TmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0
ciBtX2RlY29kZXI7CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3NDE5
NmU3MWFkYjQxMzE1Y2RiM2NiNzU2MmVhMDBhZjAxNjg1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1h
Z2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisK
K0RlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQoreworICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0
b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVmZXJyZWRJbWFn
ZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAg
IEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICByZXR1cm4gYWN0dWFsRGVj
b2RlciA/IG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihhY3R1YWxEZWNvZGVyKSA6IDA7Cit9CisK
K1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rlci5sZWFrUHRy
KCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rl
ci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdl
RnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNp
bmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZy
YW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQorICAg
IC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBk
byBzeW5jaHJvbm91cyBpbWFnZQorICAgIC8vIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgPT0gY0Fu
aW1hdGlvbk5vbmUKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUo
KSkgeworCisgICAgICAgIG1fc2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAg
ICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lv
bigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlEZWNvZGVkU2tCaXRtYXAgPSBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRt
YXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIG1fbGF6eURlY29kZWRGcmFt
ZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0bWFwKTsKKyAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFt
ZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CisK
KyAgICAgICAgLy8gRG9uJ3QgbWFyayB0aGUgZnJhbWUgYXMgY29tcGxldGVseSBkZWNvZGVkIHVu
dGlsIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIC8vIGRlY29kZXIgaGFzIHJlYWxseSBkZWNvZGVk
IGl0LiBVbnRpbCB0aGVuLCBvdXIgZGF0YSBhbmQgbWV0YWRhdGEgbWF5CisgICAgICAgIC8vIGJl
IGluY29ycmVjdCwgc28gY2FsbGVycyBjYW4ndCByZWx5IG9uIHRoZW0uCisgICAgICAgIG1fbGF6
eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpIDogJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9pZCBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2Vl
cCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkLgor
ICAgICAgICAvLyBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gb3duZXJzaGlw
IG9mIG1fZGF0YSBpcworICAgICAgICAvLyB0cmFuc2ZlcnJlZCB0byBJbWFnZURlY29kaW5nU3Rv
cmUuCisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0g
YWxsRGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0
RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpCit7CisgICAgLy8gbV9hY3R1YWxEZWNvZGVyIGlzIDAgb25seSBpZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCBhbmQgdGhhdAorICAgIC8vIG1lYW5zIGltYWdlIGhlYWRlciBkZWNv
ZGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2l6ZSBpcyBhdmFpbGFibGUuCisgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgOiB0cnVlOwor
fQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCkgOiBtX3NpemU7
Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplOworfQorCitzaXplX3Qg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQoreworICAgIHJldHVybiBtX2FjdHVh
bERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA6IDE7Cit9CisKK2ludCBE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6
IGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1h
Z2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdl
ZCBieQorICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAg
ICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJh
bWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNvZGluZ1N0b3Jl
IHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4gdHJ1ZSBoZXJl
IGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1heSBub3QgZ28g
dGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAgIHJldHVybiBt
X2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGlu
ZGV4KSA6IHRydWU7Cit9CisKK3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8gSWYgZnJhbWUgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAg
IC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmIzM2ZlMzVlMGVjNmIzMjE1YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVmZXJyZWRJ
bWFnZURlY29kZXJfaAorI2RlZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgeworcHVi
bGljOgorICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBEZWZlcnJlZElt
YWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZvclRl
c3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRp
b25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7
CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgRGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29s
IG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVj
b2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9z
aXplOworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDk0MWExMzQyODAzNzUwOTRmNDI5MmE3ZTFhODc2ZDM1MDM4NDAxMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKyNpbmNs
dWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxS
ZWYuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1
ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgeworCitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQgPSAwOworCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURl
Y29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKK3sKKyAgICBkZWxldGUgc19pbnN0YW5j
ZU9uTWFpblRocmVhZDsKKyAgICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGlu
Z1N0b3JlOworfQorfSAvLyBuYW1lc3BhY2UKKworSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURl
Y29kaW5nU3RvcmUoKQorICAgIDogbV9uZXh0SWQoMCkKK3sKK30KKworSW1hZ2VEZWNvZGluZ1N0
b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30KKworSW1hZ2VEZWNvZGluZ1N0b3JlKiBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBzX2luc3RhbmNlT25NYWluVGhyZWFkOworfQor
Cit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJ
bWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKK30KKworYm9vbCBJbWFnZURlY29kaW5n
U3RvcmU6OmlzTGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kZWZlcnJlZFNrQml0bWFwSWRzLmNvbnRhaW5zKGJpdG1hcC5nZXRHZW5lcmF0
aW9uSUQoKSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURl
Y29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBB
U1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBT
a0lTaXplOjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVp
Z2h0KCkpOworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIGNyZWF0ZUZy
YW1lR2VuZXJhdG9yKGRlY29kZXIpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6
Ok1ha2VTaXplKGZ1bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBT
a1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGlu
Zy4KKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsK
KyAgICBiaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fbmV4dElk
LCBmdWxsU2l6ZSwgZnVsbFJlY3QpKS0+dW5yZWYoKTsKKworICAgIC8vIEluZm9ybSB0aGUgYml0
bWFwIHRoYXQgd2Ugd2lsbCBuZXZlciBjaGFuZ2UgdGhlIHBpeGVscy4gVGhpcyBpcyBhIHBlcmZv
cm1hbmNlIGhpbnQKKyAgICAvLyBzdWJzeXN0ZW1zIHRoYXQgbWF5IHRyeSB0byBjYWNoZSB0aGlz
IGJpdG1hcCAoZS5nLiBwaWN0dXJlcywgcGlwZXMsIGdwdSwgcGRmLCBldGMuKQorICAgIGJpdG1h
cC5zZXRJbW11dGFibGUoKTsKKworICAgIC8vIEZJWE1FOiBTZXR0aW5nIGJpdG1hcC5zZXRJc09w
YXF1ZSgpIGlzIGJpZyBwZXJmb3JtYW5jZSBnYWluIGlmIHBvc3NpYmxlLiBXZSBjYW4KKyAgICAv
LyBkbyBzbyBzYWZlbHkgaWYgdGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRlZCBhbmQgaXQgaXMgYSBK
UEVHIGltYWdlLCBvciBpbWFnZSB3YXMKKyAgICAvLyBkZWNvZGVkIGJlZm9yZS4KKworICAgIG1f
ZGVmZXJyZWRTa0JpdG1hcElkcy5hZGQoYml0bWFwLmdldEdlbmVyYXRpb25JRCgpKTsKKyAgICBy
ZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OnJlc2l6ZUxh
enlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChj
YWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYqIHBpeGVs
UmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYo
KSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2FsZWQobG9va3VwRnJhbWVHZW5lcmF0b3Io
cGl4ZWxSZWYtPmlkKCkpLT5zaXplKCkpICYmICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOworCisg
ICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICByb3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRlUm93
Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkpOwor
CisgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKKyAgICByZXNpemVkQml0bWFwLnNldENvbmZp
ZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2Fs
ZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBpeGVs
UmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+aWQoKSwgc2NhbGVkU2l6ZSwg
c2NhbGVkU3Vic2V0KSktPnVucmVmKCk7CisKKyAgICAvLyBTZWUgY29tbWVudHMgaW4gY3JlYXRl
TGF6eURlY29kZWRTa0JpdG1hcCgpLgorICAgIHJlc2l6ZWRCaXRtYXAuc2V0SW1tdXRhYmxlKCk7
CisgICAgbV9kZWZlcnJlZFNrQml0bWFwSWRzLmFkZChyZXNpemVkQml0bWFwLmdldEdlbmVyYXRp
b25JRCgpKTsKKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29k
aW5nU3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGJpdG1hcCktPnNl
dERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb2NrUGl4ZWxzKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3Qg
U2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX2xvY2tlZFNrQml0bWFwLmlzTnVsbCgpKTsKKworICAgIEltYWdl
RnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciA9IGxvb2t1cEZyYW1lR2VuZXJhdG9yKGlkKTsKKyAg
ICBTa0lTaXplIGZ1bGxTaXplID0gZ2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAvLyBUaGUgY2Fj
aGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQuCisgICAgSW1h
Z2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShpZCwgZnVsbFNpemUp
OworICAgIFNrQml0bWFwIGJpdG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkgeworICAgICAg
ICAvLyBGSVhNRTogUGl4ZWxzIGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVyIGluIHRoZSBn
ZW5lcmF0b3IuIEZpbmQKKyAgICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3duZXJzaGlwIHRv
IG91ciBjYWNoZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBnZW5lcmF0b3ItPmRlY29k
ZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAgICAgIC8vIFNhdmVzIHRoZSBmcmFt
ZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAgICAgICBpZiAoZnJhbWUtPnN0YXR1
cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1fZnJhbWVD
YWNoZS5hcHBlbmQoSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUoaWQsIGZ1bGxTaXplLCBmcmFtZS0+
Z2V0U2tCaXRtYXAoKSwgdHJ1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLT5zdGF0dXMo
KSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYg
dGhpcyBpcyBhIGRlY29kaW5nIGVycm9yLiBSZXBvcnQgdGhpcyB0byBCaXRtYXBJbWFnZS4KKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYml0bWFwID0gZnJhbWUt
PmdldFNrQml0bWFwKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lQ2FjaGUt
PmlzQ29tcGxldGUoKSk7CisgICAgICAgIGJpdG1hcCA9IGZyYW1lQ2FjaGUtPmJpdG1hcCgpOwor
ICAgIH0KKworICAgIGlmIChmdWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIC8vIElt
YWdlIHNjYWxpbmcgaXMgZG9uZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQgaW1hZ2UgaXMgZGVzdHJv
eWVkCisgICAgICAgIC8vIGFmdGVyIHVzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlc2l6ZSBqdXN0
IHRoZSByZXF1ZXN0ZWQgZnJhZ21lbnQuCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBza2lh
OjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6
UkVTSVpFX0xBTkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkp
OworICAgIH0gZWxzZQorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gYml0bWFwOworICAgIG1f
bG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFw
LmdldEFkZHIoc2NhbGVkU3Vic2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQg
SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworCisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsK
KyAgICBtX2xvY2tlZFNrQml0bWFwLnJlc2V0KCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0
b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBp
bnN0YW5jZU9uTWFpblRocmVhZCgpICYmIGlzTWFpblRocmVhZCgpOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29k
ZXI+IGRlY29kZXIpCit7CisgICAgKyttX25leHRJZDsKKyAgICBtX2ZyYW1lR2VuZXJhdG9ycy5h
ZGQobV9uZXh0SWQsIEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShkZWNvZGVyKSk7Cit9CisK
K0ltYWdlRnJhbWVHZW5lcmF0b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5l
cmF0b3IoaW50IGlkKSBjb25zdAoreworICAgIHJldHVybiBtX2ZyYW1lR2VuZXJhdG9ycy5nZXQo
aWQpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1
cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgQVNT
RVJUKGlzTGF6eURlY29kZWQoYml0bWFwKSk7CisgICAgcmV0dXJuIGxvb2t1cEZyYW1lR2VuZXJh
dG9yKHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkp
LT5pZCgpKTsKK30KKworSW1hZ2VGcmFtZUNhY2hlKiBJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1
cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUpKQorICAg
ICAgICAgICAgcmV0dXJuIG1fZnJhbWVDYWNoZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBp
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hl
W2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hl
LnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZjdkOTMwYzRkZTJhMzExMWIyYmY3OTI3NjJjMWJhODBhYWJlZTk4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VE
ZWNvZGluZ1N0b3JlX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUg
IlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9y
OworY2xhc3MgSW1hZ2VGcmFtZUNhY2hlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCisvLyBUaGlz
IGNsYXNzIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZCBvbiBtYWluIHRocmVhZC4gVGhlcmUgd2ls
bCBiZSBhbgorLy8gaW5zdGFuY2Ugb24gaW1wbCB0aHJlYWQgaW4gdGhlIGZ1dHVyZSBidXQgdGhh
dCBwYXJ0IG9mIGltcGxlbWVudGF0aW9uCisvLyBpcyBpbmNvbXBsZXRlLiBTZWUgYnVnOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKy8vIGZvciBkZXRhaWxz
LgorY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bWFnZURlY29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAg
c3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1
dGRvd24oKTsKKworICAgIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpIGNvbnN0
OworICAgIFNrQml0bWFwIGNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoUGFzc093blB0cjxJbWFn
ZURlY29kZXI+KTsKKyAgICBTa0JpdG1hcCByZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0
IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2Nh
bGVkU3Vic2V0KTsKKworICAgIHZvaWQgc2V0RGF0YShjb25zdCBTa0JpdG1hcCYsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gWW91IG1h
eSBvbmx5IGxvY2sgb25lIHNldCBvZiBwaXhlbHMgYXQgYSB0aW1lOyBvdmVybGFwcGluZyBsb2Nr
IGNhbGxzIGFyZSBub3QgYWxsb3dlZC4KKyAgICB2b2lkKiBsb2NrUGl4ZWxzKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAg
ICB2b2lkIHVubG9ja1BpeGVscygpOworCitwcml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9y
ZSgpOworICAgIGJvb2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3Jl
YXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBJbWFnZUZy
YW1lR2VuZXJhdG9yKiBsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0OworICAgIElt
YWdlRnJhbWVHZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrQml0bWFwJikg
Y29uc3Q7CisgICAgSW1hZ2VGcmFtZUNhY2hlKiBsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBkZWxldGVGcmFtZUNhY2hl
KGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBIYXNoTWFwPGludCwg
T3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVj
dG9yPE93blB0cjxJbWFnZUZyYW1lQ2FjaGU+ID4gbV9mcmFtZUNhY2hlOworICAgIEhhc2hTZXQ8
dW5zaWduZWQ+IG1fZGVmZXJyZWRTa0JpdG1hcElkczsKKworICAgIGludCBtX25leHRJZDsKKyAg
ICBTa0JpdG1hcCBtX2xvY2tlZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWNiNmFh
NjBkM2MyYjI3ZjQxZDA4MDhmZGVjM2NmZjg3ZDFkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3Bw
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZy
YW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2FjaGUoKQoreworfQorCitJbWFnZUZyYW1lQ2FjaGU6Oklt
YWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAsIGNvbnN0IGJvb2wgaXNDb21wbGV0ZSkKKyAgICA6IG1faWQoaWQpCisg
ICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJpdG1hcCkKKyAg
ICAsIG1faXNDb21wbGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIEltYWdlRnJhbWVDYWNo
ZTo6aXNFcXVhbChpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlkID09IG1faWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWQ5MjhiOTZiZWZmNTAyNjZiYzk4YmY0NDBiMzMwZmMxMDc5ZTRjMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVD
YWNoZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNo
ZV9oCisjZGVmaW5lIEltYWdlRnJhbWVDYWNoZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgor
I2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbWFnZUZyYW1lQ2Fj
aGUgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBi
eSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRo
aXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3Mg
SW1hZ2VGcmFtZUNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZy
YW1lQ2FjaGU+IGNyZWF0ZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgSW1hZ2VGcmFtZUNhY2hlKGlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlz
Q29tcGxldGUpKTsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBT
a0lTaXplJiwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZy
YW1lQ2FjaGUoKTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVy
biBtX2JpdG1hcDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsg
fQorCisgICAgYm9vbCBpc0VxdWFsKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3Q7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRl
OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7
CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iYmM0MzBhYjI3NTc4MzYwYjU5N2JlYWE3OGFkZjk1Nzg0ZGYy
NmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3Iu
aCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJh
bWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2Rl
Y29kZXIoZGVjb2RlcikKK3sKKyAgICBtX3NpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+
c2l6ZSgpLndpZHRoKCksIG1fZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKK30KKworSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworfQorCitJbWFnZURlY29k
ZXIqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29k
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9k
YXRhID0gZGF0YTsKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERh
dGEobV9kYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU3YzljYzUw
ODdlZjJlMjllYmE3MTUxYjVhNGExYWM4NDg1OGUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9y
X2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VEZWNvZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiBjcmVhdGUoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZGVjb2RlcikpOworICAg
IH0KKworICAgIGV4cGxpY2l0IEltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURl
Y29kZXI+KTsKKyAgICB+SW1hZ2VGcmFtZUdlbmVyYXRvcigpOworCisgICAgLy8gQ3JlYXRlcyB0
aGUgaW1hZ2UgZGVjb2RlciBpZiBuZWVkZWQuCisgICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCk7
CisgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOworCisgICAgY29uc3QgU2tJU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorCitwcml2YXRlOgorICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsK
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgU2tJU2l6ZSBtX3NpemU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29k
aW5nUGl4ZWxSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwOWUzZjZmYTE1YzE5MmViMWU2NGU4MjQ3MTQ5
ZDIzMzcwZTdlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhl
bFJlZi5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCisgICAgOiBTa1BpeGVsUmVmKDApCisg
ICAgLCBtX2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCisgICAgLCBtX3Nj
YWxlZFN1YnNldChzY2FsZWRTdWJzZXQpCit7Cit9CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjp+
TGF6eURlY29kaW5nUGl4ZWxSZWYoKQoreworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVm
Ojppc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZnVsbFNpemUgIT0gbV9zY2FsZWRTaXplOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVm
Ojppc0NsaXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlZFNpemUud2lkdGgoKSAh
PSBtX3NjYWxlZFN1YnNldC53aWR0aCgpIHx8IG1fc2NhbGVkU2l6ZS5oZWlnaHQoKSAhPSBtX3Nj
YWxlZFN1YnNldC5oZWlnaHQoKTsKK30KKwordm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9u
TG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkt
PmxvY2tQaXhlbHMoaWQoKSwgbV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Cit9CisKK3Zv
aWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKS0+dW5sb2NrUGl4ZWxzKCk7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6
Om9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGY5MWFjMjViNGVhMjIzYTJkNWM1YWRlZWQ3YjRiMDM2MmFiNzMxMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TGF6eURlY29kaW5nUGl4ZWxSZWZfaAorI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisK
KyNpbmNsdWRlICJTa0ZsYXR0ZW5hYmxlQnVmZmVycy5oIgorI2luY2x1ZGUgIlNrUGl4ZWxSZWYu
aCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxS
ZWYgeworcHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKGludCBpZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0
dWFsIH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5B
QkxFX09CSkVDVCgpCisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAg
Ym9vbCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBp
c0NsaXBwZWQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIC8vIFNrUGl4ZWxSZWYgaW1wbGVt
ZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiop
OworICAgIHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOworICAgIHZpcnR1YWwgYm9vbCBv
bkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludCBtX2lk
OworICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBMYXp5RGVjb2RpbmdQ
aXhlbFJlZl9oXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IDE4NjJhMmFmYzZlMzUwNDkzNmRjYmM5
MDNjZTZmMjRkNGFhZjUwYWQuLjJhOWU1NmE0Mjg1NzdjMWZhMWM2YzM0ZDhlNDg0ZThjODBhNWMy
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTQwLDYgKzQwLDExIEBACiAjaW5jbHVkZSAiU2tQ
aXhlbFJlZi5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpO
YXRpdmVJbWFnZVNraWEoKQpAQCAtNzMsNiArNzgsMTEgQEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6
Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBT
a0kKIAogU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVNp
emUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNv
bnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
T25NYWluVGhyZWFkKCktPmlzTGF6eURlY29kZWQobV9pbWFnZSkpCisgICAgICAgIHJldHVybiBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnJlc2l6ZUxhenlEZWNv
ZGVkU2tCaXRtYXAobV9pbWFnZSwgc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7
CisjZW5kaWYKKwogICAgIGlmICghaGFzUmVzaXplZEJpdG1hcChzY2FsZWRJbWFnZVNpemUsIHNj
YWxlZEltYWdlU3Vic2V0KSkgewogICAgICAgICBib29sIHNob3VsZENhY2hlID0gaXNEYXRhQ29t
cGxldGUoKQogICAgICAgICAgICAgJiYgc2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHNjYWxlZEltYWdl
U2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCBkMGNjNTNiMTQ3NTdkMTc0
NDIyZjc2ODc5ODQwZWNiMzVhZjk1MjQ2Li4yMGFiOGMxYWJjMzcwMmEwOGIzOTBjMDk3ZDM1Njcy
OTYxYmY1ZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMTQ1LDYgKzE0NSwxOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4Owog
I2VuZGlmCiAgICAgICAgIH0KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2b2lk
IHNldFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fYml0bWFwID0gTmF0aXZlSW1hZ2VTa2lhKGJpdG1hcCwgMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBTa0JpdG1hcCYgZ2V0U2tCaXRtYXAoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuYml0bWFwKCk7CisgICAgICAgIH0KKyNlbmRpZgor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGludCBo
ZWlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDI0Y2FlMjk4
ZmY1MDQ5MWZlYzEzZmFiNDNiZDkwODY5NjY3ODZjMGYuLjY0MDYzYTAyMWM0NjcxNGQ5ZDU5ODU2
YWNlYzQyMmVmODdiZGU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEs
NiArNjEsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvRGF0ZVRpbWVGb3JtYXRUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvRGVjaW1hbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0
cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFn
SW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9GYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2UuaCcs
CkBAIC03OCw4ICs3OSw5IEBACiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAgICd0
ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIu
aCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvTGlzdGVuZXJMZWFrVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggYWJkODRlZDBlNTdhZmU5ODMxZmZmZDA2MzkxZTQy
OTFlNWRjMmJlNC4uMDhjZDE5NzQ1Y2M3MGFhZTM3OWM4OTUxZTY0YTE0ODI3ZjZhNDU0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04Niw2ICs4
Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUoY29uc3QgV2ViU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGls
ZVNpemUoV2ViU2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNN
b3VzZShib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2go
Ym9vbCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggZTM1N2Yy
OGU0MjgzYTcwMDE1NmQ2Y2ZhYmQ1MGVkYjNlZDJmNzg5Ny4uMjQzZDA4ZTYyOTQ4MDU2OTc5MzYy
ZGZjZjg1OGM2ZmY4NWU4YTc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViS2l0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0
LmgiCiAKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlvdXRU
ZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9i
c2VydmVyLmgiCkBAIC0xNjUsNiArMTY2LDcgQEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQogI2Vu
ZGlmCiAgICAgc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQgPSAwOworICAgIFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsKICAg
ICBXZWJQcmVyZW5kZXJpbmdTdXBwb3J0OjpzaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggOTg4YzVlNjZiMWUxM2Mx
NmU5ZjY3ZDAyYTQ3Y2EwNzhkZjM4NjA5OC4uZGM3NzM2ZDlhMjFiMDkwNzRjZmIxZDkxNTljYjhm
N2IxOWM5MDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBsLmgi
CiAKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rp
bmdTdG9yZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYlN0
cmluZy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KQEAgLTU1LDYgKzU2LDcgQEAgV2Vi
U2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgICwg
bV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmYWxzZSkKICAgICAs
IG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fYXV0b1pvb21Gb2N1
c2VkTm9kZVRvTGVnaWJsZVNjYWxlKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSgyNTYsIDI1
NikpCiAgICAgLCBtX21heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSg1MTIsIDUxMikpCiB7CkBA
IC00ODAsNiArNDgyLDE1IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1fZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiBlbmFibGVkKQorICAgICAgICBJbWFnZURlY29k
aW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobV9kZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkICYmICFlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5nU3Rv
cmU6OnNodXRkb3duKCk7CisgICAgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5h
YmxlZDsKK30KKwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5n
cy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJs
ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRl
eCAxMTY5YzMxY2YzZWIyYWU4MGZkYTFmODg1Y2QwODY5MTY4ZjQ2YTQxLi45MDUxYmFiNjE3Zjg2
YmZlMDQ5YjBiNzdlNmUyYWRmMDJkNzJkNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSk7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBw
b3J0c1RvdWNoKGJvb2wpOwpAQCAtMTc4LDYgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yOwogICAgIGJvb2wgbV9n
ZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZDsKICAgICBib29sIG1fYXV0b1pvb21Gb2N1c2VkTm9k
ZVRvTGVnaWJsZVNjYWxlOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
OwogICAgIFdlYlNpemUgbV9kZWZhdWx0VGlsZVNpemU7CiAgICAgV2ViU2l6ZSBtX21heFVudGls
ZWRMYXllclNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MjU0OTgwNWM3
NmE4MWJlMzFhM2RmNDhjNDc0MWUzMmU0ZWRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTAs
MCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZl
cnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisj
aW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNsdWRl
ICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXJU
ZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVj
b2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOworICAg
ICAgICBtX2xhenlEZWNvZGVyID0gRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUZvclRlc3Rp
bmcoYWRvcHRQdHIobV9hY3R1YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzLnNldERldmlj
ZShuZXcgU2tEZXZpY2UoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAsIDEwMCkpLT51
bnJlZigpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAg
ICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgLy8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRoZSBwb2ludGVyIHRvIHF1ZXJ5IHN0
YXRlcy4KKyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVhbERlY29kZXI7CisgICAgT3duUHRy
PERlZmVycmVkSW1hZ2VEZWNvZGVyPiBtX2xhenlEZWNvZGVyOworICAgIFNrUGljdHVyZSBtX3Bp
Y3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0YoRGVmZXJyZWRJbWFn
ZURlY29kZXJUZXN0LCBkcmF3SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1h
Z2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
MCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29kZXIt
PnNpemUoKS53aWR0aCgpLCBpbWFnZS0+Yml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpLCBpbWFnZS0+Yml0bWFwKCkuaGVpZ2h0
KCkpOworICAgIEVYUEVDVF9GQUxTRShpbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAgIEVY
UEVDVF9UUlVFKGltYWdlLT5iaXRtYXAoKS5pc0ltbXV0YWJsZSgpKTsKKworICAgIFNrQ2FudmFz
KiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0
ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKGltYWdlLT5iaXRtYXAoKSwgMCwgMCk7CisgICAgbV9waWN0
dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZy
YW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9w
aWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCgpKTsKK30KKworVEVTVF9GKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCwgZHJh
d1NjYWxlZEludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1h
Z2UoYWRvcHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05h
dGl2ZUltYWdlKCkpKTsKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBpbWFnZS0+cmVzaXpl
ZEJpdG1hcChTa0lTaXplOjpNYWtlKDUwLCA1MSksIFNrSVJlY3Q6Ok1ha2VXSCg1MCwgNTEpKTsK
KyAgICBFWFBFQ1RfRkFMU0Uoc2NhbGVkQml0bWFwLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShzY2FsZWRCaXRtYXAuaXNJbW11dGFibGUoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzY2FsZWRC
aXRtYXAud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUxLCBzY2FsZWRCaXRtYXAuaGVpZ2h0KCkp
OworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNv
cmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoc2NhbGVkQml0bWFw
LCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAs
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2Nh
bnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERl
Y29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41Y2YyMzc0NGU1MWZkZTQzYzE2NGIzMTEwMWQwNWIzMzA3MzJjMmZkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVy
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja0ltYWdlRGVjb2Rlcl9oCisK
KyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBNb2NrSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAg
TW9ja0ltYWdlRGVjb2RlcigpCisgICAgICAgIDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpB
bHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxp
ZWQpCisgICAgICAgICwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgwKQorICAgIHsgfQorCisg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICJtb2NrIjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QpCisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQ7CisKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5o
ZWlnaHQoKSk7CisgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIH0K
KworICAgIGludCBmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IE1vY2tJbWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDFmOTBkMWI4MzI3MmUyNWQzYTg3ZGE1NjYzMzFiODc0ZTMwMWI4YTEu
Ljk5ZGQwMGYxYzhjNDkzZDRiZjk2MmNkOWY5OTYyMDlkNDNkOTgwMDQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAx
Mi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCAtLWVuYWJsZS1kZWZlcnJlZC1pbWFn
ZS1kZWNvZGluZyB0byBEUlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
dW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hl
bGwpOgorICAgICAgICAoVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoKKyAgICAgICAgKFRlc3RTaGVsbDo6
c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAgIChUZXN0U2hlbGwpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdlYlByZWZlcmVuY2VzOjpyZXNldCk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6
YXBwbHlUbyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5j
ZXMuaDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0
LnZpcnR1YWxfdGVzdF9zdWl0ZXMpOgorCiAyMDEyLTEwLTE1ICBDaHJpc3RvcGhlIER1bWV6ICA8
Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBEaXNwbGF5
IHBhZ2UgZmF2aWNvbnMgaW4gTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4YjYz
ZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2MWZh
NmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVy
VHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRy
ZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFj
Y2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMg
Y29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9
ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25V
c2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29u
dGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxl
UGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGlj
IGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFi
bGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25T
dHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3Ry
ZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFi
bGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNl
OwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0g
ZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVB
Y2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3du
IEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNf
c3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRp
bGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOwor
ICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVj
b2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsK
ICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAg
ICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9u
U3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
IGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJy
ZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBl
clRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNo
ZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0Rmxh
Z3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hl
bGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3MTJi
ZDhjYTcyNDg5Yi4uYWM3NzU5NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQsNiAr
MTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2Fu
dmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2Up
CiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2Up
CiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRy
dWUpCkBAIC0yMjksNiArMjMwLDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3Mo
V2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVk
ID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRD
YW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFj
Y2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsK
KyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUzODhj
NjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0OTFl
YTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVkMmRD
YW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0g
ZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAg
dm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFj
Y2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0
aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZl
bnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAg
ICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29s
IG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCAzYmMyY2RkOWYyYWU0
MTcwYzMzYWQ2NDEwNmQ0YTdmMmQwOTAyMWY1Li41YzhjOTJjOTk5NDI2NDRkZDE5YTQ5Yzk4ZTY2
YzFhNGYwNmQ0NDRkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6
cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9
IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBt
ZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxi
YXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsK
QEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFj
Y2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENh
bnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRB
Y2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7Cisg
ICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0
aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAg
ICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9y
KGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUy
YTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5
LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRl
ZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAg
IGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21G
aWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggYzMxMGViMTViMTk1NGRkZWRkYzMzM2I5ODBmNjY1
ZDVmY2RiOTFjZS4uYTY5ZjVhODIyYWEzZmUzMjg0NmY5MTcwMTE2NDE5M2NjMjIzOGY1MiAxMDA3
NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtLnB5CkBAIC0zOTAsNiArMzkwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAg
ICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0
d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBvc2l0
aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2FyZS1j
b21wb3NpdGluZyddKSwKKyAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
Jy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxlLXBh
aW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAgICAg
IwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDVjODFhODdlODE3OWZlNTdhY2ExZDBmMGQ3NjM2NDM1OGM1ZWI1YWEuLmI0MDFk
M2M2YTUwZWI2NjYyNTk2MTBmMTVlODYyNTYzZWIyZjk4ZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBA
QAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVz
dCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNv
ZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAt
LWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGlu
Zy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAtMTUgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBzb21lIGFwcGVhcmFuY2UgZ2xpdGNoZXMg
b2YgbXVsdGlwbGUgZmllbGRzIGlucHV0IGVsZW1lbnRzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA2YTQxMTcwODIyZWM0MDE4NjMwOWM4
Y2U1OTAzY2ExMGRlNjY4NTQ5Li5kMTAzN2ExZWMzNDBkYzcxZWNhODk1OWU1ZDEyMTJhNWY2NzY5
OWRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTQwNTUsMyArNDA1NSwyNiBAQCB3ZWJraXQub3JnL2IvOTkxMzQgcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvdGlueS1sYXllci1yb3RhdGVkLmh0bWwgWyBQYXNzCiAKIHdlYmtp
dC5vcmcvYi85OTEzOCBbIFNub3dMZW9wYXJkIF0gc3ZnL2N1c3RvbS9mb3JlaWduLW9iamVjdC1z
a2V3LnN2ZyBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKKyMgVGhlc2UgdGVzdHMgYXJlIGZh
aWxpbmcgYWxyZWFkeSBhbmQgYmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVy
cmVkCisjIGltYWdlIGRlY29kaW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgor
d2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0
MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1p
bWFnZS1sYW5kc2NhcGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQt
d2Via2l0LXRyYW5zZm9ybS1zY2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9lbWJlZC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdl
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xv
ci1leHBsaWNpdGx5LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1h
cC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUt
Y29sb3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1y
aW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9wYWxldHRlZC1wbmctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBNaXNzaW5nIF0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjg4MmVi
MDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9S
RUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRlcyBpbiB0aGlzIGRpcmVjdG9y
eSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNvZGUgcGF0aAorIyB0aHJvdWdo
IENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169006</attachid>
            <date>2012-10-16 13:06:15 -0700</date>
            <delta_ts>2012-10-18 00:55:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121016130503.patch</filename>
            <type>text/plain</type>
            <size>78424</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTI3NjJlZGQxZTRkMGZj
ZWQxMWYwNmUwOTQzMDVjZDI2ZGVhYTU5Ny4uZmM3OTU0MTNkOTZlODE0NDM0Yzg0MDllN2I5MWU0
MzUxN2NjOWFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VGcmFtZUNhY2hlCisK
KyAgICAgICAgQSBjb250YWluZXIgZm9yIGEgc2NhbGVkIGltYWdlIGZyYWdtZW50LiBJbiBhZGRp
dGlvbiB0byBiaXRtYXAgcGl4ZWxzCisgICAgICAgIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBJRCBvZiB0aGUgaW1hZ2UsIHNjYWxlIGFuZCBjbGlwcGluZy4KKworICAgICAgICBJ
bWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGhpcyBvYmplY3QgaXMgcmVzcG9uc2libGUg
Zm9yIGdlbmVyYXRpbmcgZGVjb2RlZCBwaXhlbHMuIEl0IGlzIGFsc28KKyAgICAgICAgYSBjb250
YWluZXIgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBpbWFnZSBkZWNv
ZGVyLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVsUmVmCisKKyAgICAgICAgVGhpcyBvYmpl
Y3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBlbmFibGUgbGF6eSBkZWNvZGluZy4gV2hl
bgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nlc3MgcGl4ZWxzIExhenlEZWNvZGluZ1Bp
eGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29udGFpbnMgaW5mb3JtYXRpb24gdG8gbG9j
YXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRoZXNlCisgICAgICAgIGluZm9ybWF0aW9u
IGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3RvcmUgdG8gYWNjZXNzIGFjdHVhbCBwaXhl
bHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVyZSBhcmUgYWJvdXQgODAgdGVzdHMgaW4g
dGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAgcnVubmluZyB0aGlzIGZlYXR1cmUgaW4g
dGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQgdGVzdHMuIEFkZGVkIERlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdCB0byB2ZXJpZnkgZGVmZXJyZWQKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
YmVoYXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdl
RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6
ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2Rp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5p
dGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmU6OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNM
YXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0
ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
Ojp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpj
YWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9y
ZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29k
aW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGlu
Z1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2
ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmdldFNrQml0bWFwKToKKwogMjAxMi0xMC0xNiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEzMTQxOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZmJlNTA3YThlNWI2Njk2Yzkw
MGE2ZDNhMTc2ZWVhNDdhZmRiZDg3Mi4uNDg5ODYzZWM1ZGZjOWUwNzQ3OWFmZGM1YjEyMjNkMTEy
ZGMxZTMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAx
Mi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBuZXcgdW5pdCB0ZXN0cyBmb3Ig
ZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisgICAgICAgIFRoZXNlIHRlc3RzIGFyZSBkZWZpbmVk
IGluIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAuIFRoZXkgdmVyaWZ5CisgICAgICAgIGlt
YWdlIGRlY29kaW5nIGhhcHBlbnMgb25seSB3aGVuIFNrUGljdHVyZSBpcyByYXN0ZXJpemVkIGZv
ciBib3RoCisgICAgICAgIHNjYWxlZCBhbmQgbm9uLXNjYWxlZCBjYXNlcy4KKworICAgICAgICBU
ZXN0czogRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmRyYXdJbnRvU2tQaWN0dXJlCisgICAgICAg
ICAgICAgICBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUK
KworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5o
OgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpzaHV0ZG93bik6
CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdl
YlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VE
ZWNvZGVyVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6
OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6VGVh
ckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9Nb2Nr
SW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2Nr
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6Ok1vY2tJ
bWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZmlsZW5h
bWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVC
dWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyUmVxdWVzdENvdW50KToKKwogMjAxMi0xMC0xNSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRl
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBFbmFibGUgRkFTVF9NT0JJTEVf
U0NST0xMSU5HIGZvciBBbmRyb2lkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWVjN2RkOGNkZmExNDY0
Njk1NWQ2MjQ0MGE2YmM3NjY3NjdjZjQ4OS4uYjI0NDNmYzUyYjMzNzVkNjE3MmJkMWI0OTYyZGNh
MDgwOTYzZWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkwNCw2ICs0OTA0LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFz
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vz
c0ZvbnRMb2FkaW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMz
RENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRDYWNoZUFuZHJvaWQuY3BwJywKQEAgLTQ5MjMsNiArNDkyNSwxNCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lh
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21p
dW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVm
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29k
aW5nUGl4ZWxSZWYuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJh
Y2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA5ODE2ZTYzNDFmZWIyMDc1MGUzMTYx
MjdmNjBkZTVmODFmOWI2OTk2Li5lNmM5MTU4Y2M0Y2Y1ZDJmZDViMDM3N2IzZWUwYzUxMDYwYjEw
ODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisj
aW5jbHVkZSAiRGVmZXJyZWRJbWFnZURlY29kZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzgs
NyArODIsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBh
dmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3
aWxsIGJlCiAgICAgLy8gbWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2Rl
Y29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
KTsKKyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VEZWNvZGVyUHRy
PihOYXRpdmVJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkcpCiAgICAgICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVk
SW1hZ2UpCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVs
c1BlckRlY29kZWRJbWFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAppbmRleCA2ODc5ZWRhMDU1YWI4N2QyNTU2MDIxZjNlN2Y5MDJkZTU2Njlh
MTViLi44NjczMTBkZWVjY2IwMDdjNTg3ZjIyNTg4MGQ5NzhjZGIzNTRkM2EzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ3LDEwICs0
NywyMCBAQCBjbGFzcyBJbnRTaXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENH
KQotdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2Vsc2UK
K3R5cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZWxpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBJbWFnZURlY29kZXI7Ci10eXBlZGVmIEltYWdlRGVj
b2RlciogTmF0aXZlSW1hZ2VTb3VyY2VQdHI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZl
SW1hZ2VEZWNvZGVyUHRyOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNz
IERlZmVycmVkSW1hZ2VEZWNvZGVyOwordHlwZWRlZiBEZWZlcnJlZEltYWdlRGVjb2RlciBOYXRp
dmVJbWFnZURlY29kZXI7Cit0eXBlZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFn
ZURlY29kZXJQdHI7CisjZWxpZiBVU0UoQ0cpCisjZGVmaW5lIE5hdGl2ZUltYWdlRGVjb2RlciBJ
bWFnZURlY29kZXIKKyNlbHNlCit0eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29k
ZXI7CiAjZW5kaWYKIAogLy8gUmlnaHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJlY29nbml6ZWQg
aW1hZ2UgZm9ybWF0IHRoYXQgc3VwcG9ydHMgYW5pbWF0aW9uLgpAQCAtMTU2LDcgKzE2Niw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1f
ZGVjb2RlcjsKKyAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCiAjaWYgIVVT
RShDRykKICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzQxOTZlNzFhZGI0MTMxNWNkYjNjYjc1NjJl
YTAwYWYwMTY4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwxNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFn
ZURlY29kZXIuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGVmZXJyZWRJbWFn
ZURlY29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rl
cikKKyAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9hY3R1YWxEZWNvZGVy
KGFkb3B0UHRyKGFjdHVhbERlY29kZXIpKQoreworfQorCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6
fkRlZmVycmVkSW1hZ2VEZWNvZGVyKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBjb3Jy
ZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQorICAgIC8vIGlz
IGRlZmVyLWRlY29kZWQuCit9CisKK0RlZmVycmVkSW1hZ2VEZWNvZGVyKiBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVhbERl
Y29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvck9wdGlvbik7CisgICAgcmV0dXJuIGFjdHVhbERlY29kZXIgPyBuZXcgRGVmZXJyZWRJbWFn
ZURlY29kZXIoYWN0dWFsRGVjb2RlcikgOiAwOworfQorCitQYXNzT3duUHRyPERlZmVycmVkSW1h
Z2VEZWNvZGVyPiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
ZmVycmVkSW1hZ2VEZWNvZGVyKGRlY29kZXIubGVha1B0cigpKSk7Cit9CisKK1N0cmluZyBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkg
OiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICAvLyBPbmx5IGRl
ZmVyIGltYWdlIGRlY29kaW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJhbWUgaW1hZ2UuIFRoZSBy
ZWFzb24gaXMKKyAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVk
IEdJRi4gQW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1
c2VzIHNvbWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG8gc3luY2hyb25vdXMgaW1hZ2UKKyAg
ICAvLyBkZWNvZGluZy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFp
blRocmVhZCgpCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVh
bERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpID09IGNBbmltYXRpb25Ob25lCisgICAgICAgICYm
IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkpIHsKKworICAgICAgICBtX3NpemUg
PSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9
IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKworICAgICAgICBTa0JpdG1h
cCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFp
blRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxl
YXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29k
ZWRTa0JpdG1hcCk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRh
LnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworCisgICAgICAgIC8vIERvbid0IG1hcmsg
dGhlIGZyYW1lIGFzIGNvbXBsZXRlbHkgZGVjb2RlZCB1bnRpbCB0aGUgdW5kZXJseWluZworICAg
ICAgICAvLyBkZWNvZGVyIGhhcyByZWFsbHkgZGVjb2RlZCBpdC4gVW50aWwgdGhlbiwgb3VyIGRh
dGEgYW5kIG1ldGFkYXRhIG1heQorICAgICAgICAvLyBiZSBpbmNvcnJlY3QsIHNvIGNhbGxlcnMg
Y2FuJ3QgcmVseSBvbiB0aGVtLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgcmV0dXJuIG1fYWN0dWFs
RGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KSA6ICZt
X2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gZGF0YSB1
bnRpbCBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZC4KKyAgICAgICAgLy8gV2hlbiBpbWFnZSBk
ZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIG93bmVyc2hpcCBvZiBtX2RhdGEgaXMKKyAgICAgICAg
Ly8gdHJhbnNmZXJyZWQgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICBtX2RhdGEgPSBk
YXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICAg
ICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1l
LmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfQorfQorCitib29s
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIC8vIG1fYWN0
dWFsRGVjb2RlciBpcyAwIG9ubHkgaWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgYW5kIHRo
YXQKKyAgICAvLyBtZWFucyBpbWFnZSBoZWFkZXIgZGVjb2RlZCBzdWNjZXNzZnVsbHkgYW5kIHNp
emUgaXMgYXZhaWxhYmxlLgorICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERl
Y29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpIDogdHJ1ZTsKK30KKworSW50U2l6ZSBEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/
IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpIDogbV9zaXplOworfQorCitJbnRTaXplIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdElu
ZGV4KGluZGV4KSA6IG1fc2l6ZTsKK30KKworc2l6ZV90IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvdW50KCkKK3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNv
ZGVyLT5mcmFtZUNvdW50KCkgOiAxOworfQorCitpbnQgRGVmZXJyZWRJbWFnZURlY29kZXI6OnJl
cGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1f
YWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKK30KKwor
dm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBj
bGVhckJlZm9yZUZyYW1lKQoreworICAgIC8vIElmIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVk
IHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hlIGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0aGUgY29tcG9z
aXRvciBhbmQgdGhpcyBjYWxsIGlzIGlnbm9yZWQuCisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikK
KyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZv
cmVGcmFtZSk7Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU3luY2hyb25pemUg
dGhpcyBzdGF0ZSB3aXRoIEltYWdlRGVjb2RpbmdTdG9yZSB3aGVuIGltYWdlIGlzCisgICAgLy8g
YWN0dWFsbHkgZGVjb2RlZC4gUmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGluIHRlcm1zIG9m
IHJlbmRlcmluZyBidXQKKyAgICAvLyBtYXkgbm90IGdvIHRocm91Z2ggc29tZSBvcHRpbWl6ZWQg
cmVuZGVyaW5nIGNvZGUgcGF0aC4KKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCkgOiB0cnVlOworfQorCit1bnNp
Z25lZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAoreworICAgIC8vIElmIGZyYW1lIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gaXQg
aXMgbm90IG1hbmFnZWQgYnkgTWVtb3J5Q2FjaGUKKyAgICAvLyBzbyByZXR1cm4gMCBoZXJlLgor
ICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQnl0ZXNB
dEluZGV4KGluZGV4KSA6IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMzNmZTM1ZTBlYzZiMzIxNWE5NDNk
Mjc2MTZmMGMzZDljMzhiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUg
RGVmZXJyZWRJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIERlZmVycmVkSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICB+RGVmZXJyZWRJbWFn
ZURlY29kZXIoKTsKKyAgICBzdGF0aWMgRGVmZXJyZWRJbWFnZURlY29kZXIqIGNyZWF0ZShjb25z
dCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PERlZmVycmVkSW1hZ2VEZWNvZGVyPiBjcmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKworICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworCisgICAgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICBzaXpl
X3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERlZmVy
cmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKKyAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBTdHJpbmcgbV9m
aWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIEltYWdlRnJhbWUg
bV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5NDFhMTM0Mjgw
Mzc1MDk0ZjQyOTJhN2UxYTg3NmQzNTAzODQwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0
LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVy
YXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworSW1h
Z2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGljIHZv
aWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29k
aW5nU3RvcmUpCit7CisgICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAgc19p
bnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsKK30KK30gLy8gbmFtZXNw
YWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkKKyAgICA6IG1f
bmV4dElkKDApCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9y
ZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBy
ZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3Rv
cmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVh
dGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2V0SW5zdGFuY2VPbk1haW5U
aHJlYWQoMCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKGNv
bnN0IFNrQml0bWFwJiBiaXRtYXApIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVmZXJyZWRTa0Jp
dG1hcElkcy5jb250YWlucyhiaXRtYXAuZ2V0R2VuZXJhdGlvbklEKCkpOworfQorCitTa0JpdG1h
cCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoUGFzc093blB0
cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7CisKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gU2tJU2l6ZTo6TWFrZShkZWNvZGVyLT5z
aXplKCkud2lkdGgoKSwgZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBBU1NFUlQoIWZ1
bGxTaXplLmlzRW1wdHkoKSk7CisKKyAgICBjcmVhdGVGcmFtZUdlbmVyYXRvcihkZWNvZGVyKTsK
KworICAgIFNrSVJlY3QgZnVsbFJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShmdWxsU2l6ZSk7CisK
KyAgICAvLyBDcmVhdGVzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiB0aGF0IHJlZmVyZW5j
ZXMgdGhlIGVudGlyZSBpbWFnZSB3aXRob3V0IHNjYWxpbmcuCisgICAgU2tCaXRtYXAgYml0bWFw
OworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxs
U2l6ZS53aWR0aCgpLCBmdWxsU2l6ZS5oZWlnaHQoKSk7CisgICAgYml0bWFwLnNldFBpeGVsUmVm
KG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihtX25leHRJZCwgZnVsbFNpemUsIGZ1bGxSZWN0KSkt
PnVucmVmKCk7CisKKyAgICAvLyBJbmZvcm0gdGhlIGJpdG1hcCB0aGF0IHdlIHdpbGwgbmV2ZXIg
Y2hhbmdlIHRoZSBwaXhlbHMuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBoaW50CisgICAgLy8gc3Vi
c3lzdGVtcyB0aGF0IG1heSB0cnkgdG8gY2FjaGUgdGhpcyBiaXRtYXAgKGUuZy4gcGljdHVyZXMs
IHBpcGVzLCBncHUsIHBkZiwgZXRjLikKKyAgICBiaXRtYXAuc2V0SW1tdXRhYmxlKCk7CisKKyAg
ICAvLyBGSVhNRTogU2V0dGluZyBiaXRtYXAuc2V0SXNPcGFxdWUoKSBpcyBiaWcgcGVyZm9ybWFu
Y2UgZ2FpbiBpZiBwb3NzaWJsZS4gV2UgY2FuCisgICAgLy8gZG8gc28gc2FmZWx5IGlmIHRoZSBp
bWFnZSBpcyBmdWxseSBsb2FkZWQgYW5kIGl0IGlzIGEgSlBFRyBpbWFnZSwgb3IgaW1hZ2Ugd2Fz
CisgICAgLy8gZGVjb2RlZCBiZWZvcmUuCisKKyAgICBtX2RlZmVycmVkU2tCaXRtYXBJZHMuYWRk
KGJpdG1hcC5nZXRHZW5lcmF0aW9uSUQoKSk7CisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworU2tC
aXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJl
Y3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsK
KworICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKiBwaXhlbFJlZiA9IHN0YXRpY19jYXN0PExhenlE
ZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpOworICAgIEFTU0VSVCghcGl4ZWxS
ZWYtPmlzU2NhbGVkKGxvb2t1cEZyYW1lR2VuZXJhdG9yKHBpeGVsUmVmLT5pZCgpKS0+c2l6ZSgp
KSAmJiAhcGl4ZWxSZWYtPmlzQ2xpcHBlZCgpKTsKKworICAgIGludCByb3dCeXRlcyA9IDA7Cisg
ICAgcm93Qnl0ZXMgPSBTa0JpdG1hcDo6Q29tcHV0ZVJvd0J5dGVzKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgc2NhbGVkU2l6ZS53aWR0aCgpKTsKKworICAgIFNrQml0bWFwIHJlc2l6ZWRC
aXRtYXA7CisgICAgcmVzaXplZEJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnLCBzY2FsZWRTdWJzZXQud2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dC
eXRlcyk7CisgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4
ZWxSZWYocGl4ZWxSZWYtPmlkKCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigp
OworCisgICAgLy8gU2VlIGNvbW1lbnRzIGluIGNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoKS4K
KyAgICByZXNpemVkQml0bWFwLnNldEltbXV0YWJsZSgpOworICAgIG1fZGVmZXJyZWRTa0JpdG1h
cElkcy5hZGQocmVzaXplZEJpdG1hcC5nZXRHZW5lcmF0aW9uSUQoKSk7CisgICAgcmV0dXJuIHJl
c2l6ZWRCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAg
ICBsb29rdXBGcmFtZUdlbmVyYXRvcihiaXRtYXApLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNl
aXZlZCk7Cit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyhpbnQgaWQs
IGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkK
K3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9sb2Nr
ZWRTa0JpdG1hcC5pc051bGwoKSk7CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0
b3IgPSBsb29rdXBGcmFtZUdlbmVyYXRvcihpZCk7CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IGdl
bmVyYXRvci0+c2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2ZXMgdGhlIGZ1bGwg
c2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIEltYWdlRnJhbWVDYWNoZSogZnJhbWVDYWNo
ZSA9IGxvb2t1cEZyYW1lQ2FjaGUoaWQsIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRtYXA7
CisKKyAgICBpZiAoIWZyYW1lQ2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFBpeGVscyBhcmUg
b3duZWQgYnkgdGhlIEltYWdlRGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBGaW5kCisgICAgICAg
IC8vIGEgd2F5IHRvIHRyYW5zZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUuCisgICAgICAgIElt
YWdlRnJhbWUqIGZyYW1lID0gZ2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1lQnVmZmVyQXRJbmRl
eCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUgaWYgdGhpcyBpcyBj
b21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKEltYWdlRnJhbWVD
YWNoZTo6Y3JlYXRlKGlkLCBmdWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNvZGluZyBlcnJv
ci4gUmVwb3J0IHRoaXMgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAg
ICBiaXRtYXAgPSBmcmFtZUNhY2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVsbFNp
emUgIT0gc2NhbGVkU2l6ZSkgeworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24t
dGhlLWZseSBhbmQgc2NhbGVkIGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1
c2UuCisgICAgICAgIC8vIEZJWE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVkIGZyYWdtZW50
LgorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNp
emUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVk
U2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9sb2NrZWRTa0JpdG1hcCA9IGJpdG1hcDsKKyAgICBtX2xvY2tlZFNrQml0bWFwLmxvY2tQaXhl
bHMoKTsKKyAgICByZXR1cm4gbV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxlZFN1YnNldC54
KCksIHNjYWxlZFN1YnNldC55KCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5s
b2NrUGl4ZWxzKCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAg
IG1fbG9ja2VkU2tCaXRtYXAudW5sb2NrUGl4ZWxzKCk7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5y
ZXNldCgpOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVh
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAm
JiBpc01haW5UaHJlYWQoKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUZy
YW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgICsr
bV9uZXh0SWQ7CisgICAgbV9mcmFtZUdlbmVyYXRvcnMuYWRkKG1fbmV4dElkLCBJbWFnZUZyYW1l
R2VuZXJhdG9yOjpjcmVhdGUoZGVjb2RlcikpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yKiBJ
bWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lR2VuZXJhdG9yKGludCBpZCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9mcmFtZUdlbmVyYXRvcnMuZ2V0KGlkKTsKK30KKworSW1hZ2VGcmFtZUdl
bmVyYXRvciogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihjb25zdCBT
a0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIEFTU0VSVChpc0xhenlEZWNvZGVkKGJpdG1h
cCkpOworICAgIHJldHVybiBsb29rdXBGcmFtZUdlbmVyYXRvcihzdGF0aWNfY2FzdDxMYXp5RGVj
b2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKS0+aWQoKSk7Cit9CisKK0ltYWdlRnJh
bWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hl
W2ldLT5pc0VxdWFsKGlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1l
Q2FjaGVbaV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVj
b2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpZCwgc2NhbGVk
U2l6ZSkpIHsKKyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3ZDkzMGM0ZGUyYTMxMTFi
MmJmNzkyNzYyYzFiYTgwYWFiZWU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5l
IEltYWdlRGVjb2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUg
IlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VE
ZWNvZGVyOworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKK2NsYXNzIEltYWdlRnJhbWVDYWNo
ZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworLy8gVGhpcyBjbGFzcyBjYW4gb25seSBiZSBpbnN0
YW50aWF0ZWQgb24gbWFpbiB0aHJlYWQuIFRoZXJlIHdpbGwgYmUgYW4KKy8vIGluc3RhbmNlIG9u
IGltcGwgdGhyZWFkIGluIHRoZSBmdXR1cmUgYnV0IHRoYXQgcGFydCBvZiBpbXBsZW1lbnRhdGlv
bgorLy8gaXMgaW5jb21wbGV0ZS4gU2VlIGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk0MjQwCisvLyBmb3IgZGV0YWlscy4KK2NsYXNzIEltYWdlRGVjb2RpbmdT
dG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3Jl
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQor
ICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3Rv
cmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisKKyAgICBib29sIGlz
TGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmKSBjb25zdDsKKyAgICBTa0JpdG1hcCBjcmVhdGVM
YXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgU2tCaXRt
YXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisKKyAgICB2b2lk
IHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIFlvdSBtYXkgb25seSBsb2NrIG9uZSBzZXQgb2Yg
cGl4ZWxzIGF0IGEgdGltZTsgb3ZlcmxhcHBpbmcgbG9jayBjYWxscyBhcmUgbm90IGFsbG93ZWQu
CisgICAgdm9pZCogbG9ja1BpeGVscyhpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUs
IGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdm9pZCB1bmxvY2tQaXhlbHMoKTsK
KworcHJpdmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNhbGxlZE9u
VmFsaWRUaHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NP
d25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJh
bWVHZW5lcmF0b3IoaW50IGlkKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKiBsb29r
dXBGcmFtZUdlbmVyYXRvcihjb25zdCBTa0JpdG1hcCYpIGNvbnN0OworICAgIEltYWdlRnJhbWVD
YWNoZSogbG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
IGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpOworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxJbWFnZUZyYW1lR2VuZXJh
dG9yPiA+IG1fZnJhbWVHZW5lcmF0b3JzOworICAgIFZlY3RvcjxPd25QdHI8SW1hZ2VGcmFtZUNh
Y2hlPiA+IG1fZnJhbWVDYWNoZTsKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX2RlZmVycmVkU2tC
aXRtYXBJZHM7CisKKyAgICBpbnQgbV9uZXh0SWQ7CisgICAgU2tCaXRtYXAgbV9sb2NrZWRTa0Jp
dG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2Fj
aGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2VjYjZhYTYwZDNjMmIyN2Y0MWQwODA4ZmRlYzNj
ZmY4N2QxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFtZUNh
Y2hlKCkKK3sKK30KKworSW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUoaW50IGlkLCBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBi
b29sIGlzQ29tcGxldGUpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV9zY2FsZWRTaXplKHNjYWxl
ZFNpemUpCisgICAgLCBtX2JpdG1hcChiaXRtYXApCisgICAgLCBtX2lzQ29tcGxldGUoaXNDb21w
bGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwoaW50IGlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAoreworICAgIHJldHVybiBpZCA9PSBtX2lkICYm
IHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkOTI4Yjk2YmVmZjUwMjY2YmM5OGJm
NDQwYjMzMGZjMTA3OWU0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lQ2FjaGVfaAorI2RlZmluZSBJbWFnZUZyYW1l
Q2FjaGVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNp
bmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gSW1hZ2VGcmFtZUNhY2hlIGlzIGEgc2NhbGVkIHZlcnNpb24g
b2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorLy8gYnkgdHdvIHRoaW5nczoKKy8vIDEuIElt
YWdlIElELiBUaGUgb3JpZ2luYWwgaW1hZ2UgdGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20u
CisvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4KK2NsYXNzIEltYWdlRnJhbWVDYWNoZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29s
IGlzQ29tcGxldGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRnJh
bWVDYWNoZShpZCwgc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgfQorCisg
ICAgSW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFw
JiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICB+SW1hZ2VGcmFtZUNhY2hlKCk7CisKKyAgICBjb25z
dCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBTa0Jp
dG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KKworICAgIGJvb2wgaXNFcXVhbChp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQorCitwcml2YXRlOgorICAgIGlu
dCBtX2lkOworICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOworICAgIFNrQml0bWFwIG1fYml0bWFw
OworICAgIGJvb2wgbV9pc0NvbXBsZXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJj
NDMwYWIyNzU3ODM2MGI1OTdiZWFhNzhhZGY5NTc4NGRmMjZjMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIDogbV9kZWNvZGVyKGRlY29kZXIpCit7CisgICAg
bV9zaXplID0gU2tJU2l6ZTo6TWFrZShtX2RlY29kZXItPnNpemUoKS53aWR0aCgpLCBtX2RlY29k
ZXItPnNpemUoKS5oZWlnaHQoKSk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKCkKK3sKK30KKworSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1lR2VuZXJhdG9y
OjpkZWNvZGVyKCkKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyLmdldCgpOworfQorCit2b2lkIElt
YWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKG1f
ZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0
YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlN2M5Y2M1MDg3ZWYyZTI5ZWJhNzE1MWI1YTRhMWFj
ODQ4NThlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisjZGVmaW5lIEltYWdlRnJhbWVH
ZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tTaXplLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NPd25QdHI8SW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bWFnZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbWFn
ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgfkltYWdlRnJh
bWVHZW5lcmF0b3IoKTsKKworICAgIC8vIENyZWF0ZXMgdGhlIGltYWdlIGRlY29kZXIgaWYgbmVl
ZGVkLgorICAgIEltYWdlRGVjb2RlciogZGVjb2RlcigpOworICAgIHZvaWQgc2V0RGF0YShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0
IFNrSVNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9kYXRhOworICAgIFNrSVNpemUgbV9zaXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wMDllM2Y2ZmExNWMxOTJlYjFlNjRlODI0NzE0OWQyMzM3MGU3ZWYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURl
Y29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKworI2luY2x1ZGUgIklt
YWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworTGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVs
UmVmKGludCBpZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2Nh
bGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJlZigwKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1f
c2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0
KQoreworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKCkK
K3sKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQoY29uc3QgU2tJU2l6
ZSYgZnVsbFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZ1bGxTaXplICE9IG1fc2NhbGVkU2l6
ZTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0gbV9zY2FsZWRTdWJzZXQud2lkdGgo
KSB8fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2FsZWRTdWJzZXQuaGVpZ2h0KCk7Cit9
CisKK3ZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxl
KiopCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5sb2NrUGl4ZWxzKGlkKCksIG1fc2Nh
bGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOworfQorCit2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVm
OjpvblVubG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnVubG9ja1BpeGVscygp
OworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmOTFhYzI1YjRl
YTIyM2EyZDVjNWFkZWVkN2I0YjAzNjJhYjczMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5o
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlEZWNvZGluZ1BpeGVsUmVmX2gK
KyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tGbGF0dGVuYWJs
ZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0Lmgi
CisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXp5
RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKK3B1YmxpYzoKKyAgICBMYXp5
RGVjb2RpbmdQaXhlbFJlZihpbnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0
IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdmlydHVhbCB+TGF6eURlY29kaW5nUGl4ZWxS
ZWYoKTsKKworICAgIFNLX0RFQ0xBUkVfVU5GTEFUVEVOQUJMRV9PQkpFQ1QoKQorCisgICAgaW50
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJ
U2l6ZSYgZnVsbFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVmIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwg
dm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25V
bmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9pZDsKKyAgICBTa0lTaXplIG1fc2NhbGVk
U2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5nUGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lh
LmNwcAppbmRleCAxODYyYTJhZmM2ZTM1MDQ5MzZkY2JjOTAzY2U2ZjI0ZDRhYWY1MGFkLi4yYTll
NTZhNDI4NTc3YzFmYTFjNmMzNGQ4ZTQ4NGU4YzgwYTVjMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3Bw
CkBAIC00MCw2ICs0MCwxMSBAQAogI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKICNpbmNsdWRlICJT
a2lhVXRpbHMuaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkltYWdlRGVj
b2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKQEAgLTcz
LDYgKzc4LDExIEBAIGJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKGNvbnN0
IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJCiAKIFNrQml0bWFwIE5hdGl2ZUlt
YWdlU2tpYTo6cmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNv
bnN0IFNrSVJlY3QmIHNjYWxlZEltYWdlU3Vic2V0KSBjb25zdAogeworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCkgJiYgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5pc0xhenlE
ZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNj
YWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhh
c1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAg
ICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYm
IHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKaW5kZXggZDBjYzUzYjE0NzU3ZDE3NDQyMmY3Njg3OTg0MGVjYjM1YWY5NTI0
Ni4uMjBhYjhjMWFiYzM3MDJhMDhiMzkwYzA5N2QzNTY3Mjk2MWJmNWQ2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
QEAgLTE0NSw2ICsxNDUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbmRpZgogICAgICAgICB9CisKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgdm9pZCBzZXRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcCA9IE5hdGl2ZUlt
YWdlU2tpYShiaXRtYXAsIDEpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU2tCaXRtYXAm
IGdldFNrQml0bWFwKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYml0
bWFwLmJpdG1hcCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IGludCB3aWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAyNGNhZTI5OGZmNTA0OTFmZWMxM2ZhYjQzYmQ5MDg2
OTY2Nzg2YzBmLi42NDA2M2EwMjFjNDY3MTRkOWQ1OTg1NmFjZWM0MjJlZjg3YmRlOTllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9Db21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0RhdGVUaW1lRm9ybWF0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Rl
Y2ltYWxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
RmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlLmgnLApAQCAtNzgsOCArNzksOSBAQAogICAg
ICAgICAgICAgJ3Rlc3RzL0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAg
ICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0tleWJvYXJkVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9M
aW5rSGlnaGxpZ2h0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rl
c3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNl
dHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmlu
ZGV4IGFiZDg0ZWQwZTU3YWZlOTgzMWZmZmQwNjM5MWU0MjkxZTVkYzJiZTQuLjA4Y2QxOTc0NWNj
NzBhYWUzNzljODk1MWU2NGExNDgyN2Y2YTQ1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRpbGVTaXplKFdlYlNpemUpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c1RvdWNoKGJvb2wpID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJLaXQuY3BwCmluZGV4IGUzNTdmMjhlNDI4M2E3MDAxNTZkNmNmYWJkNTBl
ZGIzZWQyZjc4OTcuLjI0M2QwOGU2Mjk0ODA1Njk3OTM2MmRmY2Y4NThjNmZmODVlOGE3NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgpAQCAtMTY1LDYgKzE2
Niw3IEBAIHZvaWQgc2h1dGRvd24oKQogICAgIH0KICNlbmRpZgogICAgIHNfd2ViS2l0UGxhdGZv
cm1TdXBwb3J0ID0gMDsKKyAgICBXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3du
KCk7CiAgICAgUGxhdGZvcm06OnNodXRkb3duKCk7CiAgICAgV2ViUHJlcmVuZGVyaW5nU3VwcG9y
dDo6c2h1dGRvd24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0
aW5nc0ltcGwuY3BwCmluZGV4IDk4OGM1ZTY2YjFlMTNjMTZlOWY2N2QwMmE0N2NhMDc4ZGYzODYw
OTguLmRjNzczNmQ5YTIxYjA5MDc0Y2ZiMWQ5MTU5Y2I4ZjdiMTljOTA5ODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogCiAjaW5jbHVkZSAiRm9udFJlbmRl
cmluZ01vZGUuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViVVJMLmg+CkBAIC01NSw2ICs1Niw3IEBAIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGlu
Z3NJbXBsKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICAsIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2Nh
bGVGYWN0b3JJbkNvbXBvc2l0b3IoZmFsc2UpCiAgICAgLCBtX2dlc3R1cmVUYXBIaWdobGlnaHRF
bmFibGVkKHRydWUpCiAgICAgLCBtX2F1dG9ab29tRm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZShm
YWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAs
IG1fZGVmYXVsdFRpbGVTaXplKFdlYlNpemUoMjU2LCAyNTYpKQogICAgICwgbV9tYXhVbnRpbGVk
TGF5ZXJTaXplKFdlYlNpemUoNTEyLCA1MTIpKQogewpAQCAtNDgwLDYgKzQ4MiwxNSBAQCB2b2lk
IFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVk
KQogICAgIG1fc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwog
fQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQgJiYgZW5hYmxlZCkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25N
YWluVGhyZWFkKCk7CisgICAgaWYgKG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAh
ZW5hYmxlZCkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIG1f
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgV2ViU2V0
dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKaW5kZXggMTE2OWMzMWNmM2ViMmFlODBmZGEx
Zjg4NWNkMDg2OTE2OGY0NmE0MS4uOTA1MWJhYjYxN2Y4NmJmZTA0OWIwYjc3ZTZlMmFkZjAyZDcy
ZDY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgK
QEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4
dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
YXVsdFRpbGVTaXplKFdlYlNpemUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29k
aW5nRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShib29s
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKTsKQEAgLTE3
OCw2ICsxNzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseURlZmF1bHREZXZpY2VTY2Fs
ZUZhY3RvckluQ29tcG9zaXRvcjsKICAgICBib29sIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJs
ZWQ7CiAgICAgYm9vbCBtX2F1dG9ab29tRm9jdXNlZE5vZGVUb0xlZ2libGVTY2FsZTsKKyAgICBi
b29sIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBXZWJTaXplIG1fZGVmYXVs
dFRpbGVTaXplOwogICAgIFdlYlNpemUgbV9tYXhVbnRpbGVkTGF5ZXJTaXplOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29k
ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODI1NDk4MDVjNzZhODFiZTMxYTNkZjQ4YzQ3NDFlMzJl
NGVkYjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFnZURlY29kZXIuaCIKKwor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk1vY2tJbWFnZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5o
IgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6
OlRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAg
ICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAg
bV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIoKTsKKyAgICAgICAgbV9hY3R1
YWxEZWNvZGVyLT5zZXRTaXplKDYwMCwgNjEzKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlciA9IERl
ZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKGFkb3B0UHRyKG1fYWN0dWFsRGVj
b2RlcikpOworICAgICAgICBtX2NhbnZhcy5zZXREZXZpY2UobmV3IFNrRGV2aWNlKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgMTAwLCAxMDApKS0+dW5yZWYoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpzaHV0ZG93bigpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIC8vIERvbid0IG93biB0aGlz
IGJ1dCBzYXZlcyB0aGUgcG9pbnRlciB0byBxdWVyeSBzdGF0ZXMuCisgICAgTW9ja0ltYWdlRGVj
b2RlciogbV9hY3R1YWxEZWNvZGVyOworICAgIE93blB0cjxEZWZlcnJlZEltYWdlRGVjb2Rlcj4g
bV9sYXp5RGVjb2RlcjsKKyAgICBTa1BpY3R1cmUgbV9waWN0dXJlOworICAgIFNrQ2FudmFzIG1f
Y2FudmFzOworfTsKKworVEVTVF9GKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCwgZHJhd0ludG9T
a1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UoYWRvcHRQdHIo
bV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05ld05hdGl2ZUltYWdlKCkp
KTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgaW1hZ2Ut
PmJpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29kZXItPnNpemUo
KS5oZWlnaHQoKSwgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
aW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpbWFnZS0+Yml0bWFw
KCkuaXNJbW11dGFibGUoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVy
ZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChp
bWFnZS0+Yml0bWFwKCksIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgp
KTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VR
KDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK1RF
U1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlKQor
eworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgU2tC
aXRtYXAgc2NhbGVkQml0bWFwID0gaW1hZ2UtPnJlc2l6ZWRCaXRtYXAoU2tJU2l6ZTo6TWFrZSg1
MCwgNTEpLCBTa0lSZWN0OjpNYWtlV0goNTAsIDUxKSk7CisgICAgRVhQRUNUX0ZBTFNFKHNjYWxl
ZEJpdG1hcC5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoc2NhbGVkQml0bWFwLmlzSW1tdXRh
YmxlKCkpOworICAgIEVYUEVDVF9FUSg1MCwgc2NhbGVkQml0bWFwLndpZHRoKCkpOworICAgIEVY
UEVDVF9FUSg1MSwgc2NhbGVkQml0bWFwLmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9h
Y3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIFNrQ2FudmFz
KiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAgICB0
ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKHNjYWxlZEJpdG1hcCwgMCwgMCk7CisgICAgbV9waWN0dXJl
LmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1l
QnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUobV9waWN0
dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNmMjM3NDRlNTFmZGU0
M2MxNjRiMzExMDFkMDViMzMwNzMyYzJmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIE1vY2tJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1
YmxpYyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIE1vY2tJbWFnZURlY29kZXIoKQorICAg
ICAgICA6IEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKQorICAgICAgICAsIG1fZnJhbWVC
dWZmZXJSZXF1ZXN0Q291bnQoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAibW9jayI7CisgICAg
fQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KQor
ICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworCisgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVsw
XS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1
cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICB9CisKKyAgICBpbnQgZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OyB9
CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNb2NrSW1hZ2VEZWNvZGVyX2gKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxZjkwZDFi
ODMyNzJlMjVkM2E4N2RhNTY2MzMxYjg3NGUzMDFiOGExLi45OWRkMDBmMWM4YzQ5M2Q0YmY5NjJj
ZDlmOTk2MjA5ZDQzZDk4MDA0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhj
bGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJl
ZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcgdG8gRFJULgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKyAgICAgICAgKFRlc3RTaGVs
bDo6cmVzZXRXZWJTZXR0aW5ncyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQpOgorICAgICAgICAoVGVzdFNoZWxsKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6
cmVzZXQpOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8pOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmg6CisgICAgICAgIChXZWJQcmVm
ZXJlbmNlcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bS5weToKKyAgICAgICAgKENocm9taXVtUG9ydC52aXJ0dWFsX3Rlc3Rfc3VpdGVzKToK
KwogMjAxMi0xMC0xNSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwu
Y29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gRGlzcGxheSBwYWdlIGZhdmljb25zIGluIE1pbmlC
cm93c2VyCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJl
ZS5jcHAKaW5kZXggMzBjZTI4ODUxZmM5YTlhNDZiOGI2M2U2ZGJkMDBkYTFjM2ZlYTgzOC4uNWEz
MjEwNDQ5NmY3OWIxZjJhNDU0OGIzNjUzNDU2YjQwNjFmYTZiNSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNjQsNiArNjQsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZFBhaW50aW5nW10gPSAi
LS1lbmFibGUtYWNjZWxlcmF0ZWQtcGFpbgogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQt
dmlkZW8iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVXNlR3JhcGhpY3NDb250ZXh0M0RJbXBs
ZW1lbnRhdGlvbltdID0gIi0tdXNlLWdyYXBoaWNzLWNvbnRleHQtM2QtaW1wbGVtZW50YXRpb249
IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZ1tdID0gIi0t
ZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJs
ZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29k
aW5nIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzT3B0W10gPSAiLS1zdHJlc3Mt
b3B0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc0Rlb3B0W10gPSAiLS1zdHJlc3Mt
ZGVvcHQiOwpAQCAtMTMzLDYgKzEzNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCiAgICAgYm9vbCBkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wg
YWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHBlclRpbGVQYWlu
dGluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc09wdCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNz
RGVvcHQgPSBmYWxzZTsKICAgICBib29sIGhhcmR3YXJlQWNjZWxlcmF0ZWRHTCA9IGZhbHNlOwpA
QCAtMTgzLDYgKzE4NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBHcmFwaGljQ29udGV4dDNEIGltcGxl
bWVudGF0aW9uICVzXG4iLCBpbXBsZW1lbnRhdGlvbi5jX3N0cigpKTsKICAgICAgICAgfSBlbHNl
IGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRpbmcpCiAgICAgICAgICAg
ICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoYXJndW1l
bnQgPT0gb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nKQorICAgICAgICAgICAgZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3Vt
ZW50ID09IG9wdGlvblN0cmVzc09wdCkKICAgICAgICAgICAgIHN0cmVzc09wdCA9IHRydWU7CiAg
ICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc0Rlb3B0KQpAQCAtMjIyLDYg
KzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgIHNoZWxs
LnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMkRDYW52YXNFbmFibGVkKTsKICAg
ICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWlu
dGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKHBl
clRpbGVQYWludGluZ0VuYWJsZWQpOworICAgICAgICBzaGVsbC5zZXREZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVs
bC5zZXRKYXZhU2NyaXB0RmxhZ3MoamF2YVNjcmlwdEZsYWdzKTsKICAgICAgICAgc2hlbGwuc2V0
U3RyZXNzT3B0KHN0cmVzc09wdCk7CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc0Rlb3B0KHN0cmVz
c0Rlb3B0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmlu
ZGV4IDMyNTg1ZmFhMWIyZDhhZDgxYTgzYjE1ZThmNzEyYmQ4Y2E3MjQ4OWIuLmFjNzc1OTY4MWEw
NDZkMDNkNDcxOGZjNDU4YzI3ZTgyZTE0NjE3OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTE0LDYgKzExNCw3IEBAIFRlc3RTaGVsbDo6VGVz
dFNoZWxsKCkKICAgICAsIG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9hY2NlbGVyYXRlZFBh
aW50aW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxl
ZChmYWxzZSkKICAgICAsIG1fc3RyZXNzT3B0KGZhbHNlKQogICAgICwgbV9zdHJlc3NEZW9wdChm
YWxzZSkKICAgICAsIG1fZHVtcFdoZW5GaW5pc2hlZCh0cnVlKQpAQCAtMjI5LDYgKzIzMCw3IEBA
IHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcpCiAgICAg
bV9wcmVmcy5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWQyZENhbnZh
c0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IG1fZGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZCA9IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgbV9wcmVmcy5kZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkID0gbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAg
IG1fcHJlZnMuYXBwbHlUbygmd2ViVmlldyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmgKaW5kZXggNDRiNWFlMzg4YzY4ZDY1ZGU4OTBmYzgwMGZlZDUyMjll
ZWMyYTMyNC4uMzkyNjYyNDQ2OWI2OGNjYmM4NzRiNDkxZWE0ODNhMGI2MzkyY2U1NSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTEzOCw2ICsxMzgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJs
ZWQpIHsgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNl
dEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVk
UGFpbnRpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0UGVyVGlsZVBhaW50aW5n
RW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KICNpZiBkZWZpbmVkKE9TX1dJTikKICAgICAvLyBBY2Nlc3MgdG8gdGhlIGZpbmlzaGVkIGV2
ZW50LiBVc2VkIGJ5IHRoZSBzdGF0aWMgV2F0Y2hEb2cgdGhyZWFkLgogICAgIEhBTkRMRSBmaW5p
c2hlZEV2ZW50KCkgeyByZXR1cm4gbV9maW5pc2hlZEV2ZW50OyB9CkBAIC0yMzUsNiArMjM2LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9v
bCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOwogICAgIGJvb2wgbV9wZXJUaWxlUGFpbnRp
bmdFbmFibGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAg
IFdlYlByZWZlcmVuY2VzIG1fcHJlZnM7CiAgICAgYm9vbCBtX3N0cmVzc09wdDsKICAgICBib29s
IG1fc3RyZXNzRGVvcHQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQ
cmVmZXJlbmNlcy5jcHAKaW5kZXggM2JjMmNkZDlmMmFlNDE3MGMzM2FkNjQxMDZkNGE3ZjJkMDkw
MjFmNS4uNWM4YzkyYzk5OTQyNjQ0ZGQxOWE0OWM5OGU2NmMxYTRmMDZkNDQ0ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTE2
LDYgKzExNiw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlc2V0KCkKICAgICBkZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0g
ZmFsc2U7CiAgICAgZm9yY2VDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKKyAgICBkZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNl
ckdlc3R1cmUgPSBmYWxzZTsKICAgICBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKICAg
ICBjc3NDdXN0b21GaWx0ZXJFbmFibGVkID0gZmFsc2U7CkBAIC0yMjQsNiArMjI1LDcgQEAgdm9p
ZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHNldHRpbmdz
LT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZCk7CiAgICAgc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMmRD
YW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOworICAgIHNldHRpbmdzLT5zZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAg
IHNldHRpbmdzLT5zZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShtZWRpYVBsYXli
YWNrUmVxdWlyZXNVc2VyR2VzdHVyZSk7CiAgICAgc2V0dGluZ3MtPnNldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChtb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBcHBseURl
ZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmb3JjZUNvbXBvc2l0aW5nTW9kZSk7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNl
cy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAppbmRl
eCBjMzY1NTNiMzU0Njk2NGM3NmYyOTkxNmE5ZWE5YjllMmEyM2UyNGIyLi5lMDMxNWYyZDA3YzFl
NWI5ODU1ZmU3YjNhYTJlMTRjZjdlMWU0MGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgV2Vi
UHJlZmVyZW5jZXMgewogICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAg
Ym9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRp
bmdFbmFibGVkOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBi
b29sIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOwogICAgIGJvb2wgbW9ja1Njcm9s
bGJhcnNFbmFibGVkOwogICAgIGJvb2wgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5Cmlu
ZGV4IGMzMTBlYjE1YjE5NTRkZGVkZGMzMzNiOTgwZjY2NWQ1ZmNkYjkxY2UuLmE2OWY1YTgyMmFh
M2ZlMzI4NDZmOTE3MDExNjQxOTNjYzIyMzhmNTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzkwLDYgKzM5MCw5
IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3Vp
dGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvc29mdHdhcmVjb21wb3NpdGluZycsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsnLS1lbmFibGUtc29mdHdhcmUtY29tcG9zaXRpbmcnXSksCisgICAgICAg
ICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaW1hZ2Vz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1kZWZlcnJlZC1pbWFn
ZS1kZWNvZGluZycsICctLWVuYWJsZS1wZXItdGlsZS1wYWludGluZycsICctLWZvcmNlLWNvbXBv
c2l0aW5nLW1vZGUnXSksCiAgICAgICAgIF0KIAogICAgICMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1YzgxYTg3ZTgxNzlm
ZTU3YWNhMWQwZjBkNzYzNjQzNThjNWViNWFhLi5iNDAxZDNjNmE1MGViNjY2MjU5NjEwZjE1ZTg2
MjU2M2ViMmY5OGQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDktMDggIEFscGhhIExh
bSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBk
ZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpbmcgYSB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIENocm9taXVtIHRv
IHRlc3QgZGVmZXJyZWQgaW1hZ2UKKyAgICAgICAgZGVjb2RpbmcuCisKKyAgICAgICAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcyB3aWxsIGJlIHRlc3RlZCB3
aXRoCisgICAgICAgIC0tZm9yY2UtY29tcG9zaXRpbmcgLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRp
bmcgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVk
LgorCiAyMDEyLTEwLTE1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBGaXggc29tZSBhcHBlYXJhbmNlIGdsaXRjaGVzIG9mIG11bHRpcGxlIGZpZWxkcyBpbnB1
dCBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggNmE0MTE3MDgyMmVjNDAxODYzMDljOGNlNTkwM2NhMTBkZTY2ODU0OS4uZDEw
MzdhMWVjMzQwZGM3MWVjYTg5NTllNWQxMjEyYTVmNjc2OTlkZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC00MDU1LDMgKzQwNTUsMjYg
QEAgd2Via2l0Lm9yZy9iLzk5MTM0IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Rpbnkt
bGF5ZXItcm90YXRlZC5odG1sIFsgUGFzcwogCiB3ZWJraXQub3JnL2IvOTkxMzggWyBTbm93TGVv
cGFyZCBdIHN2Zy9jdXN0b20vZm9yZWlnbi1vYmplY3Qtc2tldy5zdmcgWyBQYXNzIEltYWdlT25s
eUZhaWx1cmUgXQogCisjIFRoZXNlIHRlc3RzIGFyZSBmYWlsaW5nIGFscmVhZHkgYW5kIGJlY2F1
c2Ugb2YgdmlydHVhbCB0ZXN0IHN1aXRlIGZvciBkZWZlcnJlZAorIyBpbWFnZSBkZWNvZGluZyB0
aGV5IG5lZWQgdG8gYmUgc3VwcHJlc3NlZCBhZ2Fpbi4KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1y
ZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZXhpZi1vcmll
bnRhdGlvbi1jc3MuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZXhpZi1vcmllbnRhdGlvbi5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtbGFuZHNjYXBlLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9zdXBwb3J0LWJyb2tlbi1pbWFnZS1kZWxlZ2F0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmlsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9naWYtbGFyZ2UtY2hlY2tlcmJvYXJkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2dpZi1sb29wLWNvdW50Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL3BhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9waXhlbC1jcmFjay1pbWFnZS1iYWNrZ3JvdW5kLXdlYmtpdC10cmFuc2Zvcm0tc2NhbGUu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZW1iZWQtaW1hZ2UuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvZmF2aWNvbi1hcy1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9pbWFnZW1hcC1jaXJjbGUtZm9jdXMtcmluZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3ItZXhwbGljaXRseS1pbmhlcml0ZWQt
ZnJvbS1tYXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1v
dXRsaW5lLWNvbG9yLW5vdC1pbmhlcml0ZWQtZnJvbS1tYXAuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL2ltYWdlbWFwLXBvbHlnb24tZm9jdXMtcmluZy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9vYmplY3QtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcmVwYWludC1z
dWJyZWN0LWdyaWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGFsZXR0ZWQtcG5nLXdpdGgt
Y29sb3ItcHJvZmlsZS5odG1sIFsgTWlzc2luZyBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1h
Z2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0MzJkNWZkMDBiODI4MWUyODhiMTk4
OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIg
QEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGVzdCB0aGUgJ2RlZmVycmVkIGlt
YWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBDaHJvbWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169008</attachid>
            <date>2012-10-16 13:08:03 -0700</date>
            <delta_ts>2012-10-18 00:55:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121016130652.patch</filename>
            <type>text/plain</type>
            <size>78464</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWIyOGY4YjVmZjViZDZj
OTVlYTkzMDY3MjY2NDA3ZjU5YzRmMDU0Ny4uOWRjOWYwZjAzODE3YzA0ZTk1ZTI3N2QzM2M2ZTkz
MTY1NzU4NTgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VGcmFtZUNhY2hlCisK
KyAgICAgICAgQSBjb250YWluZXIgZm9yIGEgc2NhbGVkIGltYWdlIGZyYWdtZW50LiBJbiBhZGRp
dGlvbiB0byBiaXRtYXAgcGl4ZWxzCisgICAgICAgIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBJRCBvZiB0aGUgaW1hZ2UsIHNjYWxlIGFuZCBjbGlwcGluZy4KKworICAgICAgICBJ
bWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGhpcyBvYmplY3QgaXMgcmVzcG9uc2libGUg
Zm9yIGdlbmVyYXRpbmcgZGVjb2RlZCBwaXhlbHMuIEl0IGlzIGFsc28KKyAgICAgICAgYSBjb250
YWluZXIgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBpbWFnZSBkZWNv
ZGVyLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVsUmVmCisKKyAgICAgICAgVGhpcyBvYmpl
Y3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBlbmFibGUgbGF6eSBkZWNvZGluZy4gV2hl
bgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nlc3MgcGl4ZWxzIExhenlEZWNvZGluZ1Bp
eGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29udGFpbnMgaW5mb3JtYXRpb24gdG8gbG9j
YXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRoZXNlCisgICAgICAgIGluZm9ybWF0aW9u
IGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3RvcmUgdG8gYWNjZXNzIGFjdHVhbCBwaXhl
bHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVyZSBhcmUgYWJvdXQgODAgdGVzdHMgaW4g
dGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAgcnVubmluZyB0aGlzIGZlYXR1cmUgaW4g
dGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQgdGVzdHMuIEFkZGVkIERlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdCB0byB2ZXJpZnkgZGVmZXJyZWQKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
YmVoYXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdl
RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6
ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChEZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2Rp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5p
dGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmU6OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNM
YXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0
ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
Ojp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpj
YWxsZWRPblZhbGlkVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9y
ZTo6Y3JlYXRlRnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29k
aW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGlu
Z1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2
ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmdldFNrQml0bWFwKToKKwogMjAxMi0xMC0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgbGF5ZXIgdHlwZSBmb3IgdGhl
IHBhZ2UgdGlsZWQgY2FjaGUgbGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOWI4
ZTYwYjVhYjg4NTcxNjc4NWEwZjcwN2E1MDY5OGNkYjFiYTA3Yy4uM2EyMTI0MzY3MGE4OTdlNDY4
YTQwNzExMDc0OWZiN2FkN2Y3ZDNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBuZXcg
dW5pdCB0ZXN0cyBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcuCisgICAgICAgIFRoZXNlIHRl
c3RzIGFyZSBkZWZpbmVkIGluIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAuIFRoZXkgdmVy
aWZ5CisgICAgICAgIGltYWdlIGRlY29kaW5nIGhhcHBlbnMgb25seSB3aGVuIFNrUGljdHVyZSBp
cyByYXN0ZXJpemVkIGZvciBib3RoCisgICAgICAgIHNjYWxlZCBhbmQgbm9uLXNjYWxlZCBjYXNl
cy4KKworICAgICAgICBUZXN0czogRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmRyYXdJbnRvU2tQ
aWN0dXJlCisgICAgICAgICAgICAgICBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd1NjYWxl
ZEludG9Ta1BpY3R1cmUKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpzaHV0ZG93bik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwu
aDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogdGVzdHMvRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZElt
YWdlRGVjb2RlclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VE
ZWNvZGVyVGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAg
ICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFn
ZURlY29kZXI6Ok1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdl
RGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KToKKwogMjAxMi0xMC0xNiAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDI0NmQ2NmE0ZjM2NjAzMTFhMmUw
OTlhNmIyYjk2NWQ2YzZlYmE3ZWMuLjBmZTUyZjEyNjc1YjIzZDdjNjljOWIwYTQzYzY3MzllNTMw
ODZmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ5MDQsNiArNDkwNCw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcG9zaXRvckhVREZvbnRBdGxhcy5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250
TG9hZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9z
c1Byb2Nlc3NGb250TG9hZGluZy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2Fj
aGVBbmRyb2lkLmNwcCcsCkBAIC00OTIzLDYgKzQ5MjUsMTQgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1Bp
eGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlh
UGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5n
Q29udGVudExheWVyRGVsZWdhdGUuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggOTgxNmU2MzQxZmViMjA3NTBlMzE2MTI3ZjYw
ZGU1ZjgxZjliNjk5Ni4uZTZjOTE1OGNjNGNmNWQyZmQ1YjAzNzdiM2VlMGM1MTA2MGIxMDgzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1
ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc4LDcgKzgy
LDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxh
YmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBi
ZQogICAgIC8vIG1hZGUuCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVy
ID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRl
KCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7Cisg
ICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVjb2RlclB0cj4oTmF0
aXZlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQogICAgICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdl
KQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJE
ZWNvZGVkSW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKaW5kZXggNjg3OWVkYTA1NWFiODdkMjU1NjAyMWYzZTdmOTAyZGU1NjY5YTE1Yi4u
ODY3MzEwZGVlY2NiMDA3YzU4N2YyMjU4ODBkOTc4Y2RiMzU0ZDNhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NywxMCArNDcsMjAg
QEAgY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKLXR5
cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCit0eXBl
ZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIq
IE5hdGl2ZUltYWdlU291cmNlUHRyOwordHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdl
RGVjb2RlclB0cjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBEZWZl
cnJlZEltYWdlRGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIgTmF0aXZlSW1h
Z2VEZWNvZGVyOwordHlwZWRlZiBEZWZlcnJlZEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNv
ZGVyUHRyOworI2VsaWYgVVNFKENHKQorI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VE
ZWNvZGVyCisjZWxzZQordHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwog
I2VuZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdl
IGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KQEAgLTE1Niw3ICsxNjYsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBOYXRpdmVJbWFnZVNvdXJjZVB0ciBtX2RlY29k
ZXI7CisgICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlcjsKIAogI2lmICFVU0UoQ0cp
CiAgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VE
ZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTc0MTk2ZTcxYWRiNDEzMTVjZGIzY2I3NTYyZWEwMGFm
MDE2ODVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNv
ZGVyLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RlZmVycmVkSW1hZ2VEZWNv
ZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisg
ICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9w
dFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30KKworRGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZl
cnJlZEltYWdlRGVjb2RlcigpCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9u
ZGluZyBlbnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUgaWYgaW1hZ2UKKyAgICAvLyBpcyBkZWZl
ci1kZWNvZGVkLgorfQorCitEZWZlcnJlZEltYWdlRGVjb2RlciogRGVmZXJyZWRJbWFnZURlY29k
ZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9w
dGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
IGdhbW1hQW5kQ29sb3JPcHRpb24pCit7CisgICAgSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVy
ID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JP
cHRpb24pOworICAgIHJldHVybiBhY3R1YWxEZWNvZGVyID8gbmV3IERlZmVycmVkSW1hZ2VEZWNv
ZGVyKGFjdHVhbERlY29kZXIpIDogMDsKK30KKworUGFzc093blB0cjxEZWZlcnJlZEltYWdlRGVj
b2Rlcj4gRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUZvclRlc3RpbmcoUGFzc093blB0cjxJ
bWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWZlcnJl
ZEltYWdlRGVjb2RlcihkZWNvZGVyLmxlYWtQdHIoKSkpOworfQorCitTdHJpbmcgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogbV9m
aWxlbmFtZUV4dGVuc2lvbjsKK30KKworSW1hZ2VGcmFtZSogRGVmZXJyZWRJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBp
bWFnZSBkZWNvZGluZyBpZiB0aGlzIGlzIGEgc2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29u
IGlzCisgICAgLy8gYmVjYXVzZSBhIG11bHRpZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYu
IEFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5CisgICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBz
b21lIG1ldGFkYXRhIGZ1bmN0aW9ucyB0aGF0IGRvIHN5bmNocm9ub3VzIGltYWdlCisgICAgLy8g
ZGVjb2RpbmcuCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyLT5yZXBldGl0aW9uQ291bnQoKSA9PSBjQW5pbWF0aW9uTm9uZQorICAgICAgICAmJiBtX2Fj
dHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisKKyAgICAgICAgbV9zaXplID0gbV9h
Y3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAgICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2Fj
dHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6
eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgp
KTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tC
aXRtYXApOworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1lLmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxl
YXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKworICAgICAgICAvLyBEb24ndCBtYXJrIHRoZSBm
cmFtZSBhcyBjb21wbGV0ZWx5IGRlY29kZWQgdW50aWwgdGhlIHVuZGVybHlpbmcKKyAgICAgICAg
Ly8gZGVjb2RlciBoYXMgcmVhbGx5IGRlY29kZWQgaXQuIFVudGlsIHRoZW4sIG91ciBkYXRhIGFu
ZCBtZXRhZGF0YSBtYXkKKyAgICAgICAgLy8gYmUgaW5jb3JyZWN0LCBzbyBjYWxsZXJzIGNhbid0
IHJlbHkgb24gdGhlbS4KKyAgICAgICAgbV9sYXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1cyhJbWFn
ZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIH0KKworICAgIHJldHVybiBtX2FjdHVhbERlY29k
ZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCkgOiAmbV9sYXp5
RGVjb2RlZEZyYW1lOworfQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0
dWFsRGVjb2RlcikgeworICAgICAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwg
aW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQuCisgICAgICAgIC8vIFdoZW4gaW1hZ2UgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBvd25lcnNoaXAgb2YgbV9kYXRhIGlzCisgICAgICAgIC8vIHRy
YW5zZmVycmVkIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsK
KyAgICAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1f
YWN0dWFsRGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRhKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRT
a0JpdG1hcCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0KK30KKworYm9vbCBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICAvLyBtX2FjdHVhbERl
Y29kZXIgaXMgMCBvbmx5IGlmIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIGFuZCB0aGF0Cisg
ICAgLy8gbWVhbnMgaW1hZ2UgaGVhZGVyIGRlY29kZWQgc3VjY2Vzc2Z1bGx5IGFuZCBzaXplIGlz
IGF2YWlsYWJsZS4KKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVy
LT5pc1NpemVBdmFpbGFibGUoKSA6IHRydWU7Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURl
Y29kZXI6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2Fj
dHVhbERlY29kZXItPnNpemUoKSA6IG1fc2l6ZTsKK30KKworSW50U2l6ZSBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChp
bmRleCkgOiBtX3NpemU7Cit9CisKK3NpemVfdCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVD
b3VudCgpCit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVDb3VudCgpIDogMTsKK30KKworaW50IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpyZXBldGl0
aW9uQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1hdGlvbk5vbmU7Cit9CisKK3ZvaWQg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJC
ZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVu
IGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5hZ2VkIGJ5CisgICAgLy8gdGhlIGNvbXBvc2l0b3Ig
YW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAg
ICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJh
bWUpOworfQorCitib29sIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMg
c3RhdGUgd2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVh
bGx5IGRlY29kZWQuIFJldHVybiB0cnVlIGhlcmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5k
ZXJpbmcgYnV0CisgICAgLy8gbWF5IG5vdCBnbyB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRl
cmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpIDogdHJ1ZTsKK30KKwordW5zaWduZWQg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKK3sKKyAgICAvLyBJZiBmcmFtZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGl0IGlzIG5v
dCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisgICAgLy8gc28gcmV0dXJuIDAgaGVyZS4KKyAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRl
eChpbmRleCkgOiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVj
b2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJy
ZWRJbWFnZURlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjMzZmUzNWUwZWM2YjMyMTVhOTQzZDI3NjE2
ZjBjM2Q5YzM4YmQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIERlZmVy
cmVkSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFz
cyBEZWZlcnJlZEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgfkRlZmVycmVkSW1hZ2VEZWNv
ZGVyKCk7CisgICAgc3RhdGljIERlZmVycmVkSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZWZl
cnJlZEltYWdlRGVjb2Rlcj4gY3JlYXRlRm9yVGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2Rl
cj4pOworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisKKyAgICBJbWFn
ZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKworICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGJv
b2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50
U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgc2l6ZV90IGZy
YW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEZWZlcnJlZElt
YWdlRGVjb2RlcihJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpOworCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgT3du
UHRyPEltYWdlRGVjb2Rlcj4gbV9hY3R1YWxEZWNvZGVyOworCisgICAgU3RyaW5nIG1fZmlsZW5h
bWVFeHRlbnNpb247CisgICAgSW50U2l6ZSBtX3NpemU7CisKKyAgICBJbWFnZUZyYW1lIG1fbGF6
eURlY29kZWRGcmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTQxYTEzNDI4MDM3NTA5
NGY0MjkyYTdlMWE4NzZkMzUwMzg0MDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAt
MCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kaW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1
ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgor
I2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9u
cy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK0ltYWdlRGVj
b2RpbmdTdG9yZSogc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IDA7CisKK3N0YXRpYyB2b2lkIHNl
dEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0
b3JlKQoreworICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFkOworICAgIHNfaW5zdGFu
Y2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7Cit9Cit9IC8vIG5hbWVzcGFjZQor
CitJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCisgICAgOiBtX25leHRJ
ZCgwKQoreworfQorCitJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQor
eworfQorCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VP
bk1haW5UaHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJu
IHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bml0aWFsaXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCku
bGVha1B0cigpKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFk
KDApOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBT
a0JpdG1hcCYgYml0bWFwKSBjb25zdAoreworICAgIHJldHVybiBtX2RlZmVycmVkU2tCaXRtYXBJ
ZHMuY29udGFpbnMoYml0bWFwLmdldEdlbmVyYXRpb25JRCgpKTsKK30KKworU2tCaXRtYXAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkp
OworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNrSVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgp
LndpZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6
ZS5pc0VtcHR5KCkpOworCisgICAgY3JlYXRlRnJhbWVHZW5lcmF0b3IoZGVjb2Rlcik7CisKKyAg
ICBTa0lSZWN0IGZ1bGxSZWN0ID0gU2tJUmVjdDo6TWFrZVNpemUoZnVsbFNpemUpOworCisgICAg
Ly8gQ3JlYXRlcyBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRo
ZSBlbnRpcmUgaW1hZ2Ugd2l0aG91dCBzY2FsaW5nLgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAg
ICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUu
d2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOworICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcg
TGF6eURlY29kaW5nUGl4ZWxSZWYobV9uZXh0SWQsIGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJl
ZigpOworCisgICAgLy8gSW5mb3JtIHRoZSBiaXRtYXAgdGhhdCB3ZSB3aWxsIG5ldmVyIGNoYW5n
ZSB0aGUgcGl4ZWxzLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaGludAorICAgIC8vIHN1YnN5c3Rl
bXMgdGhhdCBtYXkgdHJ5IHRvIGNhY2hlIHRoaXMgYml0bWFwIChlLmcuIHBpY3R1cmVzLCBwaXBl
cywgZ3B1LCBwZGYsIGV0Yy4pCisgICAgYml0bWFwLnNldEltbXV0YWJsZSgpOworCisgICAgLy8g
RklYTUU6IFNldHRpbmcgYml0bWFwLnNldElzT3BhcXVlKCkgaXMgYmlnIHBlcmZvcm1hbmNlIGdh
aW4gaWYgcG9zc2libGUuIFdlIGNhbgorICAgIC8vIGRvIHNvIHNhZmVseSBpZiB0aGUgaW1hZ2Ug
aXMgZnVsbHkgbG9hZGVkIGFuZCBpdCBpcyBhIEpQRUcgaW1hZ2UsIG9yIGltYWdlIHdhcworICAg
IC8vIGRlY29kZWQgYmVmb3JlLgorCisgICAgbV9kZWZlcnJlZFNrQml0bWFwSWRzLmFkZChiaXRt
YXAuZ2V0R2VuZXJhdGlvbklEKCkpOworICAgIHJldHVybiBiaXRtYXA7Cit9CisKK1NrQml0bWFw
IEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBz
Y2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAg
ICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2FzdDxMYXp5RGVjb2Rp
bmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQoIXBpeGVsUmVmLT5p
c1NjYWxlZChsb29rdXBGcmFtZUdlbmVyYXRvcihwaXhlbFJlZi0+aWQoKSktPnNpemUoKSkgJiYg
IXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAwOworICAgIHJv
d0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFw
OworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZp
Zywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93Qnl0ZXMp
OworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVm
KHBpeGVsUmVmLT5pZCgpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYoKTsKKwor
ICAgIC8vIFNlZSBjb21tZW50cyBpbiBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKCkuCisgICAg
cmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsKKyAgICBtX2RlZmVycmVkU2tCaXRtYXBJZHMu
YWRkKHJlc2l6ZWRCaXRtYXAuZ2V0R2VuZXJhdGlvbklEKCkpOworICAgIHJldHVybiByZXNpemVk
Qml0bWFwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgbG9v
a3VwRnJhbWVHZW5lcmF0b3IoYml0bWFwKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OworfQorCit2b2lkKiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoaW50IGlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7Cisg
ICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbG9ja2VkU2tC
aXRtYXAuaXNOdWxsKCkpOworCisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yID0g
bG9va3VwRnJhbWVHZW5lcmF0b3IoaWQpOworICAgIFNrSVNpemUgZnVsbFNpemUgPSBnZW5lcmF0
b3ItPnNpemUoKTsKKworICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNhdmVzIHRoZSBmdWxsIHNpemUg
aW1hZ2UgYXQgdGhlIG1vbWVudC4KKyAgICBJbWFnZUZyYW1lQ2FjaGUqIGZyYW1lQ2FjaGUgPSBs
b29rdXBGcmFtZUNhY2hlKGlkLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAgYml0bWFwOworCisg
ICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhlbHMgYXJlIG93bmVk
IGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAorICAgICAgICAvLyBh
IHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAgICAgICBJbWFnZUZy
YW1lKiBmcmFtZSA9IGdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7
CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlmIHRoaXMgaXMgY29tcGxl
dGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChJbWFnZUZyYW1lQ2FjaGU6
OmNyZWF0ZShpZCwgZnVsbFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3IuIFJl
cG9ydCB0aGlzIHRvIEJpdG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKworICAgICAgICBiaXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAgYml0
bWFwID0gZnJhbWVDYWNoZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXplICE9
IHNjYWxlZFNpemUpIHsKKyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRoZS1m
bHkgYW5kIHNjYWxlZCBpbWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNlLgor
ICAgICAgICAvLyBGSVhNRTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4KKyAg
ICAgICAgbV9sb2NrZWRTa0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJp
dG1hcCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUu
d2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbG9j
a2VkU2tCaXRtYXAgPSBiaXRtYXA7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7
CisgICAgcmV0dXJuIG1fbG9ja2VkU2tCaXRtYXAuZ2V0QWRkcihzY2FsZWRTdWJzZXQueCgpLCBz
Y2FsZWRTdWJzZXQueSgpKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1Bp
eGVscygpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBtX2xv
Y2tlZFNrQml0bWFwLnVubG9ja1BpeGVscygpOworICAgIG1fbG9ja2VkU2tCaXRtYXAucmVzZXQo
KTsKK30KKworYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBj
b25zdAoreworICAgIHJldHVybiB0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNN
YWluVGhyZWFkKCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVGcmFtZUdl
bmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICArK21fbmV4
dElkOworICAgIG1fZnJhbWVHZW5lcmF0b3JzLmFkZChtX25leHRJZCwgSW1hZ2VGcmFtZUdlbmVy
YXRvcjo6Y3JlYXRlKGRlY29kZXIpKTsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvciogSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUdlbmVyYXRvcihpbnQgaWQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZnJhbWVHZW5lcmF0b3JzLmdldChpZCk7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0
b3IqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNMYXp5RGVjb2RlZChiaXRtYXApKTsK
KyAgICByZXR1cm4gbG9va3VwRnJhbWVHZW5lcmF0b3Ioc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5n
UGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxSZWYoKSktPmlkKCkpOworfQorCitJbWFnZUZyYW1lQ2Fj
aGUqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+
aXNFcXVhbChpZCwgc2NhbGVkU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hl
W2ldLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5n
U3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXpl
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaWQsIHNjYWxlZFNpemUp
KSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmN2Q5MzBjNGRlMmEzMTExYjJiZjc5
Mjc2MmMxYmE4MGFhYmVlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAorI2RlZmluZSBJbWFn
ZURlY29kaW5nU3RvcmVfaAorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa1Jl
Y3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2Rl
cjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CitjbGFzcyBJbWFnZUZyYW1lQ2FjaGU7Citj
bGFzcyBTaGFyZWRCdWZmZXI7CisKKy8vIFRoaXMgY2xhc3MgY2FuIG9ubHkgYmUgaW5zdGFudGlh
dGVkIG9uIG1haW4gdGhyZWFkLiBUaGVyZSB3aWxsIGJlIGFuCisvLyBpbnN0YW5jZSBvbiBpbXBs
IHRocmVhZCBpbiB0aGUgZnV0dXJlIGJ1dCB0aGF0IHBhcnQgb2YgaW1wbGVtZW50YXRpb24KKy8v
IGlzIGluY29tcGxldGUuIFNlZSBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NDI0MAorLy8gZm9yIGRldGFpbHMuCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KKyAgICB+
SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bnN0YW5jZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworCisgICAgYm9vbCBpc0xhenlE
ZWNvZGVkKGNvbnN0IFNrQml0bWFwJikgY29uc3Q7CisgICAgU2tCaXRtYXAgY3JlYXRlTGF6eURl
Y29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIFNrQml0bWFwIHJl
c2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworCisgICAgdm9pZCBzZXRE
YXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CisKKyAgICAvLyBZb3UgbWF5IG9ubHkgbG9jayBvbmUgc2V0IG9mIHBpeGVs
cyBhdCBhIHRpbWU7IG92ZXJsYXBwaW5nIGxvY2sgY2FsbHMgYXJlIG5vdCBhbGxvd2VkLgorICAg
IHZvaWQqIGxvY2tQaXhlbHMoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKK3By
aXZhdGU6CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4pOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IqIGxvb2t1cEZyYW1lR2Vu
ZXJhdG9yKGludCBpZCkgY29uc3Q7CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvciogbG9va3VwRnJh
bWVHZW5lcmF0b3IoY29uc3QgU2tCaXRtYXAmKSBjb25zdDsKKyAgICBJbWFnZUZyYW1lQ2FjaGUq
IGxvb2t1cEZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25z
dDsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKTsKKworICAgIEhhc2hNYXA8aW50LCBPd25QdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4g
PiBtX2ZyYW1lR2VuZXJhdG9yczsKKyAgICBWZWN0b3I8T3duUHRyPEltYWdlRnJhbWVDYWNoZT4g
PiBtX2ZyYW1lQ2FjaGU7CisgICAgSGFzaFNldDx1bnNpZ25lZD4gbV9kZWZlcnJlZFNrQml0bWFw
SWRzOworCisgICAgaW50IG1fbmV4dElkOworICAgIFNrQml0bWFwIG1fbG9ja2VkU2tCaXRtYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVD
YWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNlY2I2YWE2MGQzYzJiMjdmNDFkMDgwOGZkZWMzY2ZmODdk
MWRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgp
Cit7Cit9CisKK0ltYWdlRnJhbWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKGludCBpZCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBp
c0NvbXBsZXRlKQorICAgIDogbV9pZChpZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXpl
KQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUp
Cit7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjppc0VxdWFsKGludCBpZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaWQgPT0gbV9pZCAmJiBzY2Fs
ZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDkyOGI5NmJlZmY1MDI2NmJjOThiZjQ0MGIz
MzBmYzEwNzllNGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUNhY2hlX2gKKyNkZWZpbmUgSW1hZ2VGcmFtZUNhY2hl
X2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVk
ZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIEltYWdlRnJhbWVDYWNoZSBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEg
aW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKKy8vIGJ5IHR3byB0aGluZ3M6CisvLyAxLiBJbWFnZSBJ
RC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBmcmFnbWVudCBjb21lcyBmcm9tLgorLy8g
Mi4gU2NhbGVkIGltYWdlIHNpemUuCitjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKGludCBpZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0Nv
bXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUZyYW1lQ2Fj
aGUoaWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOworICAgIH0KKworICAgIElt
YWdlRnJhbWVDYWNoZShpbnQgaWQsIGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJv
b2wgaXNDb21wbGV0ZSk7CisgICAgfkltYWdlRnJhbWVDYWNoZSgpOworCisgICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9CisgICAgU2tCaXRtYXAm
IGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBib29sIGlzRXF1YWwoaW50IGlk
LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ29tcGxldGUo
KSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9p
ZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAg
ICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiYzQzMGFi
Mjc1NzgzNjBiNTk3YmVhYTc4YWRmOTU3ODRkZjI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNvZGVyKQoreworICAgIG1fc2l6
ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5z
aXplKCkuaGVpZ2h0KCkpOworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdl
bmVyYXRvcigpCit7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVj
b2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKK30KKwordm9pZCBJbWFnZUZy
YW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIGlmIChtX2RlY29k
ZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIGFsbERhdGFSZWNl
aXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wZTdjOWNjNTA4N2VmMmUyOWViYTcxNTFiNWE0YTFhYzg0ODU4
ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorI2RlZmluZSBJbWFnZUZyYW1lR2VuZXJh
dG9yX2gKKworI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VG
cmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW1hZ2VGcmFt
ZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2Vu
ZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4K
KyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBTa0lT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgT3du
UHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
ZGF0YTsKKyAgICBTa0lTaXplIG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDA5ZTNmNmZhMTVjMTkyZWIxZTY0ZTgyNDcxNDlkMjMzNzBlN2VmMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0xhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihp
bnQgaWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1
YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX3NjYWxl
ZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sK
K30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9
CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1
bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9
CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwg
bV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2
b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVscyhpZCgpLCBtX3NjYWxlZFNp
emUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25V
bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT51bmxvY2tQaXhlbHMoKTsKK30K
KworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjkxYWMyNWI0ZWEyMjNh
MmQ1YzVhZGVlZDdiNGIwMzYyYWI3MzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVm
aW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZm
ZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2lu
Y2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF6eURlY29k
aW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7CitwdWJsaWM6CisgICAgTGF6eURlY29k
aW5nUGl4ZWxSZWYoaW50IGlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7
CisKKyAgICBTS19ERUNMQVJFX1VORkxBVFRFTkFCTEVfT0JKRUNUKCkKKworICAgIGludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29sIGlzU2NhbGVkKGNvbnN0IFNrSVNpemUm
IGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQq
IG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2Nr
UGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgaW50IG1faWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7
CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVsUmVmX2hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAK
aW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0YWFmNTBhZC4uMmE5ZTU2YTQy
ODU3N2MxZmExYzZjMzRkOGU0ODRlOGM4MGE1YzJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAt
NDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0
aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCkBAIC03Myw2ICs3
OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lT
aXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBT
a0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpICYm
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+aXNMYXp5RGVjb2Rl
ZChtX2ltYWdlKSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VP
bk1haW5UaHJlYWQoKS0+cmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJ
bWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNp
emVkQml0bWFwKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAg
IGJvb2wgc2hvdWxkQ2FjaGUgPSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91
bGRDYWNoZVJlc2FtcGxpbmcoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCmluZGV4IGQwY2M1M2IxNDc1N2QxNzQ0MjJmNzY4Nzk4NDBlY2IzNWFmOTUyNDYuLjIw
YWI4YzFhYmMzNzAyYTA4YjM5MGMwOTdkMzU2NzI5NjFiZjVkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0x
NDUsNiArMTQ1LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBt
X2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZW5kaWYKICAgICAgICAgfQorCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNr
aWEoYml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRT
a0JpdG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5i
aXRtYXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4
NmMwZi4uNjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVz
dHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0
ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFs
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VX
ZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAg
ICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0lEQlJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXli
b2FyZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hp
Z2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBh
YmQ4NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFl
Mzc5Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2Vk
MmY3ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2Rp
bmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBA
QCB2b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3Vw
cG9ydCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwog
ICAgIFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNo
dXRkb3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5k
Yzc3MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1w
bChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFj
dG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxl
ZCh0cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2Up
CisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2Rl
ZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVy
U2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJT
ZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAg
ICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAor
dm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYm
IGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJs
ZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVj
ZDA4NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03
OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRU
aWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQo
Ym9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiAr
MTc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0
b3JJbkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwog
ICAgIGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxl
U2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNp
bmNsdWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ugewor
CitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0
dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVj
b2Rlci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIp
KTsKKyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1
dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQg
c2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIq
IG1fYWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6
eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZh
czsKK307CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0
dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6
eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7Cisg
ICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRt
YXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVp
Z2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdl
LT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlz
SW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVn
aW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2Ut
PmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQ
RUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisK
KyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0Yo
RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAg
ICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFw
IHNjYWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUx
KSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRt
YXAuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgp
KTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1Rf
RVEoNTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFs
RGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVt
cENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENh
bnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7
CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0
YjMxMTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMg
SW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAg
OiBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKwor
ICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7
CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0
U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitw
cml2YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzY5ODYzMzMyZTdj
ZDRiMmE5NmRhYmI1MDk2ZTIyZDdkY2ExMTRlNC4uY2U5N2ZjYWNiMzUwMmM0Mzk2NzA1N2M2YmIw
OGJkZjc0N2NmNTE5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1h
Z2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6
CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJl
c2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0
KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5j
ZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIw
MTItMTAtMTYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZW5hbWUgc29tZSBBdWRpb05vZGVzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMzBjZTI4ODUxZmM5YTlhNDZiOGI2M2U2ZGJkMDBk
YTFjM2ZlYTgzOC4uNWEzMjEwNDQ5NmY3OWIxZjJhNDU0OGIzNjUzNDU2YjQwNjFmYTZiNSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApA
QCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRl
ZFBhaW50aW5nW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtcGFpbgogc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvW10gPSAiLS1lbmFi
bGUtYWNjZWxlcmF0ZWQtdmlkZW8iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVXNlR3JhcGhp
Y3NDb250ZXh0M0RJbXBsZW1lbnRhdGlvbltdID0gIi0tdXNlLWdyYXBoaWNzLWNvbnRleHQtM2Qt
aW1wbGVtZW50YXRpb249IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQ
YWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsKK3N0YXRpYyBjb25zdCBj
aGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVy
cmVkLWltYWdlLWRlY29kaW5nIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzT3B0
W10gPSAiLS1zdHJlc3Mtb3B0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc0Rlb3B0
W10gPSAiLS1zdHJlc3MtZGVvcHQiOwpAQCAtMTMzLDYgKzEzNCw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiBhcmd2W10pCiAgICAgYm9vbCBkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBi
b29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc09wdCA9IGZhbHNlOwog
ICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKICAgICBib29sIGhhcmR3YXJlQWNjZWxlcmF0
ZWRHTCA9IGZhbHNlOwpAQCAtMTgzLDYgKzE4NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBHcmFwaGlj
Q29udGV4dDNEIGltcGxlbWVudGF0aW9uICVzXG4iLCBpbXBsZW1lbnRhdGlvbi5jX3N0cigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRp
bmcpCiAgICAgICAgICAgICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nKQor
ICAgICAgICAgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAg
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc09wdCkKICAgICAgICAgICAgIHN0cmVz
c09wdCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc0Rl
b3B0KQpAQCAtMjIyLDYgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10p
CiAgICAgICAgIHNoZWxsLnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMkRDYW52
YXNFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQo
YWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRQZXJUaWxlUGFp
bnRpbmdFbmFibGVkKHBlclRpbGVQYWludGluZ0VuYWJsZWQpOworICAgICAgICBzaGVsbC5zZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQp
OwogICAgICAgICBzaGVsbC5zZXRKYXZhU2NyaXB0RmxhZ3MoamF2YVNjcmlwdEZsYWdzKTsKICAg
ICAgICAgc2hlbGwuc2V0U3RyZXNzT3B0KHN0cmVzc09wdCk7CiAgICAgICAgIHNoZWxsLnNldFN0
cmVzc0Rlb3B0KHN0cmVzc0Rlb3B0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCmluZGV4IDMyNTg1ZmFhMWIyZDhhZDgxYTgzYjE1ZThmNzEyYmQ4Y2E3MjQ4
OWIuLmFjNzc1OTY4MWEwNDZkMDNkNDcxOGZjNDU4YzI3ZTgyZTE0NjE3OTkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTE0LDYgKzExNCw3IEBA
IFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICAsIG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwg
bV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc3RyZXNzT3B0KGZhbHNlKQogICAgICwg
bV9zdHJlc3NEZW9wdChmYWxzZSkKICAgICAsIG1fZHVtcFdoZW5GaW5pc2hlZCh0cnVlKQpAQCAt
MjI5LDYgKzIzMCw3IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcm
IHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IG1fYWNj
ZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5kZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZCA9IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgbV9w
cmVmcy5kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkOwogICAgIG1fcHJlZnMuYXBwbHlUbygmd2ViVmlldyk7CiB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggNDRiNWFlMzg4YzY4ZDY1ZGU4
OTBmYzgwMGZlZDUyMjllZWMyYTMyNC4uMzkyNjYyNDQ2OWI2OGNjYmM4NzRiNDkxZWE0ODNhMGI2
MzkyY2U1NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAg
LTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KICAgICB2b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkg
eyBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0
UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCA9IGVuYWJsZWQ7IH0KICNpZiBkZWZpbmVkKE9TX1dJTikKICAgICAvLyBBY2Nlc3MgdG8g
dGhlIGZpbmlzaGVkIGV2ZW50LiBVc2VkIGJ5IHRoZSBzdGF0aWMgV2F0Y2hEb2cgdGhyZWFkLgog
ICAgIEhBTkRMRSBmaW5pc2hlZEV2ZW50KCkgeyByZXR1cm4gbV9maW5pc2hlZEV2ZW50OyB9CkBA
IC0yMzUsNiArMjM2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQ7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOwogICAgIGJvb2wg
bV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkOwogICAgIFdlYlByZWZlcmVuY2VzIG1fcHJlZnM7CiAgICAgYm9vbCBtX3N0cmVz
c09wdDsKICAgICBib29sIG1fc3RyZXNzRGVvcHQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggM2JjMmNkZDlmMmFlNDE3MGMzM2Fk
NjQxMDZkNGE3ZjJkMDkwMjFmNS4uNWM4YzkyYzk5OTQyNjQ0ZGQxOWE0OWM5OGU2NmMxYTRmMDZk
NDQ0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVy
ZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlc2V0KCkK
ICAgICBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgZm9yY2VDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsK
KyAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgbWVkaWFQbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsKICAgICBtb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBjc3NDdXN0b21GaWx0ZXJFbmFibGVkID0gZmFsc2U7CkBAIC0yMjQs
NiArMjI1LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJWaWV3
KQogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChhY2NlbGVyYXRl
ZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFi
bGVkKGRlZmVycmVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0
ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOworICAgIHNldHRp
bmdzLT5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZShtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSk7CiAgICAgc2V0dGluZ3MtPnNl
dE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOwogICAgIHNldHRp
bmdzLT5zZXRBcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmb3JjZUNv
bXBvc2l0aW5nTW9kZSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuaAppbmRleCBjMzY1NTNiMzU0Njk2NGM3NmYyOTkxNmE5ZWE5YjllMmEyM2UyNGIy
Li5lMDMxNWYyZDA3YzFlNWI5ODU1ZmU3YjNhYTJlMTRjZjdlMWU0MGJmIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKQEAgLTEwOSw2ICsxMDks
NyBAQCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXMgewogICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZh
c0VuYWJsZWQ7CiAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGFj
Y2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZDsKICAgICBib29sIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOwogICAg
IGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVkOwogICAgIGJvb2wgY3NzQ3VzdG9tRmlsdGVyRW5h
YmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CmluZGV4IGMzMTBlYjE1YjE5NTRkZGVkZGMzMzNiOTgwZjY2NWQ1ZmNkYjkx
Y2UuLmE2OWY1YTgyMmFhM2ZlMzI4NDZmOTE3MDExNjQxOTNjYzIyMzhmNTIgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpA
QCAtMzkwLDYgKzM5MCw5IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAg
IFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvc29mdHdhcmVjb21w
b3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtc29mdHdhcmUtY29tcG9zaXRp
bmcnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJs
ZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVuYWJsZS1wZXItdGlsZS1wYWludGluZycs
ICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAgICAgICAgIF0KIAogICAgICMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA2NzE4MzE5N2I4YTIzNmRlZGVmZWJjODEyODY4Yjk0ZTFkYmNlN2RkLi42ODVmNTViYmVlN2Vm
M2JmYzE2OTYzYzBjMmFjYzI3NmQyYjE5M2E4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSB2aXJ0dWFsIHRlc3Qgc3VpdGUg
Zm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJyZWQgaW1hZ2UKKyAgICAgICAgZGVjb2RpbmcuCisK
KyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcyB3
aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAgIC0tZm9yY2UtY29tcG9zaXRpbmcgLS1lbmFibGUt
cGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmcuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JF
QURNRS50eHQ6IEFkZGVkLgorCiAyMDEyLTEwLTE2ICBTdGVwaGVuIENoZW5uZXkgIDxzY2hlbm5l
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQW4gZmVJbWFnZSB0aGF0IHRyaWVzIHRvIHJlbmRl
ciBpdHNlbGYgc2hvdWxkIGJlIHN0b3BwZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDgyMGQ5OGEzZjUxZjViMTRjNGVlYzhlZWFkZWIy
YzIyMjQ3MzY2MGYuLjhjOWNjNmE0NTRkNmQ3MTdmYmQxNDcxN2Q1N2M5YjhhOWU0ZmYyOTcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
NDA2OCwzICs0MDY4LDI3IEBAIHdlYmtpdC5vcmcvYi85OTEzNCBwbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy90aW55LWxheWVyLXJvdGF0ZWQuaHRtbCBbIFBhc3MKIHdlYmtpdC5vcmcvYi85
OTEzOCBbIFNub3dMZW9wYXJkIF0gc3ZnL2N1c3RvbS9mb3JlaWduLW9iamVjdC1za2V3LnN2ZyBb
IFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi85OTQ2NiBmYXN0L2Zvcm1z
L2RhdGUvY2FsZW5kYXItcGlja2VyLWtleS1vcGVyYXRpb25zLmh0bWwgWyBUZXh0IF0KKworIyBU
aGVzZSB0ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1YWwgdGVz
dCBzdWl0ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRvIGJlIHN1
cHByZXNzZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNh
Y2hlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3NzLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9wZGYtYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1icm9rZW4t
aW1hZ2UtZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBlZy13aXRo
LWNvbG9yLXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0
MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxh
cmdlLWNoZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9naWYt
bG9vcC1jb3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWludC1zdWJy
ZWN0LWdyaWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwtY3JhY2st
aW1hZ2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2Vz
L2Zhdmljb24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtY2ly
Y2xlLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMt
cmluZy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1ub3Qt
aW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZv
Y3VzLXJpbmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1h
cC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2JqZWN0LWlt
YWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwg
WyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2ZpbGUuaHRt
bCBbIE1pc3NpbmcgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJmODgyZWIwNDMyZDVmZDAwYjgyODFlMjg4YjE5ODk5OWNiN2Q4NTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKQEAgLTAsMCArMSwyIEBACisjIFRlc3Qgc3VpdGVz
IGluIHRoaXMgZGlyZWN0b3J5IHRlc3QgdGhlICdkZWZlcnJlZCBpbWFnZSBkZWNvZGluZycgY29k
ZSBwYXRoCisjIHRocm91Z2ggQ2hyb21pdW0gRFJULgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169363</attachid>
            <date>2012-10-18 00:55:30 -0700</date>
            <delta_ts>2012-10-18 13:37:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121018005416.patch</filename>
            <type>text/plain</type>
            <size>79456</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk1NGU3MGE0ZTQ2ODVh
MjJkMDQ0MDViZWFlYzgxZTkzMjg0MmQwNy4uN2MyNTJjNGM4ODM5NTY4MDg1OWMyMmY3MzVkNjc0
OWZhYTJkN2EzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgSW1hZ2VGcmFtZUNhY2hlCisK
KyAgICAgICAgQSBjb250YWluZXIgZm9yIGEgc2NhbGVkIGltYWdlIGZyYWdtZW50LiBJbiBhZGRp
dGlvbiB0byBiaXRtYXAgcGl4ZWxzCisgICAgICAgIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBJRCBvZiB0aGUgaW1hZ2UsIHNjYWxlIGFuZCBjbGlwcGluZy4KKworICAgICAgICBJ
bWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGhpcyBvYmplY3QgaXMgcmVzcG9uc2libGUg
Zm9yIGdlbmVyYXRpbmcgZGVjb2RlZCBwaXhlbHMuIEl0IGlzIGFsc28KKyAgICAgICAgYSBjb250
YWluZXIgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBpbWFnZSBkZWNv
ZGVyLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVsUmVmCisKKyAgICAgICAgVGhpcyBvYmpl
Y3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBlbmFibGUgbGF6eSBkZWNvZGluZy4gV2hl
bgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nlc3MgcGl4ZWxzIExhenlEZWNvZGluZ1Bp
eGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29udGFpbnMgaW5mb3JtYXRpb24gdG8gbG9j
YXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRoZXNlCisgICAgICAgIGluZm9ybWF0aW9u
IGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3RvcmUgdG8gYWNjZXNzIGFjdHVhbCBwaXhl
bHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVyZSBhcmUgYWJvdXQgODAgdGVzdHMgaW4g
dGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAgcnVubmluZyB0aGlzIGZlYXR1cmUgaW4g
dGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQgdGVzdHMuIEFkZGVkIERlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdCB0byB2ZXJpZnkgZGVmZXJyZWQKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
YmVoYXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rl
cjo6RGVmZXJyZWRJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1h
Z2VEZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2Rlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0bWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpmcmFtZUdlbmVyYXRvckJlaW5nRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1lQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNh
Y2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2Rp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Q2FjaGU6OkltYWdlRnJhbWVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2Fj
aGU6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VG
cmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Yml0bWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6
On5JbWFnZUZyYW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5l
cmF0b3I6OmRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6
c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VG
cmFtZUdlbmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjppbWFnZUlkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURl
Y29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNv
ZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAg
IChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6ZnJhbWVHZW5lcmF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKwogMjAxMi0xMC0xOCAgS2VudCBU
YW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU2V0IG1pbi13aWR0aCBwcm9w
ZXJ0eSBpbnN0ZWFkIG9mIHdpZHRoIHByb3BlcnR5IGZvciBkYXRlL3RpbWUgZmllbGRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDFiZTE1M2I4ZTYwOThjMWYyN2E2NzcwMGEwNDIyMmI3
NjQ4NjY1NzQuLmFkNjhjNWJhMDI0ZDAyYmYxMzEyZDVkZTU5YzlmZmVjZWQzOTYzNDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTItMDktMDggIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVu
dCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRpbmcgbmV3IHVuaXQgdGVzdHMgZm9yIGRlZmVycmVkIGltYWdl
IGRlY29kaW5nLgorICAgICAgICBUaGVzZSB0ZXN0cyBhcmUgZGVmaW5lZCBpbiBEZWZlcnJlZElt
YWdlRGVjb2RlclRlc3QuY3BwLiBUaGV5IHZlcmlmeQorICAgICAgICBpbWFnZSBkZWNvZGluZyBo
YXBwZW5zIG9ubHkgd2hlbiBTa1BpY3R1cmUgaXMgcmFzdGVyaXplZCBmb3IgYm90aAorICAgICAg
ICBzY2FsZWQgYW5kIG5vbi1zY2FsZWQgY2FzZXMuCisKKyAgICAgICAgVGVzdHM6IERlZmVycmVk
SW1hZ2VEZWNvZGVyVGVzdC5kcmF3SW50b1NrUGljdHVyZQorICAgICAgICAgICAgICAgRGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0LmRyYXdTY2FsZWRJbnRvU2tQaWN0dXJlCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBz
cmMvV2ViS2l0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAqIHNy
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6
OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0ltcGwp
OgorICAgICAgICAqIHRlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpTZXRVcCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OlRlYXJEb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpNb2NrSW1hZ2VEZWNvZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCk6CisKIDIwMTItMTAtMTcgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBNb3ZlIG1peGVkIGNvbnRlbnQgbG9naWMgb3V0IG9mIEZyYW1lTG9hZGVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggYzlmZGE2NmI0YzEwZDg2YzQxZmMzZTE1OWY2ZDI1MjcwYzY1NTY3YS4u
Zjc4OTViZTFlMTVlYjY4YWY0NzA3M2U0MjM2NGVmOGM5NzAzZmI5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDkxNCw2ICs0OTE0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLm1t
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwJywKQEAgLTQ5
MzMsNiArNDkzNSwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNh
Y2hlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRy
YWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5o
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNw
cAppbmRleCA4MmRmZGUxYzlkZDgyZTMxNWJiZGQ5ZWU4OWNkMDgyM2M5Y2M4ZTRkLi5hYmZhNTk4
OGI0MmJjNjkwZjdlYWJjOTUzZWViMDdkMDUzMDAzYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZW1vcnlJbnN0
cnVtZW50YXRpb24uaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkRlZmVy
cmVkSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc5LDcgKzgzLDcgQEAgdm9p
ZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRl
dGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8v
IG1hZGUuCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGlj
X2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBt
X2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CisgICAgICAgIG1f
ZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVjb2RlclB0cj4oTmF0aXZlSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAg
ICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQogICAgICAg
ICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1h
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgK
aW5kZXggMGQ4YTAxZTI2YTcyY2ZmZjM5YWE0NjU0Mzc0MTQ0YTBhMTc5YWMzOC4uNjZhOGEwYTUx
YzM5ZmI5MjY4YjIyMWE0N2I2ODc1MDE1OTNiYzRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NywxMCArNDcsMjAgQEAgY2xhc3Mg
SW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJ
bWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCit0eXBlZGVmIENHSW1h
Z2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQogY2xhc3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUlt
YWdlU291cmNlUHRyOwordHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0
cjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBEZWZlcnJlZEltYWdl
RGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVy
OwordHlwZWRlZiBEZWZlcnJlZEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOwor
I2VsaWYgVVNFKENHKQorI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNvZGVyCisj
ZWxzZQordHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwogI2VuZGlmCiAK
IC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0
aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KQEAgLTE1OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgTmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdl
RGVjb2RlclB0ciBtX2RlY29kZXI7CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1f
YWxwaGFPcHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzU3NDE5NmU3MWFkYjQxMzE1Y2RiM2NiNzU2MmVhMDBhZjAxNjg1YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVk
SW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURl
Y29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2
ZWQoZmFsc2UpCisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2Rlcikp
Cit7Cit9CisKK0RlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQor
eworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VE
ZWNvZGluZ1N0b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVm
ZXJyZWRJbWFnZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9u
KQoreworICAgIEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKGRhdGEsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICByZXR1cm4g
YWN0dWFsRGVjb2RlciA/IG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihhY3R1YWxEZWNvZGVyKSA6
IDA7Cit9CisKK1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVy
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rl
ci5sZWFrUHRyKCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9
CisKK0ltYWdlRnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhp
cyBpcyBhIHNpbmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2Ug
YSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxl
ZCBieQorICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlv
bnMgdGhhdCBkbyBzeW5jaHJvbm91cyBpbWFnZQorICAgIC8vIGRlY29kaW5nLgorICAgIGlmIChJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9h
Y3R1YWxEZWNvZGVyCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50
KCkgPT0gY0FuaW1hdGlvbk5vbmUKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKSkgeworCisgICAgICAgIG1fc2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgp
OworICAgICAgICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFt
ZUV4dGVuc2lvbigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlEZWNvZGVkU2tCaXRtYXAgPSBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmNyZWF0ZUxhenlEZWNv
ZGVkU2tCaXRtYXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIG1fbGF6eURl
Y29kZWRGcmFtZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0bWFwKTsKKyAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURl
Y29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNl
aXZlZCk7CisKKyAgICAgICAgLy8gRG9uJ3QgbWFyayB0aGUgZnJhbWUgYXMgY29tcGxldGVseSBk
ZWNvZGVkIHVudGlsIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIC8vIGRlY29kZXIgaGFzIHJlYWxs
eSBkZWNvZGVkIGl0LiBVbnRpbCB0aGVuLCBvdXIgZGF0YSBhbmQgbWV0YWRhdGEgbWF5CisgICAg
ICAgIC8vIGJlIGluY29ycmVjdCwgc28gY2FsbGVycyBjYW4ndCByZWx5IG9uIHRoZW0uCisgICAg
ICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFs
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpIDogJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwor
dm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAg
ICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIGltYWdlIGRlY29kaW5nIGlzIGRl
ZmVycmVkLgorICAgICAgICAvLyBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4g
b3duZXJzaGlwIG9mIG1fZGF0YSBpcworICAgICAgICAvLyB0cmFuc2ZlcnJlZCB0byBJbWFnZURl
Y29kaW5nU3RvcmUuCisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJl
Y2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERh
dGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
IW1fZGF0YSk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpCit7CisgICAgLy8gbV9hY3R1YWxEZWNvZGVyIGlzIDAgb25seSBpZiBp
bWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCBhbmQgdGhhdAorICAgIC8vIG1lYW5zIGltYWdlIGhl
YWRlciBkZWNvZGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2l6ZSBpcyBhdmFpbGFibGUuCisgICAgcmV0
dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkg
OiB0cnVlOworfQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCkg
OiBtX3NpemU7Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIg
PyBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplOworfQor
CitzaXplX3QgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQoreworICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA6IDE7Cit9
CisKK2ludCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKSA6IGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVy
OjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAg
Ly8gSWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUg
aXMgbWFuYWdlZCBieQorICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdu
b3JlZC4KKyAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXIt
PmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNv
ZGluZ1N0b3JlIHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4g
dHJ1ZSBoZXJlIGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1h
eSBub3QgZ28gdGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KSA6IHRydWU7Cit9CisKK3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8gSWYgZnJh
bWUgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlD
YWNoZQorICAgIC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rl
ciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmIzM2ZlMzVlMGVjNmIzMjE1YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RGVmZXJyZWRJbWFnZURlY29kZXJfaAorI2RlZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisK
KyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29k
ZXIgeworcHVibGljOgorICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBE
ZWZlcnJlZEltYWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1h
Z2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24pOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNy
ZWF0ZUZvclRlc3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgp
OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50
IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNv
ZGVyKiBhY3R1YWxEZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsK
KyAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1f
YWN0dWFsRGVjb2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIElu
dFNpemUgbV9zaXplOworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdT
dG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA2ODljZThjYWJjOWQzMzJlM2YzZTU3YmNjNTkwMDg1ZTUy
OTMzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgi
CisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUu
aCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF6eURlY29k
aW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIK
KworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRl
Y29kZWQgU2tQaXhlbFJlZi4KK2NvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenki
OworCitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitz
dGF0aWMgdm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGlt
YWdlRGVjb2RpbmdTdG9yZSkKK3sKKyAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFpblRocmVhZDsK
KyAgICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3JlOworfQorfSAv
LyBuYW1lc3BhY2UKKworSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQor
eworfQorCitJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworfQor
CitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIHNfaW5z
dGFuY2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFs
aXplT25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNl
dEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0
cigpKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOwor
fQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1h
cCYgYml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4ZWxSZWYoKQorICAgICAgICAmJiBi
aXRtYXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgJiYgIW1lbWNtcChiaXRtYXAucGl4
ZWxSZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQsIHNpemVvZihsYWJlbExhenlEZWNv
ZGVkKSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29k
ZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lT
aXplOjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0
KCkpOworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIFNrSVJlY3QgZnVs
bFJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShmdWxsU2l6ZSk7CisKKyAgICAvLyBDcmVhdGVzIGEg
bGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiB0aGF0IHJlZmVyZW5jZXMgdGhlIGVudGlyZSBpbWFn
ZSB3aXRob3V0IHNjYWxpbmcuCisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRD
b25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBmdWxs
U2l6ZS5oZWlnaHQoKSk7CisgICAgYml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQ
aXhlbFJlZihJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZGVjb2RlciksIGZ1bGxTaXplLCBm
dWxsUmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVudGlmeSB0aGlzIGlz
IGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNvZGluZ1BpeGVsUmVm
LgorICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBhY3R1YWwgVVJJIGlzIG1vcmUgdXNlZnVsLgorICAg
IGJpdG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7CisKKyAgICAvLyBJ
bmZvcm0gdGhlIGJpdG1hcCB0aGF0IHdlIHdpbGwgbmV2ZXIgY2hhbmdlIHRoZSBwaXhlbHMuIFRo
aXMgaXMgYSBwZXJmb3JtYW5jZSBoaW50CisgICAgLy8gc3Vic3lzdGVtcyB0aGF0IG1heSB0cnkg
dG8gY2FjaGUgdGhpcyBiaXRtYXAgKGUuZy4gcGljdHVyZXMsIHBpcGVzLCBncHUsIHBkZiwgZXRj
LikKKyAgICBiaXRtYXAuc2V0SW1tdXRhYmxlKCk7CisKKyAgICAvLyBGSVhNRTogU2V0dGluZyBi
aXRtYXAuc2V0SXNPcGFxdWUoKSBpcyBiaWcgcGVyZm9ybWFuY2UgZ2FpbiBpZiBwb3NzaWJsZS4g
V2UgY2FuCisgICAgLy8gZG8gc28gc2FmZWx5IGlmIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQg
YW5kIGl0IGlzIGEgSlBFRyBpbWFnZSwgb3IgaW1hZ2Ugd2FzCisgICAgLy8gZGVjb2RlZCBiZWZv
cmUuCisKKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3Rv
cmU6OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorewor
ICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgTGF6eURlY29kaW5nUGl4
ZWxSZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRt
YXAucGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2FsZWQocGl4ZWxSZWYt
PmZyYW1lR2VuZXJhdG9yKCktPnNpemUoKSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisK
KyAgICBpbnQgcm93Qnl0ZXMgPSAwOworICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVS
b3dCeXRlcyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7
CisKKyAgICBTa0JpdG1hcCByZXNpemVkQml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29u
ZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNj
YWxlZFN1YnNldC5oZWlnaHQoKSwgcm93Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4
ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKHBpeGVsUmVmLT5mcmFtZUdlbmVyYXRvcigp
LCBzY2FsZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYoKTsKKworICAgIC8vIFNlZSBjb21t
ZW50cyBpbiBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKCkuCisgICAgcmVzaXplZEJpdG1hcC5z
ZXRJbW11dGFibGUoKTsKKyAgICByZXR1cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OnNldERhdGEoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VS
VChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICAgIGlmIChpc0xhenlEZWNvZGVkKGJpdG1hcCkp
CisgICAgICAgIHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVs
UmVmKCkpLT5mcmFtZUdlbmVyYXRvcigpLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7
Cit9CisKK3ZvaWQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja1BpeGVscyhQYXNzUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+IGZyYW1lR2VuZXJhdG9yLCBjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbG9ja2VkU2tCaXRtYXAuaXNOdWxsKCkpOwor
CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IGZyYW1lR2VuZXJhdG9yLT5zaXplKCk7CisKKyAgICAv
LyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21lbnQu
CisgICAgSW1hZ2VGcmFtZUNhY2hlKiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVDYWNoZShmcmFt
ZUdlbmVyYXRvci0+aW1hZ2VJZCgpLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAgYml0bWFwOwor
CisgICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhlbHMgYXJlIG93
bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAorICAgICAgICAv
LyBhIHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAgICAgICBJbWFn
ZUZyYW1lKiBmcmFtZSA9IGZyYW1lR2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUgaWYgdGhpcyBp
cyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5kKEltYWdlRnJh
bWVDYWNoZTo6Y3JlYXRlKGZyYW1lR2VuZXJhdG9yLT5pbWFnZUlkKCksIGZ1bGxTaXplLCBmcmFt
ZS0+Z2V0U2tCaXRtYXAoKSwgdHJ1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLT5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
SWYgdGhpcyBpcyBhIGRlY29kaW5nIGVycm9yLiBSZXBvcnQgdGhpcyB0byBCaXRtYXBJbWFnZS4K
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYml0bWFwID0gZnJh
bWUtPmdldFNrQml0bWFwKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lQ2Fj
aGUtPmlzQ29tcGxldGUoKSk7CisgICAgICAgIGJpdG1hcCA9IGZyYW1lQ2FjaGUtPmJpdG1hcCgp
OworICAgIH0KKworICAgIGlmIChmdWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIC8v
IEltYWdlIHNjYWxpbmcgaXMgZG9uZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQgaW1hZ2UgaXMgZGVz
dHJveWVkCisgICAgICAgIC8vIGFmdGVyIHVzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlc2l6ZSBq
dXN0IHRoZSByZXF1ZXN0ZWQgZnJhZ21lbnQuCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBz
a2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9u
czo6UkVTSVpFX0xBTkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0
KCkpOworICAgIH0gZWxzZQorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gYml0bWFwOworICAg
IG1fbG9ja2VkU2tCaXRtYXAubG9ja1BpeGVscygpOworICAgIHJldHVybiBtX2xvY2tlZFNrQml0
bWFwLmdldEFkZHIoc2NhbGVkU3Vic2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3Zv
aWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMo
KTsKKyAgICBtX2xvY2tlZFNrQml0bWFwLnJlc2V0KCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpmcmFtZUdlbmVyYXRvckJlaW5nRGVzdHJveWVkKEltYWdlRnJhbWVHZW5lcmF0b3Iq
IGZyYW1lR2VuZXJhdG9yKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgZGVsZXRlRnJhbWVDYWNoZShmcmFtZUdlbmVyYXRvci0+aW1hZ2VJZCgpKTsKK30KKwor
Ym9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdAorewor
ICAgIHJldHVybiB0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNNYWluVGhyZWFk
KCk7Cit9CisKK0ltYWdlRnJhbWVDYWNoZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUNhY2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaW1hZ2VJZCwgc2NhbGVkU2l6ZSkp
CisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hlW2ldLmdldCgpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUo
aW50IGltYWdlSWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpbWFn
ZUlkKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzQzNmQ3Njc5NDE5NGQ3ZmE4
Njc5MmIzOTEzOWVlZGNlODUxMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKyNkZWZpbmUg
SW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURl
Y29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3MgSW1hZ2VGcmFtZUNhY2hl
OworY2xhc3MgU2hhcmVkQnVmZmVyOworCisvLyBUaGlzIGNsYXNzIGNhbiBvbmx5IGJlIGluc3Rh
bnRpYXRlZCBvbiBtYWluIHRocmVhZC4gVGhlcmUgd2lsbCBiZSBhbgorLy8gaW5zdGFuY2Ugb24g
aW1wbCB0aHJlYWQgaW4gdGhlIGZ1dHVyZSBidXQgdGhhdCBwYXJ0IG9mIGltcGxlbWVudGF0aW9u
CisvLyBpcyBpbmNvbXBsZXRlLiBTZWUgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTQyNDAKKy8vIGZvciBkZXRhaWxzLgorY2xhc3MgSW1hZ2VEZWNvZGluZ1N0
b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZURlY29kaW5nU3RvcmU+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURlY29kaW5nU3RvcmUpOyB9Cisg
ICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3RhdGljIEltYWdlRGVjb2RpbmdTdG9y
ZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25N
YWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBzdGF0aWMgYm9v
bCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisKKyAgICBTa0JpdG1hcCBjcmVhdGVM
YXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgU2tCaXRt
YXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisKKyAgICB2b2lk
IHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIFlvdSBtYXkgb25seSBsb2NrIG9uZSBzZXQgb2Yg
cGl4ZWxzIGF0IGEgdGltZTsgb3ZlcmxhcHBpbmcgbG9jayBjYWxscyBhcmUgbm90IGFsbG93ZWQu
CisgICAgdm9pZCogbG9ja1BpeGVscyhQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+LCBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOwor
ICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKKyAgICB2b2lkIGZyYW1lR2VuZXJhdG9yQmVpbmdE
ZXN0cm95ZWQoSW1hZ2VGcmFtZUdlbmVyYXRvciopOworCitwcml2YXRlOgorICAgIEltYWdlRGVj
b2RpbmdTdG9yZSgpOworICAgIGJvb2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OworICAg
IHZvaWQgY3JlYXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAg
ICBJbWFnZUZyYW1lQ2FjaGUqIGxvb2t1cEZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQg
aW1hZ2VJZCk7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+
ID4gbV9mcmFtZUdlbmVyYXRvcnM7CisgICAgVmVjdG9yPE93blB0cjxJbWFnZUZyYW1lQ2FjaGU+
ID4gbV9mcmFtZUNhY2hlOworCisgICAgU2tCaXRtYXAgbV9sb2NrZWRTa0JpdG1hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUNhY2hlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZjM3Mzk4ZmJkMzZkYjM1OTZiNDFhZjhiN2MxZTkxZjE1MTc0ZDQ2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUNhY2hlLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFtZUNhY2hlKCkKK3sKK30K
KworSW1hZ2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IGJvb2wgaXND
b21wbGV0ZSkKKyAgICA6IG1faW1hZ2VJZChpbWFnZUlkKQorICAgICwgbV9zY2FsZWRTaXplKHNj
YWxlZFNpemUpCisgICAgLCBtX2JpdG1hcChiaXRtYXApCisgICAgLCBtX2lzQ29tcGxldGUoaXND
b21wbGV0ZSkKK3sKK30KKworYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmlzRXF1YWwoaW50IGltYWdl
SWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltYWdl
SWQgPT0gbV9pbWFnZUlkICYmIHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOworfQorCitib29s
IEltYWdlRnJhbWVDYWNoZTo6aXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaW1hZ2VJZCA9PSBtX2ltYWdlSWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VGcmFtZUNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEzOTY5NDBmYzI5ODg2MzYwNmM2YzA4NDE3
OTc0NGM1NjdkYWI5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVDYWNoZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVDYWNoZV9oCisjZGVmaW5lIEltYWdlRnJhbWVDYWNo
ZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1
ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBJbWFnZUZyYW1lQ2FjaGUgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBh
IGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBieSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2Ug
SUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8v
IDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9v
bCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFnZUZy
YW1lQ2FjaGUoaW1hZ2VJZCwgc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAg
fQorCisgICAgSW1hZ2VGcmFtZUNhY2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiwgY29u
c3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOworICAgIH5JbWFnZUZyYW1lQ2FjaGUoKTsK
KworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDsg
fQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorCisgICAgYm9v
bCBpc0VxdWFsKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsK
KyAgICBib29sIGlzRXF1YWwoaW50IGltYWdlSWQpIGNvbnN0OworICAgIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQorCitwcml2YXRlOgorICAgIGludCBt
X2ltYWdlSWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tCaXRtYXAgbV9iaXRt
YXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MWQ0M2MxOWJlNjcyODZkYTE2MmIxNDU4ZmIyZTJhODc2MTk2NGJlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkltYWdl
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgeworCisvLyBBbiB1bmlxdWUgSUQgZm9yIGFuIGlt
YWdlIGZpbGUuCitpbnQgc19uZXh0SW1hZ2VJZCA9IDA7CisKK30gLy8gbmFtZXNwYWNlCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVy
YXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2Rlcihk
ZWNvZGVyKQoreworICAgIG1fc2l6ZSA9IFNrSVNpemU6Ok1ha2UobV9kZWNvZGVyLT5zaXplKCku
d2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIG1faW1hZ2VJZCA9IHNf
bmV4dEltYWdlSWQrKzsKK30KKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5l
cmF0b3IoKQoreworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQo
KS0+ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3llZCh0aGlzKTsKK30KKworSW1hZ2VEZWNvZGVy
KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVyKCkKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVy
LmdldCgpOworfQorCit2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIG1fZGF0
YSA9IGRhdGE7CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRh
KG1fZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyNjZiNTJlYTRi
YTg1MTBmNTc1NDQ2NGJmMmNmMmQyNmMxMmEyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZUdlbmVyYXRvcl9o
CisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisjaW5jbHVkZSAiU2tTaXplLmgiCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2hhcmVkQnVmZmVy
OworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VG
cmFtZUdlbmVyYXRvcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRnJh
bWVHZW5lcmF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkZWNv
ZGVyKSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CisKKyAgICAv
LyBDcmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRlZC4KKyAgICBJbWFnZURlY29kZXIq
IGRlY29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBTa0lTaXplJiBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgaW50IGltYWdlSWQoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlSWQ7IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIFNrSVNpemUgbV9zaXplOwor
ICAgIGludCBtX2ltYWdlSWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZGQwOTFl
MGQ5ZjhjMTQwYjdkYmQ3MzFkNzM2MjE4YWQwZmI5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJl
Zi5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTGF6eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKFBhc3NS
ZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gZnJhbWVHZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxS
ZWYoMCkKKyAgICAsIG1fZnJhbWVHZW5lcmF0b3IoZnJhbWVHZW5lcmF0b3IpCisgICAgLCBtX3Nj
YWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkK
K3sKK30KKworTGF6eURlY29kaW5nUGl4ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7
Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUm
IGZ1bGxTaXplKSBjb25zdAoreworICAgIHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7
Cit9CisKK2Jvb2wgTGF6eURlY29kaW5nUGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkg
fHwgbV9zY2FsZWRTaXplLmhlaWdodCgpICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQor
Cit2b2lkKiBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoq
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+bG9ja1BpeGVscyhtX2ZyYW1lR2VuZXJh
dG9yLCBtX3NjYWxlZFNpemUsIG1fc2NhbGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT51bmxv
Y2tQaXhlbHMoKTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxz
QXJlV3JpdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWI5Y2NjNGNiMTExZjI3NjRmNzIzNzA2NzUxYTVlY2YxM2M3NjMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXp5RGVjb2RpbmdQ
aXhlbFJlZl9oCisjZGVmaW5lIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKworI2luY2x1ZGUgIlNr
RmxhdHRlbmFibGVCdWZmZXJzLmgiCisjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgorI2luY2x1ZGUg
IlNrUmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CisK
K2NsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgeworcHVibGlj
OgorICAgIExhenlEZWNvZGluZ1BpeGVsUmVmKFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRv
cj4sIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNl
dCk7CisgICAgdmlydHVhbCB+TGF6eURlY29kaW5nUGl4ZWxSZWYoKTsKKworICAgIFNLX0RFQ0xB
UkVfVU5GTEFUVEVOQUJMRV9PQkpFQ1QoKQorCisgICAgUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2Vu
ZXJhdG9yPiBmcmFtZUdlbmVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVHZW5lcmF0b3I7
IH0KKyAgICBib29sIGlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAg
ICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJl
ZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9y
VGFibGUqKik7CisgICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVh
bCBib29sIG9uTG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IG1fZnJhbWVHZW5lcmF0b3I7CisgICAgU2tJU2l6
ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJUmVjdCBtX3NjYWxlZFN1YnNldDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExhenlEZWNvZGluZ1BpeGVsUmVmX2hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUlt
YWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0YWFm
NTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2NGZmZDQwNTZhNzQzYTI1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCiAj
aW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tp
YSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJp
dG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1h
cCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1h
Z2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNv
ZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNjYWxl
ZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhhc1Jl
c2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAgICAg
ICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYmIHNo
b3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgKaW5kZXggZmM4MmE1YzI1YWQ3OGU4NzdkYzk5MTg4ZTlmZGIxZTg1YjFhZDI3Yy4u
OWY2OTdhODRhYjA5YWZiYWMzYjYyYWUzZmNlNTY2YzRmYjZkNzQyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAg
LTE0OCw2ICsxNDgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgcmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0
bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1h
cCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAo
KTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgo
KSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4NmMwZi4u
NjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0cy9E
YXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFsVGVzdC5j
cHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJDb21w
b3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAgICAgICd0
ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJl
cXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVz
dC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hsaWdo
dFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBhYmQ4NGVk
MGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFlMzc5Yzg5
NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2VkMmY3ODk3
Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lk
IHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9
IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwogICAgIFBs
YXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRkb3du
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5kYzc3MzZk
OWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgi
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5o
PgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0
aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5D
b21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0cnVl
KQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2UpCisgICAg
LCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRU
aWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVyU2l6ZShX
ZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJTZXR0aW5n
c0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtX3Nl
dHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBX
ZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmIGVuYWJs
ZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgp
OworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQpCisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVjZDA4Njkx
NjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03OCw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6
ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQo
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
Ym9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiArMTc5LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNv
bXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwogICAgIGJv
b2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBtX2RlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6ZTsK
ICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFn
ZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJJ
bWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRl
ICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFz
cyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVj
b2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+
c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsKKyAg
ICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24o
KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMg
dGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0
dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6eURlY29k
ZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZhczsKK307
CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQor
eworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQ
RUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCks
IGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRt
YXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRh
YmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNv
cmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1h
cCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VR
KDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBt
X2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVh
bERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoRGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25Q
dHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxl
ZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJ
UmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNO
dWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEs
IHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rl
ci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZh
cyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+
ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRp
bmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAg
RVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMxMTAx
ZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFn
ZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAgIHZp
cnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7CisgICAg
ICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShz
aXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2YXRl
OgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTNiNzlmN2Q0ZWQwNmM0ZWUy
YmViNDY1NzY0N2UwNDlkNDFlMTY4OS4uZjFkYWQ4MzdkNmRkMGM0NmI0ODJhYjJiNGNiNDY3ZDFk
NmE0MzEwNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVj
b2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0
MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAg
ICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2Vi
U2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5o
OgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToK
KyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAg
ICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6
CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAt
MTcgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3Zl
IHRoZSBKU0hlYXAgbWVtb3J5IG1lYXN1cmVtZW50IG9mIHRoZSBQYWdlTG9hZCBwZXJmb3JtYWNl
dGVzdHMgc2luY2UgaXQgY3JlYXRlcyBib2d1cyBKU0dsb2JhbERhdGFzCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMzBjZTI4ODUx
ZmM5YTlhNDZiOGI2M2U2ZGJkMDBkYTFjM2ZlYTgzOC4uNWEzMjEwNDQ5NmY3OWIxZjJhNDU0OGIz
NjUzNDU2YjQwNjFmYTZiNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBv
cHRpb25FbmFibGVBY2NlbGVyYXRlZFBhaW50aW5nW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQt
cGFpbgogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclZpZGVvW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtdmlkZW8iOwogc3RhdGljIGNvbnN0
IGNoYXIgb3B0aW9uVXNlR3JhcGhpY3NDb250ZXh0M0RJbXBsZW1lbnRhdGlvbltdID0gIi0tdXNl
LWdyYXBoaWNzLWNvbnRleHQtM2QtaW1wbGVtZW50YXRpb249IjsKIHN0YXRpYyBjb25zdCBjaGFy
IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50
aW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGlu
Z1tdID0gIi0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIjsKIAogc3RhdGljIGNvbnN0
IGNoYXIgb3B0aW9uU3RyZXNzT3B0W10gPSAiLS1zdHJlc3Mtb3B0IjsKIHN0YXRpYyBjb25zdCBj
aGFyIG9wdGlvblN0cmVzc0Rlb3B0W10gPSAiLS1zdHJlc3MtZGVvcHQiOwpAQCAtMTMzLDYgKzEz
NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgYm9vbCBkZWZlcnJl
ZDJEQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0Vu
YWJsZWQgPSBmYWxzZTsKICAgICBib29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsK
KyAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29s
IHN0cmVzc09wdCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKICAgICBi
b29sIGhhcmR3YXJlQWNjZWxlcmF0ZWRHTCA9IGZhbHNlOwpAQCAtMTgzLDYgKzE4NSw4IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiVW5rbm93biBHcmFwaGljQ29udGV4dDNEIGltcGxlbWVudGF0aW9uICVzXG4iLCBpbXBs
ZW1lbnRhdGlvbi5jX3N0cigpKTsKICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRp
b25FbmFibGVQZXJUaWxlUGFpbnRpbmcpCiAgICAgICAgICAgICBwZXJUaWxlUGFpbnRpbmdFbmFi
bGVkID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlRGVm
ZXJyZWRJbWFnZURlY29kaW5nKQorICAgICAgICAgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc09w
dCkKICAgICAgICAgICAgIHN0cmVzc09wdCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3Vt
ZW50ID09IG9wdGlvblN0cmVzc0Rlb3B0KQpAQCAtMjIyLDYgKzIyNiw3IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgIHNoZWxsLnNldERlZmVycmVkMmRDYW52YXNF
bmFibGVkKGRlZmVycmVkMkRDYW52YXNFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0QWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOwogICAgICAg
ICBzaGVsbC5zZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKHBlclRpbGVQYWludGluZ0VuYWJsZWQp
OworICAgICAgICBzaGVsbC5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRKYXZhU2NyaXB0RmxhZ3Mo
amF2YVNjcmlwdEZsYWdzKTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzT3B0KHN0cmVzc09wdCk7
CiAgICAgICAgIHNoZWxsLnNldFN0cmVzc0Rlb3B0KHN0cmVzc0Rlb3B0KTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDMyNTg1ZmFhMWIyZDhhZDgx
YTgzYjE1ZThmNzEyYmQ4Y2E3MjQ4OWIuLmFjNzc1OTY4MWEwNDZkMDNkNDcxOGZjNDU4YzI3ZTgy
ZTE0NjE3OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cApAQCAtMTE0LDYgKzExNCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICAsIG1fYWNj
ZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkMmRDYW52YXNF
bmFibGVkKGZhbHNlKQogICAgICwgbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChmYWxzZSkK
KyAgICAsIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc3Ry
ZXNzT3B0KGZhbHNlKQogICAgICwgbV9zdHJlc3NEZW9wdChmYWxzZSkKICAgICAsIG1fZHVtcFdo
ZW5GaW5pc2hlZCh0cnVlKQpAQCAtMjI5LDYgKzIzMCw3IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNl
dFdlYlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVm
cy5kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAg
ICAgbV9wcmVmcy5hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRQYWlu
dGluZ0VuYWJsZWQ7CisgICAgbV9wcmVmcy5kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0g
bV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIG1fcHJlZnMuYXBwbHlUbygmd2Vi
Vmlldyk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5k
ZXggNDRiNWFlMzg4YzY4ZDY1ZGU4OTBmYzgwMGZlZDUyMjllZWMyYTMyNC4uMzkyNjYyNDQ2OWI2
OGNjYmM4NzRiNDkxZWE0ODNhMGI2MzkyY2U1NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZW5h
YmxlZDsgfQogICAgIHZvaWQgc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29sKTsKKyAgICB2
b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVm
ZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICNpZiBkZWZpbmVkKE9TX1dJ
TikKICAgICAvLyBBY2Nlc3MgdG8gdGhlIGZpbmlzaGVkIGV2ZW50LiBVc2VkIGJ5IHRoZSBzdGF0
aWMgV2F0Y2hEb2cgdGhyZWFkLgogICAgIEhBTkRMRSBmaW5pc2hlZEV2ZW50KCkgeyByZXR1cm4g
bV9maW5pc2hlZEV2ZW50OyB9CkBAIC0yMzUsNiArMjM2LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkUGFpbnRp
bmdFbmFibGVkOwogICAgIGJvb2wgbV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wg
bV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIFdlYlByZWZlcmVuY2VzIG1fcHJl
ZnM7CiAgICAgYm9vbCBtX3N0cmVzc09wdDsKICAgICBib29sIG1fc3RyZXNzRGVvcHQ7CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXgg
M2JjMmNkZDlmMmFlNDE3MGMzM2FkNjQxMDZkNGE3ZjJkMDkwMjFmNS4uNWM4YzkyYzk5OTQyNjQ0
ZGQxOWE0OWM5OGU2NmMxYTRmMDZkNDQ0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHZvaWQgV2Vi
UHJlZmVyZW5jZXM6OnJlc2V0KCkKICAgICBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNl
OwogICAgIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgZm9yY2VDb21w
b3NpdGluZ01vZGUgPSBmYWxzZTsKKyAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0g
ZmFsc2U7CiAgICAgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsKICAg
ICBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKICAgICBjc3NDdXN0b21GaWx0ZXJFbmFi
bGVkID0gZmFsc2U7CkBAIC0yMjQsNiArMjI1LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBw
bHlUbyhXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2Fu
dmFzRW5hYmxlZChhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNl
dERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMmRDYW52YXNFbmFibGVkKTsKICAgICBz
ZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGlu
Z0VuYWJsZWQpOworICAgIHNldHRpbmdzLT5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRNZWRpYVBs
YXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSk7CiAgICAgc2V0dGluZ3MtPnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtb2NrU2Nyb2xsYmFy
c0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3Rv
ckluQ29tcG9zaXRvcihmb3JjZUNvbXBvc2l0aW5nTW9kZSk7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAppbmRleCBjMzY1NTNiMzU0Njk2NGM3NmYy
OTkxNmE5ZWE5YjllMmEyM2UyNGIyLi5lMDMxNWYyZDA3YzFlNWI5ODU1ZmU3YjNhYTJlMTRjZjdl
MWU0MGJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVm
ZXJlbmNlcy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmgKQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXMgewogICAgIGJv
b2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFz
RW5hYmxlZDsKICAgICBib29sIGFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wg
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKICAgICBib29sIG1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlOwogICAgIGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVkOwogICAgIGJv
b2wgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CmluZGV4IGMzMTBlYjE1YjE5NTRkZGVk
ZGMzMzNiOTgwZjY2NWQ1ZmNkYjkxY2UuLmE2OWY1YTgyMmFhM2ZlMzI4NDZmOTE3MDExNjQxOTNj
YzIyMzhmNTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW0ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bS5weQpAQCAtMzkwLDYgKzM5MCw5IEBAIGNsYXNzIENocm9taXVtUG9y
dChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvc29mdHdhcmVjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdjb21wb3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFi
bGUtc29mdHdhcmUtY29tcG9zaXRpbmcnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRl
KCdwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyctLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVuYWJs
ZS1wZXItdGlsZS1wYWludGluZycsICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAgICAg
ICAgIF0KIAogICAgICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNGY5MmI2N2VkMDg1ODIwNTcxMDYwMmUzNWM0MjMyZGM5
N2Q5MDkxLi42NjQ0ZDk2NTdmNzUyZWMzNWJhNDBiMTkzZGZjMTcxYjA0MDg4OGZhIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTItMDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
YSB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIENocm9taXVtIHRvIHRlc3QgZGVmZXJyZWQgaW1hZ2UK
KyAgICAgICAgZGVjb2RpbmcuCisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcyB3aWxsIGJlIHRlc3RlZCB3aXRoCisgICAgICAgIC0tZm9yY2Ut
Y29tcG9zaXRpbmcgLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmcgLS1lbmFibGUtZGVmZXJyZWQt
aW1hZ2UtZGVjb2RpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQ6IEFkZGVkLgorCiAyMDEyLTEwLTE4ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBTZXQgbWluLXdpZHRoIHBy
b3BlcnR5IGluc3RlYWQgb2Ygd2lkdGggcHJvcGVydHkgZm9yIGRhdGUvdGltZSBmaWVsZHMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDFk
M2NiYWZkMjNmODI5YWZkN2I3ZDNkMmNhMjc2ZWJkOWFmMGZiMjMuLjU1NTkzNTdkOWJlZjRlMWJi
ZTdjZTMyYmNkOWIwMDZlOTQwYWEwOWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDIyNywzICs0MjI3LDI4IEBAIHdlYmtpdC5vcmcv
Yi85OTYwNCBbIE1hYyBXaW4gXSBodHRwL3Rlc3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy5odG1s
IFsgUGFzcyBDcmFzCiAKICMgVXNlciBUaW1pbmcgaXMgbm90IGVuYWJsZSB5ZXQuIHNvIHNraXAg
aXQuCiB3ZWJraXQub3JnL2IvODQ4OTMgaHR0cC90ZXN0cy93M2Mvd2VicGVyZi9zdWJtaXNzaW9u
L3VzZXItdGltaW5nIFsgU2tpcCBdCisKKyMgVGhlc2UgdGVzdHMgYXJlIGZhaWxpbmcgYWxyZWFk
eSBhbmQgYmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVycmVkCisjIGltYWdl
IGRlY29kaW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvYW5p
bWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9leGlmLW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9y
aWVudGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1sYW5kc2Nh
cGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQtd2Via2l0LXRyYW5z
Zm9ybS1zY2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFn
ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1leHBsaWNpdGx5
LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1m
b2N1cy1yaW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1yaW5nLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2Rl
ZmVycmVkL2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWxldHRl
ZC1wbmctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBNaXNzaW5nIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdl
bWFwLWZvY3VzLXJpbmctem9vbS5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURN
RS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0MzJkNWZkMDBiODI4MWUy
ODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApAQCAtMCww
ICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGVzdCB0aGUgJ2RlZmVy
cmVkIGltYWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBDaHJvbWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169459</attachid>
            <date>2012-10-18 13:38:02 -0700</date>
            <delta_ts>2012-10-18 13:43:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-94240-20121018133647.patch</filename>
            <type>text/plain</type>
            <size>79890</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk1NGU3MGE0ZTQ2ODVh
MjJkMDQ0MDViZWFlYzgxZTkzMjg0MmQwNy4uMmI2YmViZmU0YjYwMzczYjUxM2RmYzI0N2I0ZTkw
ZWQ4Njk4Njk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoZW4g
V2hpdGUuCisKKyAgICAgICAgT2JqZWN0aXZlczoKKworICAgICAgICBUbyByZWNvcmQgaW1hZ2Ug
ZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnRpbmcgYW5kIHRvIGRlZmVyCisgICAgICAg
IGRlY29kaW5nIG9wZXJhdGlvbnMgdW50aWwgcmFzdGVyaXphdGlvbi4KKworICAgICAgICBSYXRp
b25hbGU6CisKKyAgICAgICAgVGhpcyBpcyBhIGtleSBmZWF0dXJlIHRoYXQgZW5hYmxlcyBpbXBs
LXNpZGUgcGFpbnRpbmcgd2hpY2ggcmVxdWlyZXMKKyAgICAgICAgZmFzdCByZWNvcmRpbmcgb2Yg
ZHJhd2luZyBvcGVyYXRpb25zLiBUaGUgZXhpc3RpbmcgZGVjb2RlLW9uLWRyYXcKKyAgICAgICAg
cmVzdHJpY3RzIHRoYXQgcmVjb3JkaW5nIGhhcyB0byBibG9jayBvbiBleHBlbnNpdmUgZGVjb2Rp
bmcgb3BlcmF0aW9ucy4KKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxsb3dzIHJlY29yZGluZyBvZiBp
bWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIGR1cmluZyBwYWludAorICAgICAgICB0aW1lLgorCisg
ICAgICAgIERlc2lnbjoKKworICAgICAgICBJbWFnZSBkZWNvZGluZyBoYXBwZW5zIHdoZW4gYSBC
aXRtYXBJbWFnZSBpcyBkcmF3biBpbnRvIGEKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0LiBXaGVu
IHBlci10aWxlIHBhaW50aW5nIGlzIGVuYWJsZWQgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGlz
IGJhY2tlZCBieSBTa0NhbnZhcyBpbiByZWNvcmRpbmcgbW9kZS4gVGhpcyBTa0NhbnZhcyByZWNv
cmRzIGRyYXdpbmcKKyAgICAgICAgYW5kIGltYWdlIGRlY29kaW5nIG9wZXJhdGlvbnMgdG8gbWlu
aW1pemUgcmVjb3JkaW5nIHRpbWUuCisKKyAgICAgICAgQW4gaW1hZ2UgZGVjb2Rpbmcgb3BlcmF0
aW9uIGlzIHJlY29yZGVkIGFzIGEgU2tQaXhlbFJlZiBvYmplY3QKKyAgICAgICAgaW1wbGVtZW50
ZWQgYnkgTGF6eURlY29kaW5nUGl4ZWxSZWYuIFRoaXMgb2JqZWN0IHJlZmVyZW5jZXMgcmF3IGVu
Y29kZWQKKyAgICAgICAgZGF0YSwgcmVnaW9ucyB0byBiZSBkZWNvZGVkIGFuZCBzY2FsaW5nIGlu
Zm9ybWF0aW9uLgorCisgICAgICAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBlci10
aWxlIHBhaW50aW5nIHRoaXMgZmVhdHVyZSBkZWZlcnMKKyAgICAgICAgaW1hZ2UgZGVjb2Rpbmcg
dW50aWwgdGhlIFNrQ2FudmFzIHJlZmVyZW5jaW5nIHRoZSBpbWFnZSBpcyByYXN0ZXJpemVkLgor
CisgICAgICAgIEJvdGggcmVjb3JkaW5nIGFuZCByYXN0ZXJpemF0aW9uIGhhcHBlbiBvbiB0aGUg
bWFpbiB0aHJlYWQuCisKKyAgICAgICAgUGVyZm9ybWFuY2UgSW1wYWN0OgorCisgICAgICAgIFRo
aXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IFdlYktpdDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCgpCisgICAgICAgIGFuZCBkb2VzIG5vdCBoYXZlIGFuIGltcGFjdCB3aGVuIGRpc2Fi
bGVkLgorCisgICAgICAgIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisg
ICAgICAgIFVwY29taW5nIENoYW5nZXM6CisKKyAgICAgICAgMS4gSW1wbGVtZW50IGEgZnVsbC1m
ZWF0dXJlZCBpbWFnZSBjYWNoZSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisgICAgICAgIDIuIEFs
bG93IHJhc3Rlcml6YXRpb24gYW5kIGRlY29kaW5nIG9uIGltcGwgdGhyZWFkLgorCisgICAgICAg
IENsYXNzZXMgSW52b2x2ZWQ6CisKKyAgICAgICAgQml0bWFwSW1hZ2UKKworICAgICAgICBCaXRt
YXBJbWFnZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGRlZmVycmVkIGltYWdlIGRlY29kaW5nLiBX
aGVuCisgICAgICAgIGRyYXdpbmcgYSBCaXRtYXBJbWFnZSBpbnRvIGEgR3JhcGhpY3NDb250ZXh0
IGl0IG1ha2VzIGEgcmVxdWVzdCB0bworICAgICAgICBjcmVhdGUgYSBOYXRpdmVJbWFnZVNraWEu
IFdlIHN1YnN0aXR1dGUgdGhlIGNvbnRlbnQgaW4gTmF0aXZlSW1hZ2VTa2lhCisgICAgICAgIHN1
Y2ggdGhhdCBpdCBpcyBsYXppbHkgZGVjb2RlZC4KKworICAgICAgICBEZWZlcnJlZEltYWdlRGVj
b2RlcgorCisgICAgICAgIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIGEg
aW1hZ2UgZGVjb2RlciBmb3IgQ2hyb21pdW0uCisgICAgICAgIFRoaXMgaXMgYSBicmlkZ2UgbGF5
ZXIgdGhhdCBlaXRoZXIgZGVsZWdhdGVzIGNhbGxzIHRvIHRoZSBhY3R1YWwKKyAgICAgICAgSW1h
Z2VEZWNvZGVyIG9yIGNyZWF0ZSBhIGxhemlseS1kZWNvZGVkIFNrQml0bWFwIGFuZCBkZWxlZ2F0
ZXMgY2FsbHMKKyAgICAgICAgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlLgorCisgICAgICAgIEltYWdl
RGVjb2RpbmdTdG9yZQorCisgICAgICAgIFRoaXMgb2JqZWN0IG1hbmFnZXMgYWxsIGVuY29kZWQg
aW1hZ2VzLiBJdCBrZWVwcyB0cmFjayBvZiBlbmNvZGVkCisgICAgICAgIGRhdGEgYW5kIHRoZSBj
b3JyZXNwb25kaW5nIEltYWdlRGVjb2RlciBmb3IgZG9pbmcgYWN0dWFsIGRlY29kaW5nLiBJdAor
ICAgICAgICBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIGxhemlseSBkZWNvZGVk
IFNrQml0bWFwcy4gVGhpcworICAgICAgICBTa0JpdG1hcCBjb250YWlucyBhIExhenlEZWNvZGlu
Z1BpeGVsUmVmIG9iamVjdCB3aGljaCByZWZlcmVuY2VzIHRvIGFuCisgICAgICAgIGltYWdlIGVu
dHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBTY2FsZWRJbWFnZUZyYWdtZW50
CisKKyAgICAgICAgQSBjb250YWluZXIgZm9yIGEgc2NhbGVkIGltYWdlIGZyYWdtZW50LiBJbiBh
ZGRpdGlvbiB0byBiaXRtYXAgcGl4ZWxzCisgICAgICAgIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBJRCBvZiB0aGUgaW1hZ2UsIHNjYWxlIGFuZCBjbGlwcGluZy4KKworICAgICAg
ICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGhpcyBvYmplY3QgaXMgcmVzcG9uc2li
bGUgZm9yIGdlbmVyYXRpbmcgZGVjb2RlZCBwaXhlbHMuIEl0IGlzIGFsc28KKyAgICAgICAgYSBj
b250YWluZXIgZm9yIGVuY29kZWQgaW1hZ2UgZGF0YSBhbmQgY29ycmVzcG9uZGluZyBpbWFnZSBk
ZWNvZGVyLgorCisgICAgICAgIExhenlEZWNvZGluZ1BpeGVsUmVmCisKKyAgICAgICAgVGhpcyBv
YmplY3QgaXMgZW1iZWRkZWQgaW4gYSBTa0JpdG1hcCB0byBlbmFibGUgbGF6eSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBTa0JpdG1hcCBuZWVkcyB0byBhY2Nlc3MgcGl4ZWxzIExhenlEZWNvZGlu
Z1BpeGVsUmVmIGlzIGxvY2tlZC4gSXQKKyAgICAgICAgY29udGFpbnMgaW5mb3JtYXRpb24gdG8g
bG9jYXRlIGFuIGltYWdlIGFuZCBzY2FsaW5nIGluZm8sIHRoZXNlCisgICAgICAgIGluZm9ybWF0
aW9uIGlzIHN1Ym1pdHRlZCB0byBJbWFnZURlY29kaW5nU3RvcmUgdG8gYWNjZXNzIGFjdHVhbCBw
aXhlbHMuCisKKyAgICAgICAgTGF5b3V0IHRlc3RzLiBUaGVyZSBhcmUgYWJvdXQgODAgdGVzdHMg
aW4gdGhpcyB2aXJ0dWFsIHRlc3Qgc3VpdGUKKyAgICAgICAgcnVubmluZyB0aGlzIGZlYXR1cmUg
aW4gdGhpcyBkaXJlY3Rvcnk6CisKKyAgICAgICAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9k
ZWZlcnJlZC9mYXN0L2ltYWdlcworCisgICAgICAgIFVuaXQgdGVzdHMuIEFkZGVkIERlZmVycmVk
SW1hZ2VEZWNvZGVyVGVzdCB0byB2ZXJpZnkgZGVmZXJyZWQKKyAgICAgICAgaW1hZ2UgZGVjb2Rp
bmcgYmVoYXZpb3IuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZmVycmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJ
bWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2Rlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3Jl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXApOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpyZXNpemVMYXp5RGVjb2RlZFNrQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpmcmFtZUdlbmVyYXRvckJlaW5nRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omxvb2t1cEZyYW1l
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFt
ZUNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29k
aW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVj
b2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFn
bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y2FsZWRJbWFnZUZyYWdtZW50Ojp+U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjYWxlZEltYWdlRnJhZ21lbnQ6OmJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsZWRJ
bWFnZUZyYWdtZW50Ojppc0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5l
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJh
bWVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVj
b2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZUZyYW1lR2VuZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmltYWdlSWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpM
YXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNv
ZGluZ1BpeGVsUmVmOjppc1NjYWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aXNDbGlwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4ZWxS
ZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKExhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNvcmU6
OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpmcmFtZUdlbmVyYXRvcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEltYWdlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2tCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0U2tCaXRtYXApOgorCiAyMDEyLTEwLTE4ICBLZW50IFRhbXVyYSAgPHRr
ZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBTZXQgbWluLXdpZHRoIHByb3BlcnR5IGluc3Rl
YWQgb2Ygd2lkdGggcHJvcGVydHkgZm9yIGRhdGUvdGltZSBmaWVsZHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggMWJlMTUzYjhlNjA5OGMxZjI3YTY3NzAwYTA0MjIyYjc2NDg2NjU3NC4u
ODQyZDgzOGJiMWZjMTk3YmM2OGM3Y2RiZjhlOTU4NjYwMmFhN2EwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNs
YW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVk
IGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoZW4gV2hpdGUuCisKKyAg
ICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4K
KyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRlZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJU
ZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5
IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFu
ZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAgICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2Rl
clRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAgICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNv
ZGVyVGVzdC5kcmF3U2NhbGVkSW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3Jj
L1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAg
KiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAy
MDEyLTEwLTE3ICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW92
ZSBtaXhlZCBjb250ZW50IGxvZ2ljIG91dCBvZiBGcmFtZUxvYWRlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGM5ZmRhNjZiNGMxMGQ4NmM0MWZjM2UxNTlmNmQyNTI3MGM2NTU2N2EuLmY0ZDkzYWQ3Mzk4
YzRhM2Q4MmU0ZmJmNjNmYzc3NGQ3YWFiZGZkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ5MTQs
NiArNDkxNCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29t
cG9zaXRvckhVREZvbnRBdGxhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbScsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3
aW5nQnVmZmVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcCcsCkBAIC00OTMzLDEwICs0OTM1
LDE4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9t
aXVtQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlQnVmZmVyRGF0YVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2Rp
bmdQaXhlbFJlZi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRl
bGVnYXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRh
Q2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggODJkZmRlMWM5ZGQ4MmUzMTViYmRkOWVl
ODljZDA4MjNjOWNjOGU0ZC4uYWJmYTU5ODhiNDJiYzY5MGY3ZWFiYzk1M2VlYjA3ZDA1MzAwM2M0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpCkBAIC03OSw3ICs4Myw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQg
Ynl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29k
ZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0g
ICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFn
ZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFn
ZURlY29kZXJQdHI+KE5hdGl2ZUltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0
aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVs
c1BlckRlY29kZWRJbWFnZSkKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxz
KHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDBkOGEwMWUyNmE3MmNmZmYzOWFhNDY1NDM3
NDE0NGEwYTE3OWFjMzguLjY2YThhMGE1MWMzOWZiOTI2OGIyMjFhNDdiNjg3NTAxNTkzYmM0YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApA
QCAtNDcsMTAgKzQ3LDIwIEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAK
ICNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3VyY2VQ
dHI7Ci0jZWxzZQordHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlRGVjb2RlclB0
cjsKKyNlbGlmICFQTEFURk9STShDSFJPTUlVTSkKIGNsYXNzIEltYWdlRGVjb2RlcjsKLXR5cGVk
ZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKK3R5cGVkZWYgSW1hZ2VEZWNv
ZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXI7Cit0eXBlZGVmIERlZmVycmVkSW1hZ2VE
ZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKK3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIq
IE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbGlmIFVTRShDRykKKyNkZWZpbmUgTmF0aXZlSW1h
Z2VEZWNvZGVyIEltYWdlRGVjb2RlcgorI2Vsc2UKK3R5cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2
ZUltYWdlRGVjb2RlcjsKICNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkg
cmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCkBAIC0xNTgs
NyArMTY4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIE5hdGl2ZUltYWdlU291cmNlUHRyIG1f
ZGVjb2RlcjsKKyAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOwogCiAjaWYgIVVT
RShDRykKICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzQxOTZlNzFhZGI0MTMxNWNkYjNjYjc1NjJl
YTAwYWYwMTY4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwxNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFn
ZURlY29kZXIuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGVmZXJyZWRJbWFn
ZURlY29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rl
cikKKyAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9hY3R1YWxEZWNvZGVy
KGFkb3B0UHRyKGFjdHVhbERlY29kZXIpKQoreworfQorCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6
fkRlZmVycmVkSW1hZ2VEZWNvZGVyKCkKK3sKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBjb3Jy
ZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdTdG9yZSBpZiBpbWFnZQorICAgIC8vIGlz
IGRlZmVyLWRlY29kZWQuCit9CisKK0RlZmVycmVkSW1hZ2VEZWNvZGVyKiBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKK3sKKyAgICBJbWFnZURlY29kZXIqIGFjdHVhbERl
Y29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZShkYXRhLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvck9wdGlvbik7CisgICAgcmV0dXJuIGFjdHVhbERlY29kZXIgPyBuZXcgRGVmZXJyZWRJbWFn
ZURlY29kZXIoYWN0dWFsRGVjb2RlcikgOiAwOworfQorCitQYXNzT3duUHRyPERlZmVycmVkSW1h
Z2VEZWNvZGVyPiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
ZmVycmVkSW1hZ2VEZWNvZGVyKGRlY29kZXIubGVha1B0cigpKSk7Cit9CisKK1N0cmluZyBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkg
OiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworfQorCitJbWFnZUZyYW1lKiBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICAvLyBPbmx5IGRl
ZmVyIGltYWdlIGRlY29kaW5nIGlmIHRoaXMgaXMgYSBzaW5nbGUgZnJhbWUgaW1hZ2UuIFRoZSBy
ZWFzb24gaXMKKyAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVk
IEdJRi4gQW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKKyAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1
c2VzIHNvbWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG8gc3luY2hyb25vdXMgaW1hZ2UKKyAg
ICAvLyBkZWNvZGluZy4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFp
blRocmVhZCgpCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgorICAgICAgICAmJiBtX2FjdHVh
bERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpID09IGNBbmltYXRpb25Ob25lCisgICAgICAgICYm
IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkpIHsKKworICAgICAgICBtX3NpemUg
PSBtX2FjdHVhbERlY29kZXItPnNpemUoKTsKKyAgICAgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9
IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKworICAgICAgICBTa0JpdG1h
cCBsYXp5RGVjb2RlZFNrQml0bWFwID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFp
blRocmVhZCgpLT5jcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKG1fYWN0dWFsRGVjb2Rlci5yZWxl
YXNlKCkpOworICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tCaXRtYXAobGF6eURlY29k
ZWRTa0JpdG1hcCk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKS0+c2V0RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgbV9kYXRh
LnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworCisgICAgICAgIC8vIERvbid0IG1hcmsg
dGhlIGZyYW1lIGFzIGNvbXBsZXRlbHkgZGVjb2RlZCB1bnRpbCB0aGUgdW5kZXJseWluZworICAg
ICAgICAvLyBkZWNvZGVyIGhhcyByZWFsbHkgZGVjb2RlZCBpdC4gVW50aWwgdGhlbiwgb3VyIGRh
dGEgYW5kIG1ldGFkYXRhIG1heQorICAgICAgICAvLyBiZSBpbmNvcnJlY3QsIHNvIGNhbGxlcnMg
Y2FuJ3QgcmVseSBvbiB0aGVtLgorICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgfQorCisgICAgcmV0dXJuIG1fYWN0dWFs
RGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KSA6ICZt
X2xhenlEZWNvZGVkRnJhbWU7Cit9CisKK3ZvaWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAo
bV9hY3R1YWxEZWNvZGVyKSB7CisgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gZGF0YSB1
bnRpbCBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZC4KKyAgICAgICAgLy8gV2hlbiBpbWFnZSBk
ZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIG93bmVyc2hpcCBvZiBtX2RhdGEgaXMKKyAgICAgICAg
Ly8gdHJhbnNmZXJyZWQgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICBtX2RhdGEgPSBk
YXRhOworICAgICAgICBtX2FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKKyAgICAg
ICAgbV9hY3R1YWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZyYW1l
LmdldFNrQml0bWFwKCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgfQorfQorCitib29s
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIC8vIG1fYWN0
dWFsRGVjb2RlciBpcyAwIG9ubHkgaWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgYW5kIHRo
YXQKKyAgICAvLyBtZWFucyBpbWFnZSBoZWFkZXIgZGVjb2RlZCBzdWNjZXNzZnVsbHkgYW5kIHNp
emUgaXMgYXZhaWxhYmxlLgorICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERl
Y29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpIDogdHJ1ZTsKK30KKworSW50U2l6ZSBEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/
IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpIDogbV9zaXplOworfQorCitJbnRTaXplIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZVNpemVBdElu
ZGV4KGluZGV4KSA6IG1fc2l6ZTsKK30KKworc2l6ZV90IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvdW50KCkKK3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNv
ZGVyLT5mcmFtZUNvdW50KCkgOiAxOworfQorCitpbnQgRGVmZXJyZWRJbWFnZURlY29kZXI6OnJl
cGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1f
YWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKK30KKwor
dm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBj
bGVhckJlZm9yZUZyYW1lKQoreworICAgIC8vIElmIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVk
IHRoZW4gZnJhbWUgYnVmZmVyIGNhY2hlIGlzIG1hbmFnZWQgYnkKKyAgICAvLyB0aGUgY29tcG9z
aXRvciBhbmQgdGhpcyBjYWxsIGlzIGlnbm9yZWQuCisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikK
KyAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZv
cmVGcmFtZSk7Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU3luY2hyb25pemUg
dGhpcyBzdGF0ZSB3aXRoIEltYWdlRGVjb2RpbmdTdG9yZSB3aGVuIGltYWdlIGlzCisgICAgLy8g
YWN0dWFsbHkgZGVjb2RlZC4gUmV0dXJuIHRydWUgaGVyZSBpcyBjb3JyZWN0IGluIHRlcm1zIG9m
IHJlbmRlcmluZyBidXQKKyAgICAvLyBtYXkgbm90IGdvIHRocm91Z2ggc29tZSBvcHRpbWl6ZWQg
cmVuZGVyaW5nIGNvZGUgcGF0aC4KKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCkgOiB0cnVlOworfQorCit1bnNp
Z25lZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAoreworICAgIC8vIElmIGZyYW1lIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gaXQg
aXMgbm90IG1hbmFnZWQgYnkgTWVtb3J5Q2FjaGUKKyAgICAvLyBzbyByZXR1cm4gMCBoZXJlLgor
ICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQnl0ZXNB
dEluZGV4KGluZGV4KSA6IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMzNmZTM1ZTBlYzZiMzIxNWE5NDNk
Mjc2MTZmMGMzZDljMzhiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUg
RGVmZXJyZWRJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIERlZmVycmVkSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICB+RGVmZXJyZWRJbWFn
ZURlY29kZXIoKTsKKyAgICBzdGF0aWMgRGVmZXJyZWRJbWFnZURlY29kZXIqIGNyZWF0ZShjb25z
dCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PERlZmVycmVkSW1hZ2VEZWNvZGVyPiBjcmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKworICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworCisgICAgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisg
ICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICBzaXpl
X3QgZnJhbWVDb3VudCgpOworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOworICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERlZmVy
cmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2Rlcik7CisKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKKyAg
ICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBtX2FjdHVhbERlY29kZXI7CisKKyAgICBTdHJpbmcgbV9m
aWxlbmFtZUV4dGVuc2lvbjsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKworICAgIEltYWdlRnJhbWUg
bV9sYXp5RGVjb2RlZEZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNzkwZGY5MGY4
ZmY0NjAxMjIyZWNjNDZmZGVjNDlmZGE4OTU3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3Bw
CkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1Bp
eGVsUmVmLmgiCisjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgorI2luY2x1ZGUgIlNr
UmVjdC5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vf
b3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisK
Ky8vIFVSSSBsYWJlbCBmb3IgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmLgorY29uc3QgY2hh
ciBsYWJlbExhenlEZWNvZGVkW10gPSAibGF6eSI7CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogc19p
bnN0YW5jZU9uTWFpblRocmVhZCA9IDA7CisKK3N0YXRpYyB2b2lkIHNldEluc3RhbmNlT25NYWlu
VGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQoreworICAgIGRl
bGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFkOworICAgIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQg
PSBpbWFnZURlY29kaW5nU3RvcmU7Cit9Cit9IC8vIG5hbWVzcGFjZQorCitJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6
fkltYWdlRGVjb2RpbmdTdG9yZSgpCit7Cit9CisKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKK30KKwordm9p
ZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2Rp
bmdTdG9yZTo6c2h1dGRvd24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
c2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoMCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7CisgICAgcmV0dXJuIGJp
dG1hcC5waXhlbFJlZigpCisgICAgICAgICYmIGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKQor
ICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5waXhlbFJlZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5
RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURlY29kZWQpKTsKK30KKworU2tCaXRtYXAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPiBkZWNvZGVyKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOwor
CisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9IFNrSVNpemU6Ok1ha2UoZGVjb2Rlci0+c2l6ZSgpLndp
ZHRoKCksIGRlY29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKCFmdWxsU2l6ZS5p
c0VtcHR5KCkpOworCisgICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1
bGxTaXplKTsKKworICAgIC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRo
YXQgcmVmZXJlbmNlcyB0aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KKyAgICBTa0Jp
dG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKKyAgICBiaXRtYXAu
c2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKEltYWdlRnJhbWVHZW5lcmF0b3I6
OmNyZWF0ZShkZWNvZGVyKSwgZnVsbFNpemUsIGZ1bGxSZWN0KSktPnVucmVmKCk7CisKKyAgICAv
LyBVc2UgVVJJIHRvIGlkZW50aWZ5IHRoaXMgaXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVm
IG9mIHR5cGUgTGF6eURlY29kaW5nUGl4ZWxSZWYuCisgICAgLy8gRklYTUU6IEdpdmUgdGhlIGFj
dHVhbCBVUkkgaXMgbW9yZSB1c2VmdWwuCisgICAgYml0bWFwLnBpeGVsUmVmKCktPnNldFVSSShs
YWJlbExhenlEZWNvZGVkKTsKKworICAgIC8vIEluZm9ybSB0aGUgYml0bWFwIHRoYXQgd2Ugd2ls
bCBuZXZlciBjaGFuZ2UgdGhlIHBpeGVscy4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGhpbnQKKyAg
ICAvLyBzdWJzeXN0ZW1zIHRoYXQgbWF5IHRyeSB0byBjYWNoZSB0aGlzIGJpdG1hcCAoZS5nLiBw
aWN0dXJlcywgcGlwZXMsIGdwdSwgcGRmLCBldGMuKQorICAgIGJpdG1hcC5zZXRJbW11dGFibGUo
KTsKKworICAgIC8vIEZJWE1FOiBTZXR0aW5nIGJpdG1hcC5zZXRJc09wYXF1ZSgpIGlzIGJpZyBw
ZXJmb3JtYW5jZSBnYWluIGlmIHBvc3NpYmxlLiBXZSBjYW4KKyAgICAvLyBkbyBzbyBzYWZlbHkg
aWYgdGhlIGltYWdlIGlzIGZ1bGx5IGxvYWRlZCBhbmQgaXQgaXMgYSBKUEVHIGltYWdlLCBvciBp
bWFnZSB3YXMKKyAgICAvLyBkZWNvZGVkIGJlZm9yZS4KKworICAgIHJldHVybiBiaXRtYXA7Cit9
CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0JpdG1h
cChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25z
dCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7CisKKyAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZiogcGl4ZWxSZWYgPSBzdGF0aWNfY2Fz
dDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhlbFJlZigpKTsKKyAgICBBU1NFUlQo
IXBpeGVsUmVmLT5pc1NjYWxlZChwaXhlbFJlZi0+ZnJhbWVHZW5lcmF0b3IoKS0+ZnVsbFNpemUo
KSkgJiYgIXBpeGVsUmVmLT5pc0NsaXBwZWQoKSk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSAwOwor
ICAgIHJvd0J5dGVzID0gU2tCaXRtYXA6OkNvbXB1dGVSb3dCeXRlcyhTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIHNjYWxlZFNpemUud2lkdGgoKSk7CisKKyAgICBTa0JpdG1hcCByZXNpemVk
Qml0bWFwOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwgcm93
Qnl0ZXMpOworICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1Bp
eGVsUmVmKHBpeGVsUmVmLT5mcmFtZUdlbmVyYXRvcigpLCBzY2FsZWRTaXplLCBzY2FsZWRTdWJz
ZXQpKS0+dW5yZWYoKTsKKworICAgIC8vIFNlZSBjb21tZW50cyBpbiBjcmVhdGVMYXp5RGVjb2Rl
ZFNrQml0bWFwKCkuCisgICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsKKyAgICByZXR1
cm4gcmVzaXplZEJpdG1hcDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEo
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkp
OworICAgIGlmIChpc0xhenlEZWNvZGVkKGJpdG1hcCkpCisgICAgICAgIHN0YXRpY19jYXN0PExh
enlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBpeGVsUmVmKCkpLT5mcmFtZUdlbmVyYXRvcigp
LT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQqIEltYWdlRGVjb2Rp
bmdTdG9yZTo6bG9ja1BpeGVscyhQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGZyYW1l
R2VuZXJhdG9yLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2Fs
ZWRTdWJzZXQpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgQVNT
RVJUKG1fbG9ja2VkU2tCaXRtYXAuaXNOdWxsKCkpOworCisgICAgU2tJU2l6ZSBmdWxsU2l6ZSA9
IGZyYW1lR2VuZXJhdG9yLT5mdWxsU2l6ZSgpOworCisgICAgLy8gVGhlIGNhY2hlIG9ubHkgc2F2
ZXMgdGhlIGZ1bGwgc2l6ZSBpbWFnZSBhdCB0aGUgbW9tZW50LgorICAgIFNjYWxlZEltYWdlRnJh
Z21lbnQqIGZyYW1lQ2FjaGUgPSBsb29rdXBGcmFtZUNhY2hlKGZyYW1lR2VuZXJhdG9yLT5pbWFn
ZUlkKCksIGZ1bGxTaXplKTsKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisKKyAgICBpZiAoIWZyYW1l
Q2FjaGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFBpeGVscyBhcmUgb3duZWQgYnkgdGhlIEltYWdl
RGVjb2RlciBpbiB0aGUgZ2VuZXJhdG9yLiBGaW5kCisgICAgICAgIC8vIGEgd2F5IHRvIHRyYW5z
ZmVyIG93bmVyc2hpcCB0byBvdXIgY2FjaGUuCisgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0g
ZnJhbWVHZW5lcmF0b3ItPmRlY29kZXIoKS0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworCisgICAg
ICAgIC8vIFNhdmVzIHRoZSBmcmFtZSBpbiBjYWNoZSBpZiB0aGlzIGlzIGNvbXBsZXRlLgorICAg
ICAgICBpZiAoZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpIHsK
KyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5hcHBlbmQoU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3Jl
YXRlKGZyYW1lR2VuZXJhdG9yLT5pbWFnZUlkKCksIGZ1bGxTaXplLCBmcmFtZS0+Z2V0U2tCaXRt
YXAoKSwgdHJ1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBh
IGRlY29kaW5nIGVycm9yLiBSZXBvcnQgdGhpcyB0byBCaXRtYXBJbWFnZS4KKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYml0bWFwID0gZnJhbWUtPmdldFNrQml0
bWFwKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lQ2FjaGUtPmlzQ29tcGxl
dGUoKSk7CisgICAgICAgIGJpdG1hcCA9IGZyYW1lQ2FjaGUtPmJpdG1hcCgpOworICAgIH0KKwor
ICAgIGlmIChmdWxsU2l6ZSAhPSBzY2FsZWRTaXplKSB7CisgICAgICAgIC8vIEltYWdlIHNjYWxp
bmcgaXMgZG9uZSBvbi10aGUtZmx5IGFuZCBzY2FsZWQgaW1hZ2UgaXMgZGVzdHJveWVkCisgICAg
ICAgIC8vIGFmdGVyIHVzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlc2l6ZSBqdXN0IHRoZSByZXF1
ZXN0ZWQgZnJhZ21lbnQuCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBza2lhOjpJbWFnZU9w
ZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xB
TkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICBtX2xvY2tlZFNrQml0bWFwID0gYml0bWFwOworICAgIG1fbG9ja2VkU2tC
aXRtYXAubG9ja1BpeGVscygpOworICAgIHJldHVybiBtX2xvY2tlZFNrQml0bWFwLmdldEFkZHIo
c2NhbGVkU3Vic2V0LngoKSwgc2NhbGVkU3Vic2V0LnkoKSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjp1bmxvY2tQaXhlbHMoKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhy
ZWFkKCkpOworCisgICAgbV9sb2NrZWRTa0JpdG1hcC51bmxvY2tQaXhlbHMoKTsKKyAgICBtX2xv
Y2tlZFNrQml0bWFwLnJlc2V0KCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpmcmFt
ZUdlbmVyYXRvckJlaW5nRGVzdHJveWVkKEltYWdlRnJhbWVHZW5lcmF0b3IqIGZyYW1lR2VuZXJh
dG9yKQoreworICAgIEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgZGVsZXRl
RnJhbWVDYWNoZShmcmFtZUdlbmVyYXRvci0+aW1hZ2VJZCgpKTsKK30KKworYm9vbCBJbWFnZURl
Y29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiB0
aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNNYWluVGhyZWFkKCk7Cit9CisKK1Nj
YWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNoZShp
bnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdlSWQsIHNjYWxlZFNpemUpKQorICAgICAg
ICAgICAgcmV0dXJuIG1fZnJhbWVDYWNoZVtpXS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpkZWxldGVGcmFtZUNhY2hlKGludCBpbWFn
ZUlkKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaW1hZ2VJZCkpIHsK
KyAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhNWQ5Mjk0NWY2NzcxM2JjYTg2MjRlZmM3
OGNlMTYxNWI2NjlmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCisjZGVmaW5lIEltYWdlRGVj
b2RpbmdTdG9yZV9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5o
IgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyOwor
Y2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKK2NsYXNzIFNjYWxlZEltYWdlRnJhZ21lbnQ7Citj
bGFzcyBTaGFyZWRCdWZmZXI7CisKKy8vIFRoaXMgY2xhc3MgY2FuIG9ubHkgYmUgaW5zdGFudGlh
dGVkIG9uIG1haW4gdGhyZWFkLiBUaGVyZSB3aWxsIGJlIGFuCisvLyBpbnN0YW5jZSBvbiBpbXBs
IHRocmVhZCBpbiB0aGUgZnV0dXJlIGJ1dCB0aGF0IHBhcnQgb2YgaW1wbGVtZW50YXRpb24KKy8v
IGlzIGluY29tcGxldGUuIFNlZSBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NDI0MAorLy8gZm9yIGRldGFpbHMuCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KKyAgICB+
SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CisKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bnN0YW5jZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyBib29sIGlz
TGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmKTsKKworICAgIFNrQml0bWFwIGNyZWF0ZUxhenlE
ZWNvZGVkU2tCaXRtYXAoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKyAgICBTa0JpdG1hcCBy
ZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKworICAgIHZvaWQgc2V0
RGF0YShjb25zdCBTa0JpdG1hcCYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpOworCisgICAgLy8gWW91IG1heSBvbmx5IGxvY2sgb25lIHNldCBvZiBwaXhl
bHMgYXQgYSB0aW1lOyBvdmVybGFwcGluZyBsb2NrIGNhbGxzIGFyZSBub3QgYWxsb3dlZC4KKyAg
ICB2b2lkKiBsb2NrUGl4ZWxzKFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4sIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAg
dm9pZCB1bmxvY2tQaXhlbHMoKTsKKworICAgIHZvaWQgZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ry
b3llZChJbWFnZUZyYW1lR2VuZXJhdG9yKik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlKCk7CisgICAgYm9vbCBjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3Q7CisgICAgdm9p
ZCBjcmVhdGVGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIFNj
YWxlZEltYWdlRnJhZ21lbnQqIGxvb2t1cEZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQg
aW1hZ2VJZCk7CisKKyAgICBWZWN0b3I8T3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+ID4gbV9m
cmFtZUNhY2hlOworCisgICAgU2tCaXRtYXAgbV9sb2NrZWRTa0JpdG1hcDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRjMmYyOTkxNTI1MDRhNWY2NTZhOWI3ZjFmZmZkZTFkMzMzM2I1MDIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgor
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSB7CisKKy8vIEFuIHVu
aXF1ZSBJRCBmb3IgYW4gaW1hZ2UgZmlsZS4KK2ludCBzX25leHRJbWFnZUlkID0gMDsKKworfSAv
LyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lR2VuZXJhdG9y
OjpJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQor
ICAgIDogbV9kZWNvZGVyKGRlY29kZXIpCit7CisgICAgbV9mdWxsU2l6ZSA9IFNrSVNpemU6Ok1h
a2UobV9kZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgbV9kZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIG1faW1hZ2VJZCA9IHNfbmV4dEltYWdlSWQrKzsKK30KKworSW1hZ2VGcmFtZUdlbmVy
YXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQoreworICAgIGlmIChJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3llZCh0aGlz
KTsKK30KKworSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVyKCkKK3sK
KyAgICByZXR1cm4gbV9kZWNvZGVyLmdldCgpOworfQorCit2b2lkIEltYWdlRnJhbWVHZW5lcmF0
b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQoreworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAg
ICAgbV9kZWNvZGVyLT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI5Y2Q3MmI3OTFiOWI4YTRlOTdjZDYwZTkxMTcwZjlhZGQzN2RlZTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SW1hZ2VGcmFtZUdlbmVyYXRvcl9oCisjZGVmaW5lIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorCisj
aW5jbHVkZSAiU2tTaXplLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVy
OworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW1hZ2VGcmFtZUdlbmVyYXRvcj4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNyZWF0ZShQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4gZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1h
Z2VGcmFtZUdlbmVyYXRvcihkZWNvZGVyKSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW1hZ2VG
cmFtZUdlbmVyYXRvcihQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworICAgIH5JbWFnZUZyYW1l
R2VuZXJhdG9yKCk7CisKKyAgICAvLyBDcmVhdGVzIHRoZSBpbWFnZSBkZWNvZGVyIGlmIG5lZWRl
ZC4KKyAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBT
a0lTaXplJiBmdWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNpemU7IH0KKyAgICBpbnQg
aW1hZ2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZDsgfQorCitwcml2YXRlOgorICAgIE93
blB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7CisgICAgU2tJU2l6ZSBtX2Z1bGxTaXplOworICAgIGludCBtX2ltYWdlSWQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5n
UGl4ZWxSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZGQwOTFlMGQ5ZjhjMTQwYjdkYmQ3MzFkNzM2MjE4
YWQwZmI5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJl
Zi5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGlu
Z1N0b3JlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF6eURlY29kaW5nUGl4
ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRv
cj4gZnJhbWVHZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJl
Y3QmIHNjYWxlZFN1YnNldCkKKyAgICA6IFNrUGl4ZWxSZWYoMCkKKyAgICAsIG1fZnJhbWVHZW5l
cmF0b3IoZnJhbWVHZW5lcmF0b3IpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAg
ICAsIG1fc2NhbGVkU3Vic2V0KHNjYWxlZFN1YnNldCkKK3sKK30KKworTGF6eURlY29kaW5nUGl4
ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZigpCit7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzU2NhbGVkKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdAoreworICAg
IHJldHVybiBmdWxsU2l6ZSAhPSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgTGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzQ2xpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVkU2l6ZS53
aWR0aCgpICE9IG1fc2NhbGVkU3Vic2V0LndpZHRoKCkgfHwgbV9zY2FsZWRTaXplLmhlaWdodCgp
ICE9IG1fc2NhbGVkU3Vic2V0LmhlaWdodCgpOworfQorCit2b2lkKiBMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5U
aHJlYWQoKS0+bG9ja1BpeGVscyhtX2ZyYW1lR2VuZXJhdG9yLCBtX3NjYWxlZFNpemUsIG1fc2Nh
bGVkU3Vic2V0KTsKK30KKwordm9pZCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhl
bHMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBM
YXp5RGVjb2RpbmdQaXhlbFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6
eURlY29kaW5nUGl4ZWxSZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWI5Y2NjNGNiMTExZjI3NjRmNzIzNzA2
NzUxYTVlY2YxM2M3NjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaApAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCisjZGVmaW5lIExhenlE
ZWNvZGluZ1BpeGVsUmVmX2gKKworI2luY2x1ZGUgIlNrRmxhdHRlbmFibGVCdWZmZXJzLmgiCisj
aW5jbHVkZSAiU2tQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1ZGUgIlNr
U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CisKK2NsYXNzIExhenlEZWNvZGluZ1BpeGVs
UmVmIDogcHVibGljIFNrUGl4ZWxSZWYgeworcHVibGljOgorICAgIExhenlEZWNvZGluZ1BpeGVs
UmVmKFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4sIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgdmlydHVhbCB+TGF6eURl
Y29kaW5nUGl4ZWxSZWYoKTsKKworICAgIFNLX0RFQ0xBUkVfVU5GTEFUVEVOQUJMRV9PQkpFQ1Qo
KQorCisgICAgUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdlbmVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVHZW5lcmF0b3I7IH0KKyAgICBib29sIGlzU2NhbGVkKGNv
bnN0IFNrSVNpemUmIGZ1bGxTaXplKSBjb25zdDsKKyAgICBib29sIGlzQ2xpcHBlZCgpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7CisgICAgdmlydHVhbCB2
b2lkIG9uVW5sb2NrUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIG9uTG9ja1BpeGVsc0FyZVdy
aXRhYmxlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0
b3I+IG1fZnJhbWVHZW5lcmF0b3I7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNpemU7CisgICAgU2tJ
UmVjdCBtX3NjYWxlZFN1YnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIExhenlEZWNvZGluZ1BpeGVsUmVmX2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21l
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk3NGU2ZmY4NDdlYzViNWRkNDY5NThmMjBiZDQ4MTI5MzliZDM1
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjYWxlZEltYWdlRnJhZ21lbnQ6On5TY2FsZWRJ
bWFnZUZyYWdtZW50KCkKK3sKK30KKworU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VG
cmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9pbWFnZUlkKGlt
YWdlSWQpCisgICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKKyAgICAsIG1fYml0bWFwKGJp
dG1hcCkKKyAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBsZXRlKQoreworfQorCitib29sIFNjYWxl
ZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltYWdlSWQgPT0gbV9pbWFnZUlkICYmIHNjYWxl
ZFNpemUgPT0gbV9zY2FsZWRTaXplOworfQorCitib29sIFNjYWxlZEltYWdlRnJhZ21lbnQ6Omlz
RXF1YWwoaW50IGltYWdlSWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltYWdlSWQgPT0gbV9pbWFn
ZUlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWI3ZmZjOTYwMTRlMDU3M2U4MzUwNzgwMmI2NmYzNGQ5YmNkM2Y2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY2FsZWRJbWFnZUZyYWdtZW50X2gKKyNkZWZpbmUgU2NhbGVkSW1hZ2VGcmFnbWVu
dF9oCisKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgorI2luY2x1
ZGUgIlNrU2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBTY2FsZWRJbWFnZUZyYWdtZW50IGlzIGEgc2NhbGVkIHZlcnNpb24g
b2YgYSBpbWFnZS4gSXQgaXMgaWRlbnRpZmllZAorLy8gYnkgdHdvIHRoaW5nczoKKy8vIDEuIElt
YWdlIElELiBUaGUgb3JpZ2luYWwgaW1hZ2UgdGhhdCB0aGlzIGZyYWdtZW50IGNvbWVzIGZyb20u
CisvLyAyLiBTY2FsZWQgaW1hZ2Ugc2l6ZS4KK2NsYXNzIFNjYWxlZEltYWdlRnJhZ21lbnQgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNyZWF0
ZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAm
IGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50KGltYWdlSWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXND
b21wbGV0ZSkpOworICAgIH0KKworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQoaW50IGltYWdlSWQs
IGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAg
flNjYWxlZEltYWdlRnJhZ21lbnQoKTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBj
b25zdCB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVy
biBtX2JpdG1hcDsgfQorCisgICAgYm9vbCBpc0VxdWFsKGludCBpbWFnZUlkLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoaW50IGltYWdlSWQpIGNv
bnN0OworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsg
fQorCitwcml2YXRlOgorICAgIGludCBtX2ltYWdlSWQ7CisgICAgU2tJU2l6ZSBtX3NjYWxlZFNp
emU7CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CisgICAgYm9vbCBtX2lzQ29tcGxldGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4
IDE4NjJhMmFmYzZlMzUwNDkzNmRjYmM5MDNjZTZmMjRkNGFhZjUwYWQuLmQwODRlYzhmNDFjZmFm
NDY0YzhiNjQ4NjRmZmQ0MDU2YTc0M2EyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKQEAgLTQwLDYg
KzQwLDExIEBACiAjaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5o
IgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQpAQCAtNzMsNiArNzgsMTEg
QEAgYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYg
c2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0kKIAogU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpy
ZXNpemVkQml0bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChtX2ltYWdlKSkKKyAgICAg
ICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+cmVz
aXplTGF6eURlY29kZWRTa0JpdG1hcChtX2ltYWdlLCBzY2FsZWRJbWFnZVNpemUsIHNjYWxlZElt
YWdlU3Vic2V0KTsKKyNlbmRpZgorCiAgICAgaWYgKCFoYXNSZXNpemVkQml0bWFwKHNjYWxlZElt
YWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpKSB7CiAgICAgICAgIGJvb2wgc2hvdWxkQ2FjaGUg
PSBpc0RhdGFDb21wbGV0ZSgpCiAgICAgICAgICAgICAmJiBzaG91bGRDYWNoZVJlc2FtcGxpbmco
c2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGZjODJh
NWMyNWFkNzhlODc3ZGM5OTE4OGU5ZmRiMWU4NWIxYWQyN2MuLjlmNjk3YTg0YWIwOWFmYmFjM2I2
MmFlM2ZjZTU2NmM0ZmI2ZDc0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNDgsNiArMTQ4LDE4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2
b2lkIHNldFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fYml0bWFwID0gTmF0aXZlSW1hZ2VTa2lhKGJpdG1hcCwgMSk7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBTa0JpdG1hcCYgZ2V0U2tCaXRtYXAoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuYml0bWFwKCk7CisgICAgICAgIH0KKyNlbmRp
ZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgICAgIGlu
dCBoZWlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDI0Y2Fl
Mjk4ZmY1MDQ5MWZlYzEzZmFiNDNiZDkwODY5NjY3ODZjMGYuLjY0MDYzYTAyMWM0NjcxNGQ5ZDU5
ODU2YWNlYzQyMmVmODdiZGU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
NjEsNiArNjEsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAndGVzdHMvRGF0ZVRpbWVGb3JtYXRUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvRGVjaW1hbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9E
cmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2Uu
aCcsCkBAIC03OCw4ICs3OSw5IEBACiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGlu
Z1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKLSAgICAgICAgICAg
ICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29k
ZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xpbmtIaWdobGlnaHRUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvTGlzdGVuZXJMZWFrVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggYWJkODRlZDBlNTdhZmU5ODMxZmZmZDA2Mzkx
ZTQyOTFlNWRjMmJlNC4uMDhjZDE5NzQ1Y2M3MGFhZTM3OWM4OTUxZTY0YTE0ODI3ZjZhNDU0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC04Niw2
ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgV2ViU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0
VGlsZVNpemUoV2ViU2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnJlZDJkQ2Fu
dmFzRW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZlbG9wZXJF
eHRyYXNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9y
dHNNb3VzZShib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91
Y2goYm9vbCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
S2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggZTM1
N2YyOGU0MjgzYTcwMDE1NmQ2Y2ZhYmQ1MGVkYjNlZDJmNzg5Ny4uMjQzZDA4ZTYyOTQ4MDU2OTc5
MzYyZGZjZjg1OGM2ZmY4NWU4YTc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0LmgiCiAKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJMYXlv
dXRUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNdXRhdGlv
bk9ic2VydmVyLmgiCkBAIC0xNjUsNiArMTY2LDcgQEAgdm9pZCBzaHV0ZG93bigpCiAgICAgfQog
I2VuZGlmCiAgICAgc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQgPSAwOworICAgIFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKICAgICBQbGF0Zm9ybTo6c2h1dGRvd24oKTsK
ICAgICBXZWJQcmVyZW5kZXJpbmdTdXBwb3J0OjpzaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggOTg4YzVlNjZiMWUx
M2MxNmU5ZjY3ZDAyYTQ3Y2EwNzhkZjM4NjA5OC4uZGM3NzM2ZDlhMjFiMDkwNzRjZmIxZDkxNTlj
YjhmN2IxOWM5MDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0
aW5nc0ltcGwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBs
LmgiCiAKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgIkltYWdlRGVj
b2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cHVibGljL1dl
YlN0cmluZy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KQEAgLTU1LDYgKzU2LDcgQEAg
V2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdzKQogICAg
ICwgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmYWxzZSkKICAg
ICAsIG1fZ2VzdHVyZVRhcEhpZ2hsaWdodEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fYXV0b1pvb21G
b2N1c2VkTm9kZVRvTGVnaWJsZVNjYWxlKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9kZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSgyNTYs
IDI1NikpCiAgICAgLCBtX21heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSg1MTIsIDUxMikpCiB7
CkBAIC00ODAsNiArNDgyLDE1IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJk
Q2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1f
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiBlbmFibGVkKQorICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobV9kZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkICYmICFlbmFibGVkKQorICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6OnNodXRkb3duKCk7CisgICAgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0g
ZW5hYmxlZDsKK30KKwogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0
aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVu
YWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApp
bmRleCAxMTY5YzMxY2YzZWIyYWU4MGZkYTFmODg1Y2QwODY5MTY4ZjQ2YTQxLi45MDUxYmFiNjE3
Zjg2YmZlMDQ5YjBiNzdlNmUyYWRmMDJkNzJkNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGlsZVNpemUoV2ViU2l6ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VT
dXBwb3J0c1RvdWNoKGJvb2wpOwpAQCAtMTc4LDYgKzE3OSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yOwogICAgIGJvb2wg
bV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZDsKICAgICBib29sIG1fYXV0b1pvb21Gb2N1c2Vk
Tm9kZVRvTGVnaWJsZVNjYWxlOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkOwogICAgIFdlYlNpemUgbV9kZWZhdWx0VGlsZVNpemU7CiAgICAgV2ViU2l6ZSBtX21heFVu
dGlsZWRMYXllclNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MjU0OTgw
NWM3NmE4MWJlMzFhM2RmNDhjNDc0MWUzMmU0ZWRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAg
LTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJE
ZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgi
CisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNs
dWRlICJTa1BpY3R1cmUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29k
ZXJUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uTWFpblRocmVhZCgpOworICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdl
RGVjb2RlcigpOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoNjAwLCA2MTMpOwor
ICAgICAgICBtX2xhenlEZWNvZGVyID0gRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUZvclRl
c3RpbmcoYWRvcHRQdHIobV9hY3R1YWxEZWNvZGVyKSk7CisgICAgICAgIG1fY2FudmFzLnNldERl
dmljZShuZXcgU2tEZXZpY2UoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCAxMDAsIDEwMCkp
LT51bnJlZigpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgewor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgLy8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRoZSBwb2ludGVyIHRvIHF1ZXJ5
IHN0YXRlcy4KKyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVhbERlY29kZXI7CisgICAgT3du
UHRyPERlZmVycmVkSW1hZ2VEZWNvZGVyPiBtX2xhenlEZWNvZGVyOworICAgIFNrUGljdHVyZSBt
X3BpY3R1cmU7CisgICAgU2tDYW52YXMgbV9jYW52YXM7Cit9OworCitURVNUX0YoRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LCBkcmF3SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZl
SW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5k
ZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIEVYUEVDVF9FUShtX2FjdHVhbERlY29k
ZXItPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+Yml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpLCBpbWFnZS0+Yml0bWFwKCkuaGVp
Z2h0KCkpOworICAgIEVYUEVDVF9GQUxTRShpbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAg
IEVYUEVDVF9UUlVFKGltYWdlLT5iaXRtYXAoKS5pc0ltbXV0YWJsZSgpKTsKKworICAgIFNrQ2Fu
dmFzKiB0ZW1wQ2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKDEwMCwgMTAwKTsKKyAg
ICB0ZW1wQ2FudmFzLT5kcmF3Qml0bWFwKGltYWdlLT5iaXRtYXAoKSwgMCwgMCk7CisgICAgbV9w
aWN0dXJlLmVuZFJlY29yZGluZygpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXIt
PmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworCisgICAgbV9jYW52YXMuZHJhd1BpY3R1cmUo
bV9waWN0dXJlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCgpKTsKK30KKworVEVTVF9GKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCwg
ZHJhd1NjYWxlZEludG9Ta1BpY3R1cmUpCit7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4g
aW1hZ2UoYWRvcHRQdHIobV9sYXp5RGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApLT5hc05l
d05hdGl2ZUltYWdlKCkpKTsKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBpbWFnZS0+cmVz
aXplZEJpdG1hcChTa0lTaXplOjpNYWtlKDUwLCA1MSksIFNrSVJlY3Q6Ok1ha2VXSCg1MCwgNTEp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2NhbGVkQml0bWFwLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShzY2FsZWRCaXRtYXAuaXNJbW11dGFibGUoKSk7CisgICAgRVhQRUNUX0VRKDUwLCBzY2Fs
ZWRCaXRtYXAud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDUxLCBzY2FsZWRCaXRtYXAuaGVpZ2h0
KCkpOworICAgIEVYUEVDVF9FUSgwLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5S
ZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoc2NhbGVkQml0
bWFwLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VR
KDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBt
X2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVh
bERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41Y2YyMzc0NGU1MWZkZTQzYzE2NGIzMTEwMWQwNWIzMzA3MzJjMmZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNv
ZGVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja0ltYWdlRGVjb2Rlcl9o
CisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBNb2NrSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CitwdWJsaWM6Cisg
ICAgTW9ja0ltYWdlRGVjb2RlcigpCisgICAgICAgIDogSW1hZ2VEZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFw
cGxpZWQpCisgICAgICAgICwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgwKQorICAgIHsgfQor
CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICJtb2NrIjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QpCisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQ7CisKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAg
ICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAg
IH0KKworICAgIGludCBmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZUJ1
ZmZlclJlcXVlc3RDb3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIE1vY2tJbWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDkzYjc5ZjdkNGVkMDZjNGVlMmJlYjQ2NTc2NDdlMDQ5ZDQxZTE2
ODkuLjBlOWEwNWIxYjkxOWRkMzFlZTlhMDQwZTY2NmI1MzgwZDYyN2VhNzggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAor
MjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmll
d2VkIGJ5IFN0ZXBoZW4gV2hpdGUuCisKKyAgICAgICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWlt
YWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RT
aGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxs
OjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgor
ICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBv
cnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAtMTcgIFpvbHRhbiBIb3J2YXRoICA8
em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBKU0hlYXAgbWVtb3J5IG1l
YXN1cmVtZW50IG9mIHRoZSBQYWdlTG9hZCBwZXJmb3JtYWNldGVzdHMgc2luY2UgaXQgY3JlYXRl
cyBib2d1cyBKU0dsb2JhbERhdGFzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMzBjZTI4ODUxZmM5YTlhNDZiOGI2M2U2ZGJkMDBk
YTFjM2ZlYTgzOC4uNWEzMjEwNDQ5NmY3OWIxZjJhNDU0OGIzNjUzNDU2YjQwNjFmYTZiNSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApA
QCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRl
ZFBhaW50aW5nW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtcGFpbgogc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvW10gPSAiLS1lbmFi
bGUtYWNjZWxlcmF0ZWQtdmlkZW8iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVXNlR3JhcGhp
Y3NDb250ZXh0M0RJbXBsZW1lbnRhdGlvbltdID0gIi0tdXNlLWdyYXBoaWNzLWNvbnRleHQtM2Qt
aW1wbGVtZW50YXRpb249IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQ
YWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsKK3N0YXRpYyBjb25zdCBj
aGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVy
cmVkLWltYWdlLWRlY29kaW5nIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzT3B0
W10gPSAiLS1zdHJlc3Mtb3B0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblN0cmVzc0Rlb3B0
W10gPSAiLS1zdHJlc3MtZGVvcHQiOwpAQCAtMTMzLDYgKzEzNCw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiBhcmd2W10pCiAgICAgYm9vbCBkZWZlcnJlZDJEQ2FudmFzRW5hYmxlZCA9IGZh
bHNlOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBi
b29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBib29sIHN0cmVzc09wdCA9IGZhbHNlOwog
ICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKICAgICBib29sIGhhcmR3YXJlQWNjZWxlcmF0
ZWRHTCA9IGZhbHNlOwpAQCAtMTgzLDYgKzE4NSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBHcmFwaGlj
Q29udGV4dDNEIGltcGxlbWVudGF0aW9uICVzXG4iLCBpbXBsZW1lbnRhdGlvbi5jX3N0cigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25FbmFibGVQZXJUaWxlUGFpbnRp
bmcpCiAgICAgICAgICAgICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nKQor
ICAgICAgICAgICAgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAg
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc09wdCkKICAgICAgICAgICAgIHN0cmVz
c09wdCA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0cmVzc0Rl
b3B0KQpAQCAtMjIyLDYgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10p
CiAgICAgICAgIHNoZWxsLnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGRlZmVycmVkMkRDYW52
YXNFbmFibGVkKTsKICAgICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQo
YWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5zZXRQZXJUaWxlUGFp
bnRpbmdFbmFibGVkKHBlclRpbGVQYWludGluZ0VuYWJsZWQpOworICAgICAgICBzaGVsbC5zZXRE
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQp
OwogICAgICAgICBzaGVsbC5zZXRKYXZhU2NyaXB0RmxhZ3MoamF2YVNjcmlwdEZsYWdzKTsKICAg
ICAgICAgc2hlbGwuc2V0U3RyZXNzT3B0KHN0cmVzc09wdCk7CiAgICAgICAgIHNoZWxsLnNldFN0
cmVzc0Rlb3B0KHN0cmVzc0Rlb3B0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCmluZGV4IDMyNTg1ZmFhMWIyZDhhZDgxYTgzYjE1ZThmNzEyYmQ4Y2E3MjQ4
OWIuLmFjNzc1OTY4MWEwNDZkMDNkNDcxOGZjNDU4YzI3ZTgyZTE0NjE3OTkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTE0LDYgKzExNCw3IEBA
IFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICAsIG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQogICAgICwg
bV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGVmZXJyZWRJbWFn
ZURlY29kaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc3RyZXNzT3B0KGZhbHNlKQogICAgICwg
bV9zdHJlc3NEZW9wdChmYWxzZSkKICAgICAsIG1fZHVtcFdoZW5GaW5pc2hlZCh0cnVlKQpAQCAt
MjI5LDYgKzIzMCw3IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcm
IHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IG1fYWNj
ZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5kZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZCA9IG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CisgICAgbV9w
cmVmcy5kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkOwogICAgIG1fcHJlZnMuYXBwbHlUbygmd2ViVmlldyk7CiB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggNDRiNWFlMzg4YzY4ZDY1ZGU4
OTBmYzgwMGZlZDUyMjllZWMyYTMyNC4uMzkyNjYyNDQ2OWI2OGNjYmM4NzRiNDkxZWE0ODNhMGI2
MzkyY2U1NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAg
LTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KICAgICB2b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkg
eyBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0
UGVyVGlsZVBhaW50aW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCA9IGVuYWJsZWQ7IH0KICNpZiBkZWZpbmVkKE9TX1dJTikKICAgICAvLyBBY2Nlc3MgdG8g
dGhlIGZpbmlzaGVkIGV2ZW50LiBVc2VkIGJ5IHRoZSBzdGF0aWMgV2F0Y2hEb2cgdGhyZWFkLgog
ICAgIEhBTkRMRSBmaW5pc2hlZEV2ZW50KCkgeyByZXR1cm4gbV9maW5pc2hlZEV2ZW50OyB9CkBA
IC0yMzUsNiArMjM2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGVmZXJyZWQyZENhbnZhc0Vu
YWJsZWQ7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOwogICAgIGJvb2wg
bV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkOwogICAgIFdlYlByZWZlcmVuY2VzIG1fcHJlZnM7CiAgICAgYm9vbCBtX3N0cmVz
c09wdDsKICAgICBib29sIG1fc3RyZXNzRGVvcHQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggM2JjMmNkZDlmMmFlNDE3MGMzM2Fk
NjQxMDZkNGE3ZjJkMDkwMjFmNS4uNWM4YzkyYzk5OTQyNjQ0ZGQxOWE0OWM5OGU2NmMxYTRmMDZk
NDQ0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVy
ZW5jZXMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlc2V0KCkK
ICAgICBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwogICAgIGFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgZm9yY2VDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsK
KyAgICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgbWVkaWFQbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsKICAgICBtb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBjc3NDdXN0b21GaWx0ZXJFbmFibGVkID0gZmFsc2U7CkBAIC0yMjQs
NiArMjI1LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJWaWV3
KQogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChhY2NlbGVyYXRl
ZDJkQ2FudmFzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldERlZmVycmVkMmRDYW52YXNFbmFi
bGVkKGRlZmVycmVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0
ZWRQYWludGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQpOworICAgIHNldHRp
bmdzLT5zZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGRlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZShtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSk7CiAgICAgc2V0dGluZ3MtPnNl
dE1vY2tTY3JvbGxiYXJzRW5hYmxlZChtb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOwogICAgIHNldHRp
bmdzLT5zZXRBcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmb3JjZUNv
bXBvc2l0aW5nTW9kZSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJQcmVmZXJlbmNlcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJl
ZmVyZW5jZXMuaAppbmRleCBjMzY1NTNiMzU0Njk2NGM3NmYyOTkxNmE5ZWE5YjllMmEyM2UyNGIy
Li5lMDMxNWYyZDA3YzFlNWI5ODU1ZmU3YjNhYTJlMTRjZjdlMWU0MGJmIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKQEAgLTEwOSw2ICsxMDks
NyBAQCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXMgewogICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZh
c0VuYWJsZWQ7CiAgICAgYm9vbCBkZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGFj
Y2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZDsKICAgICBib29sIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOwogICAg
IGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVkOwogICAgIGJvb2wgY3NzQ3VzdG9tRmlsdGVyRW5h
YmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CmluZGV4IGMzMTBlYjE1YjE5NTRkZGVkZGMzMzNiOTgwZjY2NWQ1ZmNkYjkx
Y2UuLmE2OWY1YTgyMmFhM2ZlMzI4NDZmOTE3MDExNjQxOTNjYzIyMzhmNTIgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpA
QCAtMzkwLDYgKzM5MCw5IEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAgICAgICAgICAg
IFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvc29mdHdhcmVjb21w
b3NpdGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wb3NpdGluZycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1lbmFibGUtc29mdHdhcmUtY29tcG9zaXRp
bmcnXSksCisgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCdwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zhc3QvaW1hZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLWVuYWJs
ZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZycsICctLWVuYWJsZS1wZXItdGlsZS1wYWludGluZycs
ICctLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUnXSksCiAgICAgICAgIF0KIAogICAgICMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBlNGY5MmI2N2VkMDg1ODIwNTcxMDYwMmUzNWM0MjMyZGM5N2Q5MDkxLi40YWNjMTlkYjFmNWFj
NWI2YmFkNGQyNTc4NTAxYjFiMmRmOTUwMGQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MDktMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBm
b3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKwor
ICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdp
bGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1w
ZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVB
RE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAtMTggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFNldCBtaW4td2lkdGggcHJvcGVydHkgaW5zdGVhZCBvZiB3aWR0
aCBwcm9wZXJ0eSBmb3IgZGF0ZS90aW1lIGZpZWxkcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMWQzY2JhZmQyM2Y4MjlhZmQ3YjdkM2Qy
Y2EyNzZlYmQ5YWYwZmIyMy4uNTU1OTM1N2Q5YmVmNGUxYmJlN2NlMzJiY2Q5YjAwNmU5NDBhYTA5
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25z
CkBAIC00MjI3LDMgKzQyMjcsMjggQEAgd2Via2l0Lm9yZy9iLzk5NjA0IFsgTWFjIFdpbiBdIGh0
dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5nLmh0bWwgWyBQYXNzIENyYXMKIAogIyBVc2Vy
IFRpbWluZyBpcyBub3QgZW5hYmxlIHlldC4gc28gc2tpcCBpdC4KIHdlYmtpdC5vcmcvYi84NDg5
MyBodHRwL3Rlc3RzL3czYy93ZWJwZXJmL3N1Ym1pc3Npb24vdXNlci10aW1pbmcgWyBTa2lwIF0K
KworIyBUaGVzZSB0ZXN0cyBhcmUgZmFpbGluZyBhbHJlYWR5IGFuZCBiZWNhdXNlIG9mIHZpcnR1
YWwgdGVzdCBzdWl0ZSBmb3IgZGVmZXJyZWQKKyMgaW1hZ2UgZGVjb2RpbmcgdGhleSBuZWVkIHRv
IGJlIHN1cHByZXNzZWQgYWdhaW4uCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJv
bS1iZmNhY2hlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24tY3Nz
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2V4aWYtb3JpZW50YXRpb24uaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJy
ZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLWxhbmRzY2FwZS5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0
L2ltYWdlcy9wZGYtYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvc3VwcG9ydC1i
cm9rZW4taW1hZ2UtZGVsZWdhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvY29sb3ItanBl
Zy13aXRoLWNvbG9yLXByb2ZpbGUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
Z2lmLWxhcmdlLWNoZWNrZXJib2FyZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9naWYtbG9vcC1jb3VudC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWlu
dC1zdWJyZWN0LWdyaWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0
MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGl4ZWwt
Y3JhY2staW1hZ2UtYmFja2dyb3VuZC13ZWJraXQtdHJhbnNmb3JtLXNjYWxlLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2VtYmVkLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2Zhdmljb24tYXMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0
MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2Vt
YXAtY2lyY2xlLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAt
Zm9jdXMtcmluZy1vdXRsaW5lLWNvbG9yLWV4cGxpY2l0bHktaW5oZXJpdGVkLWZyb20tbWFwLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xv
ci1ub3QtaW5oZXJpdGVkLWZyb20tbWFwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdl
bWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9p
bWFnZW1hcC1wb2x5Z29uLWZvY3VzLXJpbmcuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvb2Jq
ZWN0LWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3JlcGFpbnQtc3VicmVjdC1ncmlk
Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BhbGV0dGVkLXBuZy13aXRoLWNvbG9yLXByb2Zp
bGUuaHRtbCBbIE1pc3NpbmcgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtZm9jdXMtcmluZy16b29tLmh0
bWwgWyBGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iZjg4MmViMDQzMmQ1ZmQwMGI4MjgxZTI4OGIxOTg5OTljYjdkODUzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZl
cnJlZC9mYXN0L2ltYWdlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBUZXN0IHN1aXRl
cyBpbiB0aGlzIGRpcmVjdG9yeSB0ZXN0IHRoZSAnZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcnIGNv
ZGUgcGF0aAorIyB0aHJvdWdoIENocm9taXVtIERSVC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169461</attachid>
            <date>2012-10-18 13:43:33 -0700</date>
            <delta_ts>2012-10-18 13:51:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-94240-20121018134218.patch</filename>
            <type>text/plain</type>
            <size>80494</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYyZGIxNWY1MzhiMWI1
NjA1N2FmYjVmZTAxNjRmOGI2ZGNhNjZjYy4uY2E3OTRiZmVmYzM1MjMyNDM2YzQzNzQwYzIyODc5
MGRmZWZmZTllZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgU2NhbGVkSW1hZ2VGcmFnbWVu
dAorCisgICAgICAgIEEgY29udGFpbmVyIGZvciBhIHNjYWxlZCBpbWFnZSBmcmFnbWVudC4gSW4g
YWRkaXRpb24gdG8gYml0bWFwIHBpeGVscworICAgICAgICBpdCBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB0aGUgSUQgb2YgdGhlIGltYWdlLCBzY2FsZSBhbmQgY2xpcHBpbmcuCisKKyAgICAg
ICAgSW1hZ2VGcmFtZUdlbmVyYXRvcgorCisgICAgICAgIFRoaXMgb2JqZWN0IGlzIHJlc3BvbnNp
YmxlIGZvciBnZW5lcmF0aW5nIGRlY29kZWQgcGl4ZWxzLiBJdCBpcyBhbHNvCisgICAgICAgIGEg
Y29udGFpbmVyIGZvciBlbmNvZGVkIGltYWdlIGRhdGEgYW5kIGNvcnJlc3BvbmRpbmcgaW1hZ2Ug
ZGVjb2Rlci4KKworICAgICAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZgorCisgICAgICAgIFRoaXMg
b2JqZWN0IGlzIGVtYmVkZGVkIGluIGEgU2tCaXRtYXAgdG8gZW5hYmxlIGxhenkgZGVjb2Rpbmcu
IFdoZW4KKyAgICAgICAgU2tCaXRtYXAgbmVlZHMgdG8gYWNjZXNzIHBpeGVscyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBpcyBsb2NrZWQuIEl0CisgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRv
IGxvY2F0ZSBhbiBpbWFnZSBhbmQgc2NhbGluZyBpbmZvLCB0aGVzZQorICAgICAgICBpbmZvcm1h
dGlvbiBpcyBzdWJtaXR0ZWQgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIGFjY2VzcyBhY3R1YWwg
cGl4ZWxzLgorCisgICAgICAgIExheW91dCB0ZXN0cy4gVGhlcmUgYXJlIGFib3V0IDgwIHRlc3Rz
IGluIHRoaXMgdmlydHVhbCB0ZXN0IHN1aXRlCisgICAgICAgIHJ1bm5pbmcgdGhpcyBmZWF0dXJl
IGluIHRoaXMgZGlyZWN0b3J5OgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMKKworICAgICAgICBVbml0IHRlc3RzLiBBZGRlZCBEZWZlcnJl
ZEltYWdlRGVjb2RlclRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29k
aW5nIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFn
ZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0Jp
dG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJh
bWVDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURl
Y29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJh
Z21lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY2FsZWRJbWFnZUZyYWdtZW50OjpiaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVk
SW1hZ2VGcmFnbWVudDo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjppbWFnZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4
ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6ZnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKworMjAxMi0xMC0xOCAgWWFlbCBBaGFyb24gIDx5
YWVsLmFoYXJvbkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF0gR3JhcGhpY3NDb250ZXh0M0Q6
Om1fcmVuZGVyU3R5bGUgaXMgbm90IGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dG9uaW8gR29tZXMuCisKKyAgICAgICAgSW5pdGlhbGl6ZSBHcmFwaGljc0NvbnRleHQzRDo6bV9y
ZW5kZXJTdHlsZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTItMTAtMTggIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25AaW50ZWwuY29t
PgogCiAgICAgICAgIFtFRkxdIEdyYXBoaWNzQ29udGV4dDNEOjptX3JlbmRlclN0eWxlIGlzIG5v
dCBpbml0aWFsaXplZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0YWVhYzdlM2JmY2E0
YjBjYmNhMjM0MTRhYmFkN2NmMGFmYTRlMzVlLi4xOTNmNGU3MzhmYWM1NzRkN2Y1ODRmYzIxNjBj
ZDI0YWNjOGE2MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBA
CisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3Rz
IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRl
ZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAg
ICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6
ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAg
ICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAg
ICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5kcmF3U2NhbGVkSW50b1NrUGlj
dHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRp
bmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRk
b3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAg
ICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2Rl
clRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
VGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAqIHRlc3Rz
L01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6
TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpm
aWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE4ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVk
IERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTAxOTYwNGRjZThhZGNlZjk4Y2Q2M2JjY2ZhZTkx
NGI0YTE1ZDM3Ni4uNDhhMWRjYjNmNWNhODQyNDExMDk0MDBmZmY5NGNjYjIxMzI2YTcwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNDkxNyw2ICs0OTE3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0Zv
bnRMb2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQu
Y3BwJywKQEAgLTQ5MzYsMTAgKzQ5MzgsMTggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUlj
b24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1h
Z2VGcmFnbWVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NjYWxlZEltYWdlRnJhZ21lbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA4
MmRmZGUxYzlkZDgyZTMxNWJiZGQ5ZWU4OWNkMDgyM2M5Y2M4ZTRkLi5hYmZhNTk4OGI0MmJjNjkw
ZjdlYWJjOTUzZWViMDdkMDUzMDAzYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRp
b24uaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VE
ZWNvZGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc5LDcgKzgzLDcgQEAgdm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0
aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCiAg
ICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0
aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0
aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CisgICAgICAgIG1fZGVjb2RlciA9
IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVjb2RlclB0cj4oTmF0aXZlSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
KTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpZiAo
bV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQogICAgICAgICAgICAgbV9k
ZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggMGQ4
YTAxZTI2YTcyY2ZmZjM5YWE0NjU0Mzc0MTQ0YTBhMTc5YWMzOC4uNjZhOGEwYTUxYzM5ZmI5MjY4
YjIyMWE0N2I2ODc1MDE1OTNiYzRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NywxMCArNDcsMjAgQEAgY2xhc3MgSW50U2l6ZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVNvdXJj
ZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCit0eXBlZGVmIENHSW1hZ2VTb3VyY2VS
ZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xh
c3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNl
UHRyOwordHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlcjsK
K3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwordHlwZWRl
ZiBEZWZlcnJlZEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgVVNF
KENHKQorI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNvZGVyCisjZWxzZQordHlw
ZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwogI2VuZGlmCiAKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KQEAgLTE1OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
TmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0
ciBtX2RlY29kZXI7CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3NDE5
NmU3MWFkYjQxMzE1Y2RiM2NiNzU2MmVhMDBhZjAxNjg1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1h
Z2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisK
K0RlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQoreworICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0
b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVmZXJyZWRJbWFn
ZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAg
IEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICByZXR1cm4gYWN0dWFsRGVj
b2RlciA/IG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihhY3R1YWxEZWNvZGVyKSA6IDA7Cit9CisK
K1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rlci5sZWFrUHRy
KCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rl
ci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdl
RnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNp
bmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZy
YW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQorICAg
IC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBk
byBzeW5jaHJvbm91cyBpbWFnZQorICAgIC8vIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgPT0gY0Fu
aW1hdGlvbk5vbmUKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUo
KSkgeworCisgICAgICAgIG1fc2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAg
ICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lv
bigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlEZWNvZGVkU2tCaXRtYXAgPSBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRt
YXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIG1fbGF6eURlY29kZWRGcmFt
ZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0bWFwKTsKKyAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFt
ZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CisK
KyAgICAgICAgLy8gRG9uJ3QgbWFyayB0aGUgZnJhbWUgYXMgY29tcGxldGVseSBkZWNvZGVkIHVu
dGlsIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIC8vIGRlY29kZXIgaGFzIHJlYWxseSBkZWNvZGVk
IGl0LiBVbnRpbCB0aGVuLCBvdXIgZGF0YSBhbmQgbWV0YWRhdGEgbWF5CisgICAgICAgIC8vIGJl
IGluY29ycmVjdCwgc28gY2FsbGVycyBjYW4ndCByZWx5IG9uIHRoZW0uCisgICAgICAgIG1fbGF6
eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpIDogJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9pZCBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2Vl
cCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkLgor
ICAgICAgICAvLyBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gb3duZXJzaGlw
IG9mIG1fZGF0YSBpcworICAgICAgICAvLyB0cmFuc2ZlcnJlZCB0byBJbWFnZURlY29kaW5nU3Rv
cmUuCisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0g
YWxsRGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0
RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpCit7CisgICAgLy8gbV9hY3R1YWxEZWNvZGVyIGlzIDAgb25seSBpZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCBhbmQgdGhhdAorICAgIC8vIG1lYW5zIGltYWdlIGhlYWRlciBkZWNv
ZGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2l6ZSBpcyBhdmFpbGFibGUuCisgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgOiB0cnVlOwor
fQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCkgOiBtX3NpemU7
Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplOworfQorCitzaXplX3Qg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQoreworICAgIHJldHVybiBtX2FjdHVh
bERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA6IDE7Cit9CisKK2ludCBE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6
IGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1h
Z2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdl
ZCBieQorICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAg
ICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJh
bWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNvZGluZ1N0b3Jl
IHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4gdHJ1ZSBoZXJl
IGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1heSBub3QgZ28g
dGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAgIHJldHVybiBt
X2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGlu
ZGV4KSA6IHRydWU7Cit9CisKK3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8gSWYgZnJhbWUgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAg
IC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmIzM2ZlMzVlMGVjNmIzMjE1YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVmZXJyZWRJ
bWFnZURlY29kZXJfaAorI2RlZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgeworcHVi
bGljOgorICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBEZWZlcnJlZElt
YWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZvclRl
c3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRp
b25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7
CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgRGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29s
IG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVj
b2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9z
aXplOworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDI3OTBkZjkwZjhmZjQ2MDEyMjJlY2M0NmZkZWM0OWZkYTg5NTc0ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTY2FsZWRJbWFnZUZy
YWdtZW50LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNp
bmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIHsKKworLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVk
IFNrUGl4ZWxSZWYuCitjb25zdCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKwor
SW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGlj
IHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURl
Y29kaW5nU3RvcmUpCit7CisgICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAg
c19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsKK30KK30gLy8gbmFt
ZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30K
KworSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30KKworSW1h
Z2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBzX2luc3RhbmNl
T25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7
Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKK30KKwor
Ym9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmIGJp
dG1hcCkKK3sKKyAgICByZXR1cm4gYml0bWFwLnBpeGVsUmVmKCkKKyAgICAgICAgJiYgYml0bWFw
LnBpeGVsUmVmKCktPmdldFVSSSgpCisgICAgICAgICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVm
KCktPmdldFVSSSgpLCBsYWJlbExhenlEZWNvZGVkLCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkp
OworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tC
aXRtYXAoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgQVNTRVJUKGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gU2tJU2l6ZTo6
TWFrZShkZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsK
KyAgICBBU1NFUlQoIWZ1bGxTaXplLmlzRW1wdHkoKSk7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0
ID0gU2tJUmVjdDo6TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemls
eSBkZWNvZGVkIFNrUGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0
aG91dCBzY2FsaW5nLgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmln
KFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUu
aGVpZ2h0KCkpOworICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxS
ZWYoSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGRlY29kZXIpLCBmdWxsU2l6ZSwgZnVsbFJl
Y3QpKS0+dW5yZWYoKTsKKworICAgIC8vIFVzZSBVUkkgdG8gaWRlbnRpZnkgdGhpcyBpcyBhIGxh
emlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgb2YgdHlwZSBMYXp5RGVjb2RpbmdQaXhlbFJlZi4KKyAg
ICAvLyBGSVhNRTogR2l2ZSB0aGUgYWN0dWFsIFVSSSBpcyBtb3JlIHVzZWZ1bC4KKyAgICBiaXRt
YXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQpOworCisgICAgLy8gSW5mb3Jt
IHRoZSBiaXRtYXAgdGhhdCB3ZSB3aWxsIG5ldmVyIGNoYW5nZSB0aGUgcGl4ZWxzLiBUaGlzIGlz
IGEgcGVyZm9ybWFuY2UgaGludAorICAgIC8vIHN1YnN5c3RlbXMgdGhhdCBtYXkgdHJ5IHRvIGNh
Y2hlIHRoaXMgYml0bWFwIChlLmcuIHBpY3R1cmVzLCBwaXBlcywgZ3B1LCBwZGYsIGV0Yy4pCisg
ICAgYml0bWFwLnNldEltbXV0YWJsZSgpOworCisgICAgLy8gRklYTUU6IFNldHRpbmcgYml0bWFw
LnNldElzT3BhcXVlKCkgaXMgYmlnIHBlcmZvcm1hbmNlIGdhaW4gaWYgcG9zc2libGUuIFdlIGNh
bgorICAgIC8vIGRvIHNvIHNhZmVseSBpZiB0aGUgaW1hZ2UgaXMgZnVsbHkgbG9hZGVkIGFuZCBp
dCBpcyBhIEpQRUcgaW1hZ2UsIG9yIGltYWdlIHdhcworICAgIC8vIGRlY29kZWQgYmVmb3JlLgor
CisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpy
ZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBB
U1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIExhenlEZWNvZGluZ1BpeGVsUmVm
KiBwaXhlbFJlZiA9IHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBp
eGVsUmVmKCkpOworICAgIEFTU0VSVCghcGl4ZWxSZWYtPmlzU2NhbGVkKHBpeGVsUmVmLT5mcmFt
ZUdlbmVyYXRvcigpLT5mdWxsU2l6ZSgpKSAmJiAhcGl4ZWxSZWYtPmlzQ2xpcHBlZCgpKTsKKwor
ICAgIGludCByb3dCeXRlcyA9IDA7CisgICAgcm93Qnl0ZXMgPSBTa0JpdG1hcDo6Q29tcHV0ZVJv
d0J5dGVzKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVkU2l6ZS53aWR0aCgpKTsK
KworICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CisgICAgcmVzaXplZEJpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJzZXQud2lkdGgoKSwgc2Nh
bGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhl
bFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYocGl4ZWxSZWYtPmZyYW1lR2VuZXJhdG9yKCks
IHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigpOworCisgICAgLy8gU2VlIGNvbW1l
bnRzIGluIGNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoKS4KKyAgICByZXNpemVkQml0bWFwLnNl
dEltbXV0YWJsZSgpOworICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQVNTRVJU
KGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgaWYgKGlzTGF6eURlY29kZWQoYml0bWFwKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxS
ZWYoKSktPmZyYW1lR2VuZXJhdG9yKCktPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
K30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKFBhc3NSZWZQdHI8SW1h
Z2VGcmFtZUdlbmVyYXRvcj4gZnJhbWVHZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9sb2NrZWRTa0JpdG1hcC5pc051bGwoKSk7CisK
KyAgICBTa0lTaXplIGZ1bGxTaXplID0gZnJhbWVHZW5lcmF0b3ItPmZ1bGxTaXplKCk7CisKKyAg
ICAvLyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21l
bnQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnJhbWVDYWNoZSA9IGxvb2t1cEZyYW1lQ2Fj
aGUoZnJhbWVHZW5lcmF0b3ItPmltYWdlSWQoKSwgZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJp
dG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkgeworICAgICAgICAvLyBGSVhNRTogUGl4ZWxz
IGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVyIGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAg
ICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAg
ICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBmcmFtZUdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoMCk7CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlm
IHRoaXMgaXMgY29tcGxldGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChT
Y2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoZnJhbWVHZW5lcmF0b3ItPmltYWdlSWQoKSwgZnVs
bFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
ZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3IuIFJlcG9ydCB0aGlzIHRvIEJp
dG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBi
aXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAgYml0bWFwID0gZnJhbWVDYWNo
ZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXplICE9IHNjYWxlZFNpemUpIHsK
KyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRoZS1mbHkgYW5kIHNjYWxlZCBp
bWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNlLgorICAgICAgICAvLyBGSVhN
RTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4KKyAgICAgICAgbV9sb2NrZWRT
a0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJpdG1hcCwgc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUud2lkdGgoKSwgc2NhbGVk
U2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBi
aXRtYXA7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgcmV0dXJuIG1f
bG9ja2VkU2tCaXRtYXAuZ2V0QWRkcihzY2FsZWRTdWJzZXQueCgpLCBzY2FsZWRTdWJzZXQueSgp
KTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscygpCit7CisgICAg
QVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBtX2xvY2tlZFNrQml0bWFwLnVu
bG9ja1BpeGVscygpOworICAgIG1fbG9ja2VkU2tCaXRtYXAucmVzZXQoKTsKK30KKwordm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6OmZyYW1lR2VuZXJhdG9yQmVpbmdEZXN0cm95ZWQoSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZnJhbWVHZW5lcmF0b3IpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7CisKKyAgICBkZWxldGVGcmFtZUNhY2hlKGZyYW1lR2VuZXJhdG9yLT5pbWFnZUlk
KCkpOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBp
c01haW5UaHJlYWQoKTsKK30KKworU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaW1hZ2VJ
ZCwgc2NhbGVkU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hlW2ldLmdldCgp
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRl
bGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtp
XS0+aXNFcXVhbChpbWFnZUlkKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmE1
ZDkyOTQ1ZjY3NzEzYmNhODYyNGVmYzc4Y2UxNjE1YjY2OWZhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0
b3JlLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0
b3JlX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3Mg
U2NhbGVkSW1hZ2VGcmFnbWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworLy8gVGhpcyBjbGFz
cyBjYW4gb25seSBiZSBpbnN0YW50aWF0ZWQgb24gbWFpbiB0aHJlYWQuIFRoZXJlIHdpbGwgYmUg
YW4KKy8vIGluc3RhbmNlIG9uIGltcGwgdGhyZWFkIGluIHRoZSBmdXR1cmUgYnV0IHRoYXQgcGFy
dCBvZiBpbXBsZW1lbnRhdGlvbgorLy8gaXMgaW5jb21wbGV0ZS4gU2VlIGJ1ZzogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisvLyBmb3IgZGV0YWlscy4KK2Ns
YXNzIEltYWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VE
ZWNvZGluZ1N0b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRp
YyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3du
KCk7CisgICAgc3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisg
ICAgU2tCaXRtYXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4pOworICAgIFNrQml0bWFwIHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tC
aXRtYXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpOworCisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBZb3UgbWF5IG9u
bHkgbG9jayBvbmUgc2V0IG9mIHBpeGVscyBhdCBhIHRpbWU7IG92ZXJsYXBwaW5nIGxvY2sgY2Fs
bHMgYXJlIG5vdCBhbGxvd2VkLgorICAgIHZvaWQqIGxvY2tQaXhlbHMoUGFzc1JlZlB0cjxJbWFn
ZUZyYW1lR2VuZXJhdG9yPiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9ja1BpeGVscygpOworCisgICAgdm9pZCBm
cmFtZUdlbmVyYXRvckJlaW5nRGVzdHJveWVkKEltYWdlRnJhbWVHZW5lcmF0b3IqKTsKKworcHJp
dmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPik7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogbG9va3VwRnJhbWVDYWNo
ZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgdm9p
ZCBkZWxldGVGcmFtZUNhY2hlKGludCBpbWFnZUlkKTsKKworICAgIFZlY3RvcjxPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gPiBtX2ZyYW1lQ2FjaGU7CisKKyAgICBTa0JpdG1hcCBtX2xvY2tl
ZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMyZjI5OTE1MjUwNGE1ZjY1
NmE5YjdmMWZmZmRlMWQzMzMzYjUwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJ
bWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIHsKKworLy8gQW4gdW5pcXVlIElEIGZvciBhbiBpbWFnZSBmaWxlLgoraW50IHNf
bmV4dEltYWdlSWQgPSAwOworCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJ
bWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2RlY29kZXIoZGVjb2RlcikKK3sKKyAgICBt
X2Z1bGxTaXplID0gU2tJU2l6ZTo6TWFrZShtX2RlY29kZXItPnNpemUoKS53aWR0aCgpLCBtX2Rl
Y29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9pbWFnZUlkID0gc19uZXh0SW1hZ2VJZCsr
OworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cisg
ICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKSkKKyAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5mcmFtZUdlbmVy
YXRvckJlaW5nRGVzdHJveWVkKHRoaXMpOworfQorCitJbWFnZURlY29kZXIqIEltYWdlRnJhbWVH
ZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7Cit9CisK
K3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAg
ICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERhdGEobV9kYXRhLmdldCgp
LCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
R2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjljZDcyYjc5MWI5YjhhNGU5N2NkNjBl
OTExNzBmOWFkZDM3ZGVlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNkZWZpbmUgSW1h
Z2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIElt
YWdlRnJhbWVHZW5lcmF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9y
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4g
Y3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpKTsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGVyPik7CisgICAgfkltYWdlRnJhbWVHZW5lcmF0b3IoKTsKKworICAgIC8vIENyZWF0ZXMgdGhl
IGltYWdlIGRlY29kZXIgaWYgbmVlZGVkLgorICAgIEltYWdlRGVjb2RlciogZGVjb2RlcigpOwor
ICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9mdWxsU2l6ZTsgfQorICAgIGludCBpbWFnZUlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlk
OyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fZnVsbFNpemU7Cisg
ICAgaW50IG1faW1hZ2VJZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZkZDA5MWUw
ZDlmOGMxNDBiN2RiZDczMWQ3MzYyMThhZDBmYjkzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVm
LmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1Jl
ZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJl
ZigwKQorICAgICwgbV9mcmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKKyAgICAsIG1fc2Nh
bGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQor
eworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKCkKK3sK
K30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYg
ZnVsbFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZ1bGxTaXplICE9IG1fc2NhbGVkU2l6ZTsK
K30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0gbV9zY2FsZWRTdWJzZXQud2lkdGgoKSB8
fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2FsZWRTdWJzZXQuaGVpZ2h0KCk7Cit9CisK
K3ZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiop
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5sb2NrUGl4ZWxzKG1fZnJhbWVHZW5lcmF0
b3IsIG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOworfQorCit2b2lkIExhenlEZWNvZGlu
Z1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnVubG9j
a1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNB
cmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBh
YjljY2M0Y2IxMTFmMjc2NGY3MjM3MDY3NTFhNWVjZjEzYzc2MzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlEZWNvZGluZ1Bp
eGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tG
bGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKKwor
Y2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7CitwdWJsaWM6
CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0
KTsKKyAgICB2aXJ0dWFsIH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFS
RV9VTkZMQVRURU5BQkxFX09CSkVDVCgpCisKKyAgICBQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5l
cmF0b3I+IGZyYW1lR2VuZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUdlbmVyYXRvcjsg
fQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0OworICAg
IGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVm
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JU
YWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25VbmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9mcmFtZUdlbmVyYXRvcjsKKyAgICBTa0lTaXpl
IG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5nUGl4ZWxSZWZfaF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxl
ZEltYWdlRnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0ZTZmZjg0N2VjNWI1
ZGQ0Njk1OGYyMGJkNDgxMjkzOWJkMzU3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NhbGVk
SW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQoKQoreworfQorCitTY2FsZWRJbWFn
ZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxl
dGUpCisgICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRT
aXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxl
dGUpCit7Cit9CisKK2Jvb2wgU2NhbGVkSW1hZ2VGcmFnbWVudDo6aXNFcXVhbChpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW1hZ2VJ
ZCA9PSBtX2ltYWdlSWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wg
U2NhbGVkSW1hZ2VGcmFnbWVudDo6aXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaW1hZ2VJZCA9PSBtX2ltYWdlSWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nj
YWxlZEltYWdlRnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjdmZmM5NjAxNGUwNTcz
ZTgzNTA3ODAyYjY2ZjM0ZDliY2QzZjZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjYWxlZEltYWdlRnJhZ21lbnRfaAorI2Rl
ZmluZSBTY2FsZWRJbWFnZUZyYWdtZW50X2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNjYWxlZEltYWdlRnJhZ21l
bnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBi
eSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRo
aXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3Mg
U2NhbGVkSW1hZ2VGcmFnbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29sIGlzQ29tcGxldGUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjYWxlZEltYWdlRnJhZ21lbnQoaW1hZ2VJZCwg
c2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgfQorCisgICAgU2NhbGVkSW1h
Z2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwg
Ym9vbCBpc0NvbXBsZXRlKTsKKyAgICB+U2NhbGVkSW1hZ2VGcmFnbWVudCgpOworCisgICAgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9CisgICAgU2tC
aXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBib29sIGlzRXF1YWwo
aW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIGJvb2wg
aXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faW1hZ2VJZDsK
KyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBi
b29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0
YWFmNTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2NGZmZDQwNTZhNzQzYTI1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNr
aWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZl
SW1hZ2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVsUmVmLmgi
CiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdl
U2tpYSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXpl
ZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0Jp
dG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVk
SW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlE
ZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNj
YWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhh
c1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAg
ICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYm
IHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKaW5kZXggZmM4MmE1YzI1YWQ3OGU4NzdkYzk5MTg4ZTlmZGIxZTg1YjFhZDI3
Yy4uOWY2OTdhODRhYjA5YWZiYWMzYjYyYWUzZmNlNTY2YzRmYjZkNzQyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
QEAgLTE0OCw2ICsxNDgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJp
dG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEo
Yml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0Jp
dG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRt
YXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lk
dGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4NmMw
Zi4uNjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMv
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0
cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFsVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJD
b21wb3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lE
QlJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVt
VGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2Fy
ZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hs
aWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBhYmQ4
NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFlMzc5
Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2VkMmY3
ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdT
dG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2
b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9y
dCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwogICAg
IFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRk
b3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0
aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5kYzc3
MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2Rl
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVS
TC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChT
ZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9y
SW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0
cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2UpCisg
ICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1
bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVyU2l6
ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJTZXR0
aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBt
X3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9p
ZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmIGVu
YWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVh
ZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQp
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVjZDA4
NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03OCw2
ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiArMTc5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJ
bkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwogICAg
IGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6
ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitj
bGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFs
RGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rl
ci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsK
KyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2
ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1f
YWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6eURl
Y29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZhczsK
K307CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0dXJl
KQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURl
Y29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAg
RVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAo
KS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0
KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5i
aXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1t
dXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5S
ZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJp
dG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNU
X0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAg
ICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2Fj
dHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoRGVm
ZXJyZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBP
d25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNj
YWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwg
U2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAu
aXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsK
KyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
NTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENh
bnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZh
cy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNv
cmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMx
MTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1h
Z2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJ
bWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAg
IHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7Cisg
ICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6
ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2
YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWEwNmY1ZWQ5ZTZkOTM2
YjdjZGFjOTZjZDNkNWM1NjFjOWRmYzhlZi4uMTljMTk2ZTBiZWMyMTFjNTA1MjA0MDQxODQ0YTZh
YTFiNzAzMjczZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2Ug
ZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0
V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToK
KyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTIt
MTAtMTggIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEFkZCBhIHNjcmlwdCBmb3IgZXhwb3J0aW5nIGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlz
c2lvbiB0byBXM0MKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1
bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5k
ZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4YjYzZTZkYmQwMGRhMWMzZmVhODM4
Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2MWZhNmI1IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw2ICs2
NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdb
XSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25F
bmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVy
YXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQz
REltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRh
dGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10g
PSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
RW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2Ut
ZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0
cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0
cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
IGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAg
Ym9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGls
ZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBz
dHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFs
c2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0Qg
aW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAg
ICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChh
cmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAg
ICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAo
YXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0y
MjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAg
c2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQp
OwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJs
ZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAg
IHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVs
bC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQo
c3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3MTJiZDhjYTcyNDg5Yi4uYWM3NzU5
NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAgVGVzdFNoZWxs
OjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkK
ICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJh
dGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rl
b3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMjksNiArMjMw
LDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykK
ICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9k
ZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7
CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUzODhjNjhkNjVkZTg5MGZjODAwZmVk
NTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0OTFlYTQ4M2EwYjYzOTJjZTU1IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM4LDYgKzEz
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZv
aWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFp
bnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5h
YmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNo
ZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExF
IGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzNSw2ICsy
MzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAg
ICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQ
YWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7
CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAg
IGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCAzYmMyY2RkOWYyYWU0MTcwYzMzYWQ2NDEwNmQ0YTdm
MmQwOTAyMWY1Li41YzhjOTJjOTk5NDI2NDRkZDE5YTQ5Yzk4ZTY2YzFhNGYwNmQ0NDRkIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBA
IC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVy
cmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNl
OwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBA
QCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0
dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNF
bmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7
CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlh
UGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9s
bGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFw
cGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdN
b2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5o
CmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJk
MDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVj
dCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsK
ICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQ
YWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwog
ICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHkKaW5kZXggYzMxMGViMTViMTk1NGRkZWRkYzMzM2I5ODBmNjY1ZDVmY2RiOTFjZS4uYTY5ZjVh
ODIyYWEzZmUzMjg0NmY5MTcwMTE2NDE5M2NjMjIzOGY1MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zOTAsNiAr
MzkwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRl
c3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBvc2l0aW5nJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2FyZS1jb21wb3NpdGluZyddKSwKKyAg
ICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9p
bWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLWRlZmVycmVk
LWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nJywgJy0tZm9yY2Ut
Y29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEyYTI1NmIy
N2IyNjA5OTkwYmVjMDZjNTgzOTZmYjcyYWVlM2IyMzYuLmYzN2E4OThlNjI5ZGY3ZDk4NzIzMDdm
OTdmNmI2YzAwNGNkNzU3MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgQ2hyb21p
dW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKworICAgICAgICBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdpbGwgYmUgdGVz
dGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1wZXItdGlsZS1w
YWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dDog
QWRkZWQuCisKIDIwMTItMTAtMTggIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEFkZCBhIHNjcmlwdCBmb3IgZXhwb3J0aW5nIGh0dHAvdGVzdHMvdzNj
L3dlYnBlcmYvc3VibWlzc2lvbiB0byBXM0MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBmYzJiNDQzZGZmMGNlNTRmNzczMjViNzc0NjQ3
MzdmN2JjMzZjODguLmUzNzI5MzM1MzhhMjMyYTY2ZWViNmFlN2Y1ZjgzNTRkMWM4Njc4OTggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
NDIzMywzICs0MjMzLDI5IEBAIHdlYmtpdC5vcmcvYi84NDg5MyBodHRwL3Rlc3RzL3czYy93ZWJw
ZXJmL3N1Ym1pc3Npb24vSW50ZWwvdXNlci10aW1pbmcgWyBTa2lwIF0KICMgRXhwZWN0ZWQgdG8g
ZmFpbCB1bnRpbCBXZWJHTCBleHRlbnNpb24gaW1wbGVtZW50YXRpb24gbGFuZHMKIHdlYmtpdC5v
cmcvYi85ODI1NyBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtZWxlbWVudC1pbmRleC11aW50Lmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzk4MjU3IHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZ3B1L2Zhc3QvY2FudmFzL3dlYmdsL29lcy1lbGVtZW50LWluZGV4LXVpbnQuaHRtbCBb
IEZhaWx1cmUgUGFzcyBdCit3ZWJraXQub3JnL2IvODQ4OTMgaHR0cC90ZXN0cy93M2Mvd2VicGVy
Zi9zdWJtaXNzaW9uL3VzZXItdGltaW5nIFsgU2tpcCBdCisKKyMgVGhlc2UgdGVzdHMgYXJlIGZh
aWxpbmcgYWxyZWFkeSBhbmQgYmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVy
cmVkCisjIGltYWdlIGRlY29kaW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgor
d2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFz
dC9pbWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0
MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1p
bWFnZS1sYW5kc2NhcGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJv
bWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQt
d2Via2l0LXRyYW5zZm9ybS1zY2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9lbWJlZC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdl
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xv
ci1leHBsaWNpdGx5LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdl
cy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1h
cC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUt
Y29sb3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1y
aW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJl
ZC9mYXN0L2ltYWdlcy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9wYWxldHRlZC1wbmctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBNaXNzaW5nIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctem9vbS5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL1JFQURNRS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0MzJk
NWZkMDBiODI4MWUyODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1F
LnR4dApAQCAtMCwwICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGVz
dCB0aGUgJ2RlZmVycmVkIGltYWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBDaHJv
bWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169465</attachid>
            <date>2012-10-18 13:51:45 -0700</date>
            <delta_ts>2012-10-19 11:40:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121018135030.patch</filename>
            <type>text/plain</type>
            <size>80419</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYyZGIxNWY1MzhiMWI1
NjA1N2FmYjVmZTAxNjRmOGI2ZGNhNjZjYy4uY2E3OTRiZmVmYzM1MjMyNDM2YzQzNzQwYzIyODc5
MGRmZWZmZTllZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgU2NhbGVkSW1hZ2VGcmFnbWVu
dAorCisgICAgICAgIEEgY29udGFpbmVyIGZvciBhIHNjYWxlZCBpbWFnZSBmcmFnbWVudC4gSW4g
YWRkaXRpb24gdG8gYml0bWFwIHBpeGVscworICAgICAgICBpdCBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB0aGUgSUQgb2YgdGhlIGltYWdlLCBzY2FsZSBhbmQgY2xpcHBpbmcuCisKKyAgICAg
ICAgSW1hZ2VGcmFtZUdlbmVyYXRvcgorCisgICAgICAgIFRoaXMgb2JqZWN0IGlzIHJlc3BvbnNp
YmxlIGZvciBnZW5lcmF0aW5nIGRlY29kZWQgcGl4ZWxzLiBJdCBpcyBhbHNvCisgICAgICAgIGEg
Y29udGFpbmVyIGZvciBlbmNvZGVkIGltYWdlIGRhdGEgYW5kIGNvcnJlc3BvbmRpbmcgaW1hZ2Ug
ZGVjb2Rlci4KKworICAgICAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZgorCisgICAgICAgIFRoaXMg
b2JqZWN0IGlzIGVtYmVkZGVkIGluIGEgU2tCaXRtYXAgdG8gZW5hYmxlIGxhenkgZGVjb2Rpbmcu
IFdoZW4KKyAgICAgICAgU2tCaXRtYXAgbmVlZHMgdG8gYWNjZXNzIHBpeGVscyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBpcyBsb2NrZWQuIEl0CisgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRv
IGxvY2F0ZSBhbiBpbWFnZSBhbmQgc2NhbGluZyBpbmZvLCB0aGVzZQorICAgICAgICBpbmZvcm1h
dGlvbiBpcyBzdWJtaXR0ZWQgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIGFjY2VzcyBhY3R1YWwg
cGl4ZWxzLgorCisgICAgICAgIExheW91dCB0ZXN0cy4gVGhlcmUgYXJlIGFib3V0IDgwIHRlc3Rz
IGluIHRoaXMgdmlydHVhbCB0ZXN0IHN1aXRlCisgICAgICAgIHJ1bm5pbmcgdGhpcyBmZWF0dXJl
IGluIHRoaXMgZGlyZWN0b3J5OgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMKKworICAgICAgICBVbml0IHRlc3RzLiBBZGRlZCBEZWZlcnJl
ZEltYWdlRGVjb2RlclRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29k
aW5nIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFn
ZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0Jp
dG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJh
bWVDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURl
Y29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJh
Z21lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY2FsZWRJbWFnZUZyYWdtZW50OjpiaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVk
SW1hZ2VGcmFnbWVudDo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjppbWFnZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4
ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6ZnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKworMjAxMi0xMC0xOCAgWWFlbCBBaGFyb24gIDx5
YWVsLmFoYXJvbkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF0gR3JhcGhpY3NDb250ZXh0M0Q6
Om1fcmVuZGVyU3R5bGUgaXMgbm90IGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dG9uaW8gR29tZXMuCisKKyAgICAgICAgSW5pdGlhbGl6ZSBHcmFwaGljc0NvbnRleHQzRDo6bV9y
ZW5kZXJTdHlsZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTItMTAtMTggIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25AaW50ZWwuY29t
PgogCiAgICAgICAgIFtFRkxdIEdyYXBoaWNzQ29udGV4dDNEOjptX3JlbmRlclN0eWxlIGlzIG5v
dCBpbml0aWFsaXplZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0YWVhYzdlM2JmY2E0
YjBjYmNhMjM0MTRhYmFkN2NmMGFmYTRlMzVlLi4xOTNmNGU3MzhmYWM1NzRkN2Y1ODRmYzIxNjBj
ZDI0YWNjOGE2MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBA
CisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1bml0IHRlc3Rz
IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVzdHMgYXJlIGRl
ZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4gVGhleSB2ZXJpZnkKKyAgICAg
ICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlzIHJhc3Rlcml6
ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2VzLgorCisgICAg
ICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd0ludG9Ta1BpY3R1cmUKKyAg
ICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5kcmF3U2NhbGVkSW50b1NrUGlj
dHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRp
bmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNodXRk
b3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5oOgorICAgICAg
ICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2Rl
clRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
VGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAqIHRlc3Rz
L01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6
TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpm
aWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE4ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVk
IERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTAxOTYwNGRjZThhZGNlZjk4Y2Q2M2JjY2ZhZTkx
NGI0YTE1ZDM3Ni4uNDhhMWRjYjNmNWNhODQyNDExMDk0MDBmZmY5NGNjYjIxMzI2YTcwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNDkxNyw2ICs0OTE3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0Zv
bnRMb2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQu
Y3BwJywKQEAgLTQ5MzYsMTAgKzQ5MzgsMTggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1BbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVj
dFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUlj
b24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1h
Z2VGcmFnbWVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NjYWxlZEltYWdlRnJhZ21lbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA4
MmRmZGUxYzlkZDgyZTMxNWJiZGQ5ZWU4OWNkMDgyM2M5Y2M4ZTRkLi5hYmZhNTk4OGI0MmJjNjkw
ZjdlYWJjOTUzZWViMDdkMDUzMDAzYzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRp
b24uaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VE
ZWNvZGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKQEAgLTc5LDcgKzgzLDcgQEAgdm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0
aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCiAg
ICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0
aXZlSW1hZ2VTb3VyY2VQdHI+KEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0
aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CisgICAgICAgIG1fZGVjb2RlciA9
IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVjb2RlclB0cj4oTmF0aXZlSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
KTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpZiAo
bV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQogICAgICAgICAgICAgbV9k
ZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggMGQ4
YTAxZTI2YTcyY2ZmZjM5YWE0NjU0Mzc0MTQ0YTBhMTc5YWMzOC4uNjZhOGEwYTUxYzM5ZmI5MjY4
YjIyMWE0N2I2ODc1MDE1OTNiYzRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NywxMCArNDcsMjAgQEAgY2xhc3MgSW50U2l6ZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVNvdXJj
ZVJlZiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLSNlbHNlCit0eXBlZGVmIENHSW1hZ2VTb3VyY2VS
ZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xh
c3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNl
UHRyOwordHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlcjsK
K3R5cGVkZWYgRGVmZXJyZWRJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwordHlwZWRl
ZiBEZWZlcnJlZEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2VsaWYgVVNF
KENHKQorI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNvZGVyCisjZWxzZQordHlw
ZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwogI2VuZGlmCiAKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KQEAgLTE1OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
TmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVyOworICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0
ciBtX2RlY29kZXI7CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3NDE5
NmU3MWFkYjQxMzE1Y2RiM2NiNzU2MmVhMDBhZjAxNjg1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGluZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1h
Z2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQorICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCit7Cit9CisK
K0RlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIoKQoreworICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0
b3JlIGlmIGltYWdlCisgICAgLy8gaXMgZGVmZXItZGVjb2RlZC4KK30KKworRGVmZXJyZWRJbWFn
ZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQoreworICAg
IEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGRhdGEs
IGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yT3B0aW9uKTsKKyAgICByZXR1cm4gYWN0dWFsRGVj
b2RlciA/IG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihhY3R1YWxEZWNvZGVyKSA6IDA7Cit9CisK
K1Bhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpj
cmVhdGVGb3JUZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRGVmZXJyZWRJbWFnZURlY29kZXIoZGVjb2Rlci5sZWFrUHRy
KCkpKTsKK30KKworU3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rl
ci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Cit9CisKK0ltYWdl
RnJhbWUqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNp
bmdsZSBmcmFtZSBpbWFnZS4gVGhlIHJlYXNvbiBpcworICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZy
YW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQorICAg
IC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBk
byBzeW5jaHJvbm91cyBpbWFnZQorICAgIC8vIGRlY29kaW5nLgorICAgIGlmIChJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNv
ZGVyCisgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgPT0gY0Fu
aW1hdGlvbk5vbmUKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUo
KSkgeworCisgICAgICAgIG1fc2l6ZSA9IG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpOworICAgICAg
ICBtX2ZpbGVuYW1lRXh0ZW5zaW9uID0gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lv
bigpOworCisgICAgICAgIFNrQml0bWFwIGxhenlEZWNvZGVkU2tCaXRtYXAgPSBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmNyZWF0ZUxhenlEZWNvZGVkU2tCaXRt
YXAobV9hY3R1YWxEZWNvZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIG1fbGF6eURlY29kZWRGcmFt
ZS5zZXRTa0JpdG1hcChsYXp5RGVjb2RlZFNrQml0bWFwKTsKKyAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5zZXREYXRhKG1fbGF6eURlY29kZWRGcmFt
ZS5nZXRTa0JpdG1hcCgpLCBtX2RhdGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CisK
KyAgICAgICAgLy8gRG9uJ3QgbWFyayB0aGUgZnJhbWUgYXMgY29tcGxldGVseSBkZWNvZGVkIHVu
dGlsIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIC8vIGRlY29kZXIgaGFzIHJlYWxseSBkZWNvZGVk
IGl0LiBVbnRpbCB0aGVuLCBvdXIgZGF0YSBhbmQgbWV0YWRhdGEgbWF5CisgICAgICAgIC8vIGJl
IGluY29ycmVjdCwgc28gY2FsbGVycyBjYW4ndCByZWx5IG9uIHRoZW0uCisgICAgICAgIG1fbGF6
eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoaW5kZXgpIDogJm1fbGF6eURlY29kZWRGcmFtZTsKK30KKwordm9pZCBEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmIChtX2FjdHVhbERlY29kZXIpIHsKKyAgICAgICAgLy8gS2Vl
cCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkLgor
ICAgICAgICAvLyBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gb3duZXJzaGlw
IG9mIG1fZGF0YSBpcworICAgICAgICAvLyB0cmFuc2ZlcnJlZCB0byBJbWFnZURlY29kaW5nU3Rv
cmUuCisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0g
YWxsRGF0YVJlY2VpdmVkOworICAgICAgICBtX2FjdHVhbERlY29kZXItPnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+c2V0
RGF0YShtX2xhenlEZWNvZGVkRnJhbWUuZ2V0U2tCaXRtYXAoKSwgZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpCit7CisgICAgLy8gbV9hY3R1YWxEZWNvZGVyIGlzIDAgb25seSBpZiBpbWFnZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCBhbmQgdGhhdAorICAgIC8vIG1lYW5zIGltYWdlIGhlYWRlciBkZWNv
ZGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2l6ZSBpcyBhdmFpbGFibGUuCisgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgOiB0cnVlOwor
fQorCitJbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCkgOiBtX3NpemU7
Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplOworfQorCitzaXplX3Qg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQoreworICAgIHJldHVybiBtX2FjdHVh
bERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA6IDE7Cit9CisKK2ludCBE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6
IGNBbmltYXRpb25Ob25lOworfQorCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSWYgaW1h
Z2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFtZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdl
ZCBieQorICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyAg
ICBpZiAobV9hY3R1YWxEZWNvZGVyKQorICAgICAgICBtX2FjdHVhbERlY29kZXItPmNsZWFyRnJh
bWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBEZWZlcnJlZEltYWdl
RGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBTeW5jaHJvbml6ZSB0aGlzIHN0YXRlIHdpdGggSW1hZ2VEZWNvZGluZ1N0b3Jl
IHdoZW4gaW1hZ2UgaXMKKyAgICAvLyBhY3R1YWxseSBkZWNvZGVkLiBSZXR1cm4gdHJ1ZSBoZXJl
IGlzIGNvcnJlY3QgaW4gdGVybXMgb2YgcmVuZGVyaW5nIGJ1dAorICAgIC8vIG1heSBub3QgZ28g
dGhyb3VnaCBzb21lIG9wdGltaXplZCByZW5kZXJpbmcgY29kZSBwYXRoLgorICAgIHJldHVybiBt
X2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGlu
ZGV4KSA6IHRydWU7Cit9CisKK3Vuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8gSWYgZnJhbWUgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQorICAg
IC8vIHNvIHJldHVybiAwIGhlcmUuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmIzM2ZlMzVlMGVjNmIzMjE1YTk0M2QyNzYxNmYwYzNkOWMzOGJkMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVmZXJyZWRJ
bWFnZURlY29kZXJfaAorI2RlZmluZSBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgeworcHVi
bGljOgorICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOworICAgIHN0YXRpYyBEZWZlcnJlZElt
YWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZvclRl
c3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKKworICAgIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0OworCisgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CisgICAgaW50IHJlcGV0aXRp
b25Db3VudCgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7
CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgRGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1
YWxEZWNvZGVyKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBib29s
IG1fYWxsRGF0YVJlY2VpdmVkOworICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFsRGVj
b2RlcjsKKworICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOworICAgIEludFNpemUgbV9z
aXplOworCisgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDI3OTBkZjkwZjhmZjQ2MDEyMjJlY2M0NmZkZWM0OWZkYTg5NTc0ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisKKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKKyNpbmNsdWRlICJTY2FsZWRJbWFnZUZy
YWdtZW50LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNp
bmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIHsKKworLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVk
IFNrUGl4ZWxSZWYuCitjb25zdCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKKwor
SW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKKworc3RhdGlj
IHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURl
Y29kaW5nU3RvcmUpCit7CisgICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAg
c19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsKK30KK30gLy8gbmFt
ZXNwYWNlCisKK0ltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30K
KworSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKK3sKK30KKworSW1h
Z2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFk
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBzX2luc3RhbmNl
T25NYWluVGhyZWFkOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9u
TWFpblRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7
Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKK30KKwor
Ym9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQoY29uc3QgU2tCaXRtYXAmIGJp
dG1hcCkKK3sKKyAgICByZXR1cm4gYml0bWFwLnBpeGVsUmVmKCkKKyAgICAgICAgJiYgYml0bWFw
LnBpeGVsUmVmKCktPmdldFVSSSgpCisgICAgICAgICYmICFtZW1jbXAoYml0bWFwLnBpeGVsUmVm
KCktPmdldFVSSSgpLCBsYWJlbExhenlEZWNvZGVkLCBzaXplb2YobGFiZWxMYXp5RGVjb2RlZCkp
OworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZUxhenlEZWNvZGVkU2tC
aXRtYXAoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7CisgICAgQVNTRVJUKGNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBTa0lTaXplIGZ1bGxTaXplID0gU2tJU2l6ZTo6
TWFrZShkZWNvZGVyLT5zaXplKCkud2lkdGgoKSwgZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsK
KyAgICBBU1NFUlQoIWZ1bGxTaXplLmlzRW1wdHkoKSk7CisKKyAgICBTa0lSZWN0IGZ1bGxSZWN0
ID0gU2tJUmVjdDo6TWFrZVNpemUoZnVsbFNpemUpOworCisgICAgLy8gQ3JlYXRlcyBhIGxhemls
eSBkZWNvZGVkIFNrUGl4ZWxSZWYgdGhhdCByZWZlcmVuY2VzIHRoZSBlbnRpcmUgaW1hZ2Ugd2l0
aG91dCBzY2FsaW5nLgorICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmln
KFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUu
aGVpZ2h0KCkpOworICAgIGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxS
ZWYoSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGRlY29kZXIpLCBmdWxsU2l6ZSwgZnVsbFJl
Y3QpKS0+dW5yZWYoKTsKKworICAgIC8vIFVzZSBVUkkgdG8gaWRlbnRpZnkgdGhpcyBpcyBhIGxh
emlseSBkZWNvZGVkIFNrUGl4ZWxSZWYgb2YgdHlwZSBMYXp5RGVjb2RpbmdQaXhlbFJlZi4KKyAg
ICAvLyBGSVhNRTogR2l2ZSB0aGUgYWN0dWFsIFVSSSBpcyBtb3JlIHVzZWZ1bC4KKyAgICBiaXRt
YXAucGl4ZWxSZWYoKS0+c2V0VVJJKGxhYmVsTGF6eURlY29kZWQpOworCisgICAgLy8gSW5mb3Jt
IHRoZSBiaXRtYXAgdGhhdCB3ZSB3aWxsIG5ldmVyIGNoYW5nZSB0aGUgcGl4ZWxzLiBUaGlzIGlz
IGEgcGVyZm9ybWFuY2UgaGludAorICAgIC8vIHN1YnN5c3RlbXMgdGhhdCBtYXkgdHJ5IHRvIGNh
Y2hlIHRoaXMgYml0bWFwIChlLmcuIHBpY3R1cmVzLCBwaXBlcywgZ3B1LCBwZGYsIGV0Yy4pCisg
ICAgYml0bWFwLnNldEltbXV0YWJsZSgpOworCisgICAgLy8gRklYTUU6IFNldHRpbmcgYml0bWFw
LnNldElzT3BhcXVlKCkgaXMgYmlnIHBlcmZvcm1hbmNlIGdhaW4gaWYgcG9zc2libGUuIFdlIGNh
bgorICAgIC8vIGRvIHNvIHNhZmVseSBpZiB0aGUgaW1hZ2UgaXMgZnVsbHkgbG9hZGVkIGFuZCBp
dCBpcyBhIEpQRUcgaW1hZ2UsIG9yIGltYWdlIHdhcworICAgIC8vIGRlY29kZWQgYmVmb3JlLgor
CisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworU2tCaXRtYXAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpy
ZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBB
U1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIExhenlEZWNvZGluZ1BpeGVsUmVm
KiBwaXhlbFJlZiA9IHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4oYml0bWFwLnBp
eGVsUmVmKCkpOworICAgIEFTU0VSVCghcGl4ZWxSZWYtPmlzU2NhbGVkKHBpeGVsUmVmLT5mcmFt
ZUdlbmVyYXRvcigpLT5mdWxsU2l6ZSgpKSAmJiAhcGl4ZWxSZWYtPmlzQ2xpcHBlZCgpKTsKKwor
ICAgIGludCByb3dCeXRlcyA9IDA7CisgICAgcm93Qnl0ZXMgPSBTa0JpdG1hcDo6Q29tcHV0ZVJv
d0J5dGVzKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2NhbGVkU2l6ZS53aWR0aCgpKTsK
KworICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CisgICAgcmVzaXplZEJpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJzZXQud2lkdGgoKSwgc2Nh
bGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhl
bFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYocGl4ZWxSZWYtPmZyYW1lR2VuZXJhdG9yKCks
IHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigpOworCisgICAgLy8gU2VlIGNvbW1l
bnRzIGluIGNyZWF0ZUxhenlEZWNvZGVkU2tCaXRtYXAoKS4KKyAgICByZXNpemVkQml0bWFwLnNl
dEltbXV0YWJsZSgpOworICAgIHJldHVybiByZXNpemVkQml0bWFwOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6c2V0RGF0YShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQVNTRVJU
KGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgaWYgKGlzTGF6eURlY29kZWQoYml0bWFwKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAucGl4ZWxS
ZWYoKSktPmZyYW1lR2VuZXJhdG9yKCktPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
K30KKwordm9pZCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKFBhc3NSZWZQdHI8SW1h
Z2VGcmFtZUdlbmVyYXRvcj4gZnJhbWVHZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9sb2NrZWRTa0JpdG1hcC5pc051bGwoKSk7CisK
KyAgICBTa0lTaXplIGZ1bGxTaXplID0gZnJhbWVHZW5lcmF0b3ItPmZ1bGxTaXplKCk7CisKKyAg
ICAvLyBUaGUgY2FjaGUgb25seSBzYXZlcyB0aGUgZnVsbCBzaXplIGltYWdlIGF0IHRoZSBtb21l
bnQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnJhbWVDYWNoZSA9IGxvb2t1cEZyYW1lQ2Fj
aGUoZnJhbWVHZW5lcmF0b3ItPmltYWdlSWQoKSwgZnVsbFNpemUpOworICAgIFNrQml0bWFwIGJp
dG1hcDsKKworICAgIGlmICghZnJhbWVDYWNoZSkgeworICAgICAgICAvLyBGSVhNRTogUGl4ZWxz
IGFyZSBvd25lZCBieSB0aGUgSW1hZ2VEZWNvZGVyIGluIHRoZSBnZW5lcmF0b3IuIEZpbmQKKyAg
ICAgICAgLy8gYSB3YXkgdG8gdHJhbnNmZXIgb3duZXJzaGlwIHRvIG91ciBjYWNoZS4KKyAgICAg
ICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBmcmFtZUdlbmVyYXRvci0+ZGVjb2RlcigpLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoMCk7CisKKyAgICAgICAgLy8gU2F2ZXMgdGhlIGZyYW1lIGluIGNhY2hlIGlm
IHRoaXMgaXMgY29tcGxldGUuCisgICAgICAgIGlmIChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLmFwcGVuZChT
Y2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoZnJhbWVHZW5lcmF0b3ItPmltYWdlSWQoKSwgZnVs
bFNpemUsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLCB0cnVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
ZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgZGVjb2RpbmcgZXJyb3IuIFJlcG9ydCB0aGlzIHRvIEJp
dG1hcEltYWdlLgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBi
aXRtYXAgPSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZnJhbWVDYWNoZS0+aXNDb21wbGV0ZSgpKTsKKyAgICAgICAgYml0bWFwID0gZnJhbWVDYWNo
ZS0+Yml0bWFwKCk7CisgICAgfQorCisgICAgaWYgKGZ1bGxTaXplICE9IHNjYWxlZFNpemUpIHsK
KyAgICAgICAgLy8gSW1hZ2Ugc2NhbGluZyBpcyBkb25lIG9uLXRoZS1mbHkgYW5kIHNjYWxlZCBp
bWFnZSBpcyBkZXN0cm95ZWQKKyAgICAgICAgLy8gYWZ0ZXIgdXNlLgorICAgICAgICAvLyBGSVhN
RTogUmVzaXplIGp1c3QgdGhlIHJlcXVlc3RlZCBmcmFnbWVudC4KKyAgICAgICAgbV9sb2NrZWRT
a0JpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJpdG1hcCwgc2tpYTo6SW1h
Z2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUud2lkdGgoKSwgc2NhbGVk
U2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbG9ja2VkU2tCaXRtYXAgPSBi
aXRtYXA7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5sb2NrUGl4ZWxzKCk7CisgICAgcmV0dXJuIG1f
bG9ja2VkU2tCaXRtYXAuZ2V0QWRkcihzY2FsZWRTdWJzZXQueCgpLCBzY2FsZWRTdWJzZXQueSgp
KTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja1BpeGVscygpCit7CisgICAg
QVNTRVJUKGNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgICBtX2xvY2tlZFNrQml0bWFwLnVu
bG9ja1BpeGVscygpOworICAgIG1fbG9ja2VkU2tCaXRtYXAucmVzZXQoKTsKK30KKwordm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6OmZyYW1lR2VuZXJhdG9yQmVpbmdEZXN0cm95ZWQoSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZnJhbWVHZW5lcmF0b3IpCit7CisgICAgQVNTRVJUKGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7CisKKyAgICBkZWxldGVGcmFtZUNhY2hlKGZyYW1lR2VuZXJhdG9yLT5pbWFnZUlk
KCkpOworfQorCitib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQoKSAmJiBp
c01haW5UaHJlYWQoKTsKK30KKworU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb29rdXBGcmFtZUNhY2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaW1hZ2VJ
ZCwgc2NhbGVkU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmFtZUNhY2hlW2ldLmdldCgp
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRl
bGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtp
XS0+aXNFcXVhbChpbWFnZUlkKSkgeworICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmE1
ZDkyOTQ1ZjY3NzEzYmNhODYyNGVmYzc4Y2UxNjE1YjY2OWZhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0
b3JlLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0
b3JlX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKKworI2luY2x1ZGUgIlNrQml0bWFw
LmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOworY2xhc3Mg
U2NhbGVkSW1hZ2VGcmFnbWVudDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworLy8gVGhpcyBjbGFz
cyBjYW4gb25seSBiZSBpbnN0YW50aWF0ZWQgb24gbWFpbiB0aHJlYWQuIFRoZXJlIHdpbGwgYmUg
YW4KKy8vIGluc3RhbmNlIG9uIGltcGwgdGhyZWFkIGluIHRoZSBmdXR1cmUgYnV0IHRoYXQgcGFy
dCBvZiBpbXBsZW1lbnRhdGlvbgorLy8gaXMgaW5jb21wbGV0ZS4gU2VlIGJ1ZzogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisvLyBmb3IgZGV0YWlscy4KK2Ns
YXNzIEltYWdlRGVjb2RpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VE
ZWNvZGluZ1N0b3JlKTsgfQorICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsKKworICAgIHN0YXRp
YyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3du
KCk7CisgICAgc3RhdGljIGJvb2wgaXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYpOworCisg
ICAgU2tCaXRtYXAgY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVj
b2Rlcj4pOworICAgIFNrQml0bWFwIHJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tC
aXRtYXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpOworCisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNrQml0bWFwJiwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBZb3UgbWF5IG9u
bHkgbG9jayBvbmUgc2V0IG9mIHBpeGVscyBhdCBhIHRpbWU7IG92ZXJsYXBwaW5nIGxvY2sgY2Fs
bHMgYXJlIG5vdCBhbGxvd2VkLgorICAgIHZvaWQqIGxvY2tQaXhlbHMoUGFzc1JlZlB0cjxJbWFn
ZUZyYW1lR2VuZXJhdG9yPiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2b2lkIHVubG9ja1BpeGVscygpOworCisgICAgdm9pZCBm
cmFtZUdlbmVyYXRvckJlaW5nRGVzdHJveWVkKEltYWdlRnJhbWVHZW5lcmF0b3IqKTsKKworcHJp
dmF0ZToKKyAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKKyAgICBib29sIGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyPik7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogbG9va3VwRnJhbWVDYWNo
ZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7CisgICAgdm9p
ZCBkZWxldGVGcmFtZUNhY2hlKGludCBpbWFnZUlkKTsKKworICAgIFZlY3RvcjxPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gPiBtX2ZyYW1lQ2FjaGU7CisKKyAgICBTa0JpdG1hcCBtX2xvY2tl
ZFNrQml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMyZjI5OTE1MjUwNGE1ZjY1
NmE5YjdmMWZmZmRlMWQzMzMzYjUwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJ
bWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIHsKKworLy8gQW4gdW5pcXVlIElEIGZvciBhbiBpbWFnZSBmaWxlLgoraW50IHNf
bmV4dEltYWdlSWQgPSAwOworCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0cjxJ
bWFnZURlY29kZXI+IGRlY29kZXIpCisgICAgOiBtX2RlY29kZXIoZGVjb2RlcikKK3sKKyAgICBt
X2Z1bGxTaXplID0gU2tJU2l6ZTo6TWFrZShtX2RlY29kZXItPnNpemUoKS53aWR0aCgpLCBtX2Rl
Y29kZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgbV9pbWFnZUlkID0gc19uZXh0SW1hZ2VJZCsr
OworfQorCitJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCit7Cisg
ICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKSkKKyAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5mcmFtZUdlbmVy
YXRvckJlaW5nRGVzdHJveWVkKHRoaXMpOworfQorCitJbWFnZURlY29kZXIqIEltYWdlRnJhbWVH
ZW5lcmF0b3I6OmRlY29kZXIoKQoreworICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7Cit9CisK
K3ZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAg
ICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldERhdGEobV9kYXRhLmdldCgp
LCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1l
R2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUZyYW1lR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjljZDcyYjc5MWI5YjhhNGU5N2NkNjBl
OTExNzBmOWFkZDM3ZGVlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZUZyYW1lR2VuZXJhdG9yX2gKKyNkZWZpbmUgSW1h
Z2VGcmFtZUdlbmVyYXRvcl9oCisKKyNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIElt
YWdlRnJhbWVHZW5lcmF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9y
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4g
Y3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRlY29kZXIpKTsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNv
ZGVyPik7CisgICAgfkltYWdlRnJhbWVHZW5lcmF0b3IoKTsKKworICAgIC8vIENyZWF0ZXMgdGhl
IGltYWdlIGRlY29kZXIgaWYgbmVlZGVkLgorICAgIEltYWdlRGVjb2RlciogZGVjb2RlcigpOwor
ICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9mdWxsU2l6ZTsgfQorICAgIGludCBpbWFnZUlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlk
OyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBTa0lTaXplIG1fZnVsbFNpemU7Cisg
ICAgaW50IG1faW1hZ2VJZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZkZDA5MWUw
ZDlmOGMxNDBiN2RiZDczMWQ3MzYyMThhZDBmYjkzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVm
LmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1Jl
ZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorICAgIDogU2tQaXhlbFJl
ZigwKQorICAgICwgbV9mcmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKKyAgICAsIG1fc2Nh
bGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQor
eworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNvZGluZ1BpeGVsUmVmKCkKK3sK
K30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYg
ZnVsbFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZ1bGxTaXplICE9IG1fc2NhbGVkU2l6ZTsK
K30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0gbV9zY2FsZWRTdWJzZXQud2lkdGgoKSB8
fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2FsZWRTdWJzZXQuaGVpZ2h0KCk7Cit9CisK
K3ZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiop
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5sb2NrUGl4ZWxzKG1fZnJhbWVHZW5lcmF0
b3IsIG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOworfQorCit2b2lkIExhenlEZWNvZGlu
Z1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnVubG9j
a1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNB
cmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBh
YjljY2M0Y2IxMTFmMjc2NGY3MjM3MDY3NTFhNWVjZjEzYzc2MzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhenlEZWNvZGluZ1Bp
eGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tG
bGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCisjaW5jbHVkZSAi
U2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKKwor
Y2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgU2tQaXhlbFJlZiB7CitwdWJsaWM6
CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0
KTsKKyAgICB2aXJ0dWFsIH5MYXp5RGVjb2RpbmdQaXhlbFJlZigpOworCisgICAgU0tfREVDTEFS
RV9VTkZMQVRURU5BQkxFX09CSkVDVCgpCisKKyAgICBQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5l
cmF0b3I+IGZyYW1lR2VuZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUdlbmVyYXRvcjsg
fQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0OworICAg
IGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBTa1BpeGVsUmVm
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JU
YWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25VbmxvY2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9mcmFtZUdlbmVyYXRvcjsKKyAgICBTa0lTaXpl
IG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6eURlY29kaW5nUGl4ZWxSZWZfaF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxl
ZEltYWdlRnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0ZTZmZjg0N2VjNWI1
ZGQ0Njk1OGYyMGJkNDgxMjkzOWJkMzU3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NhbGVk
SW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQoKQoreworfQorCitTY2FsZWRJbWFn
ZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxl
dGUpCisgICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRT
aXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxl
dGUpCit7Cit9CisKK2Jvb2wgU2NhbGVkSW1hZ2VGcmFnbWVudDo6aXNFcXVhbChpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW1hZ2VJ
ZCA9PSBtX2ltYWdlSWQgJiYgc2NhbGVkU2l6ZSA9PSBtX3NjYWxlZFNpemU7Cit9CisKK2Jvb2wg
U2NhbGVkSW1hZ2VGcmFnbWVudDo6aXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaW1hZ2VJZCA9PSBtX2ltYWdlSWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nj
YWxlZEltYWdlRnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjdmZmM5NjAxNGUwNTcz
ZTgzNTA3ODAyYjY2ZjM0ZDliY2QzZjZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjYWxlZEltYWdlRnJhZ21lbnRfaAorI2Rl
ZmluZSBTY2FsZWRJbWFnZUZyYWdtZW50X2gKKworI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjaW5j
bHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNjYWxlZEltYWdlRnJhZ21l
bnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCisvLyBi
eSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRo
aXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorY2xhc3Mg
U2NhbGVkSW1hZ2VGcmFnbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29sIGlzQ29tcGxldGUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjYWxlZEltYWdlRnJhZ21lbnQoaW1hZ2VJZCwg
c2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CisgICAgfQorCisgICAgU2NhbGVkSW1h
Z2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwg
Ym9vbCBpc0NvbXBsZXRlKTsKKyAgICB+U2NhbGVkSW1hZ2VGcmFnbWVudCgpOworCisgICAgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9CisgICAgU2tC
aXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9CisKKyAgICBib29sIGlzRXF1YWwo
aW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OworICAgIGJvb2wg
aXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1faW1hZ2VJZDsK
KyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKKyAgICBi
b29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZjNmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0
YWFmNTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2NGZmZDQwNTZhNzQzYTI1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNr
aWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZl
SW1hZ2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlICJTa1BpeGVsUmVmLmgi
CiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNs
dWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdl
U2tpYSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXpl
ZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSQogCiBTa0Jp
dG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRtYXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVk
SW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJbWFnZVN1YnNldCkgY29uc3QKIHsKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppc0xhenlE
ZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVjb2RlZFNrQml0bWFwKG1faW1hZ2UsIHNj
YWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOworI2VuZGlmCisKICAgICBpZiAoIWhh
c1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCkpIHsKICAg
ICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNvbXBsZXRlKCkKICAgICAgICAgICAgICYm
IHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKaW5kZXggZmM4MmE1YzI1YWQ3OGU4NzdkYzk5MTg4ZTlmZGIxZTg1YjFhZDI3
Yy4uOWY2OTdhODRhYjA5YWZiYWMzYjYyYWUzZmNlNTY2YzRmYjZkNzQyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
QEAgLTE0OCw2ICsxNDgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJp
dG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iaXRtYXAgPSBOYXRpdmVJbWFnZVNraWEo
Yml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNrQml0bWFwJiBnZXRTa0Jp
dG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRt
YXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lk
dGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkxZmVjMTNmYWI0M2JkOTA4Njk2Njc4NmMw
Zi4uNjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIyZWY4N2JkZTk5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMv
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICd0ZXN0
cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFsVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJD
b21wb3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4LDggKzc5LDkgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lE
QlJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVt
VGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2Fy
ZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGlua0hpZ2hs
aWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBhYmQ4
NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMyYmU0Li4wOGNkMTk3NDVjYzcwYWFlMzc5
Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBXZWJTdHJpbmcmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNhNzAwMTU2ZDZjZmFiZDUwZWRiM2VkMmY3
ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4YzZmZjg1ZThhNzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdT
dG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2
b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9y
dCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOwogICAg
IFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlByZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRk
b3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0
aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdkMDJhNDdjYTA3OGRmMzg2MDk4Li5kYzc3
MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5YzkwOTgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2Rl
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVS
TC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChT
ZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9y
SW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0
cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGUoZmFsc2UpCisg
ICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1
bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAsIG1fbWF4VW50aWxlZExheWVyU2l6
ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2ICs0ODIsMTUgQEAgdm9pZCBXZWJTZXR0
aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBt
X3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9p
ZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmIGVu
YWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVh
ZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQp
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICBtX2RlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjljMzFjZjNlYjJhZTgwZmRhMWY4ODVjZDA4
NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDliMGI3N2U2ZTJhZGYwMmQ3MmQ2NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC03OCw2
ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91Y2goYm9vbCk7CkBAIC0xNzgsNiArMTc5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJ
bkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVUYXBIaWdobGlnaHRFbmFibGVkOwogICAg
IGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdpYmxlU2NhbGU7CisgICAgYm9vbCBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6
ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUzMWEzZGY0OGM0NzQxZTMyZTRlZGI5Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNs
dWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitj
bGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIG1fYWN0dWFs
RGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rl
ci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1fbGF6eURlY29kZXIgPSBEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9wdFB0cihtX2FjdHVhbERlY29kZXIpKTsK
KyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBTa0RldmljZShTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBEb24ndCBvd24gdGhpcyBidXQgc2F2
ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgorICAgIE1vY2tJbWFnZURlY29kZXIqIG1f
YWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IG1fbGF6eURl
Y29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsKKyAgICBTa0NhbnZhcyBtX2NhbnZhczsK
K307CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QsIGRyYXdJbnRvU2tQaWN0dXJl
KQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdlKGFkb3B0UHRyKG1fbGF6eURl
Y29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisgICAg
RVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5iaXRtYXAo
KS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0
KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5i
aXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1t
dXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBDYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5S
ZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJp
dG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CisgICAgRVhQRUNU
X0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAg
ICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUpOworICAgIEVYUEVDVF9FUSgxLCBtX2Fj
dHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkpOworfQorCitURVNUX0YoRGVm
ZXJyZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVkSW50b1NrUGljdHVyZSkKK3sKKyAgICBP
d25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9wdFB0cihtX2xhenlEZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworICAgIFNrQml0bWFwIHNj
YWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFwKFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwg
U2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVYUEVDVF9GQUxTRShzY2FsZWRCaXRtYXAu
aXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxlZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsK
KyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
NTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVj
b2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBTa0NhbnZhcyogdGVtcENh
bnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygxMDAsIDEwMCk7CisgICAgdGVtcENhbnZh
cy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDApOworICAgIG1fcGljdHVyZS5lbmRSZWNv
cmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRyYXdQaWN0dXJlKG1fcGljdHVyZSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMx
MTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1h
Z2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgOiBJ
bWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAgICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIm1vY2siOworICAgIH0KKworICAg
IHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKKyAgICB7Cisg
ICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKworICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6
ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAgaW50IGZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsgfQorCitwcml2
YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0ltYWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWEwNmY1ZWQ5ZTZkOTM2
YjdjZGFjOTZjZDNkNWM1NjFjOWRmYzhlZi4uMTljMTk2ZTBiZWMyMTFjNTA1MjA0MDQxODQ0YTZh
YTFiNzAzMjczZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2Ug
ZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIHRvIERSVC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJlc2V0
V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJlc2V0KToK
KyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisKIDIwMTIt
MTAtMTggIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEFkZCBhIHNjcmlwdCBmb3IgZXhwb3J0aW5nIGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlz
c2lvbiB0byBXM0MKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1
bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5k
ZXJUcmVlLmNwcAppbmRleCAzMGNlMjg4NTFmYzlhOWE0NmI4YjYzZTZkYmQwMGRhMWMzZmVhODM4
Li41YTMyMTA0NDk2Zjc5YjFmMmE0NTQ4YjM2NTM0NTZiNDA2MWZhNmI1IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw2ICs2
NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdb
XSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25F
bmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVy
YXRlZC12aWRlbyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQz
REltcGxlbWVudGF0aW9uW10gPSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRh
dGlvbj0iOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10g
PSAiLS1lbmFibGUtcGVyLXRpbGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
RW5hYmxlRGVmZXJyZWRJbWFnZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2Ut
ZGVjb2RpbmciOwogCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0
cmVzcy1vcHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0
cmVzcy1kZW9wdCI7CkBAIC0xMzMsNiArMTM0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
IGFyZ3ZbXSkKICAgICBib29sIGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAg
Ym9vbCBhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGls
ZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBz
dHJlc3NEZW9wdCA9IGZhbHNlOwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFs
c2U7CkBAIC0xODMsNiArMTg1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0Qg
aW1wbGVtZW50YXRpb24gJXNcbiIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAg
ICAgICAgIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChh
cmd1bWVudCA9PSBvcHRpb25FbmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAg
ICBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAo
YXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1
ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0y
MjIsNiArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAg
c2hlbGwuc2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQp
OwogICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJs
ZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAg
IHNoZWxsLnNldEphdmFTY3JpcHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVs
bC5zZXRTdHJlc3NPcHQoc3RyZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQo
c3RyZXNzRGVvcHQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKaW5kZXggMzI1ODVmYWExYjJkOGFkODFhODNiMTVlOGY3MTJiZDhjYTcyNDg5Yi4uYWM3NzU5
NjgxYTA0NmQwM2Q0NzE4ZmM0NThjMjdlODJlMTQ2MTc5OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAgVGVzdFNoZWxs
OjpUZXN0U2hlbGwoKQogICAgICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkK
ICAgICAsIG1fZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJh
dGVkUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rl
b3B0KGZhbHNlKQogICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMjksNiArMjMw
LDcgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykK
ICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9k
ZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdF
bmFibGVkID0gbV9hY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7
CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCA0NGI1YWUzODhjNjhkNjVkZTg5MGZjODAwZmVk
NTIyOWVlYzJhMzI0Li4zOTI2NjI0NDY5YjY4Y2NiYzg3NGI0OTFlYTQ4M2EwYjYzOTJjZTU1IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM4LDYgKzEz
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2RlZmVycmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZv
aWQgc2V0QWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxl
cmF0ZWRQYWludGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFp
bnRpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5h
YmxlZDsgfQogI2lmIGRlZmluZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNo
ZWQgZXZlbnQuIFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExF
IGZpbmlzaGVkRXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzNSw2ICsy
MzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAg
ICBib29sIG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQ
YWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7
CiAgICAgV2ViUHJlZmVyZW5jZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAg
IGJvb2wgbV9zdHJlc3NEZW9wdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCAzYmMyY2RkOWYyYWU0MTcwYzMzYWQ2NDEwNmQ0YTdm
MmQwOTAyMWY1Li41YzhjOTJjOTk5NDI2NDRkZDE5YTQ5Yzk4ZTY2YzFhNGYwNmQ0NDRkIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBA
IC0xMTYsNiArMTE2LDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVy
cmVkMmRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNl
OwogICAgIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBA
QCB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0
dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNF
bmFibGVkKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJy
ZWQyZENhbnZhc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5n
RW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7
CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlh
UGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9s
bGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFw
cGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdN
b2RlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZl
cmVuY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5o
CmluZGV4IGMzNjU1M2IzNTQ2OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJk
MDdjMWU1Yjk4NTVmZTdiM2FhMmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVj
dCBXZWJQcmVmZXJlbmNlcyB7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsK
ICAgICBib29sIGRlZmVycmVkMmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQ
YWludGluZ0VuYWJsZWQ7CisgICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwog
ICAgIGJvb2wgbWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQ7CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0u
cHkKaW5kZXggYzMxMGViMTViMTk1NGRkZWRkYzMzM2I5ODBmNjY1ZDVmY2RiOTFjZS4uYTY5ZjVh
ODIyYWEzZmUzMjg0NmY5MTcwMTE2NDE5M2NjMjIzOGY1MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zOTAsNiAr
MzkwLDkgQEAgY2xhc3MgQ2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRl
c3RTdWl0ZSgncGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBvc2l0aW5nJywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyctLWVuYWJsZS1zb2Z0d2FyZS1jb21wb3NpdGluZyddKSwKKyAg
ICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9p
bWFnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLWRlZmVycmVk
LWltYWdlLWRlY29kaW5nJywgJy0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nJywgJy0tZm9yY2Ut
Y29tcG9zaXRpbmctbW9kZSddKSwKICAgICAgICAgXQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEyYTI1NmIy
N2IyNjA5OTkwYmVjMDZjNTgzOTZmYjcyYWVlM2IyMzYuLmYzN2E4OThlNjI5ZGY3ZDk4NzIzMDdm
OTdmNmI2YzAwNGNkNzU3MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgQ2hyb21p
dW0gdG8gdGVzdCBkZWZlcnJlZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKworICAgICAgICBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdpbGwgYmUgdGVz
dGVkIHdpdGgKKyAgICAgICAgLS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1wZXItdGlsZS1w
YWludGluZyAtLWVuYWJsZS1kZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dDog
QWRkZWQuCisKIDIwMTItMTAtMTggIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEFkZCBhIHNjcmlwdCBmb3IgZXhwb3J0aW5nIGh0dHAvdGVzdHMvdzNj
L3dlYnBlcmYvc3VibWlzc2lvbiB0byBXM0MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBmYzJiNDQzZGZmMGNlNTRmNzczMjViNzc0NjQ3
MzdmN2JjMzZjODguLjYzZTU5ZmJiMjcxYzgwYzc2NDBiYmQ2NTg0NzRhNDJiYTZkN2Y2MzYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
NDIzMywzICs0MjMzLDI4IEBAIHdlYmtpdC5vcmcvYi84NDg5MyBodHRwL3Rlc3RzL3czYy93ZWJw
ZXJmL3N1Ym1pc3Npb24vSW50ZWwvdXNlci10aW1pbmcgWyBTa2lwIF0KICMgRXhwZWN0ZWQgdG8g
ZmFpbCB1bnRpbCBXZWJHTCBleHRlbnNpb24gaW1wbGVtZW50YXRpb24gbGFuZHMKIHdlYmtpdC5v
cmcvYi85ODI1NyBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtZWxlbWVudC1pbmRleC11aW50Lmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzk4MjU3IHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZ3B1L2Zhc3QvY2FudmFzL3dlYmdsL29lcy1lbGVtZW50LWluZGV4LXVpbnQuaHRtbCBb
IEZhaWx1cmUgUGFzcyBdCisKKyMgVGhlc2UgdGVzdHMgYXJlIGZhaWxpbmcgYWxyZWFkeSBhbmQg
YmVjYXVzZSBvZiB2aXJ0dWFsIHRlc3Qgc3VpdGUgZm9yIGRlZmVycmVkCisjIGltYWdlIGRlY29k
aW5nIHRoZXkgbmVlZCB0byBiZSBzdXBwcmVzc2VkIGFnYWluLgord2Via2l0Lm9yZy9iLzk0MjQw
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvYW5pbWF0ZWQt
Z2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlm
LW9yaWVudGF0aW9uLWNzcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0
aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1sYW5kc2NhcGUuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL3N1cHBvcnQtYnJva2VuLWltYWdlLWRlbGVnYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVy
cmVkL2Zhc3QvaW1hZ2VzL2dpZi1sYXJnZS1jaGVja2VyYm9hcmQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVm
ZXJyZWQvZmFzdC9pbWFnZXMvZ2lmLWxvb3AtY291bnQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQv
ZmFzdC9pbWFnZXMvcGFpbnQtc3VicmVjdC1ncmlkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL3BpeGVsLWNyYWNrLWltYWdlLWJhY2tncm91bmQtd2Via2l0LXRyYW5zZm9ybS1z
Y2FsZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zh
c3QvaW1hZ2VzL2ltYWdlbWFwLWNpcmNsZS1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3Qv
aW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctb3V0bGluZS1jb2xvci1leHBsaWNpdGx5LWluaGVy
aXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1y
aW5nLW91dGxpbmUtY29sb3Itbm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9m
YXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJy
ZWQvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtcG9seWdvbi1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL29iamVjdC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
OTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9yZXBh
aW50LXN1YnJlY3QtZ3JpZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWxldHRlZC1wbmct
d2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBNaXNzaW5nIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZv
Y3VzLXJpbmctem9vbS5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1h
Z2VzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4ODJlYjA0MzJkNWZkMDBiODI4MWUyODhiMTk4
OTk5Y2I3ZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIg
QEAKKyMgVGVzdCBzdWl0ZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGVzdCB0aGUgJ2RlZmVycmVkIGlt
YWdlIGRlY29kaW5nJyBjb2RlIHBhdGgKKyMgdGhyb3VnaCBDaHJvbWl1bSBEUlQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>169621</attachid>
            <date>2012-10-19 08:11:26 -0700</date>
            <delta_ts>2012-10-19 08:11:26 -0700</delta_ts>
            <desc>test-background.html</desc>
            <filename>test-background.html</filename>
            <type>text/html</type>
            <size>1228</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">PHN0eWxlPgogIGltZyB7CiAgICBtYXJnaW46IDVweDsKICAgIHdpZHRoOiAyMDBweDsKICAgIGhl
aWdodDogMjAwcHg7CiAgICBib3JkZXItcmFkaXVzOiAyMDBweDsKICAgIGJhY2tncm91bmQtY29s
b3I6IGJsYWNrOwogIH0KPC9zdHlsZT4KCjwhLS0gMXgxcHggcG5nIC0tPgo8aW1nIHNyYz0iZGF0
YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFB
QQogIGZGY1NKQUFBQUMwbEVRVlFJVzJQOER3UUFDZ0FEL2lsNFFKOEFBQUFBU1VWT1JLNUNZSUk9
IiA+Cgo8IS0tIDF4MXB4IGpwZWcgLS0+CjxpbWcgc3JjPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0
LC85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC8yd0JEQUFNQ0FnCiAgSUNBZ01DQWdJREF3TURC
QVlFQkFRRUJBZ0dCZ1VHQ1FnS0Nna0lDUWtLREE4TUNnc09Dd2tKRFJFTkRnOFFFQkVRQ2d3CiAg
U0V4SVFFdzhRRUJELzJ3QkRBUU1EQXdRREJBZ0VCQWdRQ3drTEVCQVFFQkFRRUJBUUVCQVFFQkFR
RUJBUUVCQVFFQkFRCiAgRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkQvd0FBUkNB
QUJBQUVEQVNJQUFoRUJBeEVCLzhRQUh3QUFBCiAgUVVCQVFFQkFRRUFBQUFBQUFBQUFBRUNBd1FG
QmdjSUNRb0wvOFFBdFJBQUFnRURBd0lFQXdVRkJBUUFBQUY5QVFJREFBCiAgUVJCUkloTVVFR0Ux
RmhCeUp4RkRLQmthRUlJMEt4d1JWUzBmQWtNMkp5Z2drS0ZoY1lHUm9sSmljb0tTbzBOVFkzT0Rr
CiAgNlEwUkZSa2RJU1VwVFZGVldWMWhaV21Oa1pXWm5hR2xxYzNSMWRuZDRlWHFEaElXR2g0aUpp
cEtUbEpXV2w1aVptcUtqCiAgcEtXbXA2aXBxckt6dExXMnQ3aTV1c0xEeE1YR3g4akp5dExUMU5Y
VzE5aloydUhpNCtUbDV1Zm82ZXJ4OHZQMDlmYjMrCiAgUG42LzhRQUh3RUFBd0VCQVFFQkFRRUJB
UUFBQUFBQUFBRUNBd1FGQmdjSUNRb0wvOFFBdFJFQUFnRUNCQVFEQkFjRkJBCiAgUUFBUUozQUFF
Q0F4RUVCU0V4QmhKQlVRZGhjUk1pTW9FSUZFS1JvYkhCQ1NNelV2QVZZbkxSQ2hZa05PRWw4UmNZ
R1JvCiAgbUp5Z3BLalUyTnpnNU9rTkVSVVpIU0VsS1UxUlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRY
WjNlSGw2Z29PRWhZYUhpSW1LCiAga3BPVWxaYVhtSm1hb3FPa3BhYW5xS21xc3JPMHRiYTN1TG02
d3NQRXhjYkh5TW5LMHRQVTFkYlgyTm5hNHVQazVlYm42CiAgT25xOHZQMDlmYjMrUG42LzlvQURB
TUJBQUlSQXhFQVB3RDlVNktLS0FQLzJRPT0iID4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169664</attachid>
            <date>2012-10-19 11:41:00 -0700</date>
            <delta_ts>2012-10-19 11:41:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94240-20121019113943.patch</filename>
            <type>text/plain</type>
            <size>80401</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRmOGM2ZGJmNzAzYzIx
MmZhMWM0ZjA3YjVkZDBlZDM5MGJjNjM2ZS4uNGM4MmYxZjhkMWFkYTYxOTI3ZDY0YTUwNjcxYjRh
MDNiNWM0ZmEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAxMi0wOS0wOCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGRlZmVycmVkIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9iamVjdGl2ZXM6CisKKyAgICAgICAgVG8gcmVjb3JkIGltYWdl
IGRlY29kaW5nIG9wZXJhdGlvbnMgZHVyaW5nIHBhaW50aW5nIGFuZCB0byBkZWZlcgorICAgICAg
ICBkZWNvZGluZyBvcGVyYXRpb25zIHVudGlsIHJhc3Rlcml6YXRpb24uCisKKyAgICAgICAgUmF0
aW9uYWxlOgorCisgICAgICAgIFRoaXMgaXMgYSBrZXkgZmVhdHVyZSB0aGF0IGVuYWJsZXMgaW1w
bC1zaWRlIHBhaW50aW5nIHdoaWNoIHJlcXVpcmVzCisgICAgICAgIGZhc3QgcmVjb3JkaW5nIG9m
IGRyYXdpbmcgb3BlcmF0aW9ucy4gVGhlIGV4aXN0aW5nIGRlY29kZS1vbi1kcmF3CisgICAgICAg
IHJlc3RyaWN0cyB0aGF0IHJlY29yZGluZyBoYXMgdG8gYmxvY2sgb24gZXhwZW5zaXZlIGRlY29k
aW5nIG9wZXJhdGlvbnMuCisgICAgICAgIFRoaXMgY2hhbmdlIGFsbG93cyByZWNvcmRpbmcgb2Yg
aW1hZ2UgZGVjb2Rpbmcgb3BlcmF0aW9ucyBkdXJpbmcgcGFpbnQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICBEZXNpZ246CisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgaGFwcGVucyB3aGVuIGEg
Qml0bWFwSW1hZ2UgaXMgZHJhd24gaW50byBhCisgICAgICAgIEdyYXBoaWNzQ29udGV4dC4gV2hl
biBwZXItdGlsZSBwYWludGluZyBpcyBlbmFibGVkIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBp
cyBiYWNrZWQgYnkgU2tDYW52YXMgaW4gcmVjb3JkaW5nIG1vZGUuIFRoaXMgU2tDYW52YXMgcmVj
b3JkcyBkcmF3aW5nCisgICAgICAgIGFuZCBpbWFnZSBkZWNvZGluZyBvcGVyYXRpb25zIHRvIG1p
bmltaXplIHJlY29yZGluZyB0aW1lLgorCisgICAgICAgIEFuIGltYWdlIGRlY29kaW5nIG9wZXJh
dGlvbiBpcyByZWNvcmRlZCBhcyBhIFNrUGl4ZWxSZWYgb2JqZWN0CisgICAgICAgIGltcGxlbWVu
dGVkIGJ5IExhenlEZWNvZGluZ1BpeGVsUmVmLiBUaGlzIG9iamVjdCByZWZlcmVuY2VzIHJhdyBl
bmNvZGVkCisgICAgICAgIGRhdGEsIHJlZ2lvbnMgdG8gYmUgZGVjb2RlZCBhbmQgc2NhbGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwZXIt
dGlsZSBwYWludGluZyB0aGlzIGZlYXR1cmUgZGVmZXJzCisgICAgICAgIGltYWdlIGRlY29kaW5n
IHVudGlsIHRoZSBTa0NhbnZhcyByZWZlcmVuY2luZyB0aGUgaW1hZ2UgaXMgcmFzdGVyaXplZC4K
KworICAgICAgICBCb3RoIHJlY29yZGluZyBhbmQgcmFzdGVyaXphdGlvbiBoYXBwZW4gb24gdGhl
IG1haW4gdGhyZWFkLgorCisgICAgICAgIFBlcmZvcm1hbmNlIEltcGFjdDoKKworICAgICAgICBU
aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBXZWJLaXQ6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoKQorICAgICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBpbXBhY3Qgd2hlbiBkaXNh
YmxlZC4KKworICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKwor
ICAgICAgICBVcGNvbWluZyBDaGFuZ2VzOgorCisgICAgICAgIDEuIEltcGxlbWVudCBhIGZ1bGwt
ZmVhdHVyZWQgaW1hZ2UgY2FjaGUgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlLgorICAgICAgICAyLiBB
bGxvdyByYXN0ZXJpemF0aW9uIGFuZCBkZWNvZGluZyBvbiBpbXBsIHRocmVhZC4KKworICAgICAg
ICBDbGFzc2VzIEludm9sdmVkOgorCisgICAgICAgIEJpdG1hcEltYWdlCisKKyAgICAgICAgQml0
bWFwSW1hZ2UgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
V2hlbgorICAgICAgICBkcmF3aW5nIGEgQml0bWFwSW1hZ2UgaW50byBhIEdyYXBoaWNzQ29udGV4
dCBpdCBtYWtlcyBhIHJlcXVlc3QgdG8KKyAgICAgICAgY3JlYXRlIGEgTmF0aXZlSW1hZ2VTa2lh
LiBXZSBzdWJzdGl0dXRlIHRoZSBjb250ZW50IGluIE5hdGl2ZUltYWdlU2tpYQorICAgICAgICBz
dWNoIHRoYXQgaXQgaXMgbGF6aWx5IGRlY29kZWQuCisKKyAgICAgICAgRGVmZXJyZWRJbWFnZURl
Y29kZXIKKworICAgICAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBh
IGltYWdlIGRlY29kZXIgZm9yIENocm9taXVtLgorICAgICAgICBUaGlzIGlzIGEgYnJpZGdlIGxh
eWVyIHRoYXQgZWl0aGVyIGRlbGVnYXRlcyBjYWxscyB0byB0aGUgYWN0dWFsCisgICAgICAgIElt
YWdlRGVjb2RlciBvciBjcmVhdGUgYSBsYXppbHktZGVjb2RlZCBTa0JpdG1hcCBhbmQgZGVsZWdh
dGVzIGNhbGxzCisgICAgICAgIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmUKKworICAgICAgICBUaGlzIG9iamVjdCBtYW5hZ2VzIGFsbCBlbmNvZGVk
IGltYWdlcy4gSXQga2VlcHMgdHJhY2sgb2YgZW5jb2RlZAorICAgICAgICBkYXRhIGFuZCB0aGUg
Y29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIgZm9yIGRvaW5nIGFjdHVhbCBkZWNvZGluZy4gSXQK
KyAgICAgICAgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBsYXppbHkgZGVjb2Rl
ZCBTa0JpdG1hcHMuIFRoaXMKKyAgICAgICAgU2tCaXRtYXAgY29udGFpbnMgYSBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0byBhbgorICAgICAgICBpbWFnZSBl
bnRyeSBpbiBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgU2NhbGVkSW1hZ2VGcmFnbWVu
dAorCisgICAgICAgIEEgY29udGFpbmVyIGZvciBhIHNjYWxlZCBpbWFnZSBmcmFnbWVudC4gSW4g
YWRkaXRpb24gdG8gYml0bWFwIHBpeGVscworICAgICAgICBpdCBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB0aGUgSUQgb2YgdGhlIGltYWdlLCBzY2FsZSBhbmQgY2xpcHBpbmcuCisKKyAgICAg
ICAgSW1hZ2VGcmFtZUdlbmVyYXRvcgorCisgICAgICAgIFRoaXMgb2JqZWN0IGlzIHJlc3BvbnNp
YmxlIGZvciBnZW5lcmF0aW5nIGRlY29kZWQgcGl4ZWxzLiBJdCBpcyBhbHNvCisgICAgICAgIGEg
Y29udGFpbmVyIGZvciBlbmNvZGVkIGltYWdlIGRhdGEgYW5kIGNvcnJlc3BvbmRpbmcgaW1hZ2Ug
ZGVjb2Rlci4KKworICAgICAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZgorCisgICAgICAgIFRoaXMg
b2JqZWN0IGlzIGVtYmVkZGVkIGluIGEgU2tCaXRtYXAgdG8gZW5hYmxlIGxhenkgZGVjb2Rpbmcu
IFdoZW4KKyAgICAgICAgU2tCaXRtYXAgbmVlZHMgdG8gYWNjZXNzIHBpeGVscyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZiBpcyBsb2NrZWQuIEl0CisgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRv
IGxvY2F0ZSBhbiBpbWFnZSBhbmQgc2NhbGluZyBpbmZvLCB0aGVzZQorICAgICAgICBpbmZvcm1h
dGlvbiBpcyBzdWJtaXR0ZWQgdG8gSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIGFjY2VzcyBhY3R1YWwg
cGl4ZWxzLgorCisgICAgICAgIExheW91dCB0ZXN0cy4gVGhlcmUgYXJlIGFib3V0IDgwIHRlc3Rz
IGluIHRoaXMgdmlydHVhbCB0ZXN0IHN1aXRlCisgICAgICAgIHJ1bm5pbmcgdGhpcyBmZWF0dXJl
IGluIHRoaXMgZGlyZWN0b3J5OgorCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
ZGVmZXJyZWQvZmFzdC9pbWFnZXMKKworICAgICAgICBVbml0IHRlc3RzLiBBZGRlZCBEZWZlcnJl
ZEltYWdlRGVjb2RlclRlc3QgdG8gdmVyaWZ5IGRlZmVycmVkCisgICAgICAgIGltYWdlIGRlY29k
aW5nIGJlaGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFn
ZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmlzTGF6eURlY29kZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVzaXplTGF6eURlY29kZWRTa0Jp
dG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFt
ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJh
bWVDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURl
Y29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJh
Z21lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY2FsZWRJbWFnZUZyYWdtZW50OjpiaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVk
SW1hZ2VGcmFnbWVudDo6aXNDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZy
YW1lR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjppbWFnZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5nUGl4
ZWxSZWY6On5MYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6aXNTY2FsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF6eURlY29kaW5n
UGl4ZWxSZWY6OmlzQ2xpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxhenlEZWNvZGluZ1BpeGVs
UmVmOjpvblVubG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXp5RGVjb2RpbmdQaXhl
bFJlZjo6b25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6ZnJhbWVHZW5lcmF0b3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmdldFNrQml0bWFwKToKKworMjAxMi0xMC0xOCAgWWFlbCBBaGFyb24gIDx5
YWVsLmFoYXJvbkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF0gR3JhcGhpY3NDb250ZXh0M0Q6
Om1fcmVuZGVyU3R5bGUgaXMgbm90IGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dG9uaW8gR29tZXMuCisKKyAgICAgICAgSW5pdGlhbGl6ZSBHcmFwaGljc0NvbnRleHQzRDo6bV9y
ZW5kZXJTdHlsZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRCk6CisKIDIwMTItMTAtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZW9yZGVyIHNvbWUgZnVuY3Rpb25zIGluIFN1YnJlc291cmNlTG9hZGVyIHRv
IHBlcm1pdCBtYWluIHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlODJk
MWZhNGRhYmUzMWNhMWYxMThiNDZhZDgyM2VlZmJlZWEyN2ZjLi43NzI5OGY1OTVmZGFkOGNmOWIy
OGE1NTYxNDQxMjMyNmQ1ZjI5YTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQxIEBACisyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIG5ldyB1
bml0IHRlc3RzIGZvciBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgVGhlc2UgdGVz
dHMgYXJlIGRlZmluZWQgaW4gRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcC4gVGhleSB2ZXJp
ZnkKKyAgICAgICAgaW1hZ2UgZGVjb2RpbmcgaGFwcGVucyBvbmx5IHdoZW4gU2tQaWN0dXJlIGlz
IHJhc3Rlcml6ZWQgZm9yIGJvdGgKKyAgICAgICAgc2NhbGVkIGFuZCBub24tc2NhbGVkIGNhc2Vz
LgorCisgICAgICAgIFRlc3RzOiBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuZHJhd0ludG9Ta1Bp
Y3R1cmUKKyAgICAgICAgICAgICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5kcmF3U2NhbGVk
SW50b1NrUGljdHVyZQorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGlj
L1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OnNodXRkb3duKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5o
OgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZElt
YWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXJUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAg
ICAqIHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKE1vY2tJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdl
RGVjb2Rlcjo6TW9ja0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VE
ZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOgorCiAyMDEyLTEwLTE5ICBKb2NoZW4g
RWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gZml4
IHRoZSBmaXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5MDE5NjA0ZGNlOGFkY2VmOThjZDYzYmNjZmFl
OTE0YjRhMTVkMzc2Li40OGExZGNiM2Y1Y2E4NDI0MTEwOTQwMGZmZjk0Y2NiMjEzMjZhNzA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC00OTE3LDYgKzQ5MTcsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNz
Rm9udExvYWRpbmcubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHAnLApAQCAtNDkzNiwxMCArNDkzOCwxOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29k
aW5nU3RvcmUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUdlbmVyYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFxdWVS
ZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVn
YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3Jt
SWNvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJ
bWFnZUZyYWdtZW50LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IDgyZGZkZTFjOWRkODJlMzE1YmJkZDllZTg5Y2QwODIzYzljYzhlNGQuLmFiZmE1OTg4YjQyYmM2
OTBmN2VhYmM5NTNlZWIwN2QwNTMwMDNjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRh
dGlvbi5oIgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFn
ZURlY29kZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUo
SU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAtNzksNyArODMsNyBAQCB2b2lkIEltYWdl
U291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
CiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5l
IHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8gbWFkZS4K
ICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxO
YXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFP
cHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICAgICAgbV9kZWNvZGVy
ID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VEZWNvZGVyUHRyPihOYXRpdmVJbWFnZURlY29kZXI6
OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikpOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIGlm
IChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCiAgICAgICAgICAgICBt
X2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCAw
ZDhhMDFlMjZhNzJjZmZmMzlhYTQ2NTQzNzQxNDRhMGExNzlhYzM4Li42NmE4YTBhNTFjMzlmYjky
NjhiMjIxYTQ3YjY4NzUwMTU5M2JjNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ3LDEwICs0NywyMCBAQCBjbGFzcyBJbnRTaXpl
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENHKQotdHlwZWRlZiBDR0ltYWdlU291
cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2Vsc2UKK3R5cGVkZWYgQ0dJbWFnZVNvdXJj
ZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBj
bGFzcyBJbWFnZURlY29kZXI7Ci10eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VTb3Vy
Y2VQdHI7Cit0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOworI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK2NsYXNzIERlZmVycmVkSW1hZ2VEZWNvZGVy
OwordHlwZWRlZiBEZWZlcnJlZEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29kZXI7Cit0eXBl
ZGVmIERlZmVycmVkSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7CisjZWxpZiBV
U0UoQ0cpCisjZGVmaW5lIE5hdGl2ZUltYWdlRGVjb2RlciBJbWFnZURlY29kZXIKKyNlbHNlCit0
eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29kZXI7CiAjZW5kaWYKIAogLy8gUmln
aHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJlY29nbml6ZWQgaW1hZ2UgZm9ybWF0IHRoYXQgc3Vw
cG9ydHMgYW5pbWF0aW9uLgpAQCAtMTU4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBOYXRpdmVJbWFnZVNvdXJjZVB0ciBtX2RlY29kZXI7CisgICAgTmF0aXZlSW1hZ2VEZWNvZGVy
UHRyIG1fZGVjb2RlcjsKIAogI2lmICFVU0UoQ0cpCiAgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9w
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTc0
MTk2ZTcxYWRiNDEzMTVjZGIzY2I3NTYyZWEwMGFmMDE2ODVhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURl
Y29kZXIuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJJbWFnZURl
Y29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0RlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJ
bWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCisgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxz
ZSkKKyAgICAsIG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKK3sKK30K
KworRGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2RlcigpCit7CisgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiBJbWFnZURlY29kaW5n
U3RvcmUgaWYgaW1hZ2UKKyAgICAvLyBpcyBkZWZlci1kZWNvZGVkLgorfQorCitEZWZlcnJlZElt
YWdlRGVjb2RlciogRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZm
ZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24pCit7Cisg
ICAgSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0
YSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JPcHRpb24pOworICAgIHJldHVybiBhY3R1YWxE
ZWNvZGVyID8gbmV3IERlZmVycmVkSW1hZ2VEZWNvZGVyKGFjdHVhbERlY29kZXIpIDogMDsKK30K
KworUGFzc093blB0cjxEZWZlcnJlZEltYWdlRGVjb2Rlcj4gRGVmZXJyZWRJbWFnZURlY29kZXI6
OmNyZWF0ZUZvclRlc3RpbmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihkZWNvZGVyLmxlYWtQ
dHIoKSkpOworfQorCitTdHJpbmcgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5z
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNv
ZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogbV9maWxlbmFtZUV4dGVuc2lvbjsKK30KKworSW1h
Z2VGcmFtZSogRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpCit7CisgICAgLy8gT25seSBkZWZlciBpbWFnZSBkZWNvZGluZyBpZiB0aGlzIGlzIGEg
c2luZ2xlIGZyYW1lIGltYWdlLiBUaGUgcmVhc29uIGlzCisgICAgLy8gYmVjYXVzZSBhIG11bHRp
ZnJhbWUgaXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5Cisg
ICAgLy8gQml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFkYXRhIGZ1bmN0aW9ucyB0aGF0
IGRvIHN5bmNocm9ub3VzIGltYWdlCisgICAgLy8gZGVjb2RpbmcuCisgICAgaWYgKEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgICAgICAmJiBtX2FjdHVhbERl
Y29kZXIKKyAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA9PSBj
QW5pbWF0aW9uTm9uZQorICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJs
ZSgpKSB7CisKKyAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7CisgICAg
ICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5z
aW9uKCk7CisKKyAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKS0+Y3JlYXRlTGF6eURlY29kZWRTa0Jp
dG1hcChtX2FjdHVhbERlY29kZXIucmVsZWFzZSgpKTsKKyAgICAgICAgbV9sYXp5RGVjb2RlZEZy
YW1lLnNldFNrQml0bWFwKGxhenlEZWNvZGVkU2tCaXRtYXApOworICAgICAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPnNldERhdGEobV9sYXp5RGVjb2RlZEZy
YW1lLmdldFNrQml0bWFwKCksIG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsK
KworICAgICAgICAvLyBEb24ndCBtYXJrIHRoZSBmcmFtZSBhcyBjb21wbGV0ZWx5IGRlY29kZWQg
dW50aWwgdGhlIHVuZGVybHlpbmcKKyAgICAgICAgLy8gZGVjb2RlciBoYXMgcmVhbGx5IGRlY29k
ZWQgaXQuIFVudGlsIHRoZW4sIG91ciBkYXRhIGFuZCBtZXRhZGF0YSBtYXkKKyAgICAgICAgLy8g
YmUgaW5jb3JyZWN0LCBzbyBjYWxsZXJzIGNhbid0IHJlbHkgb24gdGhlbS4KKyAgICAgICAgbV9s
YXp5RGVjb2RlZEZyYW1lLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAg
IH0KKworICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleChpbmRleCkgOiAmbV9sYXp5RGVjb2RlZEZyYW1lOworfQorCit2b2lkIERl
ZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKG1fYWN0dWFsRGVjb2RlcikgeworICAgICAgICAvLyBL
ZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQu
CisgICAgICAgIC8vIFdoZW4gaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBvd25lcnNo
aXAgb2YgbV9kYXRhIGlzCisgICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIEltYWdlRGVjb2RpbmdT
dG9yZS4KKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9hbGxEYXRhUmVjZWl2ZWQg
PSBhbGxEYXRhUmVjZWl2ZWQ7CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRh
KTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5z
ZXREYXRhKG1fbGF6eURlY29kZWRGcmFtZS5nZXRTa0JpdG1hcCgpLCBkYXRhLCBhbGxEYXRhUmVj
ZWl2ZWQpOworICAgIH0KK30KKworYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6aXNTaXplQXZh
aWxhYmxlKCkKK3sKKyAgICAvLyBtX2FjdHVhbERlY29kZXIgaXMgMCBvbmx5IGlmIGltYWdlIGRl
Y29kaW5nIGlzIGRlZmVycmVkIGFuZCB0aGF0CisgICAgLy8gbWVhbnMgaW1hZ2UgaGVhZGVyIGRl
Y29kZWQgc3VjY2Vzc2Z1bGx5IGFuZCBzaXplIGlzIGF2YWlsYWJsZS4KKyAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSA6IHRydWU7
Cit9CisKK0ludFNpemUgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPnNpemUoKSA6IG1fc2l6
ZTsKK30KKworSW50U2l6ZSBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCkgOiBtX3NpemU7Cit9CisKK3NpemVf
dCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCit7CisgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMTsKK30KKworaW50
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPnJlcGV0aXRpb25Db3VudCgp
IDogY0FuaW1hdGlvbk5vbmU7Cit9CisKK3ZvaWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNsZWFy
RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3sKKyAgICAvLyBJZiBp
bWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCB0aGVuIGZyYW1lIGJ1ZmZlciBjYWNoZSBpcyBtYW5h
Z2VkIGJ5CisgICAgLy8gdGhlIGNvbXBvc2l0b3IgYW5kIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgor
ICAgIGlmIChtX2FjdHVhbERlY29kZXIpCisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOworfQorCitib29sIERlZmVycmVkSW1h
Z2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFN5bmNocm9uaXplIHRoaXMgc3RhdGUgd2l0aCBJbWFnZURlY29kaW5nU3Rv
cmUgd2hlbiBpbWFnZSBpcworICAgIC8vIGFjdHVhbGx5IGRlY29kZWQuIFJldHVybiB0cnVlIGhl
cmUgaXMgY29ycmVjdCBpbiB0ZXJtcyBvZiByZW5kZXJpbmcgYnV0CisgICAgLy8gbWF5IG5vdCBn
byB0aHJvdWdoIHNvbWUgb3B0aW1pemVkIHJlbmRlcmluZyBjb2RlIHBhdGguCisgICAgcmV0dXJu
IG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgo
aW5kZXgpIDogdHJ1ZTsKK30KKwordW5zaWduZWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICAvLyBJZiBmcmFtZSBkZWNv
ZGluZyBpcyBkZWZlcnJlZCB0aGVuIGl0IGlzIG5vdCBtYW5hZ2VkIGJ5IE1lbW9yeUNhY2hlCisg
ICAgLy8gc28gcmV0dXJuIDAgaGVyZS4KKyAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9h
Y3R1YWxEZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCkgOiAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42YjMzZmUzNWUwZWM2YjMyMTVhOTQzZDI3NjE2ZjBjM2Q5YzM4YmQzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWZlcnJl
ZEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIERlZmVycmVkSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1
ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlciB7Citw
dWJsaWM6CisgICAgfkRlZmVycmVkSW1hZ2VEZWNvZGVyKCk7CisgICAgc3RhdGljIERlZmVycmVk
SW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJj
ZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7
CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZWZlcnJlZEltYWdlRGVjb2Rlcj4gY3JlYXRlRm9y
VGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4pOworCisgICAgU3RyaW5nIGZpbGVuYW1l
RXh0ZW5zaW9uKCkgY29uc3Q7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKKworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CisgICAg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3Q7CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKKyAgICBpbnQgcmVwZXRp
dGlvbkNvdW50KCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
KTsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29kZXIqIGFj
dHVhbERlY29kZXIpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGJv
b2wgbV9hbGxEYXRhUmVjZWl2ZWQ7CisgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gbV9hY3R1YWxE
ZWNvZGVyOworCisgICAgU3RyaW5nIG1fZmlsZW5hbWVFeHRlbnNpb247CisgICAgSW50U2l6ZSBt
X3NpemU7CisKKyAgICBJbWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMjc5MGRmOTBmOGZmNDYwMTIyMmVjYzQ2ZmRlYzQ5ZmRhODk1NzRkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKworI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgorI2luY2x1ZGUgIlNjYWxlZEltYWdl
RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKwor
I2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgeworCisvLyBVUkkgbGFiZWwgZm9yIGEgbGF6aWx5IGRlY29k
ZWQgU2tQaXhlbFJlZi4KK2NvbnN0IGNoYXIgbGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOwor
CitJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VPbk1haW5UaHJlYWQgPSAwOworCitzdGF0
aWMgdm9pZCBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdl
RGVjb2RpbmdTdG9yZSkKK3sKKyAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAg
ICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3JlOworfQorfSAvLyBu
YW1lc3BhY2UKKworSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorewor
fQorCitJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQoreworfQorCitJ
bWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJl
YWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIHNfaW5zdGFu
Y2VPbk1haW5UaHJlYWQ7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXpl
T25NYWluVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNldElu
c3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigp
KTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworfQor
Citib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6aXNMYXp5RGVjb2RlZChjb25zdCBTa0JpdG1hcCYg
Yml0bWFwKQoreworICAgIHJldHVybiBiaXRtYXAucGl4ZWxSZWYoKQorICAgICAgICAmJiBiaXRt
YXAucGl4ZWxSZWYoKS0+Z2V0VVJJKCkKKyAgICAgICAgJiYgIW1lbWNtcChiaXRtYXAucGl4ZWxS
ZWYoKS0+Z2V0VVJJKCksIGxhYmVsTGF6eURlY29kZWQsIHNpemVvZihsYWJlbExhenlEZWNvZGVk
KSk7Cit9CisKK1NrQml0bWFwIEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlTGF6eURlY29kZWRT
a0JpdG1hcChQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKK3sKKyAgICBBU1NFUlQo
Y2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIFNrSVNpemUgZnVsbFNpemUgPSBTa0lTaXpl
OjpNYWtlKGRlY29kZXItPnNpemUoKS53aWR0aCgpLCBkZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIEFTU0VSVCghZnVsbFNpemUuaXNFbXB0eSgpKTsKKworICAgIFNrSVJlY3QgZnVsbFJl
Y3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShmdWxsU2l6ZSk7CisKKyAgICAvLyBDcmVhdGVzIGEgbGF6
aWx5IGRlY29kZWQgU2tQaXhlbFJlZiB0aGF0IHJlZmVyZW5jZXMgdGhlIGVudGlyZSBpbWFnZSB3
aXRob3V0IHNjYWxpbmcuCisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBmdWxsU2l6
ZS5oZWlnaHQoKSk7CisgICAgYml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhl
bFJlZihJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZGVjb2RlciksIGZ1bGxTaXplLCBmdWxs
UmVjdCkpLT51bnJlZigpOworCisgICAgLy8gVXNlIFVSSSB0byBpZGVudGlmeSB0aGlzIGlzIGEg
bGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExhenlEZWNvZGluZ1BpeGVsUmVmLgor
ICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBhY3R1YWwgVVJJIGlzIG1vcmUgdXNlZnVsLgorICAgIGJp
dG1hcC5waXhlbFJlZigpLT5zZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7CisKKyAgICAvLyBJbmZv
cm0gdGhlIGJpdG1hcCB0aGF0IHdlIHdpbGwgbmV2ZXIgY2hhbmdlIHRoZSBwaXhlbHMuIFRoaXMg
aXMgYSBwZXJmb3JtYW5jZSBoaW50CisgICAgLy8gc3Vic3lzdGVtcyB0aGF0IG1heSB0cnkgdG8g
Y2FjaGUgdGhpcyBiaXRtYXAgKGUuZy4gcGljdHVyZXMsIHBpcGVzLCBncHUsIHBkZiwgZXRjLikK
KyAgICBiaXRtYXAuc2V0SW1tdXRhYmxlKCk7CisKKyAgICAvLyBGSVhNRTogU2V0dGluZyBiaXRt
YXAuc2V0SXNPcGFxdWUoKSBpcyBiaWcgcGVyZm9ybWFuY2UgZ2FpbiBpZiBwb3NzaWJsZS4gV2Ug
Y2FuCisgICAgLy8gZG8gc28gc2FmZWx5IGlmIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQgYW5k
IGl0IGlzIGEgSlBFRyBpbWFnZSwgb3IgaW1hZ2Ugd2FzCisgICAgLy8gZGVjb2RlZCBiZWZvcmUu
CisKKyAgICByZXR1cm4gYml0bWFwOworfQorCitTa0JpdG1hcCBJbWFnZURlY29kaW5nU3RvcmU6
OnJlc2l6ZUxhenlEZWNvZGVkU2tCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAg
IEFTU0VSVChjYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgTGF6eURlY29kaW5nUGl4ZWxS
ZWYqIHBpeGVsUmVmID0gc3RhdGljX2Nhc3Q8TGF6eURlY29kaW5nUGl4ZWxSZWYqPihiaXRtYXAu
cGl4ZWxSZWYoKSk7CisgICAgQVNTRVJUKCFwaXhlbFJlZi0+aXNTY2FsZWQocGl4ZWxSZWYtPmZy
YW1lR2VuZXJhdG9yKCktPmZ1bGxTaXplKCkpICYmICFwaXhlbFJlZi0+aXNDbGlwcGVkKCkpOwor
CisgICAgaW50IHJvd0J5dGVzID0gMDsKKyAgICByb3dCeXRlcyA9IFNrQml0bWFwOjpDb21wdXRl
Um93Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTaXplLndpZHRoKCkp
OworCisgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKKyAgICByZXNpemVkQml0bWFwLnNldENv
bmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBz
Y2FsZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKKyAgICByZXNpemVkQml0bWFwLnNldFBp
eGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+ZnJhbWVHZW5lcmF0b3Io
KSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVucmVmKCk7CisKKyAgICAvLyBTZWUgY29t
bWVudHMgaW4gY3JlYXRlTGF6eURlY29kZWRTa0JpdG1hcCgpLgorICAgIHJlc2l6ZWRCaXRtYXAu
c2V0SW1tdXRhYmxlKCk7CisgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXA7Cit9CisKK3ZvaWQgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpzZXREYXRhKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBBU1NF
UlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgICBpZiAoaXNMYXp5RGVjb2RlZChiaXRtYXAp
KQorICAgICAgICBzdGF0aWNfY2FzdDxMYXp5RGVjb2RpbmdQaXhlbFJlZio+KGJpdG1hcC5waXhl
bFJlZigpKS0+ZnJhbWVHZW5lcmF0b3IoKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OworfQorCit2b2lkKiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tQaXhlbHMoUGFzc1JlZlB0cjxJ
bWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQoreworICAgIEFTU0VSVChjYWxsZWRP
blZhbGlkVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xvY2tlZFNrQml0bWFwLmlzTnVsbCgpKTsK
KworICAgIFNrSVNpemUgZnVsbFNpemUgPSBmcmFtZUdlbmVyYXRvci0+ZnVsbFNpemUoKTsKKwor
ICAgIC8vIFRoZSBjYWNoZSBvbmx5IHNhdmVzIHRoZSBmdWxsIHNpemUgaW1hZ2UgYXQgdGhlIG1v
bWVudC4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBmcmFtZUNhY2hlID0gbG9va3VwRnJhbWVD
YWNoZShmcmFtZUdlbmVyYXRvci0+aW1hZ2VJZCgpLCBmdWxsU2l6ZSk7CisgICAgU2tCaXRtYXAg
Yml0bWFwOworCisgICAgaWYgKCFmcmFtZUNhY2hlKSB7CisgICAgICAgIC8vIEZJWE1FOiBQaXhl
bHMgYXJlIG93bmVkIGJ5IHRoZSBJbWFnZURlY29kZXIgaW4gdGhlIGdlbmVyYXRvci4gRmluZAor
ICAgICAgICAvLyBhIHdheSB0byB0cmFuc2ZlciBvd25lcnNoaXAgdG8gb3VyIGNhY2hlLgorICAg
ICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGZyYW1lR2VuZXJhdG9yLT5kZWNvZGVyKCktPmZyYW1l
QnVmZmVyQXRJbmRleCgwKTsKKworICAgICAgICAvLyBTYXZlcyB0aGUgZnJhbWUgaW4gY2FjaGUg
aWYgdGhpcyBpcyBjb21wbGV0ZS4KKyAgICAgICAgaWYgKGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUuYXBwZW5k
KFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShmcmFtZUdlbmVyYXRvci0+aW1hZ2VJZCgpLCBm
dWxsU2l6ZSwgZnJhbWUtPmdldFNrQml0bWFwKCksIHRydWUpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBkZWNvZGluZyBlcnJvci4gUmVwb3J0IHRoaXMgdG8g
Qml0bWFwSW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVChmcmFtZUNhY2hlLT5pc0NvbXBsZXRlKCkpOworICAgICAgICBiaXRtYXAgPSBmcmFtZUNh
Y2hlLT5iaXRtYXAoKTsKKyAgICB9CisKKyAgICBpZiAoZnVsbFNpemUgIT0gc2NhbGVkU2l6ZSkg
eworICAgICAgICAvLyBJbWFnZSBzY2FsaW5nIGlzIGRvbmUgb24tdGhlLWZseSBhbmQgc2NhbGVk
IGltYWdlIGlzIGRlc3Ryb3llZAorICAgICAgICAvLyBhZnRlciB1c2UuCisgICAgICAgIC8vIEZJ
WE1FOiBSZXNpemUganVzdCB0aGUgcmVxdWVzdGVkIGZyYWdtZW50LgorICAgICAgICBtX2xvY2tl
ZFNrQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJ
bWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2Fs
ZWRTaXplLmhlaWdodCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9sb2NrZWRTa0JpdG1hcCA9
IGJpdG1hcDsKKyAgICBtX2xvY2tlZFNrQml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4g
bV9sb2NrZWRTa0JpdG1hcC5nZXRBZGRyKHNjYWxlZFN1YnNldC54KCksIHNjYWxlZFN1YnNldC55
KCkpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrUGl4ZWxzKCkKK3sKKyAg
ICBBU1NFUlQoY2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICAgIG1fbG9ja2VkU2tCaXRtYXAu
dW5sb2NrUGl4ZWxzKCk7CisgICAgbV9sb2NrZWRTa0JpdG1hcC5yZXNldCgpOworfQorCit2b2lk
IEltYWdlRGVjb2RpbmdTdG9yZTo6ZnJhbWVHZW5lcmF0b3JCZWluZ0Rlc3Ryb3llZChJbWFnZUZy
YW1lR2VuZXJhdG9yKiBmcmFtZUdlbmVyYXRvcikKK3sKKyAgICBBU1NFUlQoY2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKKworICAgIGRlbGV0ZUZyYW1lQ2FjaGUoZnJhbWVHZW5lcmF0b3ItPmltYWdl
SWQoKSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVhZCgpICYm
IGlzTWFpblRocmVhZCgpOworfQorCitTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5n
U3RvcmU6Omxvb2t1cEZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpbWFn
ZUlkLCBzY2FsZWRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVbaV0uZ2V0
KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6
ZGVsZXRlRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZUNhY2hl
W2ldLT5pc0VxdWFsKGltYWdlSWQpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3Zl
KGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2
YTVkOTI5NDVmNjc3MTNiY2E4NjI0ZWZjNzhjZTE2MTViNjY5ZmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29kaW5n
U3RvcmVfaAorI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAorCisjaW5jbHVkZSAiU2tCaXRt
YXAuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CitjbGFz
cyBTY2FsZWRJbWFnZUZyYWdtZW50OworY2xhc3MgU2hhcmVkQnVmZmVyOworCisvLyBUaGlzIGNs
YXNzIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZCBvbiBtYWluIHRocmVhZC4gVGhlcmUgd2lsbCBi
ZSBhbgorLy8gaW5zdGFuY2Ugb24gaW1wbCB0aHJlYWQgaW4gdGhlIGZ1dHVyZSBidXQgdGhhdCBw
YXJ0IG9mIGltcGxlbWVudGF0aW9uCisvLyBpcyBpbmNvbXBsZXRlLiBTZWUgYnVnOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKKy8vIGZvciBkZXRhaWxzLgor
Y2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbWFn
ZURlY29kaW5nU3RvcmUpOyB9CisgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgpOworCisgICAgc3Rh
dGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRv
d24oKTsKKyAgICBzdGF0aWMgYm9vbCBpc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJik7CisK
KyAgICBTa0JpdG1hcCBjcmVhdGVMYXp5RGVjb2RlZFNrQml0bWFwKFBhc3NPd25QdHI8SW1hZ2VE
ZWNvZGVyPik7CisgICAgU2tCaXRtYXAgcmVzaXplTGF6eURlY29kZWRTa0JpdG1hcChjb25zdCBT
a0JpdG1hcCYsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxl
ZFN1YnNldCk7CisKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2tCaXRtYXAmLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIFlvdSBtYXkg
b25seSBsb2NrIG9uZSBzZXQgb2YgcGl4ZWxzIGF0IGEgdGltZTsgb3ZlcmxhcHBpbmcgbG9jayBj
YWxscyBhcmUgbm90IGFsbG93ZWQuCisgICAgdm9pZCogbG9ja1BpeGVscyhQYXNzUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIHZvaWQgdW5sb2NrUGl4ZWxzKCk7CisKKyAgICB2b2lk
IGZyYW1lR2VuZXJhdG9yQmVpbmdEZXN0cm95ZWQoSW1hZ2VGcmFtZUdlbmVyYXRvciopOworCitw
cml2YXRlOgorICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOworICAgIGJvb2wgY2FsbGVkT25WYWxp
ZFRocmVhZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlRnJhbWVHZW5lcmF0b3IoUGFzc093blB0
cjxJbWFnZURlY29kZXI+KTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb29rdXBGcmFtZUNh
Y2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKKyAgICB2
b2lkIGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpOworCisgICAgVmVjdG9yPE93blB0cjxT
Y2FsZWRJbWFnZUZyYWdtZW50PiA+IG1fZnJhbWVDYWNoZTsKKworICAgIFNrQml0bWFwIG1fbG9j
a2VkU2tCaXRtYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzJmMjk5MTUyNTA0YTVm
NjU2YTliN2YxZmZmZGUxZDMzMzNiNTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
CituYW1lc3BhY2UgeworCisvLyBBbiB1bmlxdWUgSUQgZm9yIGFuIGltYWdlIGZpbGUuCitpbnQg
c19uZXh0SW1hZ2VJZCA9IDA7CisKK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzT3duUHRy
PEltYWdlRGVjb2Rlcj4gZGVjb2RlcikKKyAgICA6IG1fZGVjb2RlcihkZWNvZGVyKQoreworICAg
IG1fZnVsbFNpemUgPSBTa0lTaXplOjpNYWtlKG1fZGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIG1f
ZGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBtX2ltYWdlSWQgPSBzX25leHRJbWFnZUlk
Kys7Cit9CisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKK3sK
KyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpKQorICAg
ICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCktPmZyYW1lR2Vu
ZXJhdG9yQmVpbmdEZXN0cm95ZWQodGhpcyk7Cit9CisKK0ltYWdlRGVjb2RlciogSW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6ZGVjb2RlcigpCit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKK30K
Kwordm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOwor
ICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0
KCksIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRnJhbWVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2QzMjZiN2FlNzEyMDkyN2ZiYmUz
NDJmNGNiZTUwNjUyYTFkOGVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRnJhbWVHZW5lcmF0b3JfaAorI2RlZmluZSBJ
bWFnZUZyYW1lR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgIlNrVHlwZXMuaCIKKyNpbmNsdWRlICJT
a1NpemUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBT
aGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3IgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBk
ZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKGRlY29kZXIpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbWFnZUZyYW1lR2VuZXJh
dG9yKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPik7CisgICAgfkltYWdlRnJhbWVHZW5lcmF0b3Io
KTsKKworICAgIC8vIENyZWF0ZXMgdGhlIGltYWdlIGRlY29kZXIgaWYgbmVlZGVkLgorICAgIElt
YWdlRGVjb2RlciogZGVjb2RlcigpOworICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIGNvbnN0IFNrSVNpemUmIGZ1
bGxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsU2l6ZTsgfQorICAgIGludCBpbWFnZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZUlkOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEltYWdl
RGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAg
ICBTa0lTaXplIG1fZnVsbFNpemU7CisgICAgaW50IG1faW1hZ2VJZDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTZkZDA5MWUwZDlmOGMxNDBiN2RiZDczMWQ3MzYyMThhZDBmYjkzMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhenlEZWNvZGluZ1BpeGVsUmVmLmgiCisKKyNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
KyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6
eURlY29kaW5nUGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdl
bmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVk
U3Vic2V0KQorICAgIDogU2tQaXhlbFJlZigwKQorICAgICwgbV9mcmFtZUdlbmVyYXRvcihmcmFt
ZUdlbmVyYXRvcikKKyAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9zY2Fs
ZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQoreworfQorCitMYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxh
enlEZWNvZGluZ1BpeGVsUmVmKCkKK3sKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNTY2FsZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZ1
bGxTaXplICE9IG1fc2NhbGVkU2l6ZTsKK30KKworYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6
aXNDbGlwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0g
bV9zY2FsZWRTdWJzZXQud2lkdGgoKSB8fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2Fs
ZWRTdWJzZXQuaGVpZ2h0KCk7Cit9CisKK3ZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxv
Y2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5s
b2NrUGl4ZWxzKG1fZnJhbWVHZW5lcmF0b3IsIG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQp
OworfQorCit2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlT25NYWluVGhyZWFkKCktPnVubG9ja1BpeGVscygpOworfQorCitib29sIExhenlEZWNvZGlu
Z1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhYjljY2M0Y2IxMTFmMjc2NGY3MjM3MDY3NTFhNWVjZjEz
Yzc2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIExhenlEZWNvZGluZ1BpeGVsUmVmX2gKKyNkZWZpbmUgTGF6eURlY29kaW5nUGl4
ZWxSZWZfaAorCisjaW5jbHVkZSAiU2tGbGF0dGVuYWJsZUJ1ZmZlcnMuaCIKKyNpbmNsdWRlICJT
a1BpeGVsUmVmLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisK
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SW1hZ2VGcmFtZUdlbmVyYXRvcjsKKworY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJs
aWMgU2tQaXhlbFJlZiB7CitwdWJsaWM6CisgICAgTGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1Jl
ZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29u
c3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKKyAgICB2aXJ0dWFsIH5MYXp5RGVjb2RpbmdQaXhl
bFJlZigpOworCisgICAgU0tfREVDTEFSRV9VTkZMQVRURU5BQkxFX09CSkVDVCgpCisKKyAgICBQ
YXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGZyYW1lR2VuZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZUdlbmVyYXRvcjsgfQorICAgIGJvb2wgaXNTY2FsZWQoY29uc3QgU2tJU2l6
ZSYgZnVsbFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNDbGlwcGVkKCkgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICAvLyBTa1BpeGVsUmVmIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCogb25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25Vbmxv
Y2tQaXhlbHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb25Mb2NrUGl4ZWxzQXJlV3JpdGFibGUoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9mcmFt
ZUdlbmVyYXRvcjsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBTa0lSZWN0IG1fc2Nh
bGVkU3Vic2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF6
eURlY29kaW5nUGl4ZWxSZWZfaF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTc0ZTZmZjg0N2VjNWI1ZGQ0Njk1OGYyMGJkNDgxMjkzOWJkMzU3MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nj
YWxlZEltYWdlRnJhZ21lbnQuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21l
bnQoKQoreworfQorCitTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGlu
dCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0
bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUpCisgICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKKyAg
ICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorICAgICwgbV9iaXRtYXAoYml0bWFwKQorICAg
ICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCit7Cit9CisKK2Jvb2wgU2NhbGVkSW1hZ2VGcmFn
bWVudDo6aXNFcXVhbChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaW1hZ2VJZCA9PSBtX2ltYWdlSWQgJiYgc2NhbGVkU2l6ZSA9PSBt
X3NjYWxlZFNpemU7Cit9CisKK2Jvb2wgU2NhbGVkSW1hZ2VGcmFnbWVudDo6aXNFcXVhbChpbnQg
aW1hZ2VJZCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW1hZ2VJZCA9PSBtX2ltYWdlSWQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41YjdmZmM5NjAxNGUwNTczZTgzNTA3ODAyYjY2ZjM0ZDliY2QzZjZkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nh
bGVkSW1hZ2VGcmFnbWVudC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNj
YWxlZEltYWdlRnJhZ21lbnRfaAorI2RlZmluZSBTY2FsZWRJbWFnZUZyYWdtZW50X2gKKworI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tSZWN0LmgiCisjaW5jbHVkZSAiU2tTaXpl
LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFNjYWxlZEltYWdlRnJhZ21lbnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdl
LiBJdCBpcyBpZGVudGlmaWVkCisvLyBieSB0d28gdGhpbmdzOgorLy8gMS4gSW1hZ2UgSUQuIFRo
ZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KKy8vIDIuIFNj
YWxlZCBpbWFnZSBzaXplLgorY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGludCBpbWFn
ZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBi
b29sIGlzQ29tcGxldGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjYWxl
ZEltYWdlRnJhZ21lbnQoaW1hZ2VJZCwgc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7
CisgICAgfQorCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJ
U2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICB+U2NhbGVkSW1h
Z2VGcmFnbWVudCgpOworCisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0bWFwOyB9CisgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFw
OyB9CisKKyAgICBib29sIGlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpIGNvbnN0OworICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3Q7CisgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisKK3ByaXZh
dGU6CisgICAgaW50IG1faW1hZ2VJZDsKKyAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKKyAgICBT
a0JpdG1hcCBtX2JpdG1hcDsKKyAgICBib29sIG1faXNDb21wbGV0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggMTg2MmEyYWZj
NmUzNTA0OTM2ZGNiYzkwM2NlNmYyNGQ0YWFmNTBhZC4uZDA4NGVjOGY0MWNmYWY0NjRjOGI2NDg2
NGZmZDQwNTZhNzQzYTI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcApAQCAtNDAsNiArNDAsMTEgQEAK
ICNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXRp
dmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCkBAIC03Myw2ICs3OCwxMSBAQCBib29sIE5h
dGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFn
ZVNpemUsIGNvbnN0IFNrSQogCiBTa0JpdG1hcCBOYXRpdmVJbWFnZVNraWE6OnJlc2l6ZWRCaXRt
YXAoY29uc3QgU2tJU2l6ZSYgc2NhbGVkSW1hZ2VTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRJ
bWFnZVN1YnNldCkgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAoSW1h
Z2VEZWNvZGluZ1N0b3JlOjppc0xhenlEZWNvZGVkKG1faW1hZ2UpKQorICAgICAgICByZXR1cm4g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpLT5yZXNpemVMYXp5RGVj
b2RlZFNrQml0bWFwKG1faW1hZ2UsIHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQp
OworI2VuZGlmCisKICAgICBpZiAoIWhhc1Jlc2l6ZWRCaXRtYXAoc2NhbGVkSW1hZ2VTaXplLCBz
Y2FsZWRJbWFnZVN1YnNldCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRDYWNoZSA9IGlzRGF0YUNv
bXBsZXRlKCkKICAgICAgICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzY2FsZWRJbWFn
ZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggZmM4MmE1YzI1YWQ3OGU4
NzdkYzk5MTg4ZTlmZGIxZTg1YjFhZDI3Yy4uOWY2OTdhODRhYjA5YWZiYWMzYjYyYWUzZmNlNTY2
YzRmYjZkNzQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTE0OCw2ICsxNDgsMTggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5m
byopIGNvbnN0OwogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZvaWQgc2V0U2tC
aXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
aXRtYXAgPSBOYXRpdmVJbWFnZVNraWEoYml0bWFwLCAxKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IFNrQml0bWFwJiBnZXRTa0JpdG1hcCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICAgICAgaW50IGhlaWdodCgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggMjRjYWUyOThmZjUwNDkx
ZmVjMTNmYWI0M2JkOTA4Njk2Njc4NmMwZi4uNjQwNjNhMDIxYzQ2NzE0ZDlkNTk4NTZhY2VjNDIy
ZWY4N2JkZTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2MSw3
IEBACiAgICAgICAgICAgICAndGVzdHMvQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RC5oJywKICAgICAgICAgICAgICd0ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9EZWNpbWFsVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVy
cmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZS5oJywKQEAgLTc4
LDggKzc5LDkgQEAKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAotICAgICAgICAgICAgJ3Rlc3RzL0tV
UkxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAg
ICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9L
VVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9MaXN0ZW5lckxlYWtUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU2V0dGluZ3MuaAppbmRleCBhYmQ4NGVkMGU1N2FmZTk4MzFmZmZkMDYzOTFlNDI5MWU1ZGMy
YmU0Li4wOGNkMTk3NDVjYzcwYWFlMzc5Yzg5NTFlNjRhMTQ4MjdmNmE0NTQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTg2LDYgKzg2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25z
dCBXZWJTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShX
ZWJTaXplKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVk
KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJs
ZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VTdXBwb3J0c01vdXNlKGJv
b2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNUb3VjaChib29sKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAppbmRleCBlMzU3ZjI4ZTQyODNh
NzAwMTU2ZDZjZmFiZDUwZWRiM2VkMmY3ODk3Li4yNDNkMDhlNjI5NDgwNTY5NzkzNjJkZmNmODU4
YzZmZjg1ZThhNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJL
aXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKIAor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBw
b3J0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIu
aCIKQEAgLTE2NSw2ICsxNjYsNyBAQCB2b2lkIHNodXRkb3duKCkKICAgICB9CiAjZW5kaWYKICAg
ICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpzaHV0ZG93bigpOwogICAgIFBsYXRmb3JtOjpzaHV0ZG93bigpOwogICAgIFdlYlBy
ZXJlbmRlcmluZ1N1cHBvcnQ6OnNodXRkb3duKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCA5ODhjNWU2NmIxZTEzYzE2ZTlmNjdk
MDJhNDdjYTA3OGRmMzg2MDk4Li5kYzc3MzZkOWEyMWIwOTA3NGNmYjFkOTE1OWNiOGY3YjE5Yzkw
OTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAogI2lu
Y2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3Jl
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+
CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgpAQCAtNTUsNiArNTYsNyBAQCBXZWJTZXR0aW5n
c0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5
RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9nZXN0
dXJlVGFwSGlnaGxpZ2h0RW5hYmxlZCh0cnVlKQogICAgICwgbV9hdXRvWm9vbUZvY3VzZWROb2Rl
VG9MZWdpYmxlU2NhbGUoZmFsc2UpCisgICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAg
ICAsIG1fbWF4VW50aWxlZExheWVyU2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKIHsKQEAgLTQ4MCw2
ICs0ODIsMTUgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKICAgICBtX3NldHRpbmdzLT5zZXREZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1h
Z2VEZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9kZWZlcnJlZElt
YWdlRGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQgJiYgIWVuYWJsZWQpCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1
dGRvd24oKTsKKyAgICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOwor
fQorCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3NldHRpbmdzLT5zZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDExNjlj
MzFjZjNlYjJhZTgwZmRhMWY4ODVjZDA4NjkxNjhmNDZhNDEuLjkwNTFiYWI2MTdmODZiZmUwNDli
MGI3N2U2ZTJhZGYwMmQ3MmQ2NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5oCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJik7CiAgICAgdmly
dHVhbCB2b2lkIHNldERlZmF1bHRUaWxlU2l6ZShXZWJTaXplKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldERl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERl
dmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1
cHBvcnRzTW91c2UoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERldmljZVN1cHBvcnRzVG91
Y2goYm9vbCk7CkBAIC0xNzgsNiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlE
ZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3I7CiAgICAgYm9vbCBtX2dlc3R1cmVU
YXBIaWdobGlnaHRFbmFibGVkOwogICAgIGJvb2wgbV9hdXRvWm9vbUZvY3VzZWROb2RlVG9MZWdp
YmxlU2NhbGU7CisgICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAg
V2ViU2l6ZSBtX2RlZmF1bHRUaWxlU2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVy
U2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVy
cmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDgyNTQ5ODA1Yzc2YTgxYmUz
MWEzZGY0OGM0NzQxZTMyZTRlZGI5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDEw
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmVycmVkSW1h
Z2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRl
ICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjaW5j
bHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0RldmljZS5oIgorI2luY2x1ZGUgIlNrUGlj
dHVyZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBw
dWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKCk7
CisgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSg2MDAsIDYxMyk7CisgICAgICAgIG1f
bGF6eURlY29kZXIgPSBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlRm9yVGVzdGluZyhhZG9w
dFB0cihtX2FjdHVhbERlY29kZXIpKTsKKyAgICAgICAgbV9jYW52YXMuc2V0RGV2aWNlKG5ldyBT
a0RldmljZShTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDEwMCwgMTAwKSktPnVucmVmKCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICAv
LyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgor
ICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFsRGVjb2RlcjsKKyAgICBPd25QdHI8RGVmZXJy
ZWRJbWFnZURlY29kZXI+IG1fbGF6eURlY29kZXI7CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsK
KyAgICBTa0NhbnZhcyBtX2NhbnZhczsKK307CisKK1RFU1RfRihEZWZlcnJlZEltYWdlRGVjb2Rl
clRlc3QsIGRyYXdJbnRvU2tQaWN0dXJlKQoreworICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+
IGltYWdlKGFkb3B0UHRyKG1fbGF6eURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKS0+YXNO
ZXdOYXRpdmVJbWFnZSgpKSk7CisgICAgRVhQRUNUX0VRKG1fYWN0dWFsRGVjb2Rlci0+c2l6ZSgp
LndpZHRoKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEobV9hY3R1
YWxEZWNvZGVyLT5zaXplKCkuaGVpZ2h0KCksIGltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGltYWdlLT5iaXRtYXAoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RS
VUUoaW1hZ2UtPmJpdG1hcCgpLmlzSW1tdXRhYmxlKCkpOworCisgICAgU2tDYW52YXMqIHRlbXBD
YW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoMTAwLCAxMDApOworICAgIHRlbXBDYW52
YXMtPmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKKyAgICBtX3BpY3R1cmUuZW5k
UmVjb3JkaW5nKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQoKSk7CisKKyAgICBtX2NhbnZhcy5kcmF3UGljdHVyZShtX3BpY3R1cmUp
OworICAgIEVYUEVDVF9FUSgxLCBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENv
dW50KCkpOworfQorCitURVNUX0YoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LCBkcmF3U2NhbGVk
SW50b1NrUGljdHVyZSkKK3sKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFnZShhZG9w
dFB0cihtX2xhenlEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCktPmFzTmV3TmF0aXZlSW1h
Z2UoKSkpOworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IGltYWdlLT5yZXNpemVkQml0bWFw
KFNrSVNpemU6Ok1ha2UoNTAsIDUxKSwgU2tJUmVjdDo6TWFrZVdIKDUwLCA1MSkpOworICAgIEVY
UEVDVF9GQUxTRShzY2FsZWRCaXRtYXAuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHNjYWxl
ZEJpdG1hcC5pc0ltbXV0YWJsZSgpKTsKKyAgICBFWFBFQ1RfRVEoNTAsIHNjYWxlZEJpdG1hcC53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoNTEsIHNjYWxlZEJpdG1hcC5oZWlnaHQoKSk7CisgICAg
RVhQRUNUX0VRKDAsIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7
CisKKyAgICBTa0NhbnZhcyogdGVtcENhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZygx
MDAsIDEwMCk7CisgICAgdGVtcENhbnZhcy0+ZHJhd0JpdG1hcChzY2FsZWRCaXRtYXAsIDAsIDAp
OworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9hY3R1
YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpKTsKKworICAgIG1fY2FudmFzLmRy
YXdQaWN0dXJlKG1fcGljdHVyZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fYWN0dWFsRGVjb2Rlci0+
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVjZjIzNzQ0ZTUxZmRlNDNjMTY0YjMxMTAxZDA1YjMzMDczMmMyZmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAt
MCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1
ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tJ
bWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBNb2NrSW1h
Z2VEZWNvZGVyKCkKKyAgICAgICAgOiBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhUHJl
bXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkKKyAg
ICAgICAgLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KDApCisgICAgeyB9CisKKyAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIm1vY2siOworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dDsKKworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KTsKKyAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgfQorCisgICAg
aW50IGZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTW9ja0lt
YWdlRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggYzIwZTFlOGVhOWZkODBiNTE3YzgwOTU5MDEwMmM0M2M1OGRmZWEwZi4uOWE0YTBm
NTE0NDVkNDQ2NGFlNDgyNDQyYjMyNDU0ZWViOWM3ZGUxZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA4
ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIC0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29k
aW5nIHRvIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5k
ZXJUcmVlLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6Cisg
ICAgICAgIChUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVzdFNoZWxsOjpzZXREZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
V2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRv
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgor
ICAgICAgICAoV2ViUHJlZmVyZW5jZXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgIChDaHJvbWl1bVBvcnQudmlydHVh
bF90ZXN0X3N1aXRlcyk6CisKIDIwMTItMTAtMTkgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV1RSXSByZW5kZXJUb09mZnNjcmVlbkJ1ZmZlciBz
aG91bGQgbm90IGJlIHNldCBpZiB0aGUgcmVhbCByZW5kZXIgbG9vcCBpcyBhY3RpdmUKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAz
MGNlMjg4NTFmYzlhOWE0NmI4YjYzZTZkYmQwMGRhMWMzZmVhODM4Li41YTMyMTA0NDk2Zjc5YjFm
MmE0NTQ4YjM2NTM0NTZiNDA2MWZhNmI1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkUGFpbnRpbmdbXSA9ICItLWVuYWJsZS1hY2Nl
bGVyYXRlZC1wYWluCiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7CiBzdGF0
aWMgY29uc3QgY2hhciBvcHRpb25Vc2VHcmFwaGljc0NvbnRleHQzREltcGxlbWVudGF0aW9uW10g
PSAiLS11c2UtZ3JhcGhpY3MtY29udGV4dC0zZC1pbXBsZW1lbnRhdGlvbj0iOwogc3RhdGljIGNv
bnN0IGNoYXIgb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nW10gPSAiLS1lbmFibGUtcGVyLXRp
bGUtcGFpbnRpbmciOworc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlRGVmZXJyZWRJbWFn
ZURlY29kaW5nW10gPSAiLS1lbmFibGUtZGVmZXJyZWQtaW1hZ2UtZGVjb2RpbmciOwogCiBzdGF0
aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwogc3RhdGlj
IGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7CkBAIC0x
MzMsNiArMTM0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBib29s
IGRlZmVycmVkMkRDYW52YXNFbmFibGVkID0gZmFsc2U7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBh
aW50aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9
IGZhbHNlOworICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGZhbHNlOwog
ICAgIGJvb2wgc3RyZXNzT3B0ID0gZmFsc2U7CiAgICAgYm9vbCBzdHJlc3NEZW9wdCA9IGZhbHNl
OwogICAgIGJvb2wgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gZmFsc2U7CkBAIC0xODMsNiArMTg1
LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJVbmtub3duIEdyYXBoaWNDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gJXNc
biIsIGltcGxlbWVudGF0aW9uLmNfc3RyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50
ID09IG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZykKICAgICAgICAgICAgIHBlclRpbGVQYWlu
dGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25F
bmFibGVEZWZlcnJlZEltYWdlRGVjb2RpbmcpCisgICAgICAgICAgICBkZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9u
U3RyZXNzT3B0KQogICAgICAgICAgICAgc3RyZXNzT3B0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBp
ZiAoYXJndW1lbnQgPT0gb3B0aW9uU3RyZXNzRGVvcHQpCkBAIC0yMjIsNiArMjI2LDcgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyRENhbnZhc0VuYWJsZWQpOwogICAgICAgICBzaGVsbC5z
ZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZCk7
CiAgICAgICAgIHNoZWxsLnNldFBlclRpbGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5n
RW5hYmxlZCk7CisgICAgICAgIHNoZWxsLnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQo
ZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgICAgIHNoZWxsLnNldEphdmFTY3Jp
cHRGbGFncyhqYXZhU2NyaXB0RmxhZ3MpOwogICAgICAgICBzaGVsbC5zZXRTdHJlc3NPcHQoc3Ry
ZXNzT3B0KTsKICAgICAgICAgc2hlbGwuc2V0U3RyZXNzRGVvcHQoc3RyZXNzRGVvcHQpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggNWY1Mjc4NTkx
MjJlYTdhOGQ5NWRlZGM1ZGFlYTZjM2Y3YTY5NDBkZS4uZTIxZjY1NDYwYWI2Y2IwOTdkZDhkM2Yy
NmIzMjJkNTY1NzMzODgwYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGwuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQogICAg
ICwgbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fZGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVk
KGZhbHNlKQorICAgICwgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGZhbHNlKQogICAg
ICwgbV9zdHJlc3NPcHQoZmFsc2UpCiAgICAgLCBtX3N0cmVzc0Rlb3B0KGZhbHNlKQogICAgICwg
bV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCBUZXN0U2hl
bGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAg
ICBtX3ByZWZzLmRlZmVycmVkMmRDYW52YXNFbmFibGVkID0gbV9kZWZlcnJlZDJkQ2FudmFzRW5h
YmxlZDsKICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkID0gbV9hY2NlbGVy
YXRlZFBhaW50aW5nRW5hYmxlZDsKKyAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQgPSBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgbV9wcmVmcy5hcHBs
eVRvKCZ3ZWJWaWV3KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuaAppbmRleCA0NGI1YWUzODhjNjhkNjVkZTg5MGZjODAwZmVkNTIyOWVlYzJhMzI0Li4zOTI2
NjI0NDY5YjY4Y2NiYzg3NGI0OTFlYTQ4M2EwYjYzOTJjZTU1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMTM4LDYgKzEzOCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVy
cmVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRQ
YWludGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJs
ZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wp
OworICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQp
IHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQogI2lmIGRlZmlu
ZWQoT1NfV0lOKQogICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQuIFVzZWQgYnkg
dGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCiAgICAgSEFORExFIGZpbmlzaGVkRXZlbnQoKSB7
IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KQEAgLTIzNSw2ICsyMzYsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9kZWZlcnJlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIG1fYWNjZWxlcmF0
ZWRQYWludGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7Cisg
ICAgYm9vbCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7CiAgICAgV2ViUHJlZmVyZW5j
ZXMgbV9wcmVmczsKICAgICBib29sIG1fc3RyZXNzT3B0OwogICAgIGJvb2wgbV9zdHJlc3NEZW9w
dDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNw
cAppbmRleCAzYmMyY2RkOWYyYWU0MTcwYzMzYWQ2NDEwNmQ0YTdmMmQwOTAyMWY1Li41YzhjOTJj
OTk5NDI2NDRkZDE5YTQ5Yzk4ZTY2YzFhNGYwNmQ0NDRkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAg
dm9pZCBXZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGRlZmVycmVkMmRDYW52YXNFbmFibGVk
ID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKICAgICBm
b3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0Vu
YWJsZWQgPSBmYWxzZTsKICAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZh
bHNlOwogICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwogICAgIGNzc0N1c3RvbUZp
bHRlckVuYWJsZWQgPSBmYWxzZTsKQEAgLTIyNCw2ICsyMjUsNyBAQCB2b2lkIFdlYlByZWZlcmVu
Y2VzOjphcHBseVRvKFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJh
dGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKICAgICBzZXR0
aW5ncy0+c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoZGVmZXJyZWQyZENhbnZhc0VuYWJsZWQp
OwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChhY2NlbGVyYXRl
ZFBhaW50aW5nRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNl
dE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKG1lZGlhUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKTsKICAgICBzZXR0aW5ncy0+c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKG1vY2tT
Y3JvbGxiYXJzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFwcGx5RGVmYXVsdERldmljZVNj
YWxlRmFjdG9ySW5Db21wb3NpdG9yKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IGMzNjU1M2IzNTQ2
OTY0Yzc2ZjI5OTE2YTllYTliOWUyYTIzZTI0YjIuLmUwMzE1ZjJkMDdjMWU1Yjk4NTVmZTdiM2Fh
MmUxNGNmN2UxZTQwYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlByZWZlcmVuY2VzLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlcyB7
CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKICAgICBib29sIGRlZmVycmVk
MmRDYW52YXNFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRQYWludGluZ0VuYWJsZWQ7Cisg
ICAgYm9vbCBkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwogICAgIGJvb2wgbWVkaWFQbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmU7CiAgICAgYm9vbCBtb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7
CiAgICAgYm9vbCBjc3NDdXN0b21GaWx0ZXJFbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggYzMxMGViMTVi
MTk1NGRkZWRkYzMzM2I5ODBmNjY1ZDVmY2RiOTFjZS4uYTY5ZjVhODIyYWEzZmUzMjg0NmY5MTcw
MTE2NDE5M2NjMjIzOGY1MiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtLnB5CkBAIC0zOTAsNiArMzkwLDkgQEAgY2xhc3MgQ2hy
b21pdW1Qb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0ZSgncGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2NvbXBvc2l0aW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyctLWVuYWJsZS1zb2Z0d2FyZS1jb21wb3NpdGluZyddKSwKKyAgICAgICAgICAgIFZpcnR1YWxU
ZXN0U3VpdGUoJ3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFzdC9pbWFnZXMnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbJy0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nJywg
Jy0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nJywgJy0tZm9yY2UtY29tcG9zaXRpbmctbW9kZSdd
KSwKICAgICAgICAgXQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJhMTFkZjhjMWUyMzlkZjk2MjM1MmY5NDY3
OTdiNzg1ZWVmOWFjNDYuLmM0MTVlNGRmMDgxMWNlZDY3ZTU2ODM2NDA3M2QyNmMzOGFhOGM2MmMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wOS0wOCAgQWxwaGEgTGFtICA8aGNsYW1AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IGRlZmVycmVkIGltYWdl
IGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NDI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGluZyBhIHZpcnR1YWwgdGVzdCBzdWl0ZSBmb3IgQ2hyb21pdW0gdG8gdGVzdCBkZWZlcnJl
ZCBpbWFnZQorICAgICAgICBkZWNvZGluZy4KKworICAgICAgICBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzIHdpbGwgYmUgdGVzdGVkIHdpdGgKKyAgICAgICAg
LS1mb3JjZS1jb21wb3NpdGluZyAtLWVuYWJsZS1wZXItdGlsZS1wYWludGluZyAtLWVuYWJsZS1k
ZWZlcnJlZC1pbWFnZS1kZWNvZGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dDogQWRkZWQuCisKIDIwMTItMTAt
MTkgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gcmViYXNlbGluZSBmb3IgcjEzMTUwMy4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDYxMzViM2IzZWM4MzU3MjZlMTkz
YTRlNDVmZjcwOGU4ZTMyY2QwYjEuLjJlNWExZjVkNzJiNDJhOTVlZDI0NjRmYzVhYjE1MzE3MDY5
MzNiNGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNDAzNiw1ICs0MDM2LDI5IEBAIHdlYmtpdC5vcmcvYi85ODI1NyBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL2dwdS9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtZWxlbWVudC1pCiAKICMg
UmVzb3VyY2UgVGltaW5nIGlzIG5vdCBlbmFibGUgeWV0LCBza2lwIGl0Lgogd2Via2l0Lm9yZy9i
LzYxMTM4IGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlzc2lvbi9JbnRlbC9yZXNvdXJjZS10
aW1pbmcgWyBTa2lwIF0KLQogd2Via2l0Lm9yZy9iLzk5ODAyIFsgTW91bnRhaW5MaW9uIF0gZmFz
dC9mb3Jtcy90ZXh0LWNvbnRyb2wtaW50cmluc2ljLXdpZHRocy5odG1sIFsgRmFpbHVyZSBdCisK
KyMgVGhlc2UgdGVzdHMgYXJlIGZhaWxpbmcgYWxyZWFkeSBhbmQgYmVjYXVzZSBvZiB2aXJ0dWFs
IHRlc3Qgc3VpdGUgZm9yIGRlZmVycmVkCisjIGltYWdlIGRlY29kaW5nIHRoZXkgbmVlZCB0byBi
ZSBzdXBwcmVzc2VkIGFnYWluLgord2Via2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20t
YmZjYWNoZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLWNzcy5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVk
L2Zhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1sYW5kc2NhcGUuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9p
bWFnZXMvcGRmLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3N1cHBvcnQtYnJv
a2VuLWltYWdlLWRlbGVnYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2NvbG9yLWpwZWct
d2l0aC1jb2xvci1wcm9maWxlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2dp
Zi1sYXJnZS1jaGVja2VyYm9hcmQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMv
Z2lmLWxvb3AtY291bnQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzk0
MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvcGFpbnQt
c3VicmVjdC1ncmlkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0
MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL3BpeGVsLWNy
YWNrLWltYWdlLWJhY2tncm91bmQtd2Via2l0LXRyYW5zZm9ybS1zY2FsZS5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9lbWJlZC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2lt
YWdlcy9mYXZpY29uLWFzLWltYWdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0
MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFw
LWNpcmNsZS1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZv
Y3VzLXJpbmctb3V0bGluZS1jb2xvci1leHBsaWNpdGx5LWluaGVyaXRlZC1mcm9tLW1hcC5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVh
bC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1hcC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3It
bm90LWluaGVyaXRlZC1mcm9tLW1hcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQy
NDAgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9pbWFnZW1h
cC1mb2N1cy1yaW5nLW91dGxpbmUtY29sb3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
Lzk0MjQwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJyZWQvZmFzdC9pbWFnZXMvaW1h
Z2VtYXAtcG9seWdvbi1mb2N1cy1yaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi85
NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL29iamVj
dC1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9yZXBhaW50LXN1YnJlY3QtZ3JpZC5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvOTQyNDAgcGxhdGZvcm0vY2hyb21pdW0vdmly
dHVhbC9kZWZlcnJlZC9mYXN0L2ltYWdlcy9wYWxldHRlZC1wbmctd2l0aC1jb2xvci1wcm9maWxl
Lmh0bWwgWyBNaXNzaW5nIF0KK3dlYmtpdC5vcmcvYi85NDI0MCBwbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWZvY3VzLXJpbmctem9vbS5odG1s
IFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS92
aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2RlZmVycmVkL2Zhc3QvaW1hZ2VzL1JFQURNRS50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmY4ODJlYjA0MzJkNWZkMDBiODI4MWUyODhiMTk4OTk5Y2I3ZDg1MwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZGVmZXJy
ZWQvZmFzdC9pbWFnZXMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIgQEAKKyMgVGVzdCBzdWl0ZXMg
aW4gdGhpcyBkaXJlY3RvcnkgdGVzdCB0aGUgJ2RlZmVycmVkIGltYWdlIGRlY29kaW5nJyBjb2Rl
IHBhdGgKKyMgdGhyb3VnaCBDaHJvbWl1bSBEUlQuCg==
</data>
<flag name="review"
          id="183044"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>