<?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>226123</bug_id>
          
          <creation_ts>2021-05-21 16:32:26 -0700</creation_ts>
          <short_desc>Add `createCFArray` just like `createNSArray`</short_desc>
          <delta_ts>2021-05-28 16:33:19 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226038</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762654</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-21 16:32:26 -0700</bug_when>
    <thetext>When using ObjC one can just toll-free bridge to the equivalent `NS*` type and use `createNSArray`, but that assumes that there is an equivalent `NS*` type and that the code is in a place that can use ObjC (e.g. `.mm`).

As an example, this would have been useful in &lt;https://webkit.org/b/226038&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762697</commentid>
    <comment_count>1</comment_count>
      <attachid>429377</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-21 17:52:07 -0700</bug_when>
    <thetext>Created attachment 429377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762702</commentid>
    <comment_count>2</comment_count>
      <attachid>429380</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-21 18:11:50 -0700</bug_when>
    <thetext>Created attachment 429380
Patch

oops forgot new file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762718</commentid>
    <comment_count>3</comment_count>
      <attachid>429385</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-21 19:05:35 -0700</bug_when>
    <thetext>Created attachment 429385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762774</commentid>
    <comment_count>4</comment_count>
      <attachid>429385</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 23:05:40 -0700</bug_when>
    <thetext>Comment on attachment 429385
Patch

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

Looks pretty good, but may need some thought and improvement. In general we have a very high standard for these &quot;refactoring&quot; changes -- they really have to earn their right to be done in a way that changes with an immediate functional benefit do not. In the name of making things better, they can easily make them subtly worse.

&gt; Source/WTF/wtf/cf/LanguageCF.cpp:121
&gt; +            if (auto cfString = dynamic_cf_cast&lt;CFStringRef&gt;(item))
&gt; +                return httpStyleLanguageCode(cfString);

I suggest naming the local variable &quot;string&quot;, not &quot;cfString&quot;. There is nothing to disambiguate here.

&gt; Source/WTF/wtf/cf/VectorCF.h:45
&gt; +// Specialize the behavior of these functions by overloading the makeCFArrayElement
&gt; +// functions and makeVectorElement functions. The makeCFArrayElement function takes
&gt; +// a const&amp; to a collection element and can return either a RetainPtr&lt;CFTypeRef&gt; or a CFTypeRef
&gt; +// if the value is autoreleased. The makeVectorElement function takes an ignored
&gt; +// pointer to the vector element type, making argument-dependent lookup work, and a
&gt; +// CFTypeRef for the array element, and returns an Optional&lt;T&gt; of the the vector element,
&gt; +// allowing us to filter out array elements that are not of the expected type.
&gt; +//
&gt; +//    RetainPtr&lt;CFTypeRef&gt; makeCFArrayElement(const CollectionElementType&amp; collectionElement);
&gt; +//        -or-
&gt; +//    CFTypeRef makeCFArrayElement(const VectorElementType&amp; vectorElement);
&gt; +//
&gt; +//    Optional&lt;VectorElementType&gt; makeVectorElement(const VectorElementType*, CFTypeRef arrayElement);

It’s unpleasant to have this be a copied and pasted version of almost everything in the VectorCocoa.h header. We should strive to make them share more, rather than having them duplicate everything. There must be some way to take advantage of the toll-free bridging between the two or use templates.

I’m especially concerned because I consider VectorCocoa.h to be a work in progress that needs some improvement. It will be annoying to have to update two clones.

Given that CFTypeRef is not actually a distinct type, it’s actually just const void*, we need to give makeVectorElement a name that mentions CF. The same is not true of the Objective-C version, because id is a distinct type.

&gt; Source/WTF/wtf/cf/VectorCF.h:77
&gt; +    auto array = adoptCF(CFArrayCreateMutable(0, std::size(collection), &amp;kCFTypeArrayCallBacks));

I suggest nullptr rather than 0 for the first argument to CFArrayCreateMutable.

&gt; Source/WTF/wtf/cf/VectorCF.h:85
&gt; +    CFIndex count = CFArrayGetCount(array);

This will crash if array is nullptr. Is that the behavior we want? The NSArray versions don’t have that behavior.

&gt; Source/WTF/wtf/cf/VectorCF.h:100
&gt; +    CFIndex count = CFArrayGetCount(array);

This will crash if array is nullptr. Is that the behavior we want? The NSArray versions don’t have that behavior.

&gt; Source/WTF/wtf/text/WTFString.h:428
&gt; +WTF_EXPORT_PRIVATE Optional&lt;String&gt; makeVectorElement(const String*, CFTypeRef);

Already mentioned above, but because CFTypeRef isn’t really a type, it’s just a synonym for const void*, this function is dangerous. It means that anyone who tries to make a vector element from a const void* will use this function that assumes it’s a CFTypeRef. I think we need to consider whether there is a better solution that involves evidence that CF is involved. We simply can’t deduce that from the type const void*. Can fix this by coming up with a different name for this function.

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:70
&gt; +RetainPtr&lt;CFTypeRef&gt; makeCFArrayElement(const String&amp; vectorElement)
&gt; +{
&gt; +    return vectorElement.createCFString();
&gt; +}

This should be inlined in the header, not exported privately. It’s just a call to another function. We don’t want to compile a function that just calls another.

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:77
&gt; +Optional&lt;String&gt; makeVectorElement(const String*, CFTypeRef arrayElement)
&gt; +{
&gt; +    if (auto cfString = dynamic_cf_cast&lt;CFStringRef&gt;(arrayElement))
&gt; +        return String(cfString);
&gt; +    return WTF::nullopt;
&gt; +}

We should consider putting this in a header too. Pretty sure we’d like it inlined.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:490
&gt; +    auto captionLanguages = platformCaptionLanguages ? makeVector&lt;String&gt;(platformCaptionLanguages.get()) : Vector&lt;String&gt;();

This is not an improvement. We now allocate a vector just so we can append it to another vector. That is costly. Please restructure this code so we don’t allocate a temporary vector for this. I think that might just mean leaving this more or less alone. It was more efficient without creating an additional temporary vector. The correct idiom here would probably be to make appending a CFArray to a Vector possible, in much the way that we can append a CFStringRef to a StringBuilder. Allocating a copy is what we’re trying to avoid.

So I think I suggest leaving this code alone until we can use a better idiom without sacrificing performance.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:513
&gt; +    auto characteristics = platformCharacteristics ? makeVector&lt;String&gt;(platformCharacteristics.get()) : Vector&lt;String&gt;();

Ditto.

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:454
&gt; +    auto array = createCFArray(value, [] (const auto&amp; item) {
&gt; +        return adoptCF(CFNumberCreate(0, kCFNumberFloatType, &amp;item));
&gt; +    });

This should be &quot;float item&quot; rather than &quot;const auto&amp; item&quot;. It’s a case when we want to be explicit about the type, because the code just below takes a pointer, passes it to something that takes a const void* and relies on us to know we are passing a float.

It would be neat to use &quot;const auto&amp; item&quot; if the code below implicitly respected the type of what was passed, but that is not so in this case.

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:518
&gt; +    auto array = createCFArray(value, [] (const auto&amp; item) {
&gt; +        return adoptCF(CFNumberCreate(0, kCFNumberFloatType, &amp;item));
&gt; +    });

Ditto.

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:554
&gt; +        if (is&lt;PlatformCAAnimationWin&gt;(animation))
&gt; +            return downcast&lt;PlatformCAAnimationWin&gt;(*animation).m_animation;
&gt; +        return nullptr;

Usually in WebKit code we prefer early return:

    if (!is&lt;&gt;)
        return nullptr;
    return xxx;

The idea is that the check returns early so the main code moves down the left. An exception is where we want to guard the input.

&gt; Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp:56
&gt; +        if (auto data = checked_cf_cast&lt;CFDataRef&gt;(item))
&gt; +            return IPAddress::fromSockAddrIn6(*reinterpret_cast&lt;const struct sockaddr_in6*&gt;(CFDataGetBytePtr(data)));

It’s bizarre for us to check the type, CFDataRef, with a release assertion but then not check that the length is long enough. Not new, but we really should add that code, if we don’t trust the type passed in. Also unclear why it’s important to check the type of these items, but not of the array itself. Maybe the correct fix is to remove checked_cf_cast and use static_cast instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764998</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-28 16:33:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/78636823&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429377</attachid>
            <date>2021-05-21 17:52:07 -0700</date>
            <delta_ts>2021-05-21 18:16:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226123-20210521185206.patch</filename>
            <type>text/plain</type>
            <size>32017</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjUxMzliYzA5NDA2ZjkwNjFmNTVmOTFlNGI2MTczNzQ3MzY3NDYxOC4uMTdjZGExYmM1
ZjE3YWJjM2RiNzYxNWY4NzIzMTcxOGY4MzE4NzRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAy
MS0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGBjcmVhdGVDRkFycmF5YCBqdXN0IGxpa2UgYGNyZWF0ZU5TQXJyYXlgCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9jZi9WZWN0b3JDRi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6YWRkSWZWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6Y3Jl
YXRlQ0ZBcnJheSk6CisgICAgICAgIChXVEY6Om1ha2VWZWN0b3IpOgorCisgICAgICAgICogd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMpOgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgICog
d3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwOgorICAgICAgICAoV1RGOjptYWtlQ0ZBcnJheUVsZW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bWFrZVZlY3RvckVsZW1lbnQpOiBBZGRlZC4KKyAg
ICAgICAgQWRkIGhlbHBlcnMgZm9yIGNvbnZlcnRpbmcgYENGU3RyaW5nUmVmYDwtPmBXVEY6OlN0
cmluZ2AuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5oOgorICAgICAgICBEcml2ZS1ieTog
QWRkIGBMT0dfSUZgIHRvIG1hdGNoIGBSRUxFQVNFX0xPR19JRmAuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIFVuYWJsZSB0byB1cGxvYWQgZmlsZXMgdGhhdCBhcmUgc3RvcmVkIGluIHRo
ZSBjbG91ZCAod2l0aG91dCBhIGxvY2FsIGNvcHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYwNzkyZTJkZmQ1
NTVkYTVkOWUwZTY3MmQxNDllOTAxMzlkM2U5OS4uYzM0YWJiZDQ0NzcyNmJjNDc1MDA3NTUwOWRj
YTI5ZGRmNjM4MjljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA1LTIxICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYGNyZWF0ZUNG
QXJyYXlgIGp1c3QgbGlrZSBgY3JlYXRlTlNBcnJheWAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJj
aGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVQcm9w
ZXJ0eUxpc3RSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6cHJlZmVycmVkTGFuZ3VhZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0NoYXJhY3Rlcmlz
dGljcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUmVtb3RlQ29tbWFuZExpc3Rl
bmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVDb21tYW5kTGlzdGVuZXJDb2Nv
YTo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FB
bmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRLZXlUaW1lcyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUaW1p
bmdGdW5jdGlvbnMpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0
aW9ucyk6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIG1vcmUgc3RhdGljIExvY2tzIHdpdGggQ2hlY2tlZExvY2tzIGluIFdU
RiAvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjYyMjM1Y2NjMzViODRhOGU0ZTMzYTU4YjZlY2MwYzEy
MGIyNThiYy4uZDUwYzBmMTFiNGU3OGI4ZTI5NDA0ZTRlYjg3ZDQwZmQ3NTZhYmRlYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGBjcmVhdGVDRkFycmF5YCBqdXN0IGxpa2UgYGNyZWF0
ZU5TQXJyYXlgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6Y29weVRyYWNrQXJyYXkpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnJlc29sdmVkTmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjplbmNvZGVT
ZXNzaW9uSGlzdG9yeSk6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBbQ29jb2FdIFVuYWJsZSB0byB1cGxvYWQgZmlsZXMgdGhhdCBhcmUg
c3RvcmVkIGluIHRoZSBjbG91ZCAod2l0aG91dCBhIGxvY2FsIGNvcHkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlZDNlN2U0YTRkZjZiYmYwMmQxODkwYzM4
MGM4NjgyMjY1OTNkNmE5Li43NjcxY2E3YzgyMTBiMmY1MWVkZjU0ZTQ5MGMyYTU2Mzk5ZDNmNDY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUwNSw2ICs1
MDUsNyBAQAogCQk5M0QxOTFDRjIwQ0FFQ0U4MDBDNTFCOEUgLyogb2JqY1NQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBvYmpjU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRERFOTMx
MUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGR5bGRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMTk5M0Qx
OUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk1QTAzMjQ4MjY1ODZBRkYwMDM4QjYzRSAvKiBWZWN0b3JDRi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk5NkIxNzg0MUVCQTQ0MUMwMDdFMTBFQiAvKiBEZWJ1Z1V0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z1V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QjY3RjNGMTIyMjhENTMxMDAzMERFOUMgLyogV2Vha0hhc2hTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTgzOSw2ICs4NDAsNyBAQAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBT
Y2hlZHVsZVBhaXJDRi5jcHAgKi8sCiAJCQkJMUFGREU2NDcxOTUyMDFDMzAwQzQ4RkZBIC8qIFR5
cGVDYXN0c0NGLmggKi8sCiAJCQkJNUMxRjA1OTQyMTY0MzdCMzAwMzkzMDJDIC8qIFVSTENGLmNw
cCAqLywKKwkJCQk5NUEwMzI0ODI2NTg2QUZGMDAzOEI2M0UgLyogVmVjdG9yQ0YuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY2Y7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA5Nyw2
ICsxMDk5LDggQEAKIAkJCQlDMkJDRkMzRTFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3Bw
ICovLAogCQkJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovLAogCQkJ
CTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8sCisJCQkJMzM3QjJE
NjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcCAq
LywKKwkJCQkzMzdCMkQ2OTI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuaCAqLywKIAkJCQlBNzBEQTA4MzE3OTlGMDREMDA1MjlBOUIgLyogTGlzdER1bXAu
aCAqLywKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywK
IAkJCQkwRkY0QjRDNDFFODg5MzlDMDBEQkJFODYgLyogTGl2ZW5lc3MuaCAqLywKQEAgLTEyNTEs
OCArMTI1NSw2IEBACiAJCQkJQThBNDczMEMxNTFBODI1QjAwNDEyM0ZGIC8qIFNpemVMaW1pdHMu
Y3BwICovLAogCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8s
CiAJCQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCi0JCQkJMzM3
QjJENjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNw
cCAqLywKLQkJCQkzMzdCMkQ2OTI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQuaCAqLywKIAkJCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExp
bmtpbmcuaCAqLywKIAkJCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29ydGVkQXJyYXlN
YXAuaCAqLywKIAkJCQk3OTAzOEUwNTIyNEIwNUE3MDA0QzA3MzggLyogU3Bhbm5pbmdUcmVlLmgg
Ki8sCkBAIC0xNzA3LDcgKzE3MDksNiBAQAogCQkJCUE4QTQ3M0I1MTUxQTgyNUIwMDQxMjNGRiAv
KiBmaXhlZC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRDhCOUUxNzMxODc5ODAwMTQx
REE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVCRjE3
NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzM3
QjJENkEyNjU0NkVCMzAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxW
ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDQ0Q4OTJBMTVDMDM5MDIwMDI4NTA4MyAv
KiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNEODE1MUE4
MjVCMDA0MTIzRkYgLyogSGFzaFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcxOCw2ICsx
NzE5LDcgQEAKIAkJCQlDMkJDRkM0MDFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzJCQ0ZDNDIxRjYxRDYxNjAwQzkyMjJDIC8qIExhbmd1YWdlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1MDNCRTYyM0FBRTBBRTAwNzJFNjZCIC8qIExhbmd1
YWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMzdCMkQ2QTI2NTQ2RUIzMDBEREZEM0Qg
LyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTNCOEU0MUQyNEU3Q0U5MjAwMzY1NUQ4IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM1NTFGNjIxRjNGMDBDOTIyMkMgLyogTGluZUVuZGlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9j
ay5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuaCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaAppbmRleCAxMDkzNGFlNDA5ZjkxMjY4
YTE4NzZjMzNhYmIyMWE2MGFiZTIzMjkxLi45NjU5OWQ3ZDUwYzYzNzdiZTFiNzQyMzc1YjI2NzAy
MTc5YTVlYzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKKysrIGIv
U291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCkBAIC00ODMsOCArNDgzLDEwIEBAIGNvbnN0ZXhw
ciBib29sIGFzc2VydGlvbkZhaWx1cmVEdWVUb1VucmVhY2hhYmxlQ29kZSA9IGZhbHNlOwogCiAj
aWYgTE9HX0RJU0FCTEVECiAjZGVmaW5lIExPRyhjaGFubmVsLCAuLi4pICgodm9pZCkwKQorI2Rl
ZmluZSBMT0dfSUYoaXNBbGxvd2VkLCBjaGFubmVsLCAuLi4pICgodm9pZCkwKQogI2Vsc2UKICNk
ZWZpbmUgTE9HKGNoYW5uZWwsIC4uLikgV1RGTG9nKCZMT0dfQ0hBTk5FTChjaGFubmVsKSwgX19W
QV9BUkdTX18pCisjZGVmaW5lIExPR19JRihpc0FsbG93ZWQsIGNoYW5uZWwsIC4uLikgZG8geyBp
ZiAoaXNBbGxvd2VkKSBMT0coY2hhbm5lbCwgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQogI2Vu
ZGlmCiAKIC8qIExPR19WRVJCT1NFICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDdj
ZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUxZGQxMTUuLjZlZmMxOGJmMWZhYTM5NDAy
NGM4ZWRjMDdmMzZkNWQyNDc4MTk5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0x
Miw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgY2YvQ0ZV
UkxFeHRyYXMuaAogICAgIGNmL1R5cGVDYXN0c0NGLmgKKyAgICBjZi9WZWN0b3JDRi5oCiAKICAg
ICBjb2NvYS9DcmFzaFJlcG9ydGVyLmgKICAgICBjb2NvYS9FbnRpdGxlbWVudHMuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9j
Zi9MYW5ndWFnZUNGLmNwcAppbmRleCBlMDczMTE1NDI5MWJmZDA3YzRjYzE2ZGEwNDJhYWFkYjU5
YzllM2IxLi5hZDdiMzQ3OWQxOWI0YjYwOTA3MWQ2YjMwZDRmZDNlMzBkNGZmMGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9jZi9MYW5ndWFnZUNGLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKyNpbmNsdWRl
IDx3dGYvY2YvVmVjdG9yQ0YuaD4KICNpbmNsdWRlIDx3dGYvc3BpL2NmL0NGQnVuZGxlU1BJLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTExNCwxMyArMTE2LDEzIEBA
IFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcygpCiAgICAgaWYg
KHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKENGTG9jYWxlQ29weVByZWZlcnJlZExhbmd1
YWdlcygpKTsKICAgICAgICAgbGFuZ3VhZ2VzID0gbWluaW1pemVkTGFuZ3VhZ2VzRnJvbUxhbmd1
YWdlcyhsYW5ndWFnZXMuZ2V0KCkpOwotICAgICAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQgPSBD
RkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzLmdldCgpKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZUNv
dW50KQotICAgICAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoImVuIik7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgbGFuZ3Vh
Z2VDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBw
ZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChsYW5ndWFnZXMuZ2V0KCksIGkpKSkpOwotICAgICAgICB9CisgICAg
ICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMgPSBtYWtlVmVjdG9yKGxhbmd1YWdlcy5nZXQoKSwg
W10gKENGVHlwZVJlZiBpdGVtKSAtPiBPcHRpb25hbDxTdHJpbmc+IHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGNmU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihpdGVtKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKGNmU3RyaW5nKTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
dXNlclByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICB1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzLmFwcGVuZCgiZW4iX3MpOwogICAgIH0KIAogICAgIFZlY3RvcjxTdHJpbmc+
IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDb3B5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXgg
OTc2ZmRjMTM4Y2M3ZjA5MzQ2YzdkZGQwM2FlMTUwYWZmOGY0NzQ3NS4uYWUyNGE1ZDZlMzBkMTJi
OGJiMDdlZGEzYTBhYjBjNWE2ODA3ZTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0z
MCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNp
b24uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKKyNpZiBVU0UoQ0YpCit0
eXBlZGVmIGNvbnN0IHZvaWQgKkNGVHlwZVJlZjsKKyNlbmRpZgorCiAjaWZkZWYgX19PQkpDX18K
ICNpbmNsdWRlIDxvYmpjL29iamMuaD4KICNlbmRpZgpAQCAtNDE5LDYgKzQyMywxMSBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3RyaW5nPiB7CiAg
ICAgc3RhdGljIFN0cmluZyBmbHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCB2b2lkKikgeyByZXR1cm4geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsgfQogfTsKIAorI2lmIFVT
RShDRikKK1dURl9FWFBPUlRfUFJJVkFURSBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBtYWtlQ0ZBcnJh
eUVsZW1lbnQoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0aW9uYWw8U3Ry
aW5nPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBTdHJpbmcqLCBDRlR5cGVSZWYpOworI2VuZGlm
CisKICNpZmRlZiBfX09CSkNfXwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgUmV0YWluUHRyPGlkPiBt
YWtlTlNBcnJheUVsZW1lbnQoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L2NmL1N0cmluZ0NGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5n
Q0YuY3BwCmluZGV4IGUwNjZhMzk0MTkxYzRhYjA2MTE0NmFhZDk5Yzk3YjFlNTFkNTljMjUuLjk4
ZjllOTc1MDJkNmM1OWNhYmFhMTYwYWJlMjMwYWIxODliZmIzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ0YuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZm
ZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02Myw2ICs2NCwxOCBAQCBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IFN0cmluZzo6Y3JlYXRlQ0ZTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBtX2lt
cGwtPmNyZWF0ZUNGU3RyaW5nKCk7CiB9CiAKK1JldGFpblB0cjxDRlR5cGVSZWY+IG1ha2VDRkFy
cmF5RWxlbWVudChjb25zdCBTdHJpbmcmIHZlY3RvckVsZW1lbnQpCit7CisgICAgcmV0dXJuIHZl
Y3RvckVsZW1lbnQuY3JlYXRlQ0ZTdHJpbmcoKTsKK30KKworT3B0aW9uYWw8U3RyaW5nPiBtYWtl
VmVjdG9yRWxlbWVudChjb25zdCBTdHJpbmcqLCBDRlR5cGVSZWYgYXJyYXlFbGVtZW50KQorewor
ICAgIGlmIChhdXRvIGNmU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihhcnJh
eUVsZW1lbnQpKQorICAgICAgICByZXR1cm4gU3RyaW5nKGNmU3RyaW5nKTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0YpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCmluZGV4
IDYwOWVkMTExNGZkMTk5NmNlODk3M2I3NGM3OWJjN2ZlMDUyNmVkNzIuLmZjN2QxYjZkY2U5ZGEy
ODUzMDkxYjQ2MzQyMDEzMDM2YWE5MzkwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCkBAIC01Niw2ICs1Niw3IEBA
CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIApAQCAtMTMzLDIzICsxMzQsMTkgQEAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlUHJvcGVydHlMaXN0UmVwcmVzZW50YXRpb24o
QXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUocHJv
cGVydHlMaXN0LmdldCgpLCBMZWdhY3lXZWJBcmNoaXZlTWFpblJlc291cmNlS2V5LCBtYWluUmVz
b3VyY2VEaWN0LmdldCgpKTsKIAotICAgIGF1dG8gc3VicmVzb3VyY2VzQXJyYXkgPSBhZG9wdENG
KENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIGFyY2hpdmUuc3VicmVzb3VyY2VzKCkuc2l6ZSgpLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGFyY2hp
dmUuc3VicmVzb3VyY2VzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gc3VicmVzb3VyY2UgPSBjcmVh
dGVQcm9wZXJ0eUxpc3RSZXByZXNlbnRhdGlvbihyZXNvdXJjZS5wdHIoKSwgU3VicmVzb3VyY2Up
KQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKHN1YnJlc291cmNlc0FycmF5LmdldCgp
LCBzdWJyZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPRyhBcmNo
aXZlcywgIkxlZ2FjeVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3JlYXRlIHByb3BlcnR5IGxpc3Qg
Zm9yIHN1YnJlc291cmNlIik7Ci0gICAgfQorICAgIGF1dG8gc3VicmVzb3VyY2VzQXJyYXkgPSBj
cmVhdGVDRkFycmF5KGFyY2hpdmUuc3VicmVzb3VyY2VzKCksIFsmXSAoY29uc3QgYXV0byYgcmVz
b3VyY2UpIHsKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZSA9IGNyZWF0ZVByb3BlcnR5TGlzdFJl
cHJlc2VudGF0aW9uKHJlc291cmNlLnB0cigpLCBTdWJyZXNvdXJjZSk7CisgICAgICAgIExPR19J
Righc3VicmVzb3VyY2UsIEFyY2hpdmVzLCAiTGVnYWN5V2ViQXJjaGl2ZSAtIEZhaWxlZCB0byBj
cmVhdGUgcHJvcGVydHkgbGlzdCBmb3Igc3VicmVzb3VyY2UiKTsKKyAgICAgICAgcmV0dXJuIHN1
YnJlc291cmNlOworICAgIH0pOwogICAgIGlmIChDRkFycmF5R2V0Q291bnQoc3VicmVzb3VyY2Vz
QXJyYXkuZ2V0KCkpKQogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwcm9wZXJ0eUxpc3Qu
Z2V0KCksIExlZ2FjeVdlYkFyY2hpdmVTdWJyZXNvdXJjZXNLZXksIHN1YnJlc291cmNlc0FycmF5
LmdldCgpKTsKIAotICAgIGF1dG8gc3ViZnJhbWVzQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVh
dGVNdXRhYmxlKDAsIGFyY2hpdmUuc3ViZnJhbWVBcmNoaXZlcygpLnNpemUoKSwgJmtDRlR5cGVB
cnJheUNhbGxCYWNrcykpOwotICAgIGZvciAoYXV0byYgc3ViZnJhbWUgOiBhcmNoaXZlLnN1YmZy
YW1lQXJjaGl2ZXMoKSkgewotICAgICAgICBpZiAoYXV0byBzdWJmcmFtZUFyY2hpdmUgPSBjcmVh
dGVQcm9wZXJ0eUxpc3RSZXByZXNlbnRhdGlvbihzdWJmcmFtZS5nZXQoKSkpCi0gICAgICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoc3ViZnJhbWVzQXJyYXkuZ2V0KCksIHN1YmZyYW1lQXJjaGl2
ZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPRyhBcmNoaXZlcywgIkxlZ2Fj
eVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3JlYXRlIHByb3BlcnR5IGxpc3QgZm9yIHN1YmZyYW1l
IGFyY2hpdmUiKTsKLSAgICB9CisgICAgYXV0byBzdWJmcmFtZXNBcnJheSA9IGNyZWF0ZUNGQXJy
YXkoYXJjaGl2ZS5zdWJmcmFtZUFyY2hpdmVzKCksIFsmXSAoY29uc3QgYXV0byYgc3ViZnJhbWUp
IHsKKyAgICAgICAgYXV0byBzdWJmcmFtZUFyY2hpdmUgPSBjcmVhdGVQcm9wZXJ0eUxpc3RSZXBy
ZXNlbnRhdGlvbihzdWJmcmFtZS5nZXQoKSk7CisgICAgICAgIExPR19JRighc3ViZnJhbWVBcmNo
aXZlLCBBcmNoaXZlcywgIkxlZ2FjeVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3JlYXRlIHByb3Bl
cnR5IGxpc3QgZm9yIHN1YmZyYW1lIGFyY2hpdmUiKTsKKyAgICAgICAgcmV0dXJuIHN1YmZyYW1l
QXJjaGl2ZTsKKyAgICB9KTsKICAgICBpZiAoQ0ZBcnJheUdldENvdW50KHN1YmZyYW1lc0FycmF5
LmdldCgpKSkKICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUocHJvcGVydHlMaXN0LmdldCgp
LCBMZWdhY3lXZWJBcmNoaXZlU3ViZnJhbWVBcmNoaXZlc0tleSwgc3ViZnJhbWVzQXJyYXkuZ2V0
KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuY3BwCmluZGV4IGNmMmUxYmVhMjViMGYwNzk5ODYzOTIwNTk0NWRmMGVlZjky
ZDNjNDIuLjFlNDE0MTdhZmI2MTVjNGYxOTczYWYxYjNhNTFmN2UyYjczMjczZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3
dGYvY2YvVmVjdG9yQ0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgpAQCAtNDg1LDIxICs0ODYsMTUgQEAgVmVjdG9yPFN0cmluZz4g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQgPSAwOwotICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5U2VsZWN0ZWRMYW5ndWFnZXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2Vy
KSk7Ci0gICAgaWYgKGxhbmd1YWdlcykKLSAgICAgICAgbGFuZ3VhZ2VDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChsYW5ndWFnZXMuZ2V0KCkpOwotCi0gICAgaWYgKCFsYW5ndWFnZUNvdW50KQorICAg
IGF1dG8gcGxhdGZvcm1DYXB0aW9uTGFuZ3VhZ2VzID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJh
bmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2VzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlcikp
OworICAgIGF1dG8gY2FwdGlvbkxhbmd1YWdlcyA9IHBsYXRmb3JtQ2FwdGlvbkxhbmd1YWdlcyA/
IG1ha2VWZWN0b3I8U3RyaW5nPihwbGF0Zm9ybUNhcHRpb25MYW5ndWFnZXMuZ2V0KCkpIDogVmVj
dG9yPFN0cmluZz4oKTsKKyAgICBpZiAoY2FwdGlvbkxhbmd1YWdlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwcmVmZXJyZWRMYW5ndWFnZXMoKTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci0gICAgdXNlclBy
ZWZlcnJlZExhbmd1YWdlcy5yZXNlcnZlQ2FwYWNpdHkobGFuZ3VhZ2VDb3VudCArIHBsYXRmb3Jt
TGFuZ3VhZ2VzLnNpemUoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgbGFuZ3VhZ2VD
b3VudDsgaSsrKQotICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChsYW5ndWFnZXMuZ2V0KCks
IGkpKSk7Ci0KKyAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLnJlc2VydmVDYXBhY2l0eShjYXB0
aW9uTGFuZ3VhZ2VzLnNpemUoKSArIHBsYXRmb3JtTGFuZ3VhZ2VzLnNpemUoKSk7CisgICAgdXNl
clByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IoY2FwdGlvbkxhbmd1YWdlcyk7CiAgICAg
dXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IocGxhdGZvcm1MYW5ndWFnZXMpOwot
CiAgICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7CiB9CiAKQEAgLTUxNCwyMCArNTA5
LDEyIEBAIFZlY3RvcjxTdHJpbmc+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVm
ZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcygpIGNvCiAgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwg
IU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSB8fCAhY2FuTG9hZF9NZWRpYUFjY2Vzc2liaWxp
dHlfTUFBdWRpYmxlTWVkaWFDb3B5UHJlZmVycmVkQ2hhcmFjdGVyaXN0aWNzKCkpCiAgICAgICAg
IHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwcmVmZXJyZWRBdWRpb0NoYXJhY3Rlcmlz
dGljcygpOwogCi0gICAgQ0ZJbmRleCBjaGFyYWN0ZXJpc3RpY0NvdW50ID0gMDsKLSAgICBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gY2hhcmFjdGVyaXN0aWNzID0gYWRvcHRDRihNQUF1ZGlibGVNZWRp
YUNvcHlQcmVmZXJyZWRDaGFyYWN0ZXJpc3RpY3MoKSk7Ci0gICAgaWYgKGNoYXJhY3RlcmlzdGlj
cykKLSAgICAgICAgY2hhcmFjdGVyaXN0aWNDb3VudCA9IENGQXJyYXlHZXRDb3VudChjaGFyYWN0
ZXJpc3RpY3MuZ2V0KCkpOwotCi0gICAgaWYgKCFjaGFyYWN0ZXJpc3RpY0NvdW50KQorICAgIGF1
dG8gcGxhdGZvcm1DaGFyYWN0ZXJpc3RpY3MgPSBhZG9wdENGKE1BQXVkaWJsZU1lZGlhQ29weVBy
ZWZlcnJlZENoYXJhY3RlcmlzdGljcygpKTsKKyAgICBhdXRvIGNoYXJhY3RlcmlzdGljcyA9IHBs
YXRmb3JtQ2hhcmFjdGVyaXN0aWNzID8gbWFrZVZlY3RvcjxTdHJpbmc+KHBsYXRmb3JtQ2hhcmFj
dGVyaXN0aWNzLmdldCgpKSA6IFZlY3RvcjxTdHJpbmc+KCk7CisgICAgaWYgKGNoYXJhY3Rlcmlz
dGljcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpw
cmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcygpOwogCi0gICAgVmVjdG9yPFN0cmluZz4gdXNl
clByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzOwotICAgIHVzZXJQcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcy5yZXNlcnZlQ2FwYWNpdHkoY2hhcmFjdGVyaXN0aWNDb3VudCk7Ci0gICAg
Zm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY2hhcmFjdGVyaXN0aWNDb3VudDsgaSsrKQotICAgICAg
ICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MuYXBwZW5kKHN0YXRpY19jYXN0PENG
U3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNoYXJhY3RlcmlzdGljcy5nZXQoKSwg
aSkpKTsKLQotICAgIHJldHVybiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlcmlzdGljczsKIH0KICNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9SZW1vdGVDb21tYW5kTGlzdGVuZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCmluZGV4IDA3ZTBlOTcw
NmQ0ZmQ2ZmU0ZmNjOTM5MmQ5MzFhNjliNzIxMTYwOTYuLmViNzQ4NTg5MTRhYmQ4M2NmYmQ2YTlk
ZTIwZmY0Mzg4ZGY1ODU0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW1wb3J0IDx3dGYvY2YvVmVjdG9yQ0YuaD4KIAogI2ltcG9ydCAiTWVkaWFSZW1vdGVTb2Z0TGlu
ay5oIgogCkBAIC0xMDUsMjMgKzEwNiwyMyBAQCB2b2lkIFJlbW90ZUNvbW1hbmRMaXN0ZW5lckNv
Y29hOjp1cGRhdGVTdXBwb3J0ZWRDb21tYW5kcygpCiAgICAgaWYgKG1fY3VycmVudENvbW1hbmRz
ID09IGN1cnJlbnRDb21tYW5kcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjb21tYW5k
SW5mb0FycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjdXJyZW50Q29tbWFuZHMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0g
ICAgZm9yIChhdXRvIHBsYXRmb3JtQ29tbWFuZCA6IGN1cnJlbnRDb21tYW5kcykgewotICAgICAg
ICBpZiAoaXNTZWVrQ29tbWFuZChwbGF0Zm9ybUNvbW1hbmQpICYmICFzdXBwb3J0c1NlZWtpbmco
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nID0gdGhp
cy0+c3VwcG9ydHNTZWVraW5nKCk7CisgICAgYXV0byBjb21tYW5kSW5mb0FycmF5ID0gY3JlYXRl
Q0ZBcnJheShjdXJyZW50Q29tbWFuZHMsIFtzdXBwb3J0c1NlZWtpbmddIChhdXRvIHBsYXRmb3Jt
Q29tbWFuZCkgLT4gUmV0YWluUHRyPE1STWVkaWFSZW1vdGVDb21tYW5kSW5mb1JlZj4geworICAg
ICAgICBpZiAoaXNTZWVrQ29tbWFuZChwbGF0Zm9ybUNvbW1hbmQpICYmICFzdXBwb3J0c1NlZWtp
bmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBhdXRvIGNvbW1hbmQg
PSBtZWRpYVJlbW90ZUNvbW1hbmRGb3JQbGF0Zm9ybUNvbW1hbmQocGxhdGZvcm1Db21tYW5kKTsK
ICAgICAgICAgQVNTRVJUKGNvbW1hbmQpOwogICAgICAgICBpZiAoIWNvbW1hbmQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGF1
dG8gY29tbWFuZEluZm8gPSBhZG9wdENGKE1STWVkaWFSZW1vdGVDb21tYW5kSW5mb0NyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0KSk7CiAgICAgICAgIE1STWVkaWFSZW1vdGVDb21tYW5kSW5mb1Nl
dENvbW1hbmQoY29tbWFuZEluZm8uZ2V0KCksIGNvbW1hbmQudmFsdWUoKSk7CiAgICAgICAgIE1S
TWVkaWFSZW1vdGVDb21tYW5kSW5mb1NldEVuYWJsZWQoY29tbWFuZEluZm8uZ2V0KCksIHRydWUp
OwogICAgICAgICBpZiAocGxhdGZvcm1Db21tYW5kID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpT
a2lwRm9yd2FyZENvbW1hbmQgfHwgcGxhdGZvcm1Db21tYW5kID09IFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpTa2lwQmFja3dhcmRDb21tYW5kKQogICAgICAgICAgICAgTVJNZWRpYVJlbW90ZUNvbW1h
bmRJbmZvU2V0T3B0aW9ucyhjb21tYW5kSW5mby5nZXQoKSwgKF9fYnJpZGdlIENGRGljdGlvbmFy
eVJlZikoQHsoX19icmlkZ2UgTlNTdHJpbmcgKilrTVJNZWRpYVJlbW90ZUNvbW1hbmRJbmZvUHJl
ZmVycmVkSW50ZXJ2YWxzS2V5IDogQFtAKDE1LjApXX0pKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVu
ZFZhbHVlKGNvbW1hbmRJbmZvQXJyYXkuZ2V0KCksIGNvbW1hbmRJbmZvLmdldCgpKTsKLSAgICB9
CisgICAgICAgIHJldHVybiBjb21tYW5kSW5mbzsKKyAgICB9KTsKIAogICAgIE1STWVkaWFSZW1v
dGVTZXRTdXBwb3J0ZWRDb21tYW5kcyhjb21tYW5kSW5mb0FycmF5LmdldCgpLCBNUk1lZGlhUmVt
b3RlR2V0TG9jYWxPcmlnaW4oKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgbV9jdXJyZW50Q29t
bWFuZHMgPSBjdXJyZW50Q29tbWFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5j
cHAKaW5kZXggZjU1NGE0NjQ2ZDQ1YmQ2NGI4YzNkN2I1YzQyNTg5YWI5YmRhYTRmNS4uYTcxZTAx
N2RlNDAwNWMxZTg4YzdiMzI0MTRiYmFhZGFmZGJkYjFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
QW5pbWF0aW9uV2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPFF1YXJ0ekNvcmUv
Q0FDRlRpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUNGVmFsdWVGdW5j
dGlvbi5oPgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FDRlZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9WZWN0b3JDRi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0OCwxMSArNDQ5LDkgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0
ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBSZXRh
aW5QdHI8Q0ZOdW1iZXJSZWY+IHYgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckZsb2F0VHlwZSwgJnZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJh
eS5nZXQoKSwgdi5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVDRkFycmF5
KHZhbHVlLCBbXSAoY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZpdGVtKSk7CisgICAgfSk7CiAK
ICAgICBDQUNGQW5pbWF0aW9uU2V0VmFsdWVzKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQo
KSk7CiB9CkBAIC00NjIsMTEgKzQ2MSw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0
ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBSZXRh
aW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZVRyYW5zZm9y
bSh2YWx1ZVtpXSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYu
Z2V0KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW10g
KGNvbnN0IGF1dG8mIHRyYW5zZm9ybSkgeworICAgICAgICByZXR1cm4gYWRvcHRDRihDQUNGVmVj
dG9yQ3JlYXRlVHJhbnNmb3JtKHRyYW5zZm9ybSkpOworICAgIH0pOwogCiAgICAgQ0FDRkFuaW1h
dGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQpAQCAtNDc2
LDEyICs0NzMsMTAgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoY29u
c3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQogICAgIGlmIChhbmltYXRpb25UeXBlKCkg
IT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmV0YWluUHRyPENG
TXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwg
dmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0IGFbM10gPSB7
IHZhbHVlW2ldLngoKSwgdmFsdWVbaV0ueSgpLCB2YWx1ZVtpXS56KCkgfTsKLSAgICAgICAgUmV0
YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoMywgYSkp
OwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwotICAg
IH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW10gKGNvbnN0IGF1dG8m
IHBvaW50KSB7CisgICAgICAgIENHRmxvYXQgY2dDb29yZGluYXRlc1szXSA9IHsgcG9pbnQueCgp
LCBwb2ludC55KCksIHBvaW50LnooKSB9OworICAgICAgICByZXR1cm4gYWRvcHRDRihDQUNGVmVj
dG9yQ3JlYXRlKDMsIGNnQ29vcmRpbmF0ZXMpKTsKKyAgICB9KTsKIAogICAgIENBQ0ZBbmltYXRp
b25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKIH0KQEAgLTQ5MSwx
MyArNDg2LDExIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQogICAgIGlmIChhbmltYXRpb25UeXBlKCkg
IT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmV0YWluUHRyPENG
TXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwg
dmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIGNvbXBvbmVudHMg
PSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgQ0dGbG9hdCBhWzRd
ID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBj
b21wb25lbnRzLmFscGhhIH07Ci0gICAgICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0g
YWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKLSAgICB9CisgICAgYXV0byBhcnJheSA9IGNyZWF0
ZUNGQXJyYXkodmFsdWUsIFtdIChjb25zdCBhdXRvJiBjb2xvcikgeworICAgICAgICBhdXRvIGNv
bXBvbmVudHMgPSBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgQ0dGbG9h
dCBjZ0NvbXBvbmVudHNbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBj
b21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBjZ0NvbXBvbmVudHMpKTsKKyAgICB9KTsKIAogICAgIENB
Q0ZBbmltYXRpb25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKIH0K
QEAgLTUyMCwxMSArNTEzLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRLZXlU
aW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJldGFpblB0cjxD
Rk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAs
IHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiB2ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJGbG9hdFR5cGUs
ICZ2YWx1ZVtpXSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYu
Z2V0KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW10g
KGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoMCwga0NGTnVtYmVyRmxvYXRUeXBlLCAmaXRlbSkpOworICAgIH0pOwogCiAgICAgQ0FDRkFu
aW1hdGlvblNldEtleVRpbWVzKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7CiB9CkBA
IC01NDMsMTEgKzUzNCw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VGltaW5n
RnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvCiAgICAgaWYgKGFuaW1h
dGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRy
PENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUo
MCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHYgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckZsb2F0VHlw
ZSwgJnZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwg
dG9DQUNGVGltaW5nRnVuY3Rpb24odmFsdWVbaV0sIHJldmVyc2UpLmdldCgpKTsKLSAgICB9Cisg
ICAgYXV0byBhcnJheSA9IGNyZWF0ZUNGQXJyYXkodmFsdWUsIFtyZXZlcnNlXSAoY29uc3QgYXV0
byYgdGltaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIHRvQ0FDRlRpbWluZ0Z1bmN0aW9u
KHRpbWluZ0Z1bmN0aW9uLCByZXZlcnNlKTsKKyAgICB9KTsKIAogICAgIENBQ0ZBbmltYXRpb25T
ZXRUaW1pbmdGdW5jdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKIH0KQEAg
LTU1OSwxMSArNTQ4LDExIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6Y29weVRpbWlu
Z0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYKIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZv
cm1DQUFuaW1hdGlvbj4+JiB2YWx1ZSkKIHsKLSAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IHZhbHVlKSB7Ci0gICAgICAgIGlmIChpczxQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luPihhbmltYXRpb24uZ2V0KCkpKQotICAgICAgICAgICAgQ0ZB
cnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gYXJy
YXkgPSBjcmVhdGVDRkFycmF5KHZhbHVlLCBbXSAoY29uc3QgYXV0byYgYW5pbWF0aW9uKSAtPiBS
ZXRhaW5QdHI8Q0FDRkFuaW1hdGlvblJlZj4geworICAgICAgICBpZiAoaXM8UGxhdGZvcm1DQUFu
aW1hdGlvbldpbj4oYW5pbWF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbjsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfSk7CiAKICAgICBDQUNGQW5pbWF0aW9uU2V0QW5pbWF0aW9ucyht
X2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29jb2EuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29j
b2EuY3BwCmluZGV4IDMwODAzNDM4NmZmY2IyNjlmZTI5YjMxNDA5ZTE4MzE5OGIyY2FlMDIuLmNi
ZDMzYmZhMjA0ODY2NjE5Mjc4NGUwOWFkYWZmMjNjMzBkMGZkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZlckNvY29hLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVz
b2x2ZXJDb2NvYS5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBVU0UoTElCV0VCUlRDKQogCiAj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+
CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC00OSwxNSArNTEsMTEgQEAgc3RhdGljIHZvaWQgcmVzb2x2ZWROYW1lKENGSG9zdFJlZiBob3N0
UmVmLCBDRkhvc3RJbmZvVHlwZSB0eXBlSW5mbywgY29uc3QgQ0ZTdHIKICAgICBDRkFycmF5UmVm
IHJlc29sdmVkQWRkcmVzc2VzID0gKENGQXJyYXlSZWYpQ0ZIb3N0R2V0QWRkcmVzc2luZyhob3N0
UmVmLCAmcmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKIAotICAg
IHNpemVfdCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChyZXNvbHZlZEFkZHJlc3Nlcyk7Ci0gICAg
VmVjdG9yPFdlYkNvcmU6OklQQWRkcmVzcz4gYWRkcmVzc2VzOwotICAgIGFkZHJlc3Nlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKLQotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAgICBDRkRhdGFSZWYgZGF0YSA9IChDRkRh
dGFSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXNvbHZlZEFkZHJlc3NlcywgaW5kZXgpOwot
ICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0gSVBBZGRyZXNzOjpmcm9tU29ja0FkZHJJbjYoKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHNvY2thZGRyX2luNio+KENGRGF0YUdldEJ5dGVQ
dHIoZGF0YSkpKSkKLSAgICAgICAgICAgIGFkZHJlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKmFkZHJl
c3MpOwotICAgIH0KKyAgICBhdXRvIGFkZHJlc3NlcyA9IG1ha2VWZWN0b3IocmVzb2x2ZWRBZGRy
ZXNzZXMsIFtdIChDRlR5cGVSZWYgaXRlbSkgLT4gT3B0aW9uYWw8SVBBZGRyZXNzPiB7CisgICAg
ICAgIGlmIChhdXRvIGRhdGEgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZEYXRhUmVmPihpdGVtKSkKKyAg
ICAgICAgICAgIHJldHVybiBJUEFkZHJlc3M6OmZyb21Tb2NrQWRkckluNigqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSkp
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0pOwogICAgIGlmIChhZGRyZXNz
ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc29sdmVyLT5jb21wbGV0ZWQobWFrZVVuZXhwZWN0
ZWQoV2ViQ29yZTo6RE5TRXJyb3I6OkNhbm5vdFJlc29sdmUpKTsKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggZDk0MDAwYmEzNWU4MzI1NjhmOWEx
OTljM2M4OTAxZGFhYjYwNmZhMi4uMTU5NTE2Zjg5MmZiNDA3MmMxYTRiY2EwMTIwOTdiNmU1MGVh
ZDI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9jZi9WZWN0b3JDRi5oPgogCiAjaW5jbHVkZSA8cGFsL2NvY29hL01lZGlh
VG9vbGJveFNvZnRMaW5rLmg+CiAKQEAgLTI1OSwxMSArMjYwLDEwIEBAIE9TU3RhdHVzIE1lZGlh
Rm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tBcnJheShDRkFycmF5UmVmKiB0cmFja0FycmF5Q29weSkK
ICAgICBpZiAoKm1fcGFyc2VUcmFja3NTdGF0dXMgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiAq
bV9wYXJzZVRyYWNrc1N0YXR1czsKIAotICAgIGF1dG8gbXV0YWJsZUFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZShhbGxvY2F0b3IoKSwgQ2hlY2tlZDxDRkluZGV4PihtX3RyYWNr
UmVhZGVycy5zaXplKCkpLnVuc2FmZUdldCgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0g
ICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFkZXJzKQotICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUobXV0YWJsZUFycmF5LmdldCgpLCB0cmFja1JlYWRlci0+d3JhcHBlcigp
KTsKLQotICAgICp0cmFja0FycmF5Q29weSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZUNvcHkoYWxs
b2NhdG9yKCksIG11dGFibGVBcnJheS5nZXQoKSkpLmxlYWtSZWYoKTsKKyAgICBhdXRvIHRyYWNr
UmVhZGVyV3JhcHBlcnMgPSBjcmVhdGVDRkFycmF5KG1fdHJhY2tSZWFkZXJzLCBbXSAoY29uc3Qg
YXV0byYgdHJhY2tSZWFkZXIpIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrUmVhZGVyLT53cmFwcGVy
KCk7CisgICAgfSk7CisgICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRl
Q29weShhbGxvY2F0b3IoKSwgdHJhY2tSZWFkZXJXcmFwcGVycy5nZXQoKSkpLmxlYWtSZWYoKTsK
ICAgICByZXR1cm4gbm9FcnI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKaW5kZXggYTM5NDA2NDlmZGJm
MmRlZDQ4NGE0ZTI2MTAyYjkyMWNjMjgwNzhmNy4uMTlmYTYxYjc5YTNmZTE0ZDZmMzVlOGE5MDlj
MjBiMzJjMGEyNjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0xl
Z2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2Nm
L1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzNSwxMCAr
NDM2LDggQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVuY29kZVNlc3Npb25I
aXN0b3J5KGNvbnN0IEJhY2tGb3J3YXJkTGlzdFN0YXQKICAgICBpZiAoIWJhY2tGb3J3YXJkTGlz
dFN0YXRlLmN1cnJlbnRJbmRleCkKICAgICAgICAgcmV0dXJuIGNyZWF0ZURpY3Rpb25hcnkoeyB7
IHNlc3Npb25IaXN0b3J5VmVyc2lvbktleSwgc2Vzc2lvbkhpc3RvcnlWZXJzaW9uTnVtYmVyLmdl
dCgpIH0gfSk7CiAKLSAgICBhdXRvIGVudHJpZXMgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLnNpemUo
KSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIHNpemVfdCB0b3RhbERhdGFTaXplID0g
MDsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0
ZW1zKSB7CisgICAgYXV0byBlbnRyaWVzID0gY3JlYXRlQ0ZBcnJheShiYWNrRm9yd2FyZExpc3RT
dGF0ZS5pdGVtcywgWyZdIChjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIGF1dG8gdXJsID0g
aXRlbS5wYWdlU3RhdGUubWFpbkZyYW1lU3RhdGUudXJsU3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCk7
CiAgICAgICAgIGF1dG8gdGl0bGUgPSBpdGVtLnBhZ2VTdGF0ZS50aXRsZS5jcmVhdGVDRlN0cmlu
ZygpOwogICAgICAgICBhdXRvIG9yaWdpbmFsVVJMID0gaXRlbS5wYWdlU3RhdGUubWFpbkZyYW1l
U3RhdGUub3JpZ2luYWxVUkxTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTQ0NiwyOSArNDQ1
LDI1IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbmNvZGVTZXNzaW9uSGlz
dG9yeShjb25zdCBCYWNrRm9yd2FyZExpc3RTdGF0CiAgICAgICAgIGF1dG8gc2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeVZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGl0ZW0ucGFnZVN0
YXRlLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwogICAgICAgICBhdXRvIHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5VmFsdWUpKTsKIAotICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbnRyeURp
Y3Rpb25hcnk7Ci0KICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgIHRvdGFsRGF0YVNp
emUgKz0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOwogCi0gICAgICAgICAgICBlbnRyeURp
Y3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KHsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVE
aWN0aW9uYXJ5KHsKICAgICAgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXks
IHVybC5nZXQoKSB9LAogICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxl
S2V5LCB0aXRsZS5nZXQoKSB9LAogICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRy
eU9yaWdpbmFsVVJMS2V5LCBvcmlnaW5hbFVSTC5nZXQoKSB9LAogICAgICAgICAgICAgICAgIHsg
c2Vzc2lvbkhpc3RvcnlFbnRyeURhdGFLZXksIGRhdGEuZ2V0KCkgfSwKICAgICAgICAgICAgICAg
ICB7IHNlc3Npb25IaXN0b3J5RW50cnlTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5S2V5LCBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LmdldCgpIH0sCiAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVudHJ5RGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rp
b25hcnkoewotICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSwgdXJs
LmdldCgpIH0sCi0gICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5VGl0bGVLZXks
IHRpdGxlLmdldCgpIH0sCi0gICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5T3Jp
Z2luYWxVUkxLZXksIG9yaWdpbmFsVVJMLmdldCgpIH0sCi0gICAgICAgICAgICAgICAgeyBzZXNz
aW9uSGlzdG9yeUVudHJ5U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeUtleSwgc2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeS5nZXQoKSB9LAotICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
IAotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlEaWN0aW9u
YXJ5LmdldCgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVEaWN0aW9uYXJ5KHsKKyAg
ICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSwgdXJsLmdldCgpIH0sCisgICAg
ICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSwgdGl0bGUuZ2V0KCkgfSwKKyAg
ICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeU9yaWdpbmFsVVJMS2V5LCBvcmlnaW5hbFVS
TC5nZXQoKSB9LAorICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5U2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeUtleSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeS5nZXQoKSB9
LAorICAgICAgICB9KTsKKyAgICB9KTsKIAogICAgIHVpbnQzMl90IGN1cnJlbnRJbmRleCA9IGJh
Y2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleC52YWx1ZSgpOwogICAgIGF1dG8gY3VycmVu
dEluZGV4TnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmY3VycmVudEluZGV4KSk7Cg==
</data>
<flag name="commit-queue"
          id="450550"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429380</attachid>
            <date>2021-05-21 18:11:50 -0700</date>
            <delta_ts>2021-05-21 20:06:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226123-20210521191149.patch</filename>
            <type>text/plain</type>
            <size>37840</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjUxMzliYzA5NDA2ZjkwNjFmNTVmOTFlNGI2MTczNzQ3MzY3NDYxOC4uMTdjZGExYmM1
ZjE3YWJjM2RiNzYxNWY4NzIzMTcxOGY4MzE4NzRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAy
MS0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGBjcmVhdGVDRkFycmF5YCBqdXN0IGxpa2UgYGNyZWF0ZU5TQXJyYXlgCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9jZi9WZWN0b3JDRi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6YWRkSWZWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6Y3Jl
YXRlQ0ZBcnJheSk6CisgICAgICAgIChXVEY6Om1ha2VWZWN0b3IpOgorCisgICAgICAgICogd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMpOgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgICog
d3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwOgorICAgICAgICAoV1RGOjptYWtlQ0ZBcnJheUVsZW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bWFrZVZlY3RvckVsZW1lbnQpOiBBZGRlZC4KKyAg
ICAgICAgQWRkIGhlbHBlcnMgZm9yIGNvbnZlcnRpbmcgYENGU3RyaW5nUmVmYDwtPmBXVEY6OlN0
cmluZ2AuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5oOgorICAgICAgICBEcml2ZS1ieTog
QWRkIGBMT0dfSUZgIHRvIG1hdGNoIGBSRUxFQVNFX0xPR19JRmAuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIFVuYWJsZSB0byB1cGxvYWQgZmlsZXMgdGhhdCBhcmUgc3RvcmVkIGluIHRo
ZSBjbG91ZCAod2l0aG91dCBhIGxvY2FsIGNvcHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYwNzkyZTJkZmQ1
NTVkYTVkOWUwZTY3MmQxNDllOTAxMzlkM2U5OS4uYzM0YWJiZDQ0NzcyNmJjNDc1MDA3NTUwOWRj
YTI5ZGRmNjM4MjljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA1LTIxICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYGNyZWF0ZUNG
QXJyYXlgIGp1c3QgbGlrZSBgY3JlYXRlTlNBcnJheWAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJj
aGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVQcm9w
ZXJ0eUxpc3RSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRjo6cHJlZmVycmVkTGFuZ3VhZ2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0NoYXJhY3Rlcmlz
dGljcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUmVtb3RlQ29tbWFuZExpc3Rl
bmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVDb21tYW5kTGlzdGVuZXJDb2Nv
YTo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FB
bmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRLZXlUaW1lcyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUaW1p
bmdGdW5jdGlvbnMpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0
aW9ucyk6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIG1vcmUgc3RhdGljIExvY2tzIHdpdGggQ2hlY2tlZExvY2tzIGluIFdU
RiAvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjYyMjM1Y2NjMzViODRhOGU0ZTMzYTU4YjZlY2MwYzEy
MGIyNThiYy4uZDUwYzBmMTFiNGU3OGI4ZTI5NDA0ZTRlYjg3ZDQwZmQ3NTZhYmRlYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGBjcmVhdGVDRkFycmF5YCBqdXN0IGxpa2UgYGNyZWF0
ZU5TQXJyYXlgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjYxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6Y29weVRyYWNrQXJyYXkpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnJlc29sdmVkTmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwOgorICAgICAgICAoV2ViS2l0OjplbmNvZGVT
ZXNzaW9uSGlzdG9yeSk6CisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBbQ29jb2FdIFVuYWJsZSB0byB1cGxvYWQgZmlsZXMgdGhhdCBhcmUg
c3RvcmVkIGluIHRoZSBjbG91ZCAod2l0aG91dCBhIGxvY2FsIGNvcHkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlZDNlN2U0YTRkZjZiYmYwMmQxODkwYzM4
MGM4NjgyMjY1OTNkNmE5Li43NjcxY2E3YzgyMTBiMmY1MWVkZjU0ZTQ5MGMyYTU2Mzk5ZDNmNDY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUwNSw2ICs1
MDUsNyBAQAogCQk5M0QxOTFDRjIwQ0FFQ0U4MDBDNTFCOEUgLyogb2JqY1NQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBvYmpjU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRERFOTMx
MUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGR5bGRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGMTk5M0Qx
OUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RyaW5nVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk1QTAzMjQ4MjY1ODZBRkYwMDM4QjYzRSAvKiBWZWN0b3JDRi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk5NkIxNzg0MUVCQTQ0MUMwMDdFMTBFQiAvKiBEZWJ1Z1V0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z1V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QjY3RjNGMTIyMjhENTMxMDAzMERFOUMgLyogV2Vha0hhc2hTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTgzOSw2ICs4NDAsNyBAQAogCQkJCUEzRUU1QzNCMjFGRkFDN0MwMEZBQkQ2MSAvKiBT
Y2hlZHVsZVBhaXJDRi5jcHAgKi8sCiAJCQkJMUFGREU2NDcxOTUyMDFDMzAwQzQ4RkZBIC8qIFR5
cGVDYXN0c0NGLmggKi8sCiAJCQkJNUMxRjA1OTQyMTY0MzdCMzAwMzkzMDJDIC8qIFVSTENGLmNw
cCAqLywKKwkJCQk5NUEwMzI0ODI2NTg2QUZGMDAzOEI2M0UgLyogVmVjdG9yQ0YuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY2Y7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA5Nyw2
ICsxMDk5LDggQEAKIAkJCQlDMkJDRkMzRTFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3Bw
ICovLAogCQkJCUMyQkNGQzNGMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovLAogCQkJ
CTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8sCisJCQkJMzM3QjJE
NjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcCAq
LywKKwkJCQkzMzdCMkQ2OTI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuaCAqLywKIAkJCQlBNzBEQTA4MzE3OTlGMDREMDA1MjlBOUIgLyogTGlzdER1bXAu
aCAqLywKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywK
IAkJCQkwRkY0QjRDNDFFODg5MzlDMDBEQkJFODYgLyogTGl2ZW5lc3MuaCAqLywKQEAgLTEyNTEs
OCArMTI1NSw2IEBACiAJCQkJQThBNDczMEMxNTFBODI1QjAwNDEyM0ZGIC8qIFNpemVMaW1pdHMu
Y3BwICovLAogCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8s
CiAJCQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCi0JCQkJMzM3
QjJENjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNw
cCAqLywKLQkJCQkzMzdCMkQ2OTI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQuaCAqLywKIAkJCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExp
bmtpbmcuaCAqLywKIAkJCQk5MzE1NkM4RDI2MkM5ODIyMDBFQUUyN0IgLyogU29ydGVkQXJyYXlN
YXAuaCAqLywKIAkJCQk3OTAzOEUwNTIyNEIwNUE3MDA0QzA3MzggLyogU3Bhbm5pbmdUcmVlLmgg
Ki8sCkBAIC0xNzA3LDcgKzE3MDksNiBAQAogCQkJCUE4QTQ3M0I1MTUxQTgyNUIwMDQxMjNGRiAv
KiBmaXhlZC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRDhCOUUxNzMxODc5ODAwMTQx
REE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVCRjE3
NjFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzM3
QjJENkEyNjU0NkVCMzAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzBCQTkwMUU3ODcwOEUwMDJDQTg0NyAvKiBHbG9iYWxW
ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDQ0Q4OTJBMTVDMDM5MDIwMDI4NTA4MyAv
KiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNEODE1MUE4
MjVCMDA0MTIzRkYgLyogSGFzaFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcxOCw2ICsx
NzE5LDcgQEAKIAkJCQlDMkJDRkM0MDFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzJCQ0ZDNDIxRjYxRDYxNjAwQzkyMjJDIC8qIExhbmd1YWdlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1MDNCRTYyM0FBRTBBRTAwNzJFNjZCIC8qIExhbmd1
YWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMzdCMkQ2QTI2NTQ2RUIzMDBEREZEM0Qg
LyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTNCOEU0MUQyNEU3Q0U5MjAwMzY1NUQ4IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM1NTFGNjIxRjNGMDBDOTIyMkMgLyogTGluZUVuZGlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9j
ay5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuaCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaAppbmRleCAxMDkzNGFlNDA5ZjkxMjY4
YTE4NzZjMzNhYmIyMWE2MGFiZTIzMjkxLi45NjU5OWQ3ZDUwYzYzNzdiZTFiNzQyMzc1YjI2NzAy
MTc5YTVlYzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKKysrIGIv
U291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCkBAIC00ODMsOCArNDgzLDEwIEBAIGNvbnN0ZXhw
ciBib29sIGFzc2VydGlvbkZhaWx1cmVEdWVUb1VucmVhY2hhYmxlQ29kZSA9IGZhbHNlOwogCiAj
aWYgTE9HX0RJU0FCTEVECiAjZGVmaW5lIExPRyhjaGFubmVsLCAuLi4pICgodm9pZCkwKQorI2Rl
ZmluZSBMT0dfSUYoaXNBbGxvd2VkLCBjaGFubmVsLCAuLi4pICgodm9pZCkwKQogI2Vsc2UKICNk
ZWZpbmUgTE9HKGNoYW5uZWwsIC4uLikgV1RGTG9nKCZMT0dfQ0hBTk5FTChjaGFubmVsKSwgX19W
QV9BUkdTX18pCisjZGVmaW5lIExPR19JRihpc0FsbG93ZWQsIGNoYW5uZWwsIC4uLikgZG8geyBp
ZiAoaXNBbGxvd2VkKSBMT0coY2hhbm5lbCwgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQogI2Vu
ZGlmCiAKIC8qIExPR19WRVJCT1NFICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDdj
ZGNjNGIxNmJlMjJlNDc1ZTIyYTg2YWQwZTdhYzQ4ZGUxZGQxMTUuLjZlZmMxOGJmMWZhYTM5NDAy
NGM4ZWRjMDdmMzZkNWQyNDc4MTk5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0x
Miw2ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVBREVSUwogCiAgICAgY2YvQ0ZV
UkxFeHRyYXMuaAogICAgIGNmL1R5cGVDYXN0c0NGLmgKKyAgICBjZi9WZWN0b3JDRi5oCiAKICAg
ICBjb2NvYS9DcmFzaFJlcG9ydGVyLmgKICAgICBjb2NvYS9FbnRpdGxlbWVudHMuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9j
Zi9MYW5ndWFnZUNGLmNwcAppbmRleCBlMDczMTE1NDI5MWJmZDA3YzRjYzE2ZGEwNDJhYWFkYjU5
YzllM2IxLi5hZDdiMzQ3OWQxOWI0YjYwOTA3MWQ2YjMwZDRmZDNlMzBkNGZmMGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9jZi9MYW5ndWFnZUNGLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKyNpbmNsdWRl
IDx3dGYvY2YvVmVjdG9yQ0YuaD4KICNpbmNsdWRlIDx3dGYvc3BpL2NmL0NGQnVuZGxlU1BJLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTExNCwxMyArMTE2LDEzIEBA
IFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcygpCiAgICAgaWYg
KHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKENGTG9jYWxlQ29weVByZWZlcnJlZExhbmd1
YWdlcygpKTsKICAgICAgICAgbGFuZ3VhZ2VzID0gbWluaW1pemVkTGFuZ3VhZ2VzRnJvbUxhbmd1
YWdlcyhsYW5ndWFnZXMuZ2V0KCkpOwotICAgICAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQgPSBD
RkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzLmdldCgpKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZUNv
dW50KQotICAgICAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoImVuIik7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgbGFuZ3Vh
Z2VDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBw
ZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChsYW5ndWFnZXMuZ2V0KCksIGkpKSkpOwotICAgICAgICB9CisgICAg
ICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMgPSBtYWtlVmVjdG9yKGxhbmd1YWdlcy5nZXQoKSwg
W10gKENGVHlwZVJlZiBpdGVtKSAtPiBPcHRpb25hbDxTdHJpbmc+IHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGNmU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihpdGVtKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKGNmU3RyaW5nKTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
dXNlclByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICB1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzLmFwcGVuZCgiZW4iX3MpOwogICAgIH0KIAogICAgIFZlY3RvcjxTdHJpbmc+
IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDb3B5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Y2YvVmVjdG9yQ0YuaCBiL1NvdXJjZS9XVEYvd3RmL2NmL1ZlY3RvckNGLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGNkNTY1ZjMyN2VkZjcxYmM1Mzk2YTU0MDVhYzQyNDc1N2FmMzU4NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2NmL1ZlY3RvckNGLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gU3BlY2lhbGl6ZSB0aGUgYmVoYXZpb3Igb2Yg
dGhlc2UgZnVuY3Rpb25zIGJ5IG92ZXJsb2FkaW5nIHRoZSBtYWtlQ0ZBcnJheUVsZW1lbnQKKy8v
IGZ1bmN0aW9ucyBhbmQgbWFrZVZlY3RvckVsZW1lbnQgZnVuY3Rpb25zLiBUaGUgbWFrZUNGQXJy
YXlFbGVtZW50IGZ1bmN0aW9uIHRha2VzCisvLyBhIGNvbnN0JiB0byBhIGNvbGxlY3Rpb24gZWxl
bWVudCBhbmQgY2FuIHJldHVybiBlaXRoZXIgYSBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBvciBhIENG
VHlwZVJlZgorLy8gaWYgdGhlIHZhbHVlIGlzIGF1dG9yZWxlYXNlZC4gVGhlIG1ha2VWZWN0b3JF
bGVtZW50IGZ1bmN0aW9uIHRha2VzIGFuIGlnbm9yZWQKKy8vIHBvaW50ZXIgdG8gdGhlIHZlY3Rv
ciBlbGVtZW50IHR5cGUsIG1ha2luZyBhcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwIHdvcmssIGFu
ZCBhCisvLyBDRlR5cGVSZWYgZm9yIHRoZSBhcnJheSBlbGVtZW50LCBhbmQgcmV0dXJucyBhbiBP
cHRpb25hbDxUPiBvZiB0aGUgdGhlIHZlY3RvciBlbGVtZW50LAorLy8gYWxsb3dpbmcgdXMgdG8g
ZmlsdGVyIG91dCBhcnJheSBlbGVtZW50cyB0aGF0IGFyZSBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5
cGUuCisvLworLy8gICAgUmV0YWluUHRyPENGVHlwZVJlZj4gbWFrZUNGQXJyYXlFbGVtZW50KGNv
bnN0IENvbGxlY3Rpb25FbGVtZW50VHlwZSYgY29sbGVjdGlvbkVsZW1lbnQpOworLy8gICAgICAg
IC1vci0KKy8vICAgIENGVHlwZVJlZiBtYWtlQ0ZBcnJheUVsZW1lbnQoY29uc3QgVmVjdG9yRWxl
bWVudFR5cGUmIHZlY3RvckVsZW1lbnQpOworLy8KKy8vICAgIE9wdGlvbmFsPFZlY3RvckVsZW1l
bnRUeXBlPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50VHlwZSosIENGVHlw
ZVJlZiBhcnJheUVsZW1lbnQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4g
UmV0YWluUHRyPENGQXJyYXlSZWY+IGNyZWF0ZUNGQXJyYXkoQ29sbGVjdGlvblR5cGUmJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JFbGVtZW50VHlwZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRU
eXBlPiBtYWtlVmVjdG9yKENGQXJyYXlSZWYpOworCisvLyBUaGlzIG92ZXJsb2FkIG9mIGNyZWF0
ZUNGQXJyYXkgdGFrZXMgYSBmdW5jdGlvbiB0byBtYXAgZWFjaCB2ZWN0b3IgZWxlbWVudCB0byBh
IENvcmVGb3VuZGF0aW9uIG9iamVjdC4KKy8vIFRoZSBtYXAgZnVuY3Rpb24gaGFzIHRoZSBzYW1l
IGludGVyZmFjZSBhcyB0aGUgbWFrZUNGQXJyYXlFbGVtZW50IGZ1bmN0aW9uIGFib3ZlLCBidXQg
Y2FuIGJlIGFueQorLy8gZnVuY3Rpb24gaW5jbHVkaW5nIGEgbGFtYmRhLCBhIGZ1bmN0aW9uLWxp
a2Ugb2JqZWN0LCBvciBGdW5jdGlvbjw+LgordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRyPENGQXJyYXlSZWY+IGNyZWF0
ZUNGQXJyYXkoQ29sbGVjdGlvblR5cGUmJiwgTWFwRnVuY3Rpb25UeXBlJiYpOworCisvLyBUaGlz
IG92ZXJsb2FkIG9mIG1ha2VWZWN0b3IgdGFrZXMgYSBmdW5jdGlvbiB0byBtYXAgZWFjaCBDb3Jl
Rm91bmRhdGlvbiBvYmplY3QgdG8gYSB2ZWN0b3IgZWxlbWVudC4KKy8vIEN1cnJlbnRseSwgdGhl
IG1hcCBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYW4gT3B0aW9uYWwuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXBGdW5jdGlvblR5cGU+IFZlY3Rvcjx0eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHRf
dDxNYXBGdW5jdGlvblR5cGUsIENGVHlwZVJlZj46OnZhbHVlX3R5cGU+IG1ha2VWZWN0b3IoQ0ZB
cnJheVJlZiwgTWFwRnVuY3Rpb25UeXBlJiYpOworCisvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxz
IG9mIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgYWJvdmUuCisKK2lubGluZSB2b2lkIGFkZElmVmFs
aWQoQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXksIENGVHlwZVJlZiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUpCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgdmFsdWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4gUmV0YWluUHRyPENGQXJyYXlSZWY+IGNy
ZWF0ZUNGQXJyYXkoQ29sbGVjdGlvblR5cGUmJiBjb2xsZWN0aW9uKQoreworICAgIGF1dG8gYXJy
YXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHN0ZDo6c2l6ZShjb2xsZWN0aW9u
KSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZvciAoYXV0byYmIGVsZW1lbnQgOiBj
b2xsZWN0aW9uKQorICAgICAgICBhZGRJZlZhbGlkKGFycmF5LmdldCgpLCBnZXRQdHIobWFrZUNG
QXJyYXlFbGVtZW50KHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShlbGVtZW50KT4oZWxlbWVudCkpKSk7
CisgICAgcmV0dXJuIGFycmF5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlw
ZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY3JlYXRl
Q0ZBcnJheShDb2xsZWN0aW9uVHlwZSYmIGNvbGxlY3Rpb24sIE1hcEZ1bmN0aW9uVHlwZSYmIGZ1
bmN0aW9uKQoreworICAgIGF1dG8gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxl
KDAsIHN0ZDo6c2l6ZShjb2xsZWN0aW9uKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworICAg
IGZvciAoYXV0byYmIGVsZW1lbnQgOiBjb2xsZWN0aW9uKQorICAgICAgICBhZGRJZlZhbGlkKGFy
cmF5LmdldCgpLCBnZXRQdHIoc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPE1hcEZ1bmN0aW9uVHlw
ZT4oZnVuY3Rpb24pLCBzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoZWxlbWVudCk+KGVsZW1lbnQpKSkp
OworICAgIHJldHVybiBhcnJheTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yRWxlbWVu
dFR5cGU+IFZlY3RvcjxWZWN0b3JFbGVtZW50VHlwZT4gbWFrZVZlY3RvcihDRkFycmF5UmVmIGFy
cmF5KQoreworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJyYXkpOworCisg
ICAgVmVjdG9yPFZlY3RvckVsZW1lbnRUeXBlPiB2ZWN0b3I7CisgICAgdmVjdG9yLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY291bnQpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFZlY3RvckVsZW1lbnRUeXBlKiB0eXBl
ZE51bGwgPSBudWxscHRyOworICAgICAgICBpZiAoYXV0byB2ZWN0b3JFbGVtZW50ID0gbWFrZVZl
Y3RvckVsZW1lbnQodHlwZWROdWxsLCBDRkFycmF5R2V0VmFsdWVBdEluZGV4KGFycmF5LCBpKSkp
CisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZlY3RvckVsZW1l
bnQpKTsKKyAgICB9CisgICAgdmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHZlY3Rv
cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBWZWN0b3I8dHlwZW5h
bWUgc3RkOjppbnZva2VfcmVzdWx0X3Q8TWFwRnVuY3Rpb25UeXBlLCBDRlR5cGVSZWY+Ojp2YWx1
ZV90eXBlPiBtYWtlVmVjdG9yKENGQXJyYXlSZWYgYXJyYXksIE1hcEZ1bmN0aW9uVHlwZSYmIGZ1
bmN0aW9uKQoreworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXJyYXkpOwor
CisgICAgVmVjdG9yPHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdF90PE1hcEZ1bmN0aW9uVHlw
ZSwgQ0ZUeXBlUmVmPjo6dmFsdWVfdHlwZT4gdmVjdG9yOworICAgIHZlY3Rvci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNvdW50KTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIGlmIChhdXRvIHZlY3RvckVsZW1lbnQgPSBzdGQ6Omludm9rZShzdGQ6
OmZvcndhcmQ8TWFwRnVuY3Rpb25UeXBlPihmdW5jdGlvbiksIENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoYXJyYXksIGkpKSkKKyAgICAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZSgqdmVjdG9yRWxlbWVudCkpOworICAgIH0KKyAgICB2ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAg
ICByZXR1cm4gdmVjdG9yOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpj
cmVhdGVDRkFycmF5OwordXNpbmcgV1RGOjptYWtlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgKaW5kZXggOTc2ZmRjMTM4Y2M3ZjA5MzQ2YzdkZGQwM2FlMTUwYWZmOGY0NzQ3NS4uYWUyNGE1
ZDZlMzBkMTJiOGJiMDdlZGEzYTBhYjBjNWE2ODA3ZTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0ludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKKyNpZiBV
U0UoQ0YpCit0eXBlZGVmIGNvbnN0IHZvaWQgKkNGVHlwZVJlZjsKKyNlbmRpZgorCiAjaWZkZWYg
X19PQkpDX18KICNpbmNsdWRlIDxvYmpjL29iamMuaD4KICNlbmRpZgpAQCAtNDE5LDYgKzQyMywx
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8U3Ry
aW5nPiB7CiAgICAgc3RhdGljIFN0cmluZyBmbHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCB2b2lkKikgeyByZXR1cm4geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsgfQogfTsK
IAorI2lmIFVTRShDRikKK1dURl9FWFBPUlRfUFJJVkFURSBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBt
YWtlQ0ZBcnJheUVsZW1lbnQoY29uc3QgU3RyaW5nJik7CitXVEZfRVhQT1JUX1BSSVZBVEUgT3B0
aW9uYWw8U3RyaW5nPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBTdHJpbmcqLCBDRlR5cGVSZWYp
OworI2VuZGlmCisKICNpZmRlZiBfX09CSkNfXwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgUmV0YWlu
UHRyPGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L2NmL1N0cmluZ0NGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ0YuY3BwCmluZGV4IGUwNjZhMzk0MTkxYzRhYjA2MTE0NmFhZDk5Yzk3YjFlNTFk
NTljMjUuLjk4ZjllOTc1MDJkNmM1OWNhYmFhMTYwYWJlMjMwYWIxODliZmIzOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02Myw2ICs2NCwxOCBAQCBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IFN0cmluZzo6Y3JlYXRlQ0ZTdHJpbmcoKSBjb25zdAogICAgIHJl
dHVybiBtX2ltcGwtPmNyZWF0ZUNGU3RyaW5nKCk7CiB9CiAKK1JldGFpblB0cjxDRlR5cGVSZWY+
IG1ha2VDRkFycmF5RWxlbWVudChjb25zdCBTdHJpbmcmIHZlY3RvckVsZW1lbnQpCit7CisgICAg
cmV0dXJuIHZlY3RvckVsZW1lbnQuY3JlYXRlQ0ZTdHJpbmcoKTsKK30KKworT3B0aW9uYWw8U3Ry
aW5nPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBTdHJpbmcqLCBDRlR5cGVSZWYgYXJyYXlFbGVt
ZW50KQoreworICAgIGlmIChhdXRvIGNmU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihhcnJheUVsZW1lbnQpKQorICAgICAgICByZXR1cm4gU3RyaW5nKGNmU3RyaW5nKTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0YpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
Y3BwCmluZGV4IDYwOWVkMTExNGZkMTk5NmNlODk3M2I3NGM3OWJjN2ZlMDUyNmVkNzIuLmZjN2Qx
YjZkY2U5ZGEyODUzMDkxYjQ2MzQyMDEzMDM2YWE5MzkwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCkBAIC01Niw2
ICs1Niw3IEBACiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3RmL2NmL1Zl
Y3RvckNGLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTMzLDIzICsxMzQsMTkgQEAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlUHJvcGVydHlMaXN0UmVwcmVz
ZW50YXRpb24oQXIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUocHJvcGVydHlMaXN0LmdldCgpLCBMZWdhY3lXZWJBcmNoaXZlTWFpblJlc291cmNlS2V5
LCBtYWluUmVzb3VyY2VEaWN0LmdldCgpKTsKIAotICAgIGF1dG8gc3VicmVzb3VyY2VzQXJyYXkg
PSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIGFyY2hpdmUuc3VicmVzb3VyY2VzKCku
c2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChhdXRvJiByZXNvdXJj
ZSA6IGFyY2hpdmUuc3VicmVzb3VyY2VzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gc3VicmVzb3Vy
Y2UgPSBjcmVhdGVQcm9wZXJ0eUxpc3RSZXByZXNlbnRhdGlvbihyZXNvdXJjZS5wdHIoKSwgU3Vi
cmVzb3VyY2UpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKHN1YnJlc291cmNlc0Fy
cmF5LmdldCgpLCBzdWJyZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IExPRyhBcmNoaXZlcywgIkxlZ2FjeVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3JlYXRlIHByb3Bl
cnR5IGxpc3QgZm9yIHN1YnJlc291cmNlIik7Ci0gICAgfQorICAgIGF1dG8gc3VicmVzb3VyY2Vz
QXJyYXkgPSBjcmVhdGVDRkFycmF5KGFyY2hpdmUuc3VicmVzb3VyY2VzKCksIFsmXSAoY29uc3Qg
YXV0byYgcmVzb3VyY2UpIHsKKyAgICAgICAgYXV0byBzdWJyZXNvdXJjZSA9IGNyZWF0ZVByb3Bl
cnR5TGlzdFJlcHJlc2VudGF0aW9uKHJlc291cmNlLnB0cigpLCBTdWJyZXNvdXJjZSk7CisgICAg
ICAgIExPR19JRighc3VicmVzb3VyY2UsIEFyY2hpdmVzLCAiTGVnYWN5V2ViQXJjaGl2ZSAtIEZh
aWxlZCB0byBjcmVhdGUgcHJvcGVydHkgbGlzdCBmb3Igc3VicmVzb3VyY2UiKTsKKyAgICAgICAg
cmV0dXJuIHN1YnJlc291cmNlOworICAgIH0pOwogICAgIGlmIChDRkFycmF5R2V0Q291bnQoc3Vi
cmVzb3VyY2VzQXJyYXkuZ2V0KCkpKQogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwcm9w
ZXJ0eUxpc3QuZ2V0KCksIExlZ2FjeVdlYkFyY2hpdmVTdWJyZXNvdXJjZXNLZXksIHN1YnJlc291
cmNlc0FycmF5LmdldCgpKTsKIAotICAgIGF1dG8gc3ViZnJhbWVzQXJyYXkgPSBhZG9wdENGKENG
QXJyYXlDcmVhdGVNdXRhYmxlKDAsIGFyY2hpdmUuc3ViZnJhbWVBcmNoaXZlcygpLnNpemUoKSwg
JmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotICAgIGZvciAoYXV0byYgc3ViZnJhbWUgOiBhcmNo
aXZlLnN1YmZyYW1lQXJjaGl2ZXMoKSkgewotICAgICAgICBpZiAoYXV0byBzdWJmcmFtZUFyY2hp
dmUgPSBjcmVhdGVQcm9wZXJ0eUxpc3RSZXByZXNlbnRhdGlvbihzdWJmcmFtZS5nZXQoKSkpCi0g
ICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoc3ViZnJhbWVzQXJyYXkuZ2V0KCksIHN1YmZy
YW1lQXJjaGl2ZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIExPRyhBcmNoaXZl
cywgIkxlZ2FjeVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3JlYXRlIHByb3BlcnR5IGxpc3QgZm9y
IHN1YmZyYW1lIGFyY2hpdmUiKTsKLSAgICB9CisgICAgYXV0byBzdWJmcmFtZXNBcnJheSA9IGNy
ZWF0ZUNGQXJyYXkoYXJjaGl2ZS5zdWJmcmFtZUFyY2hpdmVzKCksIFsmXSAoY29uc3QgYXV0byYg
c3ViZnJhbWUpIHsKKyAgICAgICAgYXV0byBzdWJmcmFtZUFyY2hpdmUgPSBjcmVhdGVQcm9wZXJ0
eUxpc3RSZXByZXNlbnRhdGlvbihzdWJmcmFtZS5nZXQoKSk7CisgICAgICAgIExPR19JRighc3Vi
ZnJhbWVBcmNoaXZlLCBBcmNoaXZlcywgIkxlZ2FjeVdlYkFyY2hpdmUgLSBGYWlsZWQgdG8gY3Jl
YXRlIHByb3BlcnR5IGxpc3QgZm9yIHN1YmZyYW1lIGFyY2hpdmUiKTsKKyAgICAgICAgcmV0dXJu
IHN1YmZyYW1lQXJjaGl2ZTsKKyAgICB9KTsKICAgICBpZiAoQ0ZBcnJheUdldENvdW50KHN1YmZy
YW1lc0FycmF5LmdldCgpKSkKICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUocHJvcGVydHlM
aXN0LmdldCgpLCBMZWdhY3lXZWJBcmNoaXZlU3ViZnJhbWVBcmNoaXZlc0tleSwgc3ViZnJhbWVz
QXJyYXkuZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4IGNmMmUxYmVhMjViMGYwNzk5ODYzOTIwNTk0
NWRmMGVlZjkyZDNjNDIuLjFlNDE0MTdhZmI2MTVjNGYxOTczYWYxYjNhNTFmN2UyYjczMjczZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUYuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNp
bmNsdWRlIDx3dGYvY2YvVmVjdG9yQ0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgpAQCAtNDg1LDIxICs0ODYsMTUgQEAgVmVjdG9y
PFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZExhbmd1YWdl
cygpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQg
PSAwOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKE1BQ2Fw
dGlvbkFwcGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5ndWFnZXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW5Vc2VyKSk7Ci0gICAgaWYgKGxhbmd1YWdlcykKLSAgICAgICAgbGFuZ3VhZ2VDb3VudCA9
IENGQXJyYXlHZXRDb3VudChsYW5ndWFnZXMuZ2V0KCkpOwotCi0gICAgaWYgKCFsYW5ndWFnZUNv
dW50KQorICAgIGF1dG8gcGxhdGZvcm1DYXB0aW9uTGFuZ3VhZ2VzID0gYWRvcHRDRihNQUNhcHRp
b25BcHBlYXJhbmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2VzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluVXNlcikpOworICAgIGF1dG8gY2FwdGlvbkxhbmd1YWdlcyA9IHBsYXRmb3JtQ2FwdGlvbkxh
bmd1YWdlcyA/IG1ha2VWZWN0b3I8U3RyaW5nPihwbGF0Zm9ybUNhcHRpb25MYW5ndWFnZXMuZ2V0
KCkpIDogVmVjdG9yPFN0cmluZz4oKTsKKyAgICBpZiAoY2FwdGlvbkxhbmd1YWdlcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwcmVmZXJyZWRMYW5n
dWFnZXMoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci0g
ICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5yZXNlcnZlQ2FwYWNpdHkobGFuZ3VhZ2VDb3VudCAr
IHBsYXRmb3JtTGFuZ3VhZ2VzLnNpemUoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
bGFuZ3VhZ2VDb3VudDsgaSsrKQotICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVu
ZChzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChsYW5ndWFn
ZXMuZ2V0KCksIGkpKSk7Ci0KKyAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLnJlc2VydmVDYXBh
Y2l0eShjYXB0aW9uTGFuZ3VhZ2VzLnNpemUoKSArIHBsYXRmb3JtTGFuZ3VhZ2VzLnNpemUoKSk7
CisgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IoY2FwdGlvbkxhbmd1YWdl
cyk7CiAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IocGxhdGZvcm1MYW5n
dWFnZXMpOwotCiAgICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7CiB9CiAKQEAgLTUx
NCwyMCArNTA5LDEyIEBAIFZlY3RvcjxTdHJpbmc+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpwcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcygpIGNvCiAgICAgaWYgKHRlc3RpbmdN
b2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSB8fCAhY2FuTG9hZF9NZWRpYUFj
Y2Vzc2liaWxpdHlfTUFBdWRpYmxlTWVkaWFDb3B5UHJlZmVycmVkQ2hhcmFjdGVyaXN0aWNzKCkp
CiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpwcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcygpOwogCi0gICAgQ0ZJbmRleCBjaGFyYWN0ZXJpc3RpY0NvdW50ID0gMDsK
LSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2hhcmFjdGVyaXN0aWNzID0gYWRvcHRDRihNQUF1
ZGlibGVNZWRpYUNvcHlQcmVmZXJyZWRDaGFyYWN0ZXJpc3RpY3MoKSk7Ci0gICAgaWYgKGNoYXJh
Y3RlcmlzdGljcykKLSAgICAgICAgY2hhcmFjdGVyaXN0aWNDb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChjaGFyYWN0ZXJpc3RpY3MuZ2V0KCkpOwotCi0gICAgaWYgKCFjaGFyYWN0ZXJpc3RpY0NvdW50
KQorICAgIGF1dG8gcGxhdGZvcm1DaGFyYWN0ZXJpc3RpY3MgPSBhZG9wdENGKE1BQXVkaWJsZU1l
ZGlhQ29weVByZWZlcnJlZENoYXJhY3RlcmlzdGljcygpKTsKKyAgICBhdXRvIGNoYXJhY3Rlcmlz
dGljcyA9IHBsYXRmb3JtQ2hhcmFjdGVyaXN0aWNzID8gbWFrZVZlY3RvcjxTdHJpbmc+KHBsYXRm
b3JtQ2hhcmFjdGVyaXN0aWNzLmdldCgpKSA6IFZlY3RvcjxTdHJpbmc+KCk7CisgICAgaWYgKGNo
YXJhY3RlcmlzdGljcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZl
cmVuY2VzOjpwcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcygpOwogCi0gICAgVmVjdG9yPFN0
cmluZz4gdXNlclByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzOwotICAgIHVzZXJQcmVmZXJy
ZWRBdWRpb0NoYXJhY3RlcmlzdGljcy5yZXNlcnZlQ2FwYWNpdHkoY2hhcmFjdGVyaXN0aWNDb3Vu
dCk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY2hhcmFjdGVyaXN0aWNDb3VudDsgaSsr
KQotICAgICAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MuYXBwZW5kKHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNoYXJhY3RlcmlzdGlj
cy5nZXQoKSwgaSkpKTsKLQotICAgIHJldHVybiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJp
c3RpY3M7CisgICAgcmV0dXJuIGNoYXJhY3RlcmlzdGljczsKIH0KICNlbmRpZiAvLyBIQVZFKE1F
RElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9SZW1vdGVDb21tYW5kTGlzdGVuZXJDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCmluZGV4
IDA3ZTBlOTcwNmQ0ZmQ2ZmU0ZmNjOTM5MmQ5MzFhNjliNzIxMTYwOTYuLmViNzQ4NTg5MTRhYmQ4
M2NmYmQ2YTlkZTIwZmY0Mzg4ZGY1ODU0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW1wb3J0IDx3dGYvY2YvVmVjdG9yQ0YuaD4KIAogI2ltcG9ydCAiTWVkaWFSZW1v
dGVTb2Z0TGluay5oIgogCkBAIC0xMDUsMjMgKzEwNiwyMyBAQCB2b2lkIFJlbW90ZUNvbW1hbmRM
aXN0ZW5lckNvY29hOjp1cGRhdGVTdXBwb3J0ZWRDb21tYW5kcygpCiAgICAgaWYgKG1fY3VycmVu
dENvbW1hbmRzID09IGN1cnJlbnRDb21tYW5kcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBjb21tYW5kSW5mb0FycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBjdXJyZW50Q29tbWFuZHMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0gICAgZm9yIChhdXRvIHBsYXRmb3JtQ29tbWFuZCA6IGN1cnJlbnRDb21tYW5kcykg
ewotICAgICAgICBpZiAoaXNTZWVrQ29tbWFuZChwbGF0Zm9ybUNvbW1hbmQpICYmICFzdXBwb3J0
c1NlZWtpbmcoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGJvb2wgc3VwcG9ydHNTZWVr
aW5nID0gdGhpcy0+c3VwcG9ydHNTZWVraW5nKCk7CisgICAgYXV0byBjb21tYW5kSW5mb0FycmF5
ID0gY3JlYXRlQ0ZBcnJheShjdXJyZW50Q29tbWFuZHMsIFtzdXBwb3J0c1NlZWtpbmddIChhdXRv
IHBsYXRmb3JtQ29tbWFuZCkgLT4gUmV0YWluUHRyPE1STWVkaWFSZW1vdGVDb21tYW5kSW5mb1Jl
Zj4geworICAgICAgICBpZiAoaXNTZWVrQ29tbWFuZChwbGF0Zm9ybUNvbW1hbmQpICYmICFzdXBw
b3J0c1NlZWtpbmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBhdXRv
IGNvbW1hbmQgPSBtZWRpYVJlbW90ZUNvbW1hbmRGb3JQbGF0Zm9ybUNvbW1hbmQocGxhdGZvcm1D
b21tYW5kKTsKICAgICAgICAgQVNTRVJUKGNvbW1hbmQpOwogICAgICAgICBpZiAoIWNvbW1hbmQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgIGF1dG8gY29tbWFuZEluZm8gPSBhZG9wdENGKE1STWVkaWFSZW1vdGVDb21tYW5kSW5m
b0NyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KSk7CiAgICAgICAgIE1STWVkaWFSZW1vdGVDb21t
YW5kSW5mb1NldENvbW1hbmQoY29tbWFuZEluZm8uZ2V0KCksIGNvbW1hbmQudmFsdWUoKSk7CiAg
ICAgICAgIE1STWVkaWFSZW1vdGVDb21tYW5kSW5mb1NldEVuYWJsZWQoY29tbWFuZEluZm8uZ2V0
KCksIHRydWUpOwogICAgICAgICBpZiAocGxhdGZvcm1Db21tYW5kID09IFBsYXRmb3JtTWVkaWFT
ZXNzaW9uOjpTa2lwRm9yd2FyZENvbW1hbmQgfHwgcGxhdGZvcm1Db21tYW5kID09IFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpTa2lwQmFja3dhcmRDb21tYW5kKQogICAgICAgICAgICAgTVJNZWRpYVJl
bW90ZUNvbW1hbmRJbmZvU2V0T3B0aW9ucyhjb21tYW5kSW5mby5nZXQoKSwgKF9fYnJpZGdlIENG
RGljdGlvbmFyeVJlZikoQHsoX19icmlkZ2UgTlNTdHJpbmcgKilrTVJNZWRpYVJlbW90ZUNvbW1h
bmRJbmZvUHJlZmVycmVkSW50ZXJ2YWxzS2V5IDogQFtAKDE1LjApXX0pKTsKLSAgICAgICAgQ0ZB
cnJheUFwcGVuZFZhbHVlKGNvbW1hbmRJbmZvQXJyYXkuZ2V0KCksIGNvbW1hbmRJbmZvLmdldCgp
KTsKLSAgICB9CisgICAgICAgIHJldHVybiBjb21tYW5kSW5mbzsKKyAgICB9KTsKIAogICAgIE1S
TWVkaWFSZW1vdGVTZXRTdXBwb3J0ZWRDb21tYW5kcyhjb21tYW5kSW5mb0FycmF5LmdldCgpLCBN
Uk1lZGlhUmVtb3RlR2V0TG9jYWxPcmlnaW4oKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgbV9j
dXJyZW50Q29tbWFuZHMgPSBjdXJyZW50Q29tbWFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1h
dGlvbldpbi5jcHAKaW5kZXggZjU1NGE0NjQ2ZDQ1YmQ2NGI4YzNkN2I1YzQyNTg5YWI5YmRhYTRm
NS4uYTcxZTAxN2RlNDAwNWMxZTg4YzdiMzI0MTRiYmFhZGFmZGJkYjFkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRp
b25XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPFF1
YXJ0ekNvcmUvQ0FDRlRpbWluZ0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUNG
VmFsdWVGdW5jdGlvbi5oPgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FDRlZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9WZWN0b3JDRi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ0OCwxMSArNDQ5LDkgQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHYgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKDAs
IGtDRk51bWJlckZsb2F0VHlwZSwgJnZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRW
YWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gYXJyYXkgPSBjcmVh
dGVDRkFycmF5KHZhbHVlLCBbXSAoY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4g
YWRvcHRDRihDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZpdGVtKSk7Cisg
ICAgfSk7CiAKICAgICBDQUNGQW5pbWF0aW9uU2V0VmFsdWVzKG1fYW5pbWF0aW9uLmdldCgpLCBh
cnJheS5nZXQoKSk7CiB9CkBAIC00NjIsMTEgKzQ2MSw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbldpbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0
ZVRyYW5zZm9ybSh2YWx1ZVtpXSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXku
Z2V0KCksIHYuZ2V0KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2
YWx1ZSwgW10gKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSkgeworICAgICAgICByZXR1cm4gYWRvcHRD
RihDQUNGVmVjdG9yQ3JlYXRlVHJhbnNmb3JtKHRyYW5zZm9ybSkpOworICAgIH0pOwogCiAgICAg
Q0FDRkFuaW1hdGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwog
fQpAQCAtNDc2LDEyICs0NzMsMTAgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmV0
YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11
dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBDR0Zsb2F0
IGFbM10gPSB7IHZhbHVlW2ldLngoKSwgdmFsdWVbaV0ueSgpLCB2YWx1ZVtpXS56KCkgfTsKLSAg
ICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVh
dGUoMywgYSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0
KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW10gKGNv
bnN0IGF1dG8mIHBvaW50KSB7CisgICAgICAgIENHRmxvYXQgY2dDb29yZGluYXRlc1szXSA9IHsg
cG9pbnQueCgpLCBwb2ludC55KCksIHBvaW50LnooKSB9OworICAgICAgICByZXR1cm4gYWRvcHRD
RihDQUNGVmVjdG9yQ3JlYXRlKDMsIGNnQ29vcmRpbmF0ZXMpKTsKKyAgICB9KTsKIAogICAgIENB
Q0ZBbmltYXRpb25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKIH0K
QEAgLTQ5MSwxMyArNDg2LDExIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4mIHZhbHVlKQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmV0
YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11
dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIGNv
bXBvbmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICAgICAgQ0dG
bG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50
cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07Ci0gICAgICAgIFJldGFpblB0cjxDQUNGVmVjdG9y
UmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKLSAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKLSAgICB9CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUNGQXJyYXkodmFsdWUsIFtdIChjb25zdCBhdXRvJiBjb2xvcikgeworICAgICAg
ICBhdXRvIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAg
ICAgQ0dGbG9hdCBjZ0NvbXBvbmVudHNbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRz
LmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBjZ0NvbXBvbmVudHMpKTsKKyAgICB9KTsK
IAogICAgIENBQ0ZBbmltYXRpb25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5Lmdl
dCgpKTsKIH0KQEAgLTUyMCwxMSArNTEzLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRLZXlUaW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJl
dGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVN
dXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiB2ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJG
bG9hdFR5cGUsICZ2YWx1ZVtpXSkpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXku
Z2V0KCksIHYuZ2V0KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2
YWx1ZSwgW10gKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyRmxvYXRUeXBlLCAmaXRlbSkpOworICAgIH0pOwogCiAg
ICAgQ0FDRkFuaW1hdGlvblNldEtleVRpbWVzKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQo
KSk7CiB9CkBAIC01NDMsMTEgKzUzNCw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6
c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0
ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBSZXRh
aW5QdHI8Q0ZOdW1iZXJSZWY+IHYgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckZsb2F0VHlwZSwgJnZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJh
eS5nZXQoKSwgdG9DQUNGVGltaW5nRnVuY3Rpb24odmFsdWVbaV0sIHJldmVyc2UpLmdldCgpKTsK
LSAgICB9CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUNGQXJyYXkodmFsdWUsIFtyZXZlcnNlXSAo
Y29uc3QgYXV0byYgdGltaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIHRvQ0FDRlRpbWlu
Z0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLCByZXZlcnNlKTsKKyAgICB9KTsKIAogICAgIENBQ0ZB
bmltYXRpb25TZXRUaW1pbmdGdW5jdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgp
KTsKIH0KQEAgLTU1OSwxMSArNTQ4LDExIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6
Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYKIAogdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+JiB2YWx1ZSkKIHsKLSAgICBhdXRvIGFycmF5ID0gYWRv
cHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlD
YWxsQmFja3MpKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IHZhbHVlKSB7Ci0gICAgICAg
IGlmIChpczxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPihhbmltYXRpb24uZ2V0KCkpKQotICAgICAg
ICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBkb3duY2FzdDxQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgfQorICAg
IGF1dG8gYXJyYXkgPSBjcmVhdGVDRkFycmF5KHZhbHVlLCBbXSAoY29uc3QgYXV0byYgYW5pbWF0
aW9uKSAtPiBSZXRhaW5QdHI8Q0FDRkFuaW1hdGlvblJlZj4geworICAgICAgICBpZiAoaXM8UGxh
dGZvcm1DQUFuaW1hdGlvbldpbj4oYW5pbWF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbjsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CiAKICAgICBDQUNGQW5pbWF0aW9uU2V0QW5p
bWF0aW9ucyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29j
b2EuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jl
c29sdmVyQ29jb2EuY3BwCmluZGV4IDMwODAzNDM4NmZmY2IyNjlmZTI5YjMxNDA5ZTE4MzE5OGIy
Y2FlMDIuLmNiZDMzYmZhMjA0ODY2NjE5Mjc4NGUwOWFkYWZmMjNjMzBkMGZkMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZl
ckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3
b3JrUlRDUmVzb2x2ZXJDb2NvYS5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBVU0UoTElCV0VC
UlRDKQogCiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL2NmL1R5cGVD
YXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC00OSwxNSArNTEsMTEgQEAgc3RhdGljIHZvaWQgcmVzb2x2ZWROYW1lKENGSG9z
dFJlZiBob3N0UmVmLCBDRkhvc3RJbmZvVHlwZSB0eXBlSW5mbywgY29uc3QgQ0ZTdHIKICAgICBD
RkFycmF5UmVmIHJlc29sdmVkQWRkcmVzc2VzID0gKENGQXJyYXlSZWYpQ0ZIb3N0R2V0QWRkcmVz
c2luZyhob3N0UmVmLCAmcmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
KTsKIAotICAgIHNpemVfdCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChyZXNvbHZlZEFkZHJlc3Nl
cyk7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OklQQWRkcmVzcz4gYWRkcmVzc2VzOwotICAgIGFkZHJl
c3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKLQotICAgIGZvciAoc2l6ZV90IGlu
ZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAgICBDRkRhdGFSZWYgZGF0
YSA9IChDRkRhdGFSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXNvbHZlZEFkZHJlc3Nlcywg
aW5kZXgpOwotICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0gSVBBZGRyZXNzOjpmcm9tU29ja0Fk
ZHJJbjYoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHNvY2thZGRyX2luNio+KENGRGF0
YUdldEJ5dGVQdHIoZGF0YSkpKSkKLSAgICAgICAgICAgIGFkZHJlc3Nlcy51bmNoZWNrZWRBcHBl
bmQoKmFkZHJlc3MpOwotICAgIH0KKyAgICBhdXRvIGFkZHJlc3NlcyA9IG1ha2VWZWN0b3IocmVz
b2x2ZWRBZGRyZXNzZXMsIFtdIChDRlR5cGVSZWYgaXRlbSkgLT4gT3B0aW9uYWw8SVBBZGRyZXNz
PiB7CisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZEYXRhUmVmPihp
dGVtKSkKKyAgICAgICAgICAgIHJldHVybiBJUEFkZHJlc3M6OmZyb21Tb2NrQWRkckluNigqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42Kj4oQ0ZEYXRhR2V0Qnl0ZVB0
cihkYXRhKSkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0pOwogICAgIGlm
IChhZGRyZXNzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc29sdmVyLT5jb21wbGV0ZWQobWFr
ZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RE5TRXJyb3I6OkNhbm5vdFJlc29sdmUpKTsKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggZDk0MDAwYmEzNWU4
MzI1NjhmOWExOTljM2M4OTAxZGFhYjYwNmZhMi4uMTU5NTE2Zjg5MmZiNDA3MmMxYTRiY2EwMTIw
OTdiNmU1MGVhZDI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRp
b24uaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9jZi9WZWN0b3JDRi5oPgogCiAjaW5jbHVkZSA8cGFsL2Nv
Y29hL01lZGlhVG9vbGJveFNvZnRMaW5rLmg+CiAKQEAgLTI1OSwxMSArMjYwLDEwIEBAIE9TU3Rh
dHVzIE1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tBcnJheShDRkFycmF5UmVmKiB0cmFja0Fy
cmF5Q29weSkKICAgICBpZiAoKm1fcGFyc2VUcmFja3NTdGF0dXMgIT0gbm9FcnIpCiAgICAgICAg
IHJldHVybiAqbV9wYXJzZVRyYWNrc1N0YXR1czsKIAotICAgIGF1dG8gbXV0YWJsZUFycmF5ID0g
YWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShhbGxvY2F0b3IoKSwgQ2hlY2tlZDxDRkluZGV4
PihtX3RyYWNrUmVhZGVycy5zaXplKCkpLnVuc2FmZUdldCgpLCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0gICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFkZXJzKQotICAg
ICAgICBDRkFycmF5QXBwZW5kVmFsdWUobXV0YWJsZUFycmF5LmdldCgpLCB0cmFja1JlYWRlci0+
d3JhcHBlcigpKTsKLQotICAgICp0cmFja0FycmF5Q29weSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0
ZUNvcHkoYWxsb2NhdG9yKCksIG11dGFibGVBcnJheS5nZXQoKSkpLmxlYWtSZWYoKTsKKyAgICBh
dXRvIHRyYWNrUmVhZGVyV3JhcHBlcnMgPSBjcmVhdGVDRkFycmF5KG1fdHJhY2tSZWFkZXJzLCBb
XSAoY29uc3QgYXV0byYgdHJhY2tSZWFkZXIpIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrUmVhZGVy
LT53cmFwcGVyKCk7CisgICAgfSk7CisgICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlQ29weShhbGxvY2F0b3IoKSwgdHJhY2tSZWFkZXJXcmFwcGVycy5nZXQoKSkpLmxl
YWtSZWYoKTsKICAgICByZXR1cm4gbm9FcnI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKaW5kZXggYTM5
NDA2NDlmZGJmMmRlZDQ4NGE0ZTI2MTAyYjkyMWNjMjgwNzhmNy4uMTlmYTYxYjc5YTNmZTE0ZDZm
MzVlOGE5MDljMjBiMzJjMGEyNjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAg
LTQzNSwxMCArNDM2LDggQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVuY29k
ZVNlc3Npb25IaXN0b3J5KGNvbnN0IEJhY2tGb3J3YXJkTGlzdFN0YXQKICAgICBpZiAoIWJhY2tG
b3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleCkKICAgICAgICAgcmV0dXJuIGNyZWF0ZURpY3Rp
b25hcnkoeyB7IHNlc3Npb25IaXN0b3J5VmVyc2lvbktleSwgc2Vzc2lvbkhpc3RvcnlWZXJzaW9u
TnVtYmVyLmdldCgpIH0gfSk7CiAKLSAgICBhdXRvIGVudHJpZXMgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0
ZW1zLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIHNpemVfdCB0b3RhbERh
dGFTaXplID0gMDsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGJhY2tGb3J3YXJkTGlz
dFN0YXRlLml0ZW1zKSB7CisgICAgYXV0byBlbnRyaWVzID0gY3JlYXRlQ0ZBcnJheShiYWNrRm9y
d2FyZExpc3RTdGF0ZS5pdGVtcywgWyZdIChjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIGF1
dG8gdXJsID0gaXRlbS5wYWdlU3RhdGUubWFpbkZyYW1lU3RhdGUudXJsU3RyaW5nLmNyZWF0ZUNG
U3RyaW5nKCk7CiAgICAgICAgIGF1dG8gdGl0bGUgPSBpdGVtLnBhZ2VTdGF0ZS50aXRsZS5jcmVh
dGVDRlN0cmluZygpOwogICAgICAgICBhdXRvIG9yaWdpbmFsVVJMID0gaXRlbS5wYWdlU3RhdGUu
bWFpbkZyYW1lU3RhdGUub3JpZ2luYWxVUkxTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTQ0
NiwyOSArNDQ1LDI1IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbmNvZGVT
ZXNzaW9uSGlzdG9yeShjb25zdCBCYWNrRm9yd2FyZExpc3RTdGF0CiAgICAgICAgIGF1dG8gc2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeVZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGl0
ZW0ucGFnZVN0YXRlLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kpOwogICAgICAgICBhdXRv
IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZzaG91bGRPcGVuRXh0ZXJu
YWxVUkxzUG9saWN5VmFsdWUpKTsKIAotICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBlbnRyeURpY3Rpb25hcnk7Ci0KICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgIHRv
dGFsRGF0YVNpemUgKz0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOwogCi0gICAgICAgICAg
ICBlbnRyeURpY3Rpb25hcnkgPSBjcmVhdGVEaWN0aW9uYXJ5KHsKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVEaWN0aW9uYXJ5KHsKICAgICAgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50
cnlVUkxLZXksIHVybC5nZXQoKSB9LAogICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlF
bnRyeVRpdGxlS2V5LCB0aXRsZS5nZXQoKSB9LAogICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhp
c3RvcnlFbnRyeU9yaWdpbmFsVVJMS2V5LCBvcmlnaW5hbFVSTC5nZXQoKSB9LAogICAgICAgICAg
ICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeURhdGFLZXksIGRhdGEuZ2V0KCkgfSwKICAgICAg
ICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5S2V5LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LmdldCgpIH0sCiAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVudHJ5RGljdGlvbmFyeSA9IGNy
ZWF0ZURpY3Rpb25hcnkoewotICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVS
TEtleSwgdXJsLmdldCgpIH0sCi0gICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5
VGl0bGVLZXksIHRpdGxlLmdldCgpIH0sCi0gICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9y
eUVudHJ5T3JpZ2luYWxVUkxLZXksIG9yaWdpbmFsVVJMLmdldCgpIH0sCi0gICAgICAgICAgICAg
ICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeUtleSwg
c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeS5nZXQoKSB9LAotICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50
cnlEaWN0aW9uYXJ5LmdldCgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVEaWN0aW9u
YXJ5KHsKKyAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSwgdXJsLmdldCgp
IH0sCisgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSwgdGl0bGUuZ2V0
KCkgfSwKKyAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeU9yaWdpbmFsVVJMS2V5LCBv
cmlnaW5hbFVSTC5nZXQoKSB9LAorICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5U2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeUtleSwgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eS5nZXQoKSB9LAorICAgICAgICB9KTsKKyAgICB9KTsKIAogICAgIHVpbnQzMl90IGN1cnJlbnRJ
bmRleCA9IGJhY2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleC52YWx1ZSgpOwogICAgIGF1
dG8gY3VycmVudEluZGV4TnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmY3VycmVudEluZGV4KSk7Cg==
</data>
<flag name="commit-queue"
          id="450570"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429385</attachid>
            <date>2021-05-21 19:05:35 -0700</date>
            <delta_ts>2021-05-21 23:05:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>226123.diff</filename>
            <type>text/plain</type>
            <size>38748</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjUxMzliYzA5NDA2ZjkwNjFmNTVmOTFlNGI2MTczNzQ3MzY3NDYxOC4uMTdjZGExYmM1
ZjE3YWJjM2RiNzYxNWY4NzIzMTcxOGY4MzE4NzRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAy
MS0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGBjcmVhdGVDRkFycmF5YCBqdXN0IGxpa2UgYGNyZWF0ZU5TQXJyYXlgCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9jZi9WZWN0b3JDRi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6YWRkSWZWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6Y3Jl
YXRlQ0ZBcnJheSk6CisgICAgICAgIChXVEY6Om1ha2VWZWN0b3IpOgorCisgICAgICAgICogd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMpOgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgICog
d3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwOgorICAgICAgICAoV1RGOjptYWtlQ0ZBcnJheUVsZW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bWFrZVZlY3RvckVsZW1lbnQpOiBBZGRlZC4KKyAg
ICAgICAgQWRkIGhlbHBlcnMgZm9yIGNvbnZlcnRpbmcgYENGU3RyaW5nUmVmYDwtPmBXVEY6OlN0
cmluZ2AuCisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5oOgorICAgICAgICBEcml2ZS1ieTog
QWRkIGBMT0dfSUZgIHRvIG1hdGNoIGBSRUxFQVNFX0xPR19JRmAuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtTWFjLmNtYWtlOgorICAg
ICAgICAqIHd0Zi9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtDb2NvYV0gVW5hYmxlIHRvIHVwbG9hZCBmaWxlcyB0aGF0IGFyZSBz
dG9yZWQgaW4gdGhlIGNsb3VkICh3aXRob3V0IGEgbG9jYWwgY29weSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjA3OTJlMmRmZDU1NWRhNWQ5ZTBlNjcyZDE0OWU5MDEzOWQzZTk5Li5jMzRhYmJkNDQ3NzI2YmM0
NzUwMDc1NTA5ZGNhMjlkZGY2MzgyOWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MjEtMDUtMjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBgY3JlYXRlQ0ZBcnJheWAganVzdCBsaWtlIGBjcmVhdGVOU0FycmF5YAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTIzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZVByb3BlcnR5TGlzdFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRMYW5ndWFnZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZEF1ZGlv
Q2hhcmFjdGVyaXN0aWNzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9SZW1vdGVD
b21tYW5kTGlzdGVuZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUNvbW1hbmRM
aXN0ZW5lckNvY29hOjp1cGRhdGVTdXBwb3J0ZWRDb21tYW5kcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwOgorICAgICAgICAo
UGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FB
bmltYXRpb25XaW46OnNldEtleVRpbWVzKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25X
aW46OnNldFRpbWluZ0Z1bmN0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRBbmltYXRpb25zKToKKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgbW9yZSBzdGF0aWMgTG9ja3Mgd2l0aCBDaGVja2Vk
TG9ja3MgaW4gV1RGIC8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2NjIyMzVjY2MzNWI4NGE4ZTRlMzNh
NThiNmVjYzBjMTIwYjI1OGJjLi5kNTBjMGYxMWI0ZTc4YjhlMjk0MDRlNGViODdkNDBmZDc1NmFi
ZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA1LTIxICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYGNyZWF0ZUNGQXJyYXlgIGp1c3Qg
bGlrZSBgY3JlYXRlTlNBcnJheWAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJl
YWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tB
cnJheSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtSVENSZXNvbHZl
ckNvY29hLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cmVzb2x2ZWROYW1lKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmVuY29kZVNlc3Npb25IaXN0b3J5KToKKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVW5hYmxlIHRvIHVwbG9hZCBmaWxl
cyB0aGF0IGFyZSBzdG9yZWQgaW4gdGhlIGNsb3VkICh3aXRob3V0IGEgbG9jYWwgY29weSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVkM2U3ZTRhNGRmNmJi
ZjAyZDE4OTBjMzgwYzg2ODIyNjU5M2Q2YTkuLjc2NzFjYTdjODIxMGIyZjUxZWRmNTRlNDkwYzJh
NTYzOTlkM2Y0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTA1LDYgKzUwNSw3IEBACiAJCTkzRDE5MUNGMjBDQUVDRTgwMEM1MUI4RSAvKiBvYmpjU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG9iamNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNEREU5MzExQ0RDMDUyRDAwRkQzNDkxIC8qIGR5bGRTUEkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gZHlsZFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTVBMDMyNDgyNjU4NkFGRjAwMzhCNjNFIC8qIFZlY3RvckNGLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlY3RvckNGLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtQdHIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTk2QjE3ODQxRUJBNDQxQzAwN0UxMEVCIC8qIERlYnVnVXRpbGl0aWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnVXRpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNjdGM0YxMjIyOEQ1MzEwMDMwREU5QyAvKiBX
ZWFrSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFzaFNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODM5LDYgKzg0MCw3IEBACiAJCQkJQTNFRTVDM0IyMUZGQUM3QzAw
RkFCRDYxIC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxQUZERTY0NzE5NTIwMUMzMDBD
NDhGRkEgLyogVHlwZUNhc3RzQ0YuaCAqLywKIAkJCQk1QzFGMDU5NDIxNjQzN0IzMDAzOTMwMkMg
LyogVVJMQ0YuY3BwICovLAorCQkJCTk1QTAzMjQ4MjY1ODZBRkYwMDM4QjYzRSAvKiBWZWN0b3JD
Ri5oICovLAogCQkJKTsKIAkJCXBhdGggPSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xMDk3LDYgKzEwOTksOCBAQAogCQkJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBM
YW5ndWFnZS5jcHAgKi8sCiAJCQkJQzJCQ0ZDM0YxRjYxRDEzMDAwQzkyMjJDIC8qIExhbmd1YWdl
LmggKi8sCiAJCQkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLywK
KwkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQuY3BwICovLAorCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAv
KiBMaXN0RHVtcC5oICovLAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oICovLAogCQkJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
LApAQCAtMTI1MSw4ICsxMjU1LDYgQEAKIAkJCQlBOEE0NzMwQzE1MUE4MjVCMDA0MTIzRkYgLyog
U2l6ZUxpbWl0cy5jcHAgKi8sCiAJCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxs
U2V0LmNwcCAqLywKIAkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21hbGxTZXQuaCAq
LywKLQkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwICovLAotCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1
NCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBT
b3J0ZWRBcnJheU1hcC5oICovLAogCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFu
bmluZ1RyZWUuaCAqLywKQEAgLTE3MDcsNyArMTcwOSw2IEBACiAJCQkJQThBNDczQjUxNTFBODI1
QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEOEI5RTE3
MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkzMzdCMkQ2QTI2NTQ2RUIzMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3
IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNDRDg5MkExNUMwMzkw
MjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xNzE4LDYgKzE3MTksNyBAQAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5n
dWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM0MjFGNjFENjE2MDBDOTIyMkMgLyog
TGFuZ3VhZ2VDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzUwM0JFNjIzQUFFMEFFMDA3MkU2
NkIgLyogTGFuZ3VhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMzN0IyRDZBMjY1NDZF
QjMwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0I4RTQxRDI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQ
b29sSUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzU1MUY2MjFGM0YwMEM5MjIyQyAv
KiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCmluZGV4IDEwOTM0
YWU0MDlmOTEyNjhhMTg3NmMzM2FiYjIxYTYwYWJlMjMyOTEuLjk2NTk5ZDdkNTBjNjM3N2JlMWI3
NDIzNzViMjY3MDIxNzlhNWVjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmgKQEAgLTQ4Myw4ICs0ODMsMTAg
QEAgY29uc3RleHByIGJvb2wgYXNzZXJ0aW9uRmFpbHVyZUR1ZVRvVW5yZWFjaGFibGVDb2RlID0g
ZmFsc2U7CiAKICNpZiBMT0dfRElTQUJMRUQKICNkZWZpbmUgTE9HKGNoYW5uZWwsIC4uLikgKCh2
b2lkKTApCisjZGVmaW5lIExPR19JRihpc0FsbG93ZWQsIGNoYW5uZWwsIC4uLikgKCh2b2lkKTAp
CiAjZWxzZQogI2RlZmluZSBMT0coY2hhbm5lbCwgLi4uKSBXVEZMb2coJkxPR19DSEFOTkVMKGNo
YW5uZWwpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgTE9HX0lGKGlzQWxsb3dlZCwgY2hhbm5lbCwg
Li4uKSBkbyB7IGlmIChpc0FsbG93ZWQpIExPRyhjaGFubmVsLCBfX1ZBX0FSR1NfXyk7IH0gd2hp
bGUgKDApCiAjZW5kaWYKIAogLyogTE9HX1ZFUkJPU0UgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1GVFcuY21h
a2UKaW5kZXggYmZhMTNkMWZlODBiLi4zZjI2ODkyNzE3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRlRX
LmNtYWtlCkBAIC0zOCw2ICszOCw3IEBAIGlmIChVU0VfQ0YpCiAgICAgbGlzdChBUFBFTkQgV1RG
X1BVQkxJQ19IRUFERVJTCiAgICAgICAgIGNmL0NGVVJMRXh0cmFzLmgKICAgICAgICAgY2YvVHlw
ZUNhc3RzQ0YuaAorICAgICAgICBjZi9WZWN0b3JDRi5oCiAKICAgICAgICAgdGV4dC9jZi9TdHJp
bmdDb25jYXRlbmF0ZUNGLmgKICAgICAgICAgdGV4dC9jZi9UZXh0QnJlYWtJdGVyYXRvckNGLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggN2NkY2M0YjE2YmUyMmU0NzVlMjJhODZhZDBl
N2FjNDhkZTFkZDExNS4uNmVmYzE4YmYxZmFhMzk0MDI0YzhlZGMwN2YzNmQ1ZDI0NzgxOTlkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGlzdChBUFBFTkQg
V1RGX1BVQkxJQ19IRUFERVJTCiAKICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgY2YvVHlwZUNh
c3RzQ0YuaAorICAgIGNmL1ZlY3RvckNGLmgKIAogICAgIGNvY29hL0NyYXNoUmVwb3J0ZXIuaAog
ICAgIGNvY29hL0VudGl0bGVtZW50cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDkw
ZmQyNmQ3OGM2OS4uZjNjMGE0MjUwM2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAt
MzYsNiArMzYsNyBAQCBpZiAoVVNFX0NGKQogICAgIGxpc3QoQVBQRU5EIFdURl9QVUJMSUNfSEVB
REVSUwogICAgICAgICBjZi9DRlVSTEV4dHJhcy5oCiAgICAgICAgIGNmL1R5cGVDYXN0c0NGLmgK
KyAgICAgICAgY2YvVmVjdG9yQ0YuaAogCiAgICAgICAgIHRleHQvY2YvU3RyaW5nQ29uY2F0ZW5h
dGVDRi5oCiAgICAgICAgIHRleHQvY2YvVGV4dEJyZWFrSXRlcmF0b3JDRi5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL0xh
bmd1YWdlQ0YuY3BwCmluZGV4IGUwNzMxMTU0MjkxYmZkMDdjNGNjMTZkYTA0MmFhYWRiNTljOWUz
YjEuLmFkN2IzNDc5ZDE5YjRiNjA5MDcxZDZiMzBkNGZkM2UzMGQ0ZmYwZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2Nm
L0xhbmd1YWdlQ0YuY3BwCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRM
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0
Zi9jZi9WZWN0b3JDRi5oPgogI2luY2x1ZGUgPHd0Zi9zcGkvY2YvQ0ZCdW5kbGVTUEkuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTE0LDEzICsxMTYsMTMgQEAgVmVj
dG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKICAgICBpZiAodXNl
clByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IGxhbmd1YWdlcyA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5UHJlZmVycmVkTGFuZ3VhZ2Vz
KCkpOwogICAgICAgICBsYW5ndWFnZXMgPSBtaW5pbWl6ZWRMYW5ndWFnZXNGcm9tTGFuZ3VhZ2Vz
KGxhbmd1YWdlcy5nZXQoKSk7Ci0gICAgICAgIENGSW5kZXggbGFuZ3VhZ2VDb3VudCA9IENGQXJy
YXlHZXRDb3VudChsYW5ndWFnZXMuZ2V0KCkpOwotICAgICAgICBpZiAoIWxhbmd1YWdlQ291bnQp
Ci0gICAgICAgICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZCgiZW4iKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBsYW5ndWFnZUNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQo
aHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGxhbmd1YWdlcy5nZXQoKSwgaSkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
dXNlclByZWZlcnJlZExhbmd1YWdlcyA9IG1ha2VWZWN0b3IobGFuZ3VhZ2VzLmdldCgpLCBbXSAo
Q0ZUeXBlUmVmIGl0ZW0pIC0+IE9wdGlvbmFsPFN0cmluZz4geworICAgICAgICAgICAgaWYgKGF1
dG8gY2ZTdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGl0ZW0pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBodHRwU3R5bGVMYW5ndWFnZUNvZGUoY2ZTdHJpbmcpOworICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICh1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMuYXBwZW5kKCJlbiJfcyk7CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gdXNl
clByZWZlcnJlZExhbmd1YWdlc0NvcHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9W
ZWN0b3JDRi5oIGIvU291cmNlL1dURi93dGYvY2YvVmVjdG9yQ0YuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2Q1
NjVmMzI3ZWRmNzFiYzUzOTZhNTQwNWFjNDI0NzU3YWYzNTg0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvY2YvVmVjdG9yQ0YuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBTcGVjaWFsaXplIHRoZSBiZWhhdmlvciBvZiB0aGVz
ZSBmdW5jdGlvbnMgYnkgb3ZlcmxvYWRpbmcgdGhlIG1ha2VDRkFycmF5RWxlbWVudAorLy8gZnVu
Y3Rpb25zIGFuZCBtYWtlVmVjdG9yRWxlbWVudCBmdW5jdGlvbnMuIFRoZSBtYWtlQ0ZBcnJheUVs
ZW1lbnQgZnVuY3Rpb24gdGFrZXMKKy8vIGEgY29uc3QmIHRvIGEgY29sbGVjdGlvbiBlbGVtZW50
IGFuZCBjYW4gcmV0dXJuIGVpdGhlciBhIFJldGFpblB0cjxDRlR5cGVSZWY+IG9yIGEgQ0ZUeXBl
UmVmCisvLyBpZiB0aGUgdmFsdWUgaXMgYXV0b3JlbGVhc2VkLiBUaGUgbWFrZVZlY3RvckVsZW1l
bnQgZnVuY3Rpb24gdGFrZXMgYW4gaWdub3JlZAorLy8gcG9pbnRlciB0byB0aGUgdmVjdG9yIGVs
ZW1lbnQgdHlwZSwgbWFraW5nIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAgd29yaywgYW5kIGEK
Ky8vIENGVHlwZVJlZiBmb3IgdGhlIGFycmF5IGVsZW1lbnQsIGFuZCByZXR1cm5zIGFuIE9wdGlv
bmFsPFQ+IG9mIHRoZSB0aGUgdmVjdG9yIGVsZW1lbnQsCisvLyBhbGxvd2luZyB1cyB0byBmaWx0
ZXIgb3V0IGFycmF5IGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4K
Ky8vCisvLyAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBtYWtlQ0ZBcnJheUVsZW1lbnQoY29uc3Qg
Q29sbGVjdGlvbkVsZW1lbnRUeXBlJiBjb2xsZWN0aW9uRWxlbWVudCk7CisvLyAgICAgICAgLW9y
LQorLy8gICAgQ0ZUeXBlUmVmIG1ha2VDRkFycmF5RWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50
VHlwZSYgdmVjdG9yRWxlbWVudCk7CisvLworLy8gICAgT3B0aW9uYWw8VmVjdG9yRWxlbWVudFR5
cGU+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFZlY3RvckVsZW1lbnRUeXBlKiwgQ0ZUeXBlUmVm
IGFycmF5RWxlbWVudCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gY3JlYXRlQ0ZBcnJheShDb2xsZWN0aW9uVHlwZSYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBlPiBWZWN0b3I8VmVjdG9yRWxlbWVudFR5cGU+
IG1ha2VWZWN0b3IoQ0ZBcnJheVJlZik7CisKKy8vIFRoaXMgb3ZlcmxvYWQgb2YgY3JlYXRlQ0ZB
cnJheSB0YWtlcyBhIGZ1bmN0aW9uIHRvIG1hcCBlYWNoIHZlY3RvciBlbGVtZW50IHRvIGEgQ29y
ZUZvdW5kYXRpb24gb2JqZWN0LgorLy8gVGhlIG1hcCBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgaW50
ZXJmYWNlIGFzIHRoZSBtYWtlQ0ZBcnJheUVsZW1lbnQgZnVuY3Rpb24gYWJvdmUsIGJ1dCBjYW4g
YmUgYW55CisvLyBmdW5jdGlvbiBpbmNsdWRpbmcgYSBsYW1iZGEsIGEgZnVuY3Rpb24tbGlrZSBv
YmplY3QsIG9yIEZ1bmN0aW9uPD4uCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwg
dHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY3JlYXRlQ0ZB
cnJheShDb2xsZWN0aW9uVHlwZSYmLCBNYXBGdW5jdGlvblR5cGUmJik7CisKKy8vIFRoaXMgb3Zl
cmxvYWQgb2YgbWFrZVZlY3RvciB0YWtlcyBhIGZ1bmN0aW9uIHRvIG1hcCBlYWNoIENvcmVGb3Vu
ZGF0aW9uIG9iamVjdCB0byBhIHZlY3RvciBlbGVtZW50LgorLy8gQ3VycmVudGx5LCB0aGUgbWFw
IGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBPcHRpb25hbC4KK3RlbXBsYXRlPHR5cGVuYW1l
IE1hcEZ1bmN0aW9uVHlwZT4gVmVjdG9yPHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdF90PE1h
cEZ1bmN0aW9uVHlwZSwgQ0ZUeXBlUmVmPjo6dmFsdWVfdHlwZT4gbWFrZVZlY3RvcihDRkFycmF5
UmVmLCBNYXBGdW5jdGlvblR5cGUmJik7CisKKy8vIEltcGxlbWVudGF0aW9uIGRldGFpbHMgb2Yg
dGhlIGZ1bmN0aW9uIHRlbXBsYXRlcyBhYm92ZS4KKworaW5saW5lIHZvaWQgYWRkSWZWYWxpZChD
Rk11dGFibGVBcnJheVJlZiBhcnJheSwgQ0ZUeXBlUmVmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSkKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCB2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY3JlYXRl
Q0ZBcnJheShDb2xsZWN0aW9uVHlwZSYmIGNvbGxlY3Rpb24pCit7CisgICAgYXV0byBhcnJheSA9
IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgc3RkOjpzaXplKGNvbGxlY3Rpb24pLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxl
Y3Rpb24pCisgICAgICAgIGFkZElmVmFsaWQoYXJyYXkuZ2V0KCksIGdldFB0cihtYWtlQ0ZBcnJh
eUVsZW1lbnQoc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGVsZW1lbnQpPihlbGVtZW50KSkpKTsKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0
eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+IFJldGFpblB0cjxDRkFycmF5UmVmPiBjcmVhdGVDRkFy
cmF5KENvbGxlY3Rpb25UeXBlJiYgY29sbGVjdGlvbiwgTWFwRnVuY3Rpb25UeXBlJiYgZnVuY3Rp
b24pCit7CisgICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwg
c3RkOjpzaXplKGNvbGxlY3Rpb24pLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9y
IChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCisgICAgICAgIGFkZElmVmFsaWQoYXJyYXku
Z2V0KCksIGdldFB0cihzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8TWFwRnVuY3Rpb25UeXBlPihm
dW5jdGlvbiksIHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShlbGVtZW50KT4oZWxlbWVudCkpKSk7Cisg
ICAgcmV0dXJuIGFycmF5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JFbGVtZW50VHlw
ZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRUeXBlPiBtYWtlVmVjdG9yKENGQXJyYXlSZWYgYXJyYXkp
Cit7CisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhcnJheSk7CisKKyAgICBW
ZWN0b3I8VmVjdG9yRWxlbWVudFR5cGU+IHZlY3RvcjsKKyAgICB2ZWN0b3IucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjb3VudCk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBjb25zdGV4cHIgY29uc3QgVmVjdG9yRWxlbWVudFR5cGUqIHR5cGVkTnVs
bCA9IG51bGxwdHI7CisgICAgICAgIGlmIChhdXRvIHZlY3RvckVsZW1lbnQgPSBtYWtlVmVjdG9y
RWxlbWVudCh0eXBlZE51bGwsIENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXJyYXksIGkpKSkKKyAg
ICAgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmVjdG9yRWxlbWVudCkp
OworICAgIH0KKyAgICB2ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gdmVjdG9yOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+IFZlY3Rvcjx0eXBlbmFtZSBz
dGQ6Omludm9rZV9yZXN1bHRfdDxNYXBGdW5jdGlvblR5cGUsIENGVHlwZVJlZj46OnZhbHVlX3R5
cGU+IG1ha2VWZWN0b3IoQ0ZBcnJheVJlZiBhcnJheSwgTWFwRnVuY3Rpb25UeXBlJiYgZnVuY3Rp
b24pCit7CisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhcnJheSk7CisKKyAg
ICBWZWN0b3I8dHlwZW5hbWUgc3RkOjppbnZva2VfcmVzdWx0X3Q8TWFwRnVuY3Rpb25UeXBlLCBD
RlR5cGVSZWY+Ojp2YWx1ZV90eXBlPiB2ZWN0b3I7CisgICAgdmVjdG9yLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoY291bnQpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgaWYgKGF1dG8gdmVjdG9yRWxlbWVudCA9IHN0ZDo6aW52b2tlKHN0ZDo6Zm9y
d2FyZDxNYXBGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwgQ0ZBcnJheUdldFZhbHVlQXRJbmRleChh
cnJheSwgaSkpKQorICAgICAgICAgICAgdmVjdG9yLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2
ZWN0b3JFbGVtZW50KSk7CisgICAgfQorICAgIHZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIHJl
dHVybiB2ZWN0b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmNyZWF0
ZUNGQXJyYXk7Cit1c2luZyBXVEY6Om1ha2VWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApp
bmRleCA5NzZmZGMxMzhjYzdmMDkzNDZjN2RkZDAzYWUxNTBhZmY4ZjQ3NDc1Li5hZTI0YTVkNmUz
MGQxMmI4YmIwN2VkYTNhMGFiMGM1YTY4MDdlNjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgK
QEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29u
dmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAorI2lmIFVTRShD
RikKK3R5cGVkZWYgY29uc3Qgdm9pZCAqQ0ZUeXBlUmVmOworI2VuZGlmCisKICNpZmRlZiBfX09C
SkNfXwogI2luY2x1ZGUgPG9iamMvb2JqYy5oPgogI2VuZGlmCkBAIC00MTksNiArNDIzLDExIEBA
IHRlbXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxTdHJpbmc+
IHsKICAgICBzdGF0aWMgU3RyaW5nIGZsdXNoKExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIHZvaWQqKSB7IHJldHVybiB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9OyB9CiB9OwogCisj
aWYgVVNFKENGKQorV1RGX0VYUE9SVF9QUklWQVRFIFJldGFpblB0cjxDRlR5cGVSZWY+IG1ha2VD
RkFycmF5RWxlbWVudChjb25zdCBTdHJpbmcmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBPcHRpb25h
bDxTdHJpbmc+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFN0cmluZyosIENGVHlwZVJlZik7Cisj
ZW5kaWYKKwogI2lmZGVmIF9fT0JKQ19fCiAKIFdURl9FWFBPUlRfUFJJVkFURSBSZXRhaW5QdHI8
aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9T
dHJpbmdDRi5jcHAKaW5kZXggZTA2NmEzOTQxOTFjNGFiMDYxMTQ2YWFkOTljOTdiMWU1MWQ1OWMy
NS4uOThmOWU5NzUwMmQ2YzU5Y2FiYWExNjBhYmUyMzBhYjE4OWJmYjM5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9jZi9TdHJpbmdDRi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPENvcmVG
b3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTYzLDYgKzY0LDE4IEBAIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gU3RyaW5nOjpjcmVhdGVDRlN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW1wbC0+Y3JlYXRlQ0ZTdHJpbmcoKTsKIH0KIAorUmV0YWluUHRyPENGVHlwZVJlZj4gbWFr
ZUNGQXJyYXlFbGVtZW50KGNvbnN0IFN0cmluZyYgdmVjdG9yRWxlbWVudCkKK3sKKyAgICByZXR1
cm4gdmVjdG9yRWxlbWVudC5jcmVhdGVDRlN0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+
IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFN0cmluZyosIENGVHlwZVJlZiBhcnJheUVsZW1lbnQp
Cit7CisgICAgaWYgKGF1dG8gY2ZTdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+
KGFycmF5RWxlbWVudCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoY2ZTdHJpbmcpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShDRikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAK
aW5kZXggNjA5ZWQxMTE0ZmQxOTk2Y2U4OTczYjc0Yzc5YmM3ZmUwNTI2ZWQ3Mi4uZmM3ZDFiNmRj
ZTlkYTI4NTMwOTFiNDYzNDIwMTMwMzZhYTkzOTA2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTU2LDYgKzU2
LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KKyNpbmNsdWRlIDx3dGYvY2YvVmVjdG9y
Q0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMzMsMjMgKzEzNCwxOSBAQCBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVQcm9wZXJ0eUxpc3RSZXByZXNlbnRh
dGlvbihBcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1
ZShwcm9wZXJ0eUxpc3QuZ2V0KCksIExlZ2FjeVdlYkFyY2hpdmVNYWluUmVzb3VyY2VLZXksIG1h
aW5SZXNvdXJjZURpY3QuZ2V0KCkpOwogCi0gICAgYXV0byBzdWJyZXNvdXJjZXNBcnJheSA9IGFk
b3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgYXJjaGl2ZS5zdWJyZXNvdXJjZXMoKS5zaXpl
KCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlIDog
YXJjaGl2ZS5zdWJyZXNvdXJjZXMoKSkgewotICAgICAgICBpZiAoYXV0byBzdWJyZXNvdXJjZSA9
IGNyZWF0ZVByb3BlcnR5TGlzdFJlcHJlc2VudGF0aW9uKHJlc291cmNlLnB0cigpLCBTdWJyZXNv
dXJjZSkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoc3VicmVzb3VyY2VzQXJyYXku
Z2V0KCksIHN1YnJlc291cmNlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTE9H
KEFyY2hpdmVzLCAiTGVnYWN5V2ViQXJjaGl2ZSAtIEZhaWxlZCB0byBjcmVhdGUgcHJvcGVydHkg
bGlzdCBmb3Igc3VicmVzb3VyY2UiKTsKLSAgICB9CisgICAgYXV0byBzdWJyZXNvdXJjZXNBcnJh
eSA9IGNyZWF0ZUNGQXJyYXkoYXJjaGl2ZS5zdWJyZXNvdXJjZXMoKSwgWyZdIChjb25zdCBhdXRv
JiByZXNvdXJjZSkgeworICAgICAgICBhdXRvIHN1YnJlc291cmNlID0gY3JlYXRlUHJvcGVydHlM
aXN0UmVwcmVzZW50YXRpb24ocmVzb3VyY2UucHRyKCksIFN1YnJlc291cmNlKTsKKyAgICAgICAg
TE9HX0lGKCFzdWJyZXNvdXJjZSwgQXJjaGl2ZXMsICJMZWdhY3lXZWJBcmNoaXZlIC0gRmFpbGVk
IHRvIGNyZWF0ZSBwcm9wZXJ0eSBsaXN0IGZvciBzdWJyZXNvdXJjZSIpOworICAgICAgICByZXR1
cm4gc3VicmVzb3VyY2U7CisgICAgfSk7CiAgICAgaWYgKENGQXJyYXlHZXRDb3VudChzdWJyZXNv
dXJjZXNBcnJheS5nZXQoKSkpCiAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHByb3BlcnR5
TGlzdC5nZXQoKSwgTGVnYWN5V2ViQXJjaGl2ZVN1YnJlc291cmNlc0tleSwgc3VicmVzb3VyY2Vz
QXJyYXkuZ2V0KCkpOwogCi0gICAgYXV0byBzdWJmcmFtZXNBcnJheSA9IGFkb3B0Q0YoQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoMCwgYXJjaGl2ZS5zdWJmcmFtZUFyY2hpdmVzKCkuc2l6ZSgpLCAma0NG
VHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChhdXRvJiBzdWJmcmFtZSA6IGFyY2hpdmUu
c3ViZnJhbWVBcmNoaXZlcygpKSB7Ci0gICAgICAgIGlmIChhdXRvIHN1YmZyYW1lQXJjaGl2ZSA9
IGNyZWF0ZVByb3BlcnR5TGlzdFJlcHJlc2VudGF0aW9uKHN1YmZyYW1lLmdldCgpKSkKLSAgICAg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShzdWJmcmFtZXNBcnJheS5nZXQoKSwgc3ViZnJhbWVB
cmNoaXZlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTE9HKEFyY2hpdmVzLCAi
TGVnYWN5V2ViQXJjaGl2ZSAtIEZhaWxlZCB0byBjcmVhdGUgcHJvcGVydHkgbGlzdCBmb3Igc3Vi
ZnJhbWUgYXJjaGl2ZSIpOwotICAgIH0KKyAgICBhdXRvIHN1YmZyYW1lc0FycmF5ID0gY3JlYXRl
Q0ZBcnJheShhcmNoaXZlLnN1YmZyYW1lQXJjaGl2ZXMoKSwgWyZdIChjb25zdCBhdXRvJiBzdWJm
cmFtZSkgeworICAgICAgICBhdXRvIHN1YmZyYW1lQXJjaGl2ZSA9IGNyZWF0ZVByb3BlcnR5TGlz
dFJlcHJlc2VudGF0aW9uKHN1YmZyYW1lLmdldCgpKTsKKyAgICAgICAgTE9HX0lGKCFzdWJmcmFt
ZUFyY2hpdmUsIEFyY2hpdmVzLCAiTGVnYWN5V2ViQXJjaGl2ZSAtIEZhaWxlZCB0byBjcmVhdGUg
cHJvcGVydHkgbGlzdCBmb3Igc3ViZnJhbWUgYXJjaGl2ZSIpOworICAgICAgICByZXR1cm4gc3Vi
ZnJhbWVBcmNoaXZlOworICAgIH0pOwogICAgIGlmIChDRkFycmF5R2V0Q291bnQoc3ViZnJhbWVz
QXJyYXkuZ2V0KCkpKQogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwcm9wZXJ0eUxpc3Qu
Z2V0KCksIExlZ2FjeVdlYkFyY2hpdmVTdWJmcmFtZUFyY2hpdmVzS2V5LCBzdWJmcmFtZXNBcnJh
eS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRi5jcHAKaW5kZXggY2YyZTFiZWEyNWIwZjA3OTk4NjM5MjA1OTQ1ZGYw
ZWVmOTJkM2M0Mi4uMWU0MTQxN2FmYjYxNWM0ZjE5NzNhZjFiM2E1MWY3ZTJiNzMyNzNlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1
ZGUgPHd0Zi9jZi9WZWN0b3JDRi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CkBAIC00ODUsMjEgKzQ4NiwxNSBAQCBWZWN0b3I8U3Ry
aW5nPiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6cHJlZmVycmVkTGFuZ3VhZ2VzKCkg
Y29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIENGSW5kZXggbGFuZ3VhZ2VDb3VudCA9IDA7
Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGxhbmd1YWdlcyA9IGFkb3B0Q0YoTUFDYXB0aW9u
QXBwZWFyYW5jZUNvcHlTZWxlY3RlZExhbmd1YWdlcyhrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
blVzZXIpKTsKLSAgICBpZiAobGFuZ3VhZ2VzKQotICAgICAgICBsYW5ndWFnZUNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGxhbmd1YWdlcy5nZXQoKSk7Ci0KLSAgICBpZiAoIWxhbmd1YWdlQ291bnQp
CisgICAgYXV0byBwbGF0Zm9ybUNhcHRpb25MYW5ndWFnZXMgPSBhZG9wdENGKE1BQ2FwdGlvbkFw
cGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5ndWFnZXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyKSk7CisgICAgYXV0byBjYXB0aW9uTGFuZ3VhZ2VzID0gcGxhdGZvcm1DYXB0aW9uTGFuZ3Vh
Z2VzID8gbWFrZVZlY3RvcjxTdHJpbmc+KHBsYXRmb3JtQ2FwdGlvbkxhbmd1YWdlcy5nZXQoKSkg
OiBWZWN0b3I8U3RyaW5nPigpOworICAgIGlmIChjYXB0aW9uTGFuZ3VhZ2VzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExhbmd1YWdl
cygpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLSAgICB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLnJlc2VydmVDYXBhY2l0eShsYW5ndWFnZUNvdW50ICsgcGxh
dGZvcm1MYW5ndWFnZXMuc2l6ZSgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBsYW5n
dWFnZUNvdW50OyBpKyspCi0gICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKHN0
YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGxhbmd1YWdlcy5n
ZXQoKSwgaSkpKTsKLQorICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMucmVzZXJ2ZUNhcGFjaXR5
KGNhcHRpb25MYW5ndWFnZXMuc2l6ZSgpICsgcGxhdGZvcm1MYW5ndWFnZXMuc2l6ZSgpKTsKKyAg
ICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZFZlY3RvcihjYXB0aW9uTGFuZ3VhZ2VzKTsK
ICAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZFZlY3RvcihwbGF0Zm9ybUxhbmd1YWdl
cyk7Ci0KICAgICByZXR1cm4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKIH0KIApAQCAtNTE0LDIw
ICs1MDksMTIgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY28KICAgICBpZiAodGVzdGluZ01vZGUo
KSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpIHx8ICFjYW5Mb2FkX01lZGlhQWNjZXNz
aWJpbGl0eV9NQUF1ZGlibGVNZWRpYUNvcHlQcmVmZXJyZWRDaGFyYWN0ZXJpc3RpY3MoKSkKICAg
ICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFj
dGVyaXN0aWNzKCk7CiAKLSAgICBDRkluZGV4IGNoYXJhY3RlcmlzdGljQ291bnQgPSAwOwotICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBjaGFyYWN0ZXJpc3RpY3MgPSBhZG9wdENGKE1BQXVkaWJs
ZU1lZGlhQ29weVByZWZlcnJlZENoYXJhY3RlcmlzdGljcygpKTsKLSAgICBpZiAoY2hhcmFjdGVy
aXN0aWNzKQotICAgICAgICBjaGFyYWN0ZXJpc3RpY0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGNo
YXJhY3RlcmlzdGljcy5nZXQoKSk7Ci0KLSAgICBpZiAoIWNoYXJhY3RlcmlzdGljQ291bnQpCisg
ICAgYXV0byBwbGF0Zm9ybUNoYXJhY3RlcmlzdGljcyA9IGFkb3B0Q0YoTUFBdWRpYmxlTWVkaWFD
b3B5UHJlZmVycmVkQ2hhcmFjdGVyaXN0aWNzKCkpOworICAgIGF1dG8gY2hhcmFjdGVyaXN0aWNz
ID0gcGxhdGZvcm1DaGFyYWN0ZXJpc3RpY3MgPyBtYWtlVmVjdG9yPFN0cmluZz4ocGxhdGZvcm1D
aGFyYWN0ZXJpc3RpY3MuZ2V0KCkpIDogVmVjdG9yPFN0cmluZz4oKTsKKyAgICBpZiAoY2hhcmFj
dGVyaXN0aWNzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCk7CiAKLSAgICBWZWN0b3I8U3RyaW5n
PiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7Ci0gICAgdXNlclByZWZlcnJlZEF1
ZGlvQ2hhcmFjdGVyaXN0aWNzLnJlc2VydmVDYXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsK
LSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjaGFyYWN0ZXJpc3RpY0NvdW50OyBpKyspCi0g
ICAgICAgIHVzZXJQcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhcmFjdGVyaXN0aWNzLmdl
dCgpLCBpKSkpOwotCi0gICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGlj
czsKKyAgICByZXR1cm4gY2hhcmFjdGVyaXN0aWNzOwogfQogI2VuZGlmIC8vIEhBVkUoTUVESUFf
QUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUmVtb3RlQ29tbWFuZExpc3RlbmVyQ29jb2EubW0KaW5kZXggMDdl
MGU5NzA2ZDRmZDZmZTRmY2M5MzkyZDkzMWE2OWI3MjExNjA5Ni4uZWI3NDg1ODkxNGFiZDgzY2Zi
ZDZhOWRlMjBmZjQzODhkZjU4NTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUmVtb3RlQ29tbWFuZExpc3RlbmVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUmVtb3RlQ29tbWFuZExpc3RlbmVyQ29jb2EubW0KQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbXBvcnQgPHd0Zi9jZi9WZWN0b3JDRi5oPgogCiAjaW1wb3J0ICJNZWRpYVJlbW90ZVNv
ZnRMaW5rLmgiCiAKQEAgLTEwNSwyMyArMTA2LDIzIEBAIHZvaWQgUmVtb3RlQ29tbWFuZExpc3Rl
bmVyQ29jb2E6OnVwZGF0ZVN1cHBvcnRlZENvbW1hbmRzKCkKICAgICBpZiAobV9jdXJyZW50Q29t
bWFuZHMgPT0gY3VycmVudENvbW1hbmRzKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNv
bW1hbmRJbmZvQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGN1cnJlbnRDb21tYW5kcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKGF1dG8gcGxhdGZvcm1Db21tYW5kIDogY3VycmVudENvbW1hbmRzKSB7Ci0g
ICAgICAgIGlmIChpc1NlZWtDb21tYW5kKHBsYXRmb3JtQ29tbWFuZCkgJiYgIXN1cHBvcnRzU2Vl
a2luZygpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgYm9vbCBzdXBwb3J0c1NlZWtpbmcg
PSB0aGlzLT5zdXBwb3J0c1NlZWtpbmcoKTsKKyAgICBhdXRvIGNvbW1hbmRJbmZvQXJyYXkgPSBj
cmVhdGVDRkFycmF5KGN1cnJlbnRDb21tYW5kcywgW3N1cHBvcnRzU2Vla2luZ10gKGF1dG8gcGxh
dGZvcm1Db21tYW5kKSAtPiBSZXRhaW5QdHI8TVJNZWRpYVJlbW90ZUNvbW1hbmRJbmZvUmVmPiB7
CisgICAgICAgIGlmIChpc1NlZWtDb21tYW5kKHBsYXRmb3JtQ29tbWFuZCkgJiYgIXN1cHBvcnRz
U2Vla2luZykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGF1dG8gY29t
bWFuZCA9IG1lZGlhUmVtb3RlQ29tbWFuZEZvclBsYXRmb3JtQ29tbWFuZChwbGF0Zm9ybUNvbW1h
bmQpOwogICAgICAgICBBU1NFUlQoY29tbWFuZCk7CiAgICAgICAgIGlmICghY29tbWFuZCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgYXV0byBjb21tYW5kSW5mbyA9IGFkb3B0Q0YoTVJNZWRpYVJlbW90ZUNvbW1hbmRJbmZvQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpKTsKICAgICAgICAgTVJNZWRpYVJlbW90ZUNvbW1hbmRJ
bmZvU2V0Q29tbWFuZChjb21tYW5kSW5mby5nZXQoKSwgY29tbWFuZC52YWx1ZSgpKTsKICAgICAg
ICAgTVJNZWRpYVJlbW90ZUNvbW1hbmRJbmZvU2V0RW5hYmxlZChjb21tYW5kSW5mby5nZXQoKSwg
dHJ1ZSk7CiAgICAgICAgIGlmIChwbGF0Zm9ybUNvbW1hbmQgPT0gUGxhdGZvcm1NZWRpYVNlc3Np
b246OlNraXBGb3J3YXJkQ29tbWFuZCB8fCBwbGF0Zm9ybUNvbW1hbmQgPT0gUGxhdGZvcm1NZWRp
YVNlc3Npb246OlNraXBCYWNrd2FyZENvbW1hbmQpCiAgICAgICAgICAgICBNUk1lZGlhUmVtb3Rl
Q29tbWFuZEluZm9TZXRPcHRpb25zKGNvbW1hbmRJbmZvLmdldCgpLCAoX19icmlkZ2UgQ0ZEaWN0
aW9uYXJ5UmVmKShAeyhfX2JyaWRnZSBOU1N0cmluZyAqKWtNUk1lZGlhUmVtb3RlQ29tbWFuZElu
Zm9QcmVmZXJyZWRJbnRlcnZhbHNLZXkgOiBAW0AoMTUuMCldfSkpOwotICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoY29tbWFuZEluZm9BcnJheS5nZXQoKSwgY29tbWFuZEluZm8uZ2V0KCkpOwot
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbW1hbmRJbmZvOworICAgIH0pOwogCiAgICAgTVJNZWRp
YVJlbW90ZVNldFN1cHBvcnRlZENvbW1hbmRzKGNvbW1hbmRJbmZvQXJyYXkuZ2V0KCksIE1STWVk
aWFSZW1vdGVHZXRMb2NhbE9yaWdpbigpLCBudWxscHRyLCBudWxscHRyKTsKICAgICBtX2N1cnJl
bnRDb21tYW5kcyA9IGN1cnJlbnRDb21tYW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9u
V2luLmNwcAppbmRleCBmNTU0YTQ2NDZkNDViZDY0YjhjM2Q3YjVjNDI1ODlhYjliZGFhNGY1Li5h
NzFlMDE3ZGU0MDA1YzFlODhjN2IzMjQxNGJiYWFkYWZkYmRiMWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8UXVhcnR6
Q29yZS9DQUNGVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxRdWFydHpDb3JlL0NBQ0ZWYWx1
ZUZ1bmN0aW9uLmg+CiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUNGVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDQ4LDExICs0NDksOSBAQCB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkK
ICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gdiA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVyRmxvYXRUeXBlLCAmdmFsdWVbaV0pKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFycmF5LmdldCgpLCB2LmdldCgpKTsKLSAgICB9CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUNG
QXJyYXkodmFsdWUsIFtdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgICAgIHJldHVybiBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckZsb2F0VHlwZSwgJml0ZW0pKTsKKyAgICB9
KTsKIAogICAgIENBQ0ZBbmltYXRpb25TZXRWYWx1ZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5
LmdldCgpKTsKIH0KQEAgLTQ2MiwxMSArNDYxLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cmkK
ICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlVHJh
bnNmb3JtKHZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQo
KSwgdi5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVDRkFycmF5KHZhbHVl
LCBbXSAoY29uc3QgYXV0byYgdHJhbnNmb3JtKSB7CisgICAgICAgIHJldHVybiBhZG9wdENGKENB
Q0ZWZWN0b3JDcmVhdGVUcmFuc2Zvcm0odHJhbnNmb3JtKSk7CisgICAgfSk7CiAKICAgICBDQUNG
QW5pbWF0aW9uU2V0VmFsdWVzKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7CiB9CkBA
IC00NzYsMTIgKzQ3MywxMCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJs
ZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENHRmxvYXQgYVsz
XSA9IHsgdmFsdWVbaV0ueCgpLCB2YWx1ZVtpXS55KCksIHZhbHVlW2ldLnooKSB9OwotICAgICAg
ICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSgz
LCBhKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7
Ci0gICAgfQorICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVDRkFycmF5KHZhbHVlLCBbXSAoY29uc3Qg
YXV0byYgcG9pbnQpIHsKKyAgICAgICAgQ0dGbG9hdCBjZ0Nvb3JkaW5hdGVzWzNdID0geyBwb2lu
dC54KCksIHBvaW50LnkoKSwgcG9pbnQueigpIH07CisgICAgICAgIHJldHVybiBhZG9wdENGKENB
Q0ZWZWN0b3JDcmVhdGUoMywgY2dDb29yZGluYXRlcykpOworICAgIH0pOwogCiAgICAgQ0FDRkFu
aW1hdGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQpAQCAt
NDkxLDEzICs0ODYsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbG9yPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJs
ZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gY29tcG9u
ZW50cyA9IHZhbHVlW2ldLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAgICAgICBDR0Zsb2F0
IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJs
dWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKLSAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+
IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwotICAgICAgICBDRkFycmF5QXBw
ZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwotICAgIH0KKyAgICBhdXRvIGFycmF5ID0g
Y3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIGF1
dG8gY29tcG9uZW50cyA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBD
R0Zsb2F0IGNnQ29tcG9uZW50c1s0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3Jl
ZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OworICAgICAgICByZXR1cm4g
YWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGNnQ29tcG9uZW50cykpOworICAgIH0pOwogCiAg
ICAgQ0FDRkFuaW1hdGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkp
OwogfQpAQCAtNTIwLDExICs1MTMsOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNl
dEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlKQogICAgIGlmIChhbmltYXRpb25U
eXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmV0YWlu
UHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFi
bGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8
Q0ZOdW1iZXJSZWY+IHYgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckZsb2F0
VHlwZSwgJnZhbHVlW2ldKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQo
KSwgdi5nZXQoKSk7Ci0gICAgfQorICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVDRkFycmF5KHZhbHVl
LCBbXSAoY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZpdGVtKSk7CisgICAgfSk7CiAKICAgICBD
QUNGQW5pbWF0aW9uU2V0S2V5VGltZXMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsK
IH0KQEAgLTU0MywxMSArNTM0LDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRU
aW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW8KICAgICBpZiAo
YW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRh
aW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0
YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJldGFpblB0
cjxDRk51bWJlclJlZj4gdiA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyRmxv
YXRUeXBlLCAmdmFsdWVbaV0pKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5Lmdl
dCgpLCB0b0NBQ0ZUaW1pbmdGdW5jdGlvbih2YWx1ZVtpXSwgcmV2ZXJzZSkuZ2V0KCkpOwotICAg
IH0KKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlQ0ZBcnJheSh2YWx1ZSwgW3JldmVyc2VdIChjb25z
dCBhdXRvJiB0aW1pbmdGdW5jdGlvbikgeworICAgICAgICByZXR1cm4gdG9DQUNGVGltaW5nRnVu
Y3Rpb24odGltaW5nRnVuY3Rpb24sIHJldmVyc2UpOworICAgIH0pOwogCiAgICAgQ0FDRkFuaW1h
dGlvblNldFRpbWluZ0Z1bmN0aW9ucyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwog
fQpAQCAtNTU5LDExICs1NDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5
VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJgogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQ
bGF0Zm9ybUNBQW5pbWF0aW9uPj4mIHZhbHVlKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdENG
KENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxC
YWNrcykpOwotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogdmFsdWUpIHsKLSAgICAgICAgaWYg
KGlzPFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KGFuaW1hdGlvbi5nZXQoKSkpCi0gICAgICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIGRvd25jYXN0PFBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4+KCphbmltYXRpb24pLm1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICB9CisgICAgYXV0
byBhcnJheSA9IGNyZWF0ZUNGQXJyYXkodmFsdWUsIFtdIChjb25zdCBhdXRvJiBhbmltYXRpb24p
IC0+IFJldGFpblB0cjxDQUNGQW5pbWF0aW9uUmVmPiB7CisgICAgICAgIGlmIChpczxQbGF0Zm9y
bUNBQW5pbWF0aW9uV2luPihhbmltYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KCphbmltYXRpb24pLm1fYW5pbWF0aW9uOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKIAogICAgIENBQ0ZBbmltYXRpb25TZXRBbmltYXRp
b25zKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2ZXJDb2NvYS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDUmVzb2x2
ZXJDb2NvYS5jcHAKaW5kZXggMzA4MDM0Mzg2ZmZjYjI2OWZlMjliMzE0MDllMTgzMTk4YjJjYWUw
Mi4uY2JkMzNiZmEyMDQ4NjY2MTkyNzg0ZTA5YWRhZmYyM2MzMGQwZmQxMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93ZWJydGMvTmV0d29ya1JUQ1Jlc29sdmVyQ29j
b2EuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtS
VENSZXNvbHZlckNvY29hLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIFVTRShMSUJXRUJSVEMp
CiAKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVmVjdG9yQ0YuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTQ5LDE1ICs1MSwxMSBAQCBzdGF0aWMgdm9pZCByZXNvbHZlZE5hbWUoQ0ZIb3N0UmVm
IGhvc3RSZWYsIENGSG9zdEluZm9UeXBlIHR5cGVJbmZvLCBjb25zdCBDRlN0cgogICAgIENGQXJy
YXlSZWYgcmVzb2x2ZWRBZGRyZXNzZXMgPSAoQ0ZBcnJheVJlZilDRkhvc3RHZXRBZGRyZXNzaW5n
KGhvc3RSZWYsICZyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwog
Ci0gICAgc2l6ZV90IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHJlc29sdmVkQWRkcmVzc2VzKTsK
LSAgICBWZWN0b3I8V2ViQ29yZTo6SVBBZGRyZXNzPiBhZGRyZXNzZXM7Ci0gICAgYWRkcmVzc2Vz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwotCi0gICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7Ci0gICAgICAgIENGRGF0YVJlZiBkYXRhID0g
KENGRGF0YVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJlc29sdmVkQWRkcmVzc2VzLCBpbmRl
eCk7Ci0gICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBJUEFkZHJlc3M6OmZyb21Tb2NrQWRkcklu
NigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42Kj4oQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSkpKQotICAgICAgICAgICAgYWRkcmVzc2VzLnVuY2hlY2tlZEFwcGVuZCgq
YWRkcmVzcyk7Ci0gICAgfQorICAgIGF1dG8gYWRkcmVzc2VzID0gbWFrZVZlY3RvcihyZXNvbHZl
ZEFkZHJlc3NlcywgW10gKENGVHlwZVJlZiBpdGVtKSAtPiBPcHRpb25hbDxJUEFkZHJlc3M+IHsK
KyAgICAgICAgaWYgKGF1dG8gZGF0YSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkRhdGFSZWY+KGl0ZW0p
KQorICAgICAgICAgICAgcmV0dXJuIElQQWRkcmVzczo6ZnJvbVNvY2tBZGRySW42KCpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqPihDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfSk7CiAgICAgaWYgKGFk
ZHJlc3Nlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzb2x2ZXItPmNvbXBsZXRlZChtYWtlVW5l
eHBlY3RlZChXZWJDb3JlOjpETlNFcnJvcjo6Q2Fubm90UmVzb2x2ZSkpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAppbmRleCBkOTQwMDBiYTM1ZTgzMjU2
OGY5YTE5OWMzYzg5MDFkYWFiNjA2ZmEyLi4xNTk1MTZmODkyZmI0MDcyYzFhNGJjYTAxMjA5N2I2
ZTUwZWFkMjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CisjaW5jbHVkZSA8d3RmL2NmL1ZlY3RvckNGLmg+CiAKICNpbmNsdWRlIDxwYWwvY29jb2Ev
TWVkaWFUb29sYm94U29mdExpbmsuaD4KIApAQCAtMjU5LDExICsyNjAsMTAgQEAgT1NTdGF0dXMg
TWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYqIHRyYWNrQXJyYXlD
b3B5KQogICAgIGlmICgqbV9wYXJzZVRyYWNrc1N0YXR1cyAhPSBub0VycikKICAgICAgICAgcmV0
dXJuICptX3BhcnNlVHJhY2tzU3RhdHVzOwogCi0gICAgYXV0byBtdXRhYmxlQXJyYXkgPSBhZG9w
dENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGFsbG9jYXRvcigpLCBDaGVja2VkPENGSW5kZXg+KG1f
dHJhY2tSZWFkZXJzLnNpemUoKSkudW5zYWZlR2V0KCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrUmVhZGVyIDogbV90cmFja1JlYWRlcnMpCi0gICAgICAg
IENGQXJyYXlBcHBlbmRWYWx1ZShtdXRhYmxlQXJyYXkuZ2V0KCksIHRyYWNrUmVhZGVyLT53cmFw
cGVyKCkpOwotCi0gICAgKnRyYWNrQXJyYXlDb3B5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlQ29w
eShhbGxvY2F0b3IoKSwgbXV0YWJsZUFycmF5LmdldCgpKSkubGVha1JlZigpOworICAgIGF1dG8g
dHJhY2tSZWFkZXJXcmFwcGVycyA9IGNyZWF0ZUNGQXJyYXkobV90cmFja1JlYWRlcnMsIFtdIChj
b25zdCBhdXRvJiB0cmFja1JlYWRlcikgeworICAgICAgICByZXR1cm4gdHJhY2tSZWFkZXItPndy
YXBwZXIoKTsKKyAgICB9KTsKKyAgICAqdHJhY2tBcnJheUNvcHkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGVDb3B5KGFsbG9jYXRvcigpLCB0cmFja1JlYWRlcldyYXBwZXJzLmdldCgpKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiBub0VycjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAppbmRleCBhMzk0MDY0
OWZkYmYyZGVkNDg0YTRlMjYxMDJiOTIxY2MyODA3OGY3Li4xOWZhNjFiNzlhM2ZlMTRkNmYzNWU4
YTkwOWMyMGIzMmMwYTI2NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3
dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVmVjdG9yQ0YuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDM1
LDEwICs0MzYsOCBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZW5jb2RlU2Vz
c2lvbkhpc3RvcnkoY29uc3QgQmFja0ZvcndhcmRMaXN0U3RhdAogICAgIGlmICghYmFja0Zvcndh
cmRMaXN0U3RhdGUuY3VycmVudEluZGV4KQogICAgICAgICByZXR1cm4gY3JlYXRlRGljdGlvbmFy
eSh7IHsgc2Vzc2lvbkhpc3RvcnlWZXJzaW9uS2V5LCBzZXNzaW9uSGlzdG9yeVZlcnNpb25OdW1i
ZXIuZ2V0KCkgfSB9KTsKIAotICAgIGF1dG8gZW50cmllcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFja0ZvcndhcmRMaXN0U3RhdGUuaXRlbXMu
c2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgc2l6ZV90IHRvdGFsRGF0YVNp
emUgPSAwOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogYmFja0ZvcndhcmRMaXN0U3Rh
dGUuaXRlbXMpIHsKKyAgICBhdXRvIGVudHJpZXMgPSBjcmVhdGVDRkFycmF5KGJhY2tGb3J3YXJk
TGlzdFN0YXRlLml0ZW1zLCBbJl0gKGNvbnN0IGF1dG8mIGl0ZW0pIHsKICAgICAgICAgYXV0byB1
cmwgPSBpdGVtLnBhZ2VTdGF0ZS5tYWluRnJhbWVTdGF0ZS51cmxTdHJpbmcuY3JlYXRlQ0ZTdHJp
bmcoKTsKICAgICAgICAgYXV0byB0aXRsZSA9IGl0ZW0ucGFnZVN0YXRlLnRpdGxlLmNyZWF0ZUNG
U3RyaW5nKCk7CiAgICAgICAgIGF1dG8gb3JpZ2luYWxVUkwgPSBpdGVtLnBhZ2VTdGF0ZS5tYWlu
RnJhbWVTdGF0ZS5vcmlnaW5hbFVSTFN0cmluZy5jcmVhdGVDRlN0cmluZygpOwpAQCAtNDQ2LDI5
ICs0NDUsMjUgQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVuY29kZVNlc3Np
b25IaXN0b3J5KGNvbnN0IEJhY2tGb3J3YXJkTGlzdFN0YXQKICAgICAgICAgYXV0byBzaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaXRlbS5w
YWdlU3RhdGUuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CiAgICAgICAgIGF1dG8gc2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDY0VHlwZSwgJnNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3lWYWx1ZSkpOwogCi0gICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVu
dHJ5RGljdGlvbmFyeTsKLQogICAgICAgICBpZiAoZGF0YSkgewogICAgICAgICAgICAgdG90YWxE
YXRhU2l6ZSArPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CiAKLSAgICAgICAgICAgIGVu
dHJ5RGljdGlvbmFyeSA9IGNyZWF0ZURpY3Rpb25hcnkoeworICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZURpY3Rpb25hcnkoewogICAgICAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVS
TEtleSwgdXJsLmdldCgpIH0sCiAgICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5
VGl0bGVLZXksIHRpdGxlLmdldCgpIH0sCiAgICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9y
eUVudHJ5T3JpZ2luYWxVUkxLZXksIG9yaWdpbmFsVVJMLmdldCgpIH0sCiAgICAgICAgICAgICAg
ICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5RGF0YUtleSwgZGF0YS5nZXQoKSB9LAogICAgICAgICAg
ICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3lL
ZXksIHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kuZ2V0KCkgfSwKICAgICAgICAgICAgIH0p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZW50cnlEaWN0aW9uYXJ5ID0gY3JlYXRl
RGljdGlvbmFyeSh7Ci0gICAgICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5
LCB1cmwuZ2V0KCkgfSwKLSAgICAgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlUaXRs
ZUtleSwgdGl0bGUuZ2V0KCkgfSwKLSAgICAgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50
cnlPcmlnaW5hbFVSTEtleSwgb3JpZ2luYWxVUkwuZ2V0KCkgfSwKLSAgICAgICAgICAgICAgICB7
IHNlc3Npb25IaXN0b3J5RW50cnlTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5S2V5LCBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LmdldCgpIH0sCi0gICAgICAgICAgICB9KTsKICAgICAg
ICAgfQogCi0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURp
Y3Rpb25hcnkuZ2V0KCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZURpY3Rpb25hcnko
eworICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCB1cmwuZ2V0KCkgfSwK
KyAgICAgICAgICAgIHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5LCB0aXRsZS5nZXQoKSB9
LAorICAgICAgICAgICAgeyBzZXNzaW9uSGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxLZXksIG9yaWdp
bmFsVVJMLmdldCgpIH0sCisgICAgICAgICAgICB7IHNlc3Npb25IaXN0b3J5RW50cnlTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5S2V5LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5Lmdl
dCgpIH0sCisgICAgICAgIH0pOworICAgIH0pOwogCiAgICAgdWludDMyX3QgY3VycmVudEluZGV4
ID0gYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4LnZhbHVlKCk7CiAgICAgYXV0byBj
dXJyZW50SW5kZXhOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtDRk51bWJlclNJbnQzMlR5cGUsICZjdXJyZW50SW5kZXgpKTsK
</data>
<flag name="review"
          id="450561"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="450586"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>