<?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>218893</bug_id>
          
          <creation_ts>2020-11-13 02:09:26 -0800</creation_ts>
          <short_desc>[WebAuthn] Implement SPI for AuthenticationServices.Framework</short_desc>
          <delta_ts>2020-11-21 00:11:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1707166</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-13 02:09:26 -0800</bug_when>
    <thetext>Implement SPI for AuthenticationServices.Framework.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707167</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-13 02:09:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/71364731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707168</commentid>
    <comment_count>2</comment_count>
      <attachid>414017</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-13 02:12:47 -0800</bug_when>
    <thetext>Created attachment 414017
WIP.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707234</commentid>
    <comment_count>3</comment_count>
      <attachid>414017</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-13 07:49:08 -0800</bug_when>
    <thetext>Comment on attachment 414017
WIP.patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:85
&gt; +    _WKPublicKeyCredentialTypePublicKey,

Why an enum with only one value?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:209
&gt; +@property (nullable, nonatomic, readonly, strong) _WKAuthenticationExtensionsClientOutputs* extensions;

* should be after space

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:246
&gt; +@interface _WKWebAuthenticationPanel (WKDeprecated)

WK_API_DEPRECATED or WK_API_DEPRECATED_WITH_REPLACEMENT

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:45
&gt; +    if (!(self = [super init]))

Do you intend to add more here?  You could just return [super init] or omit this entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707370</commentid>
    <comment_count>4</comment_count>
      <attachid>414017</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-13 13:28:25 -0800</bug_when>
    <thetext>Comment on attachment 414017
WIP.patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        [WebAuthn] Implement SPI for AuthenticationServices.Framework

This patch intends to get feedbacks from AuthenticationServices.Framework folks. And it&apos;s more or less a direct ObjC translations of the WebAuthn Web IDLs.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:85
&gt;&gt; +    _WKPublicKeyCredentialTypePublicKey,
&gt; 
&gt; Why an enum with only one value?

That&apos;s what&apos;s in the Web IDL...

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:206
&gt; +@interface _WKAuthenticatorResponse : NSObject &lt;NSSecureCoding, NSCopying&gt;

Note: ClientData will not be returned here.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:209
&gt;&gt; +@property (nullable, nonatomic, readonly, strong) _WKAuthenticationExtensionsClientOutputs* extensions;
&gt; 
&gt; * should be after space

Fixed.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:240
&gt; +- (void)makeCredentialWithHash:(NSData *)hash options:(_WKPublicKeyCredentialCreationOptions *)options completionHandler:(void (^)(_WKAuthenticatorAttestationResponse *, NSError *))handler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

Note: The hash is the clientDataHash.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:246
&gt;&gt; +@interface _WKWebAuthenticationPanel (WKDeprecated)
&gt; 
&gt; WK_API_DEPRECATED or WK_API_DEPRECATED_WITH_REPLACEMENT

Is there a way to mark those API as deprecated for a future release such that it won&apos;t affect the current client even if they set -Werror,-Wdeprecated-declarations?

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:45
&gt;&gt; +    if (!(self = [super init]))
&gt; 
&gt; Do you intend to add more here?  You could just return [super init] or omit this entirely.

This is a WIP. If I don&apos;t need initialize anything. I will omit this. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708455</commentid>
    <comment_count>5</comment_count>
      <attachid>414398</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-17 17:28:25 -0800</bug_when>
    <thetext>Created attachment 414398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708811</commentid>
    <comment_count>6</comment_count>
      <attachid>414494</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-18 15:17:31 -0800</bug_when>
    <thetext>Created attachment 414494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708813</commentid>
    <comment_count>7</comment_count>
      <attachid>414496</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-18 15:22:51 -0800</bug_when>
    <thetext>Created attachment 414496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708821</commentid>
    <comment_count>8</comment_count>
      <attachid>414496</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-18 15:38:17 -0800</bug_when>
    <thetext>Comment on attachment 414496
Patch

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

&gt; Source/WebKit/ChangeLog:15
&gt; +        is the change of ownerships. Priori to this change, AuthenticatorManager owns the APIWebAuthenticationPanel.

Prior

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:45
&gt; +    : m_manager(WTF::makeUnique&lt;AuthenticatorManager&gt;())

I think WTF:: is unnecessary here.

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:68
&gt; +    // FIXME&lt;rdar://problem/71509848&gt;: Remove the folowing deprecated methods.

Space and colon before &lt;
// FIXME: &lt;rdar:...
Also, is there something that should be done before these should be removed?  Why don&apos;t we just remove them in this patch?

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:79
&gt; +    std::unique_ptr&lt;WebKit::AuthenticatorManager&gt; m_manager; // FIXME(): Change to UniqueRef.

Why don&apos;t we just do this now?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:85
&gt; +    _WKPublicKeyCredentialTypePublicKey,

I don&apos;t think this one-value enum is useful unless there are plans to add to it.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:117
&gt; +- (instancetype)init NS_UNAVAILABLE;

new should also be NS_UNAVAILABLE

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:154
&gt; +@property (nonatomic, copy) NSNumber *alg;

This should have a better name.
&quot;algorithm&quot;?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:162
&gt; +@property (nonatomic) BOOL requireResidentKey; // Default to NO.

If this comment is necessary, please use header doc style like in our public API headers.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:173
&gt; +@property (nonatomic) _WKPublicKeyCredentialType type;

I feel like a lot of these should be readonly.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:182
&gt; +@property (nullable, nonatomic, copy) NSString *appid;

What is this?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:259
&gt; +// FIXME: &lt;rdar://problem/71509485&gt;

Please add some comment here or remove this.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:328
&gt; +    result.append((const uint8_t*)[data bytes], [data length]);

Dot syntax?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:496
&gt; +    return [[_WKAuthenticatorAttestationResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil attestationObject:[NSData dataWithBytes:data.attestationObject-&gt;data() length:data.attestationObject-&gt;byteLength()]];

This looks like a memory leak.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:543
&gt; +    return [[_WKAuthenticatorAssertionResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil authenticatorData:[NSData dataWithBytes:data.authenticatorData-&gt;data() length:data.authenticatorData-&gt;byteLength()] signature:[NSData dataWithBytes:data.signature-&gt;data() length:data.signature-&gt;byteLength()] userHandle:userHandle];

ditto

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:39
&gt; +// For testing only.

The name of this header makes this comment unnecessary.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1724
&gt; +    _WKAuthenticationExtensionsClientInputs *extensions = [[_WKAuthenticationExtensionsClientInputs alloc] init];

Let&apos;s not leak memory, even in tests.  This doesn&apos;t use ARC yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708913</commentid>
    <comment_count>9</comment_count>
      <attachid>414496</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-18 17:32:44 -0800</bug_when>
    <thetext>Comment on attachment 414496
Patch

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

Thanks Alex for reviewing this patch.

&gt;&gt; Source/WebKit/ChangeLog:15
&gt;&gt; +        is the change of ownerships. Priori to this change, AuthenticatorManager owns the APIWebAuthenticationPanel.
&gt; 
&gt; Prior

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:45
&gt;&gt; +    : m_manager(WTF::makeUnique&lt;AuthenticatorManager&gt;())
&gt; 
&gt; I think WTF:: is unnecessary here.

Removed.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:68
&gt;&gt; +    // FIXME&lt;rdar://problem/71509848&gt;: Remove the folowing deprecated methods.
&gt; 
&gt; Space and colon before &lt;
&gt; // FIXME: &lt;rdar:...
&gt; Also, is there something that should be done before these should be removed?  Why don&apos;t we just remove them in this patch?

Currently, Safari still needs those fields to function. Only after the new implementation is completed, we can safely remove those fields.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:79
&gt;&gt; +    std::unique_ptr&lt;WebKit::AuthenticatorManager&gt; m_manager; // FIXME(): Change to UniqueRef.
&gt; 
&gt; Why don&apos;t we just do this now?

There is another create method which doesn&apos;t set this field.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:85
&gt;&gt; +    _WKPublicKeyCredentialTypePublicKey,
&gt; 
&gt; I don&apos;t think this one-value enum is useful unless there are plans to add to it.

Yeah, probably not a big deal. Let&apos;s remove that.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:117
&gt;&gt; +- (instancetype)init NS_UNAVAILABLE;
&gt; 
&gt; new should also be NS_UNAVAILABLE

Added.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:154
&gt;&gt; +@property (nonatomic, copy) NSNumber *alg;
&gt; 
&gt; This should have a better name.
&gt; &quot;algorithm&quot;?

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:162
&gt;&gt; +@property (nonatomic) BOOL requireResidentKey; // Default to NO.
&gt; 
&gt; If this comment is necessary, please use header doc style like in our public API headers.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:173
&gt;&gt; +@property (nonatomic) _WKPublicKeyCredentialType type;
&gt; 
&gt; I feel like a lot of these should be readonly.

Probably doesn&apos;t matter given this is input.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:182
&gt;&gt; +@property (nullable, nonatomic, copy) NSString *appid;
&gt; 
&gt; What is this?

https://www.w3.org/TR/webauthn/#sctn-appid-extension

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:259
&gt;&gt; +// FIXME: &lt;rdar://problem/71509485&gt;
&gt; 
&gt; Please add some comment here or remove this.

Added.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:328
&gt;&gt; +    result.append((const uint8_t*)[data bytes], [data length]);
&gt; 
&gt; Dot syntax?

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:496
&gt;&gt; +    return [[_WKAuthenticatorAttestationResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil attestationObject:[NSData dataWithBytes:data.attestationObject-&gt;data() length:data.attestationObject-&gt;byteLength()]];
&gt; 
&gt; This looks like a memory leak.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:543
&gt;&gt; +    return [[_WKAuthenticatorAssertionResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil authenticatorData:[NSData dataWithBytes:data.authenticatorData-&gt;data() length:data.authenticatorData-&gt;byteLength()] signature:[NSData dataWithBytes:data.signature-&gt;data() length:data.signature-&gt;byteLength()] userHandle:userHandle];
&gt; 
&gt; ditto

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:39
&gt;&gt; +// For testing only.
&gt; 
&gt; The name of this header makes this comment unnecessary.

Removed.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1724
&gt;&gt; +    _WKAuthenticationExtensionsClientInputs *extensions = [[_WKAuthenticationExtensionsClientInputs alloc] init];
&gt; 
&gt; Let&apos;s not leak memory, even in tests.  This doesn&apos;t use ARC yet.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708914</commentid>
    <comment_count>10</comment_count>
      <attachid>414520</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-18 17:35:26 -0800</bug_when>
    <thetext>Created attachment 414520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709184</commentid>
    <comment_count>11</comment_count>
      <attachid>414520</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 11:04:15 -0800</bug_when>
    <thetext>Comment on attachment 414520
Patch

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

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:68
&gt; +    // FIXME: &lt;rdar://problem/71509848&gt; Remove the folowing deprecated methods.

...following...

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:76
&gt; +    // FIXME: &lt;rdar://problem/71509848&gt; Remove the folowing deprecated method.

...following...

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:82
&gt; +    // FIXME: &lt;rdar://problem/71509848&gt; Remove the folowing deprecated fields.

...following...

&gt; Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h:49
&gt; +    // FIXME&lt;rdar://problem/71509848&gt;: Remove the folowing deprecated fields.

...following...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709192</commentid>
    <comment_count>12</comment_count>
      <attachid>414520</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-19 11:18:14 -0800</bug_when>
    <thetext>Comment on attachment 414520
Patch

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

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:46
&gt; +    , m_client(WTF::makeUniqueRef&lt;WebAuthenticationPanelClient&gt;())

WTF:: unnecessary

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:51
&gt; +    : m_client(WTF::makeUniqueRef&lt;WebAuthenticationPanelClient&gt;())

ditto

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:56
&gt; +    using Respond = Variant&lt;Ref&lt;WebCore::AuthenticatorResponse&gt;, WebCore::ExceptionData&gt;;

Response

&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:69
&gt; +    using TransportSet = HashSet&lt;WebCore::AuthenticatorTransport, WTF::IntHash&lt;WebCore::AuthenticatorTransport&gt;, WTF::StrongEnumHashTraits&lt;WebCore::AuthenticatorTransport&gt;&gt;;

Could this be an OptionSet?  Ditto with all the Vector&lt;WebCore::AuthenticatorTransport&gt;

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:199
&gt; +@property (nullable, nonatomic, copy) NSNumber *timeout;

I would say this should be NSTimeInterval but there can be no timeout, hence the nullable.  The value backing this should probably be Optional&lt;Seconds&gt; instead of Optional&lt;unsigned&gt; so that one can specify a fraction of a second.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:39
&gt; ++ (WebCore::PublicKeyCredentialCreationOptions)convertToCoreCreationOptionsWithOptions:(_WKPublicKeyCredentialCreationOptions *)options WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));

I think it would be better if we just exposed the things we want to query in an ObjC API, like exposing the icon instead of a WebCore C++ structure through an ObjC API.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1449
&gt; +    RetainPtr&lt;_WKPublicKeyCredentialCreationOptions&gt; options = [[_WKPublicKeyCredentialCreationOptions alloc] initWithRp:rp.get() user:user.get() pubKeyCredParams:pubKeyCredParams];

adoptNS or this is a memory leak.  Same everywhere else in this test and other tests where we alloc init... without an autorelease or release.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1775
&gt; +    RetainPtr&lt;NSData&gt; nsHash = [NSData dataWithBytes:hash length:sizeof(hash)];

This is actually not a memory leak because dataWithBytes:length: returns an autoreleased NSData*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709240</commentid>
    <comment_count>13</comment_count>
      <attachid>414520</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 12:58:18 -0800</bug_when>
    <thetext>Comment on attachment 414520
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:46
&gt;&gt; +    , m_client(WTF::makeUniqueRef&lt;WebAuthenticationPanelClient&gt;())
&gt; 
&gt; WTF:: unnecessary

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp:51
&gt;&gt; +    : m_client(WTF::makeUniqueRef&lt;WebAuthenticationPanelClient&gt;())
&gt; 
&gt; ditto

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:56
&gt;&gt; +    using Respond = Variant&lt;Ref&lt;WebCore::AuthenticatorResponse&gt;, WebCore::ExceptionData&gt;;
&gt; 
&gt; Response

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h:69
&gt;&gt; +    using TransportSet = HashSet&lt;WebCore::AuthenticatorTransport, WTF::IntHash&lt;WebCore::AuthenticatorTransport&gt;, WTF::StrongEnumHashTraits&lt;WebCore::AuthenticatorTransport&gt;&gt;;
&gt; 
&gt; Could this be an OptionSet?  Ditto with all the Vector&lt;WebCore::AuthenticatorTransport&gt;

It really doesn&apos;t matter at this point given the field will be removed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:199
&gt;&gt; +@property (nullable, nonatomic, copy) NSNumber *timeout;
&gt; 
&gt; I would say this should be NSTimeInterval but there can be no timeout, hence the nullable.  The value backing this should probably be Optional&lt;Seconds&gt; instead of Optional&lt;unsigned&gt; so that one can specify a fraction of a second.

That&apos;s what is suggested in the Web IDL.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h:39
&gt;&gt; ++ (WebCore::PublicKeyCredentialCreationOptions)convertToCoreCreationOptionsWithOptions:(_WKPublicKeyCredentialCreationOptions *)options WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; I think it would be better if we just exposed the things we want to query in an ObjC API, like exposing the icon instead of a WebCore C++ structure through an ObjC API.

The purpose is to test if the objc options are translated well into the C++ options. So, that&apos;s why. The underneath functionality once the options are set correctly is well tested with layout tests. So it will be redundant to do a full set of integrated tests to test the correctness of the options. That&apos;s why I think unit tests like this will make more sense.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1449
&gt;&gt; +    RetainPtr&lt;_WKPublicKeyCredentialCreationOptions&gt; options = [[_WKPublicKeyCredentialCreationOptions alloc] initWithRp:rp.get() user:user.get() pubKeyCredParams:pubKeyCredParams];
&gt; 
&gt; adoptNS or this is a memory leak.  Same everywhere else in this test and other tests where we alloc init... without an autorelease or release.

Fixed.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:1775
&gt;&gt; +    RetainPtr&lt;NSData&gt; nsHash = [NSData dataWithBytes:hash length:sizeof(hash)];
&gt; 
&gt; This is actually not a memory leak because dataWithBytes:length: returns an autoreleased NSData*

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709241</commentid>
    <comment_count>14</comment_count>
      <attachid>414613</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 12:59:31 -0800</bug_when>
    <thetext>Created attachment 414613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709260</commentid>
    <comment_count>15</comment_count>
      <attachid>414613</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-19 13:31:43 -0800</bug_when>
    <thetext>Comment on attachment 414613
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:270
&gt; +@interface _WKWebAuthenticationPanel (WKDeprecated)

Instead of this, use WK_API_DEPRECATED or WK_API_DEPRECATED_WITH_REPLACEMENT.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:51
&gt; +    _appid = appid;

All the other objects in our ObjC API (with a few exceptions that we should fix) are implemented by C++ objects.  This is implemented by copying all the C++ properties into ivars.  We should do the former instead.
Initializers should call API::Object::constructInWrapper
dealloc should call C++ destructor.
You&apos;ll need new API object types in APIObject.h and new calls to alloc in APIObject.mm
You&apos;ll need an API::ObjectStorage &quot;ivar&quot; with @package.
You&apos;ll need to define WrapperTraits for the API object types.
You&apos;ll probably need an *Internal.h header.  Also, it&apos;s a good pattern to have one class per header instead of cramming them all into one like this is now.

WKNavigationAction is a good example of this pattern.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:494
&gt; +    _WKAuthenticatorAttestationResponse* result = [[_WKAuthenticatorAttestationResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil attestationObject:[NSData dataWithBytes:data.attestationObject-&gt;data() length:data.attestationObject-&gt;byteLength()]];

Memory leak.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:536
&gt; +        extensions = [[_WKAuthenticationExtensionsClientOutputs alloc] initWithAppid:data.appid.value()];

Memory leak.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:542
&gt; +    _WKAuthenticatorAssertionResponse *result = [[_WKAuthenticatorAssertionResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil authenticatorData:[NSData dataWithBytes:data.authenticatorData-&gt;data() length:data.authenticatorData-&gt;byteLength()] signature:[NSData dataWithBytes:data.signature-&gt;data() length:data.signature-&gt;byteLength()] userHandle:userHandle];

Memory leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709277</commentid>
    <comment_count>16</comment_count>
      <attachid>414613</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 14:25:41 -0800</bug_when>
    <thetext>Comment on attachment 414613
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:270
&gt;&gt; +@interface _WKWebAuthenticationPanel (WKDeprecated)
&gt; 
&gt; Instead of this, use WK_API_DEPRECATED or WK_API_DEPRECATED_WITH_REPLACEMENT.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:51
&gt;&gt; +    _appid = appid;
&gt; 
&gt; All the other objects in our ObjC API (with a few exceptions that we should fix) are implemented by C++ objects.  This is implemented by copying all the C++ properties into ivars.  We should do the former instead.
&gt; Initializers should call API::Object::constructInWrapper
&gt; dealloc should call C++ destructor.
&gt; You&apos;ll need new API object types in APIObject.h and new calls to alloc in APIObject.mm
&gt; You&apos;ll need an API::ObjectStorage &quot;ivar&quot; with @package.
&gt; You&apos;ll need to define WrapperTraits for the API object types.
&gt; You&apos;ll probably need an *Internal.h header.  Also, it&apos;s a good pattern to have one class per header instead of cramming them all into one like this is now.
&gt; 
&gt; WKNavigationAction is a good example of this pattern.

I can see that being useful when there is a need to keep the binding between the C++ objects and the objc objects. But for what this API does, it&apos;s not necessary to do that. Also, all the fields in the response are needed to be copied and convert into NS types given they are all binaries.

I can do a follow up to separate this file into different ones.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:494
&gt;&gt; +    _WKAuthenticatorAttestationResponse* result = [[_WKAuthenticatorAttestationResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil attestationObject:[NSData dataWithBytes:data.attestationObject-&gt;data() length:data.attestationObject-&gt;byteLength()]];
&gt; 
&gt; Memory leak.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:536
&gt;&gt; +        extensions = [[_WKAuthenticationExtensionsClientOutputs alloc] initWithAppid:data.appid.value()];
&gt; 
&gt; Memory leak.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:542
&gt;&gt; +    _WKAuthenticatorAssertionResponse *result = [[_WKAuthenticatorAssertionResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId-&gt;data() length:data.rawId-&gt;byteLength()] extensions:nil authenticatorData:[NSData dataWithBytes:data.authenticatorData-&gt;data() length:data.authenticatorData-&gt;byteLength()] signature:[NSData dataWithBytes:data.signature-&gt;data() length:data.signature-&gt;byteLength()] userHandle:userHandle];
&gt; 
&gt; Memory leak.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709278</commentid>
    <comment_count>17</comment_count>
      <attachid>414619</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 14:27:02 -0800</bug_when>
    <thetext>Created attachment 414619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709307</commentid>
    <comment_count>18</comment_count>
      <attachid>414619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-19 15:51:07 -0800</bug_when>
    <thetext>Comment on attachment 414619
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:495
&gt; +    return result.get();

This is an overrelease. We are returning an object after destroying the RetainPtr keeping it alive.

There are two possible solutions:

1) Change the return type to RetainPtr.
2) Use autorelease() instead of ptr().

I prefer solution (1).

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:543
&gt; +    return result.get();

Same mistake again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709308</commentid>
    <comment_count>19</comment_count>
      <attachid>414619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-19 15:51:10 -0800</bug_when>
    <thetext>Comment on attachment 414619
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:495
&gt; +    return result.get();

This is an overrelease. We are returning an object after destroying the RetainPtr keeping it alive.

There are two possible solutions:

1) Change the return type to RetainPtr.
2) Use autorelease() instead of ptr().

I prefer solution (1).

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:543
&gt; +    return result.get();

Same mistake again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709312</commentid>
    <comment_count>20</comment_count>
      <attachid>414619</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 15:59:28 -0800</bug_when>
    <thetext>Comment on attachment 414619
Patch

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

Thanks Darin for reviewing this patch.

&gt;&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:495
&gt;&gt;&gt; +    return result.get();
&gt;&gt; 
&gt;&gt; This is an overrelease. We are returning an object after destroying the RetainPtr keeping it alive.
&gt;&gt; 
&gt;&gt; There are two possible solutions:
&gt;&gt; 
&gt;&gt; 1) Change the return type to RetainPtr.
&gt;&gt; 2) Use autorelease() instead of ptr().
&gt;&gt; 
&gt;&gt; I prefer solution (1).
&gt; 
&gt; This is an overrelease. We are returning an object after destroying the RetainPtr keeping it alive.
&gt; 
&gt; There are two possible solutions:
&gt; 
&gt; 1) Change the return type to RetainPtr.
&gt; 2) Use autorelease() instead of ptr().
&gt; 
&gt; I prefer solution (1).

Fixed.

&gt;&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:543
&gt;&gt;&gt; +    return result.get();
&gt;&gt; 
&gt;&gt; Same mistake again.
&gt; 
&gt; Same mistake again.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709313</commentid>
    <comment_count>21</comment_count>
      <attachid>414632</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 16:02:28 -0800</bug_when>
    <thetext>Created attachment 414632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709314</commentid>
    <comment_count>22</comment_count>
      <attachid>414632</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-19 16:08:10 -0800</bug_when>
    <thetext>Comment on attachment 414632
Patch

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

RetainPtr idioms look good. (This is not a review of the rest of the patch.)

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:533
&gt; +    RetainPtr&lt;_WKAuthenticationExtensionsClientOutputs&gt; extensions = nil;

No need for &quot;= nil&quot; with a RetainPtr; they get initialized to nil no matter what.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709329</commentid>
    <comment_count>23</comment_count>
      <attachid>414632</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 16:36:49 -0800</bug_when>
    <thetext>Comment on attachment 414632
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:533
&gt;&gt; +    RetainPtr&lt;_WKAuthenticationExtensionsClientOutputs&gt; extensions = nil;
&gt; 
&gt; No need for &quot;= nil&quot; with a RetainPtr; they get initialized to nil no matter what.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709334</commentid>
    <comment_count>24</comment_count>
      <attachid>414639</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 16:42:49 -0800</bug_when>
    <thetext>Created attachment 414639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709336</commentid>
    <comment_count>25</comment_count>
      <attachid>414640</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-19 16:46:17 -0800</bug_when>
    <thetext>Created attachment 414640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709351</commentid>
    <comment_count>26</comment_count>
      <attachid>414640</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-19 17:29:18 -0800</bug_when>
    <thetext>Comment on attachment 414640
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:31
&gt; +// FIXME: &lt;rdar://problem/71509848&gt; Separate the following different interfaces into separate files.

I&apos;m still not crazy about having a bunch of little objects that don&apos;t have their own header land in the repository.  Especially little objects that use ObjC-generated ivars unlike the rest of the API objects in WebKit.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:192
&gt; +- (instancetype)init NS_UNAVAILABLE;

new should also be NS_UNAVAILABLE here.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:270
&gt; +// FIXME: &lt;rdar://problem/71509848&gt; Remove the following deprecated method.
&gt; +@property (nonatomic, readonly, copy) NSString *relyingPartyID;

I think these should be annotated as deprecated with this change.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:337
&gt; +static void encodeEntity(WebCore::PublicKeyCredentialCreationOptions::Entity&amp; output, _WKPublicKeyCredentialEntity* input)

This looks a lot like returning by reference, but it&apos;s not.  I think it would be better to just have these two lines of code duplicated for the two different types of entities here.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:447
&gt; +    return result;

Would it be possible to return { attachment, key, verification }; instead of constructing an object, filling it in, and then returning it? Making this change would cause a compiler failure if we add something in the future and forget to update, and it also doesn&apos;t require default constructor to be called.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:512
&gt; +        }, [&amp;](const WebCore::ExceptionData&amp; exception) {
&gt; +            handler(nil, [NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:nil]);

Can we use the exception data instead of just reporting an unknown error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709407</commentid>
    <comment_count>27</comment_count>
      <attachid>414640</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 00:46:00 -0800</bug_when>
    <thetext>Comment on attachment 414640
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:31
&gt;&gt; +// FIXME: &lt;rdar://problem/71509848&gt; Separate the following different interfaces into separate files.
&gt; 
&gt; I&apos;m still not crazy about having a bunch of little objects that don&apos;t have their own header land in the repository.  Especially little objects that use ObjC-generated ivars unlike the rest of the API objects in WebKit.

Alright, I have separated those interfaces into separate files. However, I&apos;m not going to introduce APIObject for those interfaces given they are not practically useful here.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:192
&gt;&gt; +- (instancetype)init NS_UNAVAILABLE;
&gt; 
&gt; new should also be NS_UNAVAILABLE here.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:270
&gt;&gt; +@property (nonatomic, readonly, copy) NSString *relyingPartyID;
&gt; 
&gt; I think these should be annotated as deprecated with this change.

I don&apos;t want to break Safari now. Let&apos;s do that later.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:337
&gt;&gt; +static void encodeEntity(WebCore::PublicKeyCredentialCreationOptions::Entity&amp; output, _WKPublicKeyCredentialEntity* input)
&gt; 
&gt; This looks a lot like returning by reference, but it&apos;s not.  I think it would be better to just have these two lines of code duplicated for the two different types of entities here.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:447
&gt;&gt; +    return result;
&gt; 
&gt; Would it be possible to return { attachment, key, verification }; instead of constructing an object, filling it in, and then returning it? Making this change would cause a compiler failure if we add something in the future and forget to update, and it also doesn&apos;t require default constructor to be called.

I think writing it in this way is more clear than having a helper that just has one line of return code.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:512
&gt;&gt; +            handler(nil, [NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:nil]);
&gt; 
&gt; Can we use the exception data instead of just reporting an unknown error?

This patch is already pretty big. I would like to address that in &lt;rdar://problem/71509485&gt; given I might need to introduce some objc enum to do the translation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709411</commentid>
    <comment_count>28</comment_count>
      <attachid>414661</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 00:56:16 -0800</bug_when>
    <thetext>Created attachment 414661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709526</commentid>
    <comment_count>29</comment_count>
      <attachid>414661</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-20 10:00:51 -0800</bug_when>
    <thetext>Comment on attachment 414661
Patch

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

Getting closer.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:46
&gt; +/*!@discussion The default value is NO.*/

I think an empty line before this would be good.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:48
&gt; +/*!@discussion The default value is _WKUserVerificationRequirementPreferred.*/

ditto

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h:52
&gt; +- (instancetype)initWithRp:(_WKPublicKeyCredentialRpEntity *)rp user:(_WKPublicKeyCredentialUserEntity *)user pubKeyCredParams:(NSArray&lt;_WKPublicKeyCredentialParameters *&gt; *)pubKeyCredParams;

pubKeyCredParams -&gt; publicKeyCredentialParamaters
What is Rp?  I think that should be spelled out also.  Here and everywhere.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h:62
&gt; +/*!@discussion The default value is _WKAttestationConveyancePreferenceNone.*/

empty line before

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:42
&gt; +@property (nullable, nonatomic, copy) NSString *rpId;

Whatever rp is, then identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709587</commentid>
    <comment_count>30</comment_count>
      <attachid>414661</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 12:02:27 -0800</bug_when>
    <thetext>Comment on attachment 414661
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:46
&gt;&gt; +/*!@discussion The default value is NO.*/
&gt; 
&gt; I think an empty line before this would be good.

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h:48
&gt;&gt; +/*!@discussion The default value is _WKUserVerificationRequirementPreferred.*/
&gt; 
&gt; ditto

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h:52
&gt;&gt; +- (instancetype)initWithRp:(_WKPublicKeyCredentialRpEntity *)rp user:(_WKPublicKeyCredentialUserEntity *)user pubKeyCredParams:(NSArray&lt;_WKPublicKeyCredentialParameters *&gt; *)pubKeyCredParams;
&gt; 
&gt; pubKeyCredParams -&gt; publicKeyCredentialParamaters
&gt; What is Rp?  I think that should be spelled out also.  Here and everywhere.

I&apos;m following the naming conversions from the spec. https://www.w3.org/TR/webauthn/#dictdef-publickeycredentialcreationoptions.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h:62
&gt;&gt; +/*!@discussion The default value is _WKAttestationConveyancePreferenceNone.*/
&gt; 
&gt; empty line before

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:42
&gt;&gt; +@property (nullable, nonatomic, copy) NSString *rpId;
&gt; 
&gt; Whatever rp is, then identifier.

Again, this is the naming conversion from the spec: https://www.w3.org/TR/webauthn/#dictdef-publickeycredentialrequestoptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709589</commentid>
    <comment_count>31</comment_count>
      <attachid>414703</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 12:03:35 -0800</bug_when>
    <thetext>Created attachment 414703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709608</commentid>
    <comment_count>32</comment_count>
      <attachid>414703</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-11-20 12:59:23 -0800</bug_when>
    <thetext>Comment on attachment 414703
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:42
&gt; +@property (nullable, nonatomic, copy) NSString *rpId;

I still think this would be better as relyingPartyIdentifier, which is also mentioned in the spec in https://www.w3.org/TR/webauthn/#relying-party-identifier
Crypto has too many terms of art that are two or three letter abbreviations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709737</commentid>
    <comment_count>33</comment_count>
      <attachid>414703</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 23:14:04 -0800</bug_when>
    <thetext>Comment on attachment 414703
Patch

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

Thanks Alex for r+ this patch.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h:42
&gt;&gt; +@property (nullable, nonatomic, copy) NSString *rpId;
&gt; 
&gt; I still think this would be better as relyingPartyIdentifier, which is also mentioned in the spec in https://www.w3.org/TR/webauthn/#relying-party-identifier
&gt; Crypto has too many terms of art that are two or three letter abbreviations.

Let me fix that then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709739</commentid>
    <comment_count>34</comment_count>
      <attachid>414757</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-11-20 23:36:40 -0800</bug_when>
    <thetext>Created attachment 414757
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709741</commentid>
    <comment_count>35</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-21 00:11:57 -0800</bug_when>
    <thetext>Committed r270142: &lt;https://trac.webkit.org/changeset/270142&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414757.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414017</attachid>
            <date>2020-11-13 02:12:47 -0800</date>
            <delta_ts>2020-11-17 17:28:24 -0800</delta_ts>
            <desc>WIP.patch</desc>
            <filename>bug-218893-20201113021246.patch</filename>
            <type>text/plain</type>
            <size>9807</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5ZGYzY2RmNmY3ZjU3MWFk
MzkyMmMyNDIzN2MwNjc0ZmIxN2RjNjMuLmY5YmIwYjRmY2IzNzNiYmYxMDA4NTc4YmEwMjQ4ZWIw
ZDcxZDA1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMTEtMTMgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIEltcGxlbWVu
dCBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMuRnJhbWV3b3JrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg4OTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6Cisg
ICAgICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgbWFrZUNyZWRlbnRpYWxXaXRoSGFz
aDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIGdldEFzc2VydGlvbldpdGhIYXNoOm9wdGlvbnM6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgrW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgaXNVc2VyVmVyaWZ5
aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlXSk6CisKIDIwMjAtMTEtMDkgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBD
b250cm9sIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBwbGF0Zm9ybSBpbWFnZSBieSBhIG5ldyBjbGFz
cyBuYW1lZCBOYXRpdmVJbWFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5
YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5YTE1MzJkMzJlMy4uNGZlZDMxMjk3NTVjZjBlY2E4ZTVh
YThiMGIxMTRhZjk1MDliYmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC03NSw2
ICs3NSwyOCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlv
blNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7Cisg
ICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxh
dGZvcm0sCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxUeXBlKSB7CisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXksCit9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkg
eworICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkLAorICAgIF9XS1Vz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tVc2VyVmVyaWZpY2F0
aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
RGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworCiBAcHJvdG9jb2wgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbERlbGVnYXRlIDxO
U09iamVjdD4KIAogQG9wdGlvbmFsCkBAIC04NywxOCArMTA5LDE0NiBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlvblNvdXJjZSkgewogCiBAZW5kCiAKK1dL
X0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGlu
dGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IDogTlNPYmplY3QgPE5TU2VjdXJl
Q29kaW5nLCBOU0NvcHlpbmc+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbmFtZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
Kmljb247CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0
eSA6IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkKKworQHByb3BlcnR5IChudWxsYWJsZSwg
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsKKworQGVuZAorCitXS19DTEFT
U19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZh
Y2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRW50aXR5CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZp
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmRpc3BsYXlOYW1lOwor
CitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyA6IE5T
T2JqZWN0IDxOU1NlY3VyZUNvZGluZywgTlNDb3B5aW5nPgorCitAcHJvcGVydHkgKG5vbmF0b21p
YykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU051bWJlciAqYWxnOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNh
dG9yU2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdCA8TlNTZWN1cmVDb2RpbmcsIE5TQ29weWlu
Zz4KKworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF1
dGhlbnRpY2F0b3JBdHRhY2htZW50OyAvLyBEZWZhdWx0IHRvIF9XS0F1dGhlbnRpY2F0b3JBdHRh
Y2htZW50QWxsLgorQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50S2V5
OyAvLyBEZWZhdWx0IHRvIE5PLgorQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOyAvLyBEZWZhdWx0IHRvIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZC4KKworQGVuZAorCitXS19DTEFTU19BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgOiBOU09iamVjdCA8TlNTZWN1cmVDb2Rpbmcs
IE5TQ29weWluZz4KKworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxUeXBlIHR5cGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNEYXRhICppZGVudGlm
aWVyOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PE5TTnVt
YmVyICo+ICp0cmFuc3BvcnRzOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgOiBOU09iamVjdCA8TlNTZWN1cmVDb2RpbmcsIE5TQ29w
eWluZz4KKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
YXBwaWQ7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgOiBOU09iamVjdCA8TlNTZWN1cmVDb2RpbmcsIE5TQ29weWluZz4KKworQHByb3Bl
cnR5IChub25hdG9taWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpy
cDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxV
c2VyRW50aXR5ICp1c2VyOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNEYXRhICpj
aGFsbGVuZ2U7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtczsKKworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqdGltZW91dDsKK0Bwcm9wZXJ0
eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvciAqPiAqZXhjbHVkZUNyZWRlbnRpYWxzOworQHByb3BlcnR5IChudWxsYWJs
ZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAq
YXV0aGVudGljYXRvclNlbGVjdGlvbjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYykg
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSAqYXR0ZXN0YXRpb247IC8vIERlZmF1
bHQgdG8gX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmUuCitAcHJvcGVydHkg
KG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgOiBOU09iamVjdCA8TlNTZWN1cmVDb2RpbmcsIE5T
Q29weWluZz4KKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqY2hhbGxlbmdl
OworCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICp0aW1l
b3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqcnBJ
ZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFsczsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNh
dGlvbjsgLy8gRGVmYXVsdCB0byBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJy
ZWQuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitAZW5kCisKK1dLX0NM
QVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVy
ZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIDogTlNPYmplY3Qg
PE5TU2VjdXJlQ29kaW5nLCBOU0NvcHlpbmc+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCAqYXBwaWQ7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JS
ZXNwb25zZSA6IE5TT2JqZWN0IDxOU1NlY3VyZUNvZGluZywgTlNDb3B5aW5nPgorCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJvcGVydHkgKG51bGxh
YmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMqIGV4dGVuc2lvbnM7CisKK0BlbmQKKworCitXS19DTEFTU19BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dL
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9u
c2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF0dGVzdGF0aW9u
T2JqZWN0OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBOU0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVuZAorCiBXS19DTEFT
U19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZh
Y2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBwcm9wZXJ0eSAobnVs
bGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxEZWxl
Z2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5T
U3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNsZWFyQWxsTG9jYWxB
dXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZTsKIAorLSAoaW5zdGFuY2V0eXBlKWluaXQ7CisKKy0gKHZv
aWQpbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJv
ciAqKSloYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistICh2b2lkKWdldEFzc2VydGlvbldpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9w
dGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25z
ZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpY2FuY2VsOwogCiBAZW5kCiAKK0BpbnRlcmZh
Y2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tEZXByZWNhdGVkKQorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0
eXBlOworCitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbQppbmRleCA0YWVlNjI5ZTg3YmRlODEzODI3YzljYjQyZDQ4MmY3N2EyYWVkZTIxLi43
MjUxZGUzMjhkZjVmZjY3MWU3Zjk1YzhmZGQ3N2YwM2U2YzQwNDE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5tbQpAQCAtNDAsNiArNDAsMTMgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwgewogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKIAorLSAoaW5zdGFu
Y2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICByZXR1cm4gc2VsZjsKK30KKwogLSAodm9pZClkZWFsbG9jCiB7CiAg
ICAgX3BhbmVsLT5+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpOwpAQCAtMTM1LDYgKzE0MiwxOSBA
QCAtICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKy0gKHZvaWQpbWFrZUNyZWRlbnRpYWxXaXRo
SGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVu
dGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyCit7Cit9CisK
Ky0gKHZvaWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dL
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJy
b3IgKikpaGFuZGxlcgoreworfQorCisrIChCT09MKWlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0
aGVudGljYXRvckF2YWlsYWJsZQoreworICAgIHJldHVybiBZRVM7Cit9CisKICNpZiBFTkFCTEUo
V0VCX0FVVEhOKQogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9u
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414398</attachid>
            <date>2020-11-17 17:28:25 -0800</date>
            <delta_ts>2020-11-18 15:17:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201117172824.patch</filename>
            <type>text/plain</type>
            <size>61075</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZmM0ZDhkZWZhMzQ1NGIyZTEwYmJiN2IxZWE3MDBkMWJhYzNhYzkxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yaSB0byB0aGlzIGNoYW5nZSwg
QXV0aGVudGljYXRvck1hbmFnZXIgb3ducyB0aGUgQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC4K
KyAgICAgICAgTm93LCBpdCdzIHRoZSBvcHBvc2l0ZSB3YXkuCisKKyAgICAgICAgU2luY2UgdGhl
cmUgd2lsbCBiZSBhIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhlIGRlcHJlY2F0ZWQgaW1wbGVtZW50
YXRpb24gd2lsbCBjb2V4aXN0IHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAg
dGhpcyBwYXRoIGFsc28gbWFya3MgdGhpbmdzIHRoYXQgYXJlIG1lYW50IHRvIGRlcHJlY2F0ZSBp
biB0aGUgZnV0dXJlIHRvIHJlZHVjZSBjb25mdXNpb25zLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcDoKKyAgICAgICAgKEFQSTo6V2ViQXV0
aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChBUEk6
OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoQVBJOjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjYW5jZWwgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oOgorICAgICAgICBJbXBsZW1lbnRzIHRo
ZSBwbHVtYmluZyBmb3IgdGhlIG5ldyBTUEkgYW5kIG93bnMgdGhlIEF1dGhlbnRpY2F0b3JNYW5h
Z2VyIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cyBpbml0V2l0aEFwcGlkOl0pOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNh
dG9yUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOmF1
dGhlbnRpY2F0b3JEYXRhOnNpZ25hdHVyZTp1c2VySGFuZGxlOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6
YXR0ZXN0YXRpb25PYmplY3Q6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBpbml0XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgaW5pdFdpdGhScDp1c2VyOnB1YktleUNyZWRQYXJhbXM6XSk6CisgICAgICAg
ICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGluaXRXaXRoVHlwZTppZGVudGlm
aWVyOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGluaXRXaXRo
TmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgaW5p
dFdpdGhUeXBlOmFsZzpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVl
c3RPcHRpb25zIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IGluaXRXaXRoTmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFVz
ZXJFbnRpdHkgaW5pdFdpdGhOYW1lOmlkZW50aWZpZXI6ZGlzcGxheU5hbWU6XSk6CisgICAgICAg
ICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgaW5pdF0pOgorICAgICAgICAodmVjdG9yRnJv
bU5TRGF0YSk6CisgICAgICAgIChlbmNvZGVFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5
KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JUcmFuc3BvcnQpOgorICAgICAgICAoYXV0aGVudGljYXRvclRyYW5zcG9ydHMp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JBdHRhY2htZW50KToKKyAgICAgICAgKHVzZXJWZXJpZmljYXRpb24pOgorICAg
ICAgICAoYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKToKKyAgICAgICAgKGF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2UpOgorICAgICAgICAoYXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50SW5wdXRzKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm9wdGlvbnM6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgrW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRv
Q29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSk6CisgICAgICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpc1VzZXJWZXJpZnlpbmdQbGF0Zm9y
bUF1dGhlbnRpY2F0b3JBdmFpbGFibGVdKToKKyAgICAgICAgSW1wbGVtZW50cyB0aGUgU1BJLgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9u
UmVxdWVzdERhdGEuaDoKKyAgICAgICAgTWFya3MgdGhpbmdzIGFzIHRvIGRlcHJlY2F0ZS4KKwog
MjAyMC0xMS0xMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW21hY09TXSBJc3N1ZSBzYW5kYm94IGV4dGVuc2lvbiB0byB0aGUgV2ViQ29udGVudCBwcm9j
ZXNzIGZvciBjb20uYXBwbGUubHNrZGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKaW5kZXggOGY5MzU2MWRlMDM2MzcxNTk1NzkxZGZiYTBjZWMyYmJjYjhhYTRiMi4uYmMz
MzExOGI1OGYzNWZhODAzOGQ3ZDNjMGUzMzc3YzE0OWU3OGY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1ZGUgIkF0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJ
bnB1dHMuaCIKICNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKQEAgLTM0LDEwICszMywxMiBAQAog
I2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlLmgiCiAjaW5jbHVkZSAiVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHsKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
ICAgIGVudW0gY2xhc3MgQXV0aGVudGljYXRvckF0dGFjaG1lbnQgewogICAgICAgICBQbGF0Zm9y
bSwKICAgICAgICAgQ3Jvc3NQbGF0Zm9ybQpAQCAtODksOCArOTAsMTAgQEAgc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiB9OwogCisj
aWYgRU5BQkxFKFdFQl9BVVRITikKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewpAQCAtMTk2LDkgKzE5OSwxMSBAQCBPcHRpb25hbDxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOgogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
VEhOKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1l
bnQ+IHsKQEAgLTIxMCw1ICsyMTUsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCi0KICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMjJkYTMyNTFhZDAxZmY1Y2M3ODVh
MWRhN2M4ZGYwZmZkM2Y3NzkzYS4uNzlhNWVjOWQwOTFkMGE0OTQ0NDJhMjVjMzE4MTRiMTQwNDBk
YWFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0yNiwxNiAr
MjYsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIgogI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgeworI2lm
IEVOQUJMRShXRUJfQVVUSE4pCiAgICAgQnVmZmVyU291cmNlIGNoYWxsZW5nZTsKICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gdGltZW91dDsKICAgICBtdXRhYmxlIFN0cmluZyBycElkOwpAQCAtNDUs
OCArNDYsMTAgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVVEhOKQogfTsKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAvLyBOb3QgZXZlcnkg
bWVtYmVyIGlzIGVuY29kZWQuCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dApAQCAtODQsNyArODcsNiBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZAogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3Bw
CmluZGV4IGU1Y2I0NzM4NjliZjE3ZjQwMzBkODNmZWZkYjQ4ZGM0MmEyMzk2NzEuLmEwOWE2OTA5
ZWM5MWUwNGFkYjYwNjE3ODJiM2NlOWUyYmU4NTVmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKQEAg
LTQxLDEwICs0MSwxNiBAQCBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGlj
YXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0IEF1dGhlbnRpY2F0b3JNYQogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwobWFuYWdlciwgcnBJZCwgdHJhbnNwb3J0
cywgdHlwZSkpOwogfQogCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsKCkKKyAgICA6IG1fbWFuYWdlcihXVEY6Om1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1h
bmFnZXI+KCkpCisgICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGlj
YXRpb25QYW5lbENsaWVudD4oKSkKK3sKK30KKwogV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwg
Y29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cywg
Q2xpZW50RGF0YVR5cGUgdHlwZSkKLSAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2Vy
KSkKKyAgICA6IG1fY2xpZW50KFdURjo6bWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50PigpKQorICAgICwgbV93ZWFrTWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkK
ICAgICAsIG1fcnBJZChycElkKQotICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5
cGUpCiB7CiAgICAgbV90cmFuc3BvcnRzID0gVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+
KCk7CkBAIC01OSwxMCArNjUsMTYgQEAgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWcKIAogV2ViQXV0
aGVudGljYXRpb25QYW5lbDo6fldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoKSA9IGRlZmF1bHQ7CiAK
K3ZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNh
dGlvblJlcXVlc3REYXRhJiYgcmVxdWVzdCwgQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQobV9tYW5hZ2VyKTsKKyAgICBtX21hbmFnZXItPmhhbmRsZVJlcXVlc3QoV1RGTW92ZShy
ZXF1ZXN0KSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCiB2b2lkIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw6OmNhbmNlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKKyAgICBpZiAobV93ZWFrTWFuYWdlcikKKyAg
ICAgICAgbV93ZWFrTWFuYWdlci0+Y2FuY2VsUmVxdWVzdCgqdGhpcyk7CiB9CiAKIHZvaWQgV2Vi
QXV0aGVudGljYXRpb25QYW5lbDo6c2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50PiYmIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IGNjNDJhNWY2YzU2MDk4
NjhlYjM0MWQxYjMyMTU0Mjg0NzgwODM2NjQuLjgzOWY2OWJhNDljZDY5NjVjZGM2ZjM2MjM2YjNm
NjE5ODQzMmE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaApAQCAtMzUsMTAgKzM1LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgQ2xpZW50RGF0YVR5cGUgOiBib29sOworCitjbGFz
cyBBdXRoZW50aWNhdG9yUmVzcG9uc2U7CisKK3N0cnVjdCBFeGNlcHRpb25EYXRhOwogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOworCitzdHJ1Y3Qg
V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00
NywyNSArNTMsMzUgQEAgY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xh
c3MgV2ViQXV0aGVudGljYXRpb25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVj
dDo6VHlwZTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgVHJhbnNwb3J0U2V0
ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBXVEY6OkludEhhc2g8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFp
dHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHVzaW5nIFJlc3BvbmQg
PSBWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPjsKKyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoUmVzcG9uZCYmKT47CiAKLSAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+
IGNyZWF0ZShjb25zdCBXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpT
dHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBl
KTsKKyAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKTsKIAotICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7
IH0KLSAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRy
YW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcG9ydHM7IH0KLSAgICBXZWJDb3JlOjpD
bGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0
YVR5cGU7IH0KKyAgICB2b2lkIGhhbmRsZVJlcXVlc3QoV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhJiYsIENhbGxiYWNrJiYpOwogICAgIHZvaWQgY2FuY2VsKCkgY29uc3Q7CiAK
ICAgICBjb25zdCBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAorICAgIC8vIEZJWE1FPHJkYXI6Ly9w
cm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMu
CisgICAgdXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9y
VHJhbnNwb3J0LCBXVEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dD4+OworICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwg
Y29uc3QgVHJhbnNwb3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6
U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zcG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnRE
YXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToK
KyAgICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sb3dp
bmcgZGVwcmVjYXRlZCBtZXRob2QuCiAgICAgV2ViQXV0aGVudGljYXRpb25QYW5lbChjb25zdCBX
ZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNv
bnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKIAotICAgIFdlYWtQ
dHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIFdURjo6U3Ry
aW5nIG1fcnBJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFu
YWdlcj4gbV9tYW5hZ2VyOyAvLyBGSVhNRSgpOiBDaGFuZ2UgdG8gVW5pcXVlUmVmLgogICAgIFVu
aXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiBtX2NsaWVudDsKKworICAgIC8v
IEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXBy
ZWNhdGVkIGZpZWxkcy4KKyAgICBXZWFrUHRyPFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI+
IG1fd2Vha01hbmFnZXI7CisgICAgV1RGOjpTdHJpbmcgbV9ycElkOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiBtX3RyYW5zcG9ydHM7CiAgICAgV2ViQ29yZTo6
Q2xpZW50RGF0YVR5cGUgbV9jbGllbnREYXRhVHlwZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwuaAppbmRleCAxMjE0ODliMGVkZjUyM2VjMjdmM2MwODJhMjVlNzlhMTUzMmQzMmUzLi4yNWIy
ZDJjM2UzODc5MzdiMTJkY2NmNDkxZDVlZjJhMmI5YjI2MTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLmgKQEAgLTMyLDYgKzMyLDExIEBAIE5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCiBAY2xh
c3MgX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTsKIEBjbGFzcyBfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsOwogCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnM7Cit9CisKIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQpIHsKICAgICBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
UmVzdWx0VW5hdmFpbGFibGUsCiAgICAgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdFBy
ZXNlbnRlZCwKQEAgLTc1LDYgKzgwLDMwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9X
S1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAgICAgX1dLV2ViQXV0aGVudGljYXRpb25Tb3Vy
Y2VFeHRlcm5hbCwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKIAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXV0aGVudGljYXRv
ckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbCwKKyAgICBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAorICAgIF9XS0F1dGhlbnRpY2F0b3JB
dHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
UHVibGljS2V5Q3JlZGVudGlhbFR5cGUpIHsKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlw
ZVB1YmxpY0tleSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50KSB7CisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVx
dWlyZWQsCisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLAorICAg
IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkLAorfSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKSB7Cisg
ICAgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmUsCisgICAgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0LAorICAgIF9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VEaXJlY3QsCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83
MTUwOTE0MT4KIEBwcm90b2NvbCBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgPE5T
T2JqZWN0PgogCiBAb3B0aW9uYWwKQEAgLTg3LDE4ICsxMTYsMTY5IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAKIEBlbmQKIAorV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgOiBOU09iamVjdAorCistIChpbnN0
YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICpuYW1lOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWNvbjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5p
dCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZTsKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWRlbnRpZmllcjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZToo
TlNTdHJpbmcgKiluYW1lIE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlz
cGxheU5hbWU6KE5TU3RyaW5nICopZGlzcGxheU5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmRpc3BsYXlOYW1lOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycyA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5
Q3JlZGVudGlhbFR5cGUpdHlwZSBhbGc6KE5TTnVtYmVyICopYWxnOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU051bWJlciAqYWxnOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0
b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7
IC8vIERlZmF1bHQgdG8gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwuCitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCByZXF1aXJlUmVzaWRlbnRLZXk7IC8vIERlZmF1bHQgdG8gTk8uCitA
cHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJW
ZXJpZmljYXRpb247IC8vIERlZmF1bHQgdG8gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
UHJlZmVycmVkLgorCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxF
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5
cGUpdHlwZSBpZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHM7CisKK0BlbmQK
KworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
CitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyA6IE5T
T2JqZWN0CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KmFwcGlkOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFC
TEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5ICopcnAgdXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2Vy
IHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25n
KSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwOworQHByb3BlcnR5IChub25hdG9t
aWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXI7CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwg
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
ICo+ICpleGNsdWRlQ3JlZGVudGlhbHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMs
IHN0cm9uZykgX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9y
U2VsZWN0aW9uOworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UgYXR0ZXN0YXRpb247IC8vIERlZmF1bHQgdG8gX1dLQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZU5vbmUuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQg
dXNlclZlcmlmaWNhdGlvbjsgLy8gRGVmYXVsdCB0byBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWly
ZW1lbnRQcmVmZXJyZWQuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykg
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitA
ZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRz
IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGFwcGlk
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVj
dAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJv
cGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEg
KmF0dGVzdGF0aW9uT2JqZWN0OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAo
bnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVu
ZAorCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSkKIEBpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNs
ZWFyQWxsTG9jYWxBdXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlm
eWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZTsKIAorLSAoaW5zdGFuY2V0eXBlKWlu
aXQ7CisKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkzOTQ+CisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5NDg1PgorLSAodm9pZCltYWtlQ3JlZGVudGlhbFdpdGhIYXNoOihO
U0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9y
QXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpZ2V0QXNzZXJ0
aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dL
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk3MTQ+CisvLyBGb3Ig
dGVzdGluZyBvbmx5LgorKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucyljb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisrIChXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9w
dGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVu
ZAorCitAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKFdLRGVwcmVjYXRlZCkK
KworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWlu
Z1BhcnR5SUQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0
cmFuc3BvcnRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50
aWNhdGlvblR5cGUgdHlwZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJm
NzdhMmFlZGUyMS4uMThjZjRiZmY1M2FlMzBlYjM1MmQ5OWRhYjY3MDMyMWZmYjgxZjc3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxODUgQEAKICNpbXBvcnQg
Il9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1
dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJv
ci5oIgogI2ltcG9ydCAiV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8
V2ViQ29yZS9BdXRoZW50aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVu
dGljYXRvclJlc3BvbnNlRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNv
bnN0YW50cy5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wp
YXBwaWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF9hcHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhl
bnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmF3
SWQgPSByYXdJZDsKKyAgICBfZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRp
b25SZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3
SWQgZXh0ZW5zaW9uczooX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAq
KWV4dGVuc2lvbnMgYXV0aGVudGljYXRvckRhdGE6KE5TRGF0YSAqKWF1dGhlbnRpY2F0b3JEYXRh
IHNpZ25hdHVyZTooTlNEYXRhICopc2lnbmF0dXJlIHVzZXJIYW5kbGU6KE5TRGF0YSAqKXVzZXJI
YW5kbGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3SWQgZXh0
ZW5zaW9uczpleHRlbnNpb25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXV0aGVu
dGljYXRvckRhdGEgPSBhdXRoZW50aWNhdG9yRGF0YTsKKyAgICBfc2lnbmF0dXJlID0gc2lnbmF0
dXJlOworICAgIF91c2VySGFuZGxlID0gdXNlckhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVz
cG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4
dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRl
bnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOmV4
dGVuc2lvbnNdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hdHRlc3RhdGlvbk9iamVj
dCA9IGF0dGVzdGF0aW9uT2JqZWN0OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEKKworLSAoaW5z
dGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBfV0tB
dXRoZW50aWNhdG9yQXR0YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVSZXNpZGVudEtleSA9
IE5POworICAgIHNlbGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudFByZWZlcnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAg
dXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQ
YXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJL
ZXlDcmVkUGFyYW1zCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLnJwID0gcnA7CisgICAgc2VsZi51c2VyID0gdXNlcjsK
KyAgICBzZWxmLnB1YktleUNyZWRQYXJhbXMgPSBwdWJLZXlDcmVkUGFyYW1zOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZSl0eXBlIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHNlbGYudHlwZSA9IHR5cGU7CisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGlj
S2V5Q3JlZGVudGlhbEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIHNlbGYubmFtZSA9IG5hbWU7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxUeXBlKXR5cGUgYWxnOihOU051bWJlciAqKWFsZworeworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi50eXBlID0gdHlwZTsK
KyAgICBzZWxmLmFsZyA9IGFsZzsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zCisKKy0gKGlu
c3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLnVzZXJWZXJpZmljYXRpb24gPSBfV0tVc2VyVmVy
aWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoTmFtZTpuYW1lXSkpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6
KE5TU3RyaW5nICopbmFtZSBpZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyIGRpc3BsYXlO
YW1lOihOU1N0cmluZyAqKWRpc3BsYXlOYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5pZGVu
dGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxmLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworCiBAaW1wbGVtZW50YXRpb24gX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbCB7CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICAgICBXZWFrUHRy
PFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudD4gX2NsaWVudDsKQEAgLTQwLDYg
KzIxNSwxNSBAQCBAaW1wbGVtZW50YXRpb24gX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCB7CiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQVBJ
OjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw+
KHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBf
cGFuZWwtPn5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CkBAIC0xMzUsNiArMzE5LDI1MiBAQCAt
ICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSogZGF0YSkKK3sKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoKGNvbnN0IHVpbnQ4X3Qq
KVtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIHZvaWQgZW5jb2RlRW50aXR5KFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnM6OkVudGl0eSYgb3V0cHV0LCBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5
KiBpbnB1dCkKK3sKKyAgICBvdXRwdXQubmFtZSA9IGlucHV0Lm5hbWU7CisgICAgb3V0cHV0Lmlj
b24gPSBpbnB1dC5pY29uOworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5KF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnBFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcmVzdWx0OworICAg
IGVuY29kZUVudGl0eShyZXN1bHQsIHJwRW50aXR5KTsKKyAgICByZXN1bHQuaWQgPSBycEVudGl0
eS5pZGVudGlmaWVyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJFbnRpdHkgcHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkoX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVz
ZXJFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9uczo6VXNlckVudGl0eSByZXN1bHQ7CisgICAgZW5jb2RlRW50aXR5KHJlc3VsdCwgdXNlckVu
dGl0eSk7CisgICAgcmVzdWx0LmlkVmVjdG9yID0gdmVjdG9yRnJvbU5TRGF0YSh1c2VyRW50aXR5
LmlkZW50aWZpZXIpOworICAgIHJlc3VsdC5kaXNwbGF5TmFtZSA9IHVzZXJFbnRpdHkuZGlzcGxh
eU5hbWU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHB1YmxpY0tl
eUNyZWRlbnRpYWxQYXJhbWV0ZXJzKE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwdWJLZXlDcmVkUGFyYW1zLmNvdW50KTsKKwor
ICAgIGZvciAoX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKnBhcmFtIDogcHViS2V5
Q3JlZFBhcmFtcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXksIHBhcmFtLmFsZy5sb25nTG9uZ1ZhbHVl
IH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQgYXV0aGVudGljYXRvclRyYW5zcG9ydChfV0tXZWJBdXRoZW50aWNhdGlv
blRyYW5zcG9ydCB0cmFuc3BvcnQpCit7CisgICAgc3dpdGNoICh0cmFuc3BvcnQpIHsKKyAgICBj
YXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCOgorICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOworICAgIGNhc2UgX1dLV2ViQXV0aGVu
dGljYXRpb25UcmFuc3BvcnRORkM6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNh
dG9yVHJhbnNwb3J0OjpOZmM7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dEludGVybmFsOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dDo6SW50ZXJuYWw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7Cisg
ICAgfQorfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+
IGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHMp
Cit7CisgICAgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0cmFuc3BvcnRzLmNvdW50KTsKKwor
ICAgIGZvciAoTlNOdW1iZXIgKnRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpCisgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoYXV0aGVudGljYXRvclRyYW5zcG9ydCgoX1dLV2ViQXV0aGVudGlj
YXRpb25UcmFuc3BvcnQpdHJhbnNwb3J0LmludFZhbHVlKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yPiBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvciAqPiAqY3JlZGVudGlhbHMpCit7CisgICAgVmVjdG9yPFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPiByZXN1bHQ7CisgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY3JlZGVudGlhbHMuY291bnQpOworCisgICAgZm9yIChfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA6IGNyZWRlbnRpYWxzKQor
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSwgeyB9LCB2ZWN0b3JGcm9tTlNEYXRhKGNyZWRlbnRpYWwuaWRl
bnRpZmllciksIGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKGNyZWRlbnRpYWwudHJhbnNwb3J0cykg
fSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1l
bnQ+IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF0
dGFjaG1lbnQpCit7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBfV0tBdXRo
ZW50aWNhdG9yQXR0YWNobWVudEFsbDoKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm06CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNh
dG9yQXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgY2FzZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNo
bWVudENyb3NzUGxhdGZvcm06CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0
Zm9ybTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbihfV0tVc2VyVmVyaWZpY2F0
aW9uUmVxdWlyZW1lbnQgdXYpCit7CisgICAgc3dpdGNoICh1dikgeworICAgIGNhc2UgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOworICAgIGNhc2UgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7CisgICAgY2FzZSBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZDoKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQ7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICB9Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlh
KF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGljYXRvclNlbGVjdGlv
bikKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpB
dXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgcmVzdWx0OworICAgIHJlc3VsdC5hdXRoZW50
aWNhdG9yQXR0YWNobWVudCA9IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KGF1dGhlbnRpY2F0b3JT
ZWxlY3Rpb24uYXV0aGVudGljYXRvckF0dGFjaG1lbnQpOworICAgIHJlc3VsdC5yZXF1aXJlUmVz
aWRlbnRLZXkgPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnJlcXVpcmVSZXNpZGVudEtleTsKKyAg
ICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJpZmljYXRpb24oYXV0aGVudGljYXRv
clNlbGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIGF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2UoX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5j
ZSBhdHRlc3RhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGF0dGVzdGF0aW9uKSB7CisgICAgY2FzZSBf
V0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9uZToKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7CisgICAgY2FzZSBf
V0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3Q6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpJbmRpcmVjdDsKKyAg
ICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3Q6CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3Q7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lOworICAg
IH0KK30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cyBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zKQoreworICAgIFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyByZXN1bHQ7CisgICAgcmVzdWx0LmFw
cGlkID0gZXh0ZW5zaW9ucy5hcHBpZDsKKyAgICByZXN1bHQuZ29vZ2xlTGVnYWN5QXBwaWRTdXBw
b3J0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKysgKFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNyZWF0
aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICByZXN1bHQucnAg
PSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkob3B0aW9ucy5ycCk7CisgICAgcmVzdWx0LnVz
ZXIgPSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eShvcHRpb25zLnVzZXIpOworCisgICAg
cmVzdWx0LnB1YktleUNyZWRQYXJhbXMgPSBwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyhv
cHRpb25zLnB1YktleUNyZWRQYXJhbXMpOworCisgICAgaWYgKG9wdGlvbnMudGltZW91dCkKKyAg
ICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5zaWduZWRJbnRWYWx1ZTsK
KyAgICBpZiAob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAgICAgIHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMob3B0aW9ucy5l
eGNsdWRlQ3JlZGVudGlhbHMpOworICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24pCisgICAgICAgIHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbik7CisgICAg
cmVzdWx0LmF0dGVzdGF0aW9uID0gYXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShvcHRp
b25zLmF0dGVzdGF0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSogd2tBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhJiBkYXRh
KQoreworICAgIHJldHVybiBbW19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLnJhd0lkLT5kYXRh
KCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5zaW9uczpuaWwgYXR0ZXN0
YXRpb25PYmplY3Q6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuYXR0ZXN0YXRpb25PYmplY3Qt
PmRhdGEoKSBsZW5ndGg6ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+Ynl0ZUxlbmd0aCgpXV07Cit9
CisjZW5kaWYKKworLSAodm9pZCltYWtlQ3JlZGVudGlhbFdpdGhIYXNoOihOU0RhdGEgKiloYXNo
IG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKilvcHRpb25z
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25S
ZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQor
ICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1ha2VCbG9ja1B0cihoYW5kbGVyKV0gKFZh
cmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1
bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiYgcmVzcG9u
c2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZShyZXNwb25zZS0+ZGF0YSgpKSwgbmlsKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgaGFuZGxlcihuaWws
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25v
d24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgX3BhbmVsLT5oYW5k
bGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YShoYXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBu
dWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxl
LCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwgdHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShj
YWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczooX1dL
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucworeworICAgIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFC
TEUoV0VCX0FVVEhOKQorICAgIGlmIChvcHRpb25zLnRpbWVvdXQpCisgICAgICAgIHJlc3VsdC50
aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVuc2lnbmVkSW50VmFsdWU7CisgICAgaWYgKG9wdGlv
bnMucnBJZCkKKyAgICAgICAgcmVzdWx0LnJwSWQgPSBvcHRpb25zLnJwSWQ7CisgICAgaWYgKG9w
dGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LmFsbG93Q3JlZGVudGlhbHMg
PSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
KTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJpZmljYXRpb24ob3B0aW9u
cy51c2VyVmVyaWZpY2F0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMpOworI2VuZGlmCisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBf
V0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UqIHdrQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEmIGRhdGEp
Cit7CisgICAgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqZXh0ZW5z
aW9ucyA9IG5pbDsKKyAgICBpZiAoZGF0YS5hcHBpZCkKKyAgICAgICAgZXh0ZW5zaW9ucyA9IFtb
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyBhbGxvY10gaW5pdFdpdGhB
cHBpZDpkYXRhLmFwcGlkLnZhbHVlKCldOworCisgICAgTlNEYXRhICp1c2VySGFuZGxlID0gbmls
OworICAgIGlmIChkYXRhLnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJIYW5kbGUgPSBbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVuZ3RoOmRhdGEudXNlckhh
bmRsZS0+Ynl0ZUxlbmd0aCgpXTsKKworICAgIHJldHVybiBbW19XS0F1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
ZGF0YS5yYXdJZC0+ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lkLT5ieXRlTGVuZ3RoKCldIGV4dGVu
c2lvbnM6bmlsIGF1dGhlbnRpY2F0b3JEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLmF1
dGhlbnRpY2F0b3JEYXRhLT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXV0aGVudGljYXRvckRhdGEtPmJ5
dGVMZW5ndGgoKV0gc2lnbmF0dXJlOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLnNpZ25hdHVy
ZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnNpZ25hdHVyZS0+Ynl0ZUxlbmd0aCgpXSB1c2VySGFuZGxl
OnVzZXJIYW5kbGVdOworfQorI2VuZGlmCisKKy0gKHZvaWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6
KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlcgoreworI2lmIEVOQUJMRShX
RUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGhh
bmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiwgV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBXVEY6OnN3
aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9u
c2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFuZGxlcih3a0F1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKSwgbmlsKTsKKyAgICAgICAgfSwgWyZdKGNv
bnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgaGFu
ZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tF
cnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgX3Bh
bmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YShoYXNoKSwgW19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0
aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5h
dmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9wdCwgeyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30KKworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQ
bGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUKK3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQor
ICAgIHJldHVybiBXZWJLaXQ6OkxvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKTsKKyNlbHNlCisg
ICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogI3ByYWdt
YSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9u
UmVxdWVzdERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYxMjVjNmUyMzYx
YmQyN2RmYjU4MDIyYmRjMTcyNGQ5Li5kNjJiM2NkNzc3Yzg0YjBkOTE1MmFjNzE3Yjg3ZjAyZWU2
OTM5YzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5o
CkBAIC00NSwxMSArNDUsMTQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFdlYkF1dGhl
bnRpY2F0aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoOwogICAgIFZh
cmlhbnQ8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgV2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOworCisgICAgLy8g
RklYTUU8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbG93aW5nIGRlcHJl
Y2F0ZWQgZmllbGRzLgogICAgIFdlYWtQdHI8V2ViUGFnZVByb3h5PiBwYWdlOwogICAgIFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcGFuZWxSZXN1bHQgeyBXZWJBdXRoZW50aWNhdGlvblBh
bmVsUmVzdWx0OjpVbmF2YWlsYWJsZSB9OwogICAgIFJlZlB0cjxBUEk6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWw+IHBhbmVsOwogICAgIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6R2xvYmFsRnJhbWVJ
ZGVudGlmaWVyPiBmcmFtZUlEOwogICAgIFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFtZUluZm87
CisKICAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZTsKICAgICBTdHJpbmcgY2FjaGVkUGlu
OyAvLyBPbmx5IHVzZWQgdG8gaW1wcm92ZSBORkMgQ2xpZW50IFBJTiBleHBlcmllbmNlLgogfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OWVk
Njg2NThhMTdjYjJkMWRhNWUyZGVjMzBiZmZmZGE5NzIzYjE2Li42MTFhZDgyNDNjNjFjZjYxMWU4
MmNjOWVhMDVjODdlNjBiMWU0MmZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTEtMTcgIEppZXdlbiBUYW4g
IDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIEltcGxlbWVudCBT
UEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMuRnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg4OTMKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzcxMzY0NzMxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
ICgpOiBEZWxldGVkLgorCiAyMDIwLTExLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiByMjY5NTE0IFJlc2V0IHNlcnZlciBwb3J0
IGJlZm9yZSByZXN0YXJ0aW5nIHdlYnNlcnZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsLm1tCmluZGV4IGE5NGFiNzg4YmZkMTQ5MDJkNjM3ODVmMjAzZjYxY2U4OWZiNjBkMDQuLjhl
ODgzM2E2YTBkYmVjMDI1NWZjYzczNTc5ODFkODk5NmY1MWEzZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTMzLDYgKzMzLDggQEAKICNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBv
cnQgPExvY2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KQEAg
LTIzNyw2ICsyMzksNyBAQCAtIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICopcGFuZWwKIEBl
bmQKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTE0MzIsNiArMTQzNSwzMzIgQEAgVEVTVChXZWJBdXRoZW50
aWNhdGlvblBhbmVsLCBMQUdldEFzc2VydGlvbk11bHRpcGxlT3JkZXIpCiAKICNlbmRpZiAvLyBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKSB8fCBQTEFURk9STShJT1MpCiAKK1RFU1QoV2ViQXV0aGVu
dGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01pbmltdW4p
Cit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQg
fTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnAgPSBbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20i
XTsKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlciA9IFtbX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNl
ZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZp
ZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV0gZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJd
OworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1Yktl
eUNyZWRQYXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9j
XSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAt
N10gXTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKm9wdGlv
bnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRX
aXRoUnA6cnAgdXNlcjp1c2VyIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc107Cisg
ICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3Jl
Q3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc107CisKKyAgICBFWFBFQ1RfV0tfU1RS
RVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3Vs
dC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWQuaXNOdWxs
KCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVk
QGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnVzZXIuaWNvbi5pc051bGwo
KSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlk
ZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRh
dGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVY
UEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3Jl
ZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgV1RG
OjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXpl
KCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLCBX
VEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5l
eHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leHRlbnNp
b25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsKK30KKworVEVTVChXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11
bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhC
eXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdOworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFs
VXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIg
aWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdOworICAg
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0
V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtN10sIFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBhbGc6QC0yNTddIF07CisKKyAgICBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpvcHRpb25zID0gW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwIHVzZXI6dXNl
ciBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdOworICAgIG9wdGlvbnMudGltZW91
dCA9IEAxMjA7CisgICAgb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMgPSBAWyBbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5
Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgaWRlbnRpZmllcjpuc0lkZW50aWZpZXJdIF07CisgICAg
b3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0
aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdOworICAgIG9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtbX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XTsKKworICAg
IGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNy
ZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQu
cnAuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmlkLmlzTnVsbCgp
KTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBl
eGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC51c2VyLmljb24uaXNOdWxsKCkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVu
dGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRh
KCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQ
YXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1z
WzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcpOworCisg
ICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1
bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFs
c1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VR
KG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRl
bnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JBdHRhY2htZW50LCBXVEY6Om51
bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVx
dWlyZVJlc2lkZW50S2V5LCBmYWxzZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNh
dG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1l
bnQ6OlByZWZlcnJlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9uLCBBdHRl
c3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtMSkKK3sK
KyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9Owor
ICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZp
ZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkgKnJwID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2Nd
IGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl07CisgICAgcnAuaWNvbiA9IEAiaHR0cHMvL3d3
dy5leGFtcGxlLmNvbS9pY29uLmpwZyI7CisgICAgcnAuaWRlbnRpZmllciA9IEAiZXhhbXBsZS5j
b20iOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXIgPSBbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBw
bGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpA
IkogQXBwbGVzZWVkIl07CisgICAgdXNlci5pY29uID0gQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIjsKKworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJs
aWNLZXkgYWxnOkAtN10sIFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2Nd
IGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBhbGc6QC0y
NTddIF07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpvcHRp
b25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0
V2l0aFJwOnJwIHVzZXI6dXNlciBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdOwor
ICAgIG9wdGlvbnMudGltZW91dCA9IEAxMjA7CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
RGVzY3JpcHRvciAqY3JlZGVudGlhbCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tl
eSBpZGVudGlmaWVyOm5zSWRlbnRpZmllcl07CisgICAgY3JlZGVudGlhbC50cmFuc3BvcnRzID0g
QFsgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRV
U0JdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dE5GQ10sIFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNw
b3J0SW50ZXJuYWxdIF07CisgICAgb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMgPSBAWyBjcmVk
ZW50aWFsLCBjcmVkZW50aWFsIF07CisKKyAgICBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3Jp
dGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBbW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBhbGxvY10gaW5pdF07CisgICAgYXV0aGVudGljYXRvclNlbGVjdGlvbi5hdXRo
ZW50aWNhdG9yQXR0YWNobWVudCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm07
CisgICAgYXV0aGVudGljYXRvclNlbGVjdGlvbi5yZXF1aXJlUmVzaWRlbnRLZXkgPSBZRVM7Cisg
ICAgYXV0aGVudGljYXRvclNlbGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ7CisgICAgb3B0aW9ucy5hdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uID0gYXV0aGVudGljYXRvclNlbGVjdGlvbjsKKworICAgIG9wdGlvbnMuYXR0ZXN0YXRp
b24gPSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0OworCisgICAgYXV0
byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRp
b25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc107CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
cnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwg
c2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlk
VmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1
YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywg
LTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iu
ZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBd
LCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVu
dCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OlBsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRp
b24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVjdCk7Cit9CisKK1RFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
c01heGltdW0yKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAw
eDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKworICAgIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnAgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBycC5pY29u
ID0gQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIjsKKyAgICBycC5pZGVudGlmaWVy
ID0gQCJleGFtcGxlLmNvbSI7CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0
eSAqdXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRX
aXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVy
IGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsKKyAgICB1c2VyLmljb24gPSBAImh0dHBzLy93
d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZVB1YmxpY0tleSBhbGc6QC03XSwgW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycyBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVi
bGljS2V5IGFsZzpALTI1N10gXTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgYWxsb2NdIGluaXRXaXRoUnA6cnAgdXNlcjp1c2VyIHB1YktleUNyZWRQYXJhbXM6cHViS2V5
Q3JlZFBhcmFtc107CisgICAgb3B0aW9ucy50aW1lb3V0ID0gQDEyMDsKKworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFsID0gW1tfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRp
YWxUeXBlUHVibGljS2V5IGlkZW50aWZpZXI6bnNJZGVudGlmaWVyXTsKKyAgICBjcmVkZW50aWFs
LnRyYW5zcG9ydHMgPSBAWyBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNh
dGlvblRyYW5zcG9ydFVTQl0sIFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRp
Y2F0aW9uVHJhbnNwb3J0TkZDXSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVu
dGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0gXTsKKyAgICBvcHRpb25zLmV4Y2x1ZGVDcmVkZW50
aWFscyA9IEBbIGNyZWRlbnRpYWwsIGNyZWRlbnRpYWwgXTsKKworICAgIF9XS0F1dGhlbnRpY2F0
b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IFtbX1dLQXV0aGVu
dGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XTsKKyAgICBhdXRoZW50aWNhdG9y
U2VsZWN0aW9uLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50ID0gX1dLQXV0aGVudGljYXRvckF0dGFj
aG1lbnRDcm9zc1BsYXRmb3JtOyAvLworICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWly
ZVJlc2lkZW50S2V5ID0gWUVTOworICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24udXNlclZlcmlm
aWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkOyAvLwor
ICAgIG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rp
b247CisKKyAgICBvcHRpb25zLmF0dGVzdGF0aW9uID0gX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZUluZGlyZWN0OyAvLworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0
aW9uc107CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNv
bSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4
YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwg
ImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwg
ImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVz
ZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmll
ciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51
c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJL
ZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQ
dWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcs
IC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3Jl
ZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRl
bnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9y
LnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3Vs
dC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXpl
b2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50
aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0
OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5z
cG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9y
U2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm0pOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lk
ZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291
cmFnZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25D
b252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3QpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGltZW91dCkKK3sKKyAgICByZXNldCgpOworCisg
ICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAg
ICB1aW50OF90IGhhc2hbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw
NCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworCisgICAgX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdOworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFs
VXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIg
aWRlbnRpZmllcjpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9m
KGlkZW50aWZpZXIpXSBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl07CisgICAgTlNBcnJheTxf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBb
IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVHlwZTpf
V0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBhbGc6QC03XSBdOworICAgIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAgdXNlcjp1c2Vy
IHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc107CisgICAgb3B0aW9ucy50aW1lb3V0
ID0gQDEwMDsKKworICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKnBhbmVsID0gW1tfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsIGFsbG9jXSBpbml0XTsKKyAgICBbcGFuZWwgbWFrZUNyZWRl
bnRpYWxXaXRoSGFzaDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhh
c2gpXSBvcHRpb25zOm9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9y
QXR0ZXN0YXRpb25SZXNwb25zZSAqcmVzcG9uc2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAg
IHdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9OVUxM
KHJlc3BvbnNlKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFp
bik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAg
fV07CisgICAgVXRpbDo6cnVuKCZ3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuKTsKK30KKworVEVT
VChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnNNaW5pbXVuKQoreworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAq
b3B0aW9ucyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIGFsbG9jXSBp
bml0XTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZl
cnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9UUlVFKHJlc3Vs
dC5ycElkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMu
c2l6ZSgpLCAwbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOworICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5l
eHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsKK30KKworVEVTVChX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNN
YXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisKKyAgICBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF07CisgICAgb3B0aW9ucy50
aW1lb3V0ID0gQDEyMDsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBAWyBbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGlj
S2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgaWRlbnRpZmllcjpuc0lkZW50aWZpZXJdIF07Cisg
ICAgb3B0aW9ucy5leHRlbnNpb25zID0gW1tfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMgYWxsb2NdIGluaXRdOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpvcHRp
b25zXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAxbHUpOworICAgIEVYUEVDVF9F
UShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVu
dGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVD
VF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBp
ZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKworICAgIEVYUEVDVF9FUShyZXN1
bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJy
ZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7
Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zTWF4aW11bSkKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgw
MSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0
YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisK
KyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKm9wdGlvbnMgPSBbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF07CisgICAgb3B0
aW9ucy50aW1lb3V0ID0gQDEyMDsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yICpjcmVkZW50aWFsID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxv
Y10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGlkZW50
aWZpZXI6bnNJZGVudGlmaWVyXTsKKyAgICBjcmVkZW50aWFsLnRyYW5zcG9ydHMgPSBAWyBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0sIFtO
U051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDXSwg
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRl
cm5hbF0gXTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBAWyBjcmVkZW50aWFsLCBj
cmVkZW50aWFsIF07CisKKyAgICBvcHRpb25zLnVzZXJWZXJpZmljYXRpb24gPSBfV0tVc2VyVmVy
aWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDsKKworICAgIF9XS0F1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XTsKKyAgICBleHRlbnNpb25zLmFwcGlkID0g
QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iOworICAgIG9wdGlvbnMuZXh0ZW5zaW9ucyA9
IGV4dGVuc2lvbnM7CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdOworCisg
ICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
bGxvd0NyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5p
ZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNt
cChyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIs
IHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVk
ZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0aGVudGljYXRvclRyYW5zcG9y
dDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1sxXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjKTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5z
cG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9u
LCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLCAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9m
aWRvIik7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgR2V0QXNzZXJ0aW9uU1BJ
VGltZW91dCkKK3sKKyAgICByZXNldCgpOworCisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQs
IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4MDQgfTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyAqb3B0aW9ucyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIGFs
bG9jXSBpbml0XTsKKyAgICBvcHRpb25zLnRpbWVvdXQgPSBAMTIwOworCisgICAgX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCAqcGFuZWwgPSBbW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgYWxs
b2NdIGluaXRdOworICAgIFtwYW5lbCBnZXRBc3NlcnRpb25XaXRoSGFzaDpbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXSBvcHRpb25zOm9wdGlvbnMgY29tcGxl
dGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNl
LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0g
dHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9F
UShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3Iu
Y29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVu
dGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414494</attachid>
            <date>2020-11-18 15:17:31 -0800</date>
            <delta_ts>2020-11-18 15:30:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201118151730.patch</filename>
            <type>text/plain</type>
            <size>67255</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZmM0ZDhkZWZhMzQ1NGIyZTEwYmJiN2IxZWE3MDBkMWJhYzNhYzkxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yaSB0byB0aGlzIGNoYW5nZSwg
QXV0aGVudGljYXRvck1hbmFnZXIgb3ducyB0aGUgQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC4K
KyAgICAgICAgTm93LCBpdCdzIHRoZSBvcHBvc2l0ZSB3YXkuCisKKyAgICAgICAgU2luY2UgdGhl
cmUgd2lsbCBiZSBhIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhlIGRlcHJlY2F0ZWQgaW1wbGVtZW50
YXRpb24gd2lsbCBjb2V4aXN0IHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAg
dGhpcyBwYXRoIGFsc28gbWFya3MgdGhpbmdzIHRoYXQgYXJlIG1lYW50IHRvIGRlcHJlY2F0ZSBp
biB0aGUgZnV0dXJlIHRvIHJlZHVjZSBjb25mdXNpb25zLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcDoKKyAgICAgICAgKEFQSTo6V2ViQXV0
aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChBUEk6
OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoQVBJOjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjYW5jZWwgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oOgorICAgICAgICBJbXBsZW1lbnRzIHRo
ZSBwbHVtYmluZyBmb3IgdGhlIG5ldyBTUEkgYW5kIG93bnMgdGhlIEF1dGhlbnRpY2F0b3JNYW5h
Z2VyIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cyBpbml0V2l0aEFwcGlkOl0pOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNh
dG9yUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOmF1
dGhlbnRpY2F0b3JEYXRhOnNpZ25hdHVyZTp1c2VySGFuZGxlOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6
YXR0ZXN0YXRpb25PYmplY3Q6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBpbml0XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgaW5pdFdpdGhScDp1c2VyOnB1YktleUNyZWRQYXJhbXM6XSk6CisgICAgICAg
ICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGluaXRXaXRoVHlwZTppZGVudGlm
aWVyOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGluaXRXaXRo
TmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgaW5p
dFdpdGhUeXBlOmFsZzpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVl
c3RPcHRpb25zIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IGluaXRXaXRoTmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFVz
ZXJFbnRpdHkgaW5pdFdpdGhOYW1lOmlkZW50aWZpZXI6ZGlzcGxheU5hbWU6XSk6CisgICAgICAg
ICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgaW5pdF0pOgorICAgICAgICAodmVjdG9yRnJv
bU5TRGF0YSk6CisgICAgICAgIChlbmNvZGVFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5
KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JUcmFuc3BvcnQpOgorICAgICAgICAoYXV0aGVudGljYXRvclRyYW5zcG9ydHMp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JBdHRhY2htZW50KToKKyAgICAgICAgKHVzZXJWZXJpZmljYXRpb24pOgorICAg
ICAgICAoYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKToKKyAgICAgICAgKGF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2UpOgorICAgICAgICAoYXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50SW5wdXRzKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm9wdGlvbnM6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgrW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRv
Q29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSk6CisgICAgICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpc1VzZXJWZXJpZnlpbmdQbGF0Zm9y
bUF1dGhlbnRpY2F0b3JBdmFpbGFibGVdKToKKyAgICAgICAgSW1wbGVtZW50cyB0aGUgU1BJLgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9u
UmVxdWVzdERhdGEuaDoKKyAgICAgICAgTWFya3MgdGhpbmdzIGFzIHRvIGRlcHJlY2F0ZS4KKwog
MjAyMC0xMS0xMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW21hY09TXSBJc3N1ZSBzYW5kYm94IGV4dGVuc2lvbiB0byB0aGUgV2ViQ29udGVudCBwcm9j
ZXNzIGZvciBjb20uYXBwbGUubHNrZGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKaW5kZXggOGY5MzU2MWRlMDM2MzcxNTk1NzkxZGZiYTBjZWMyYmJjYjhhYTRiMi4uYmMz
MzExOGI1OGYzNWZhODAzOGQ3ZDNjMGUzMzc3YzE0OWU3OGY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1ZGUgIkF0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJ
bnB1dHMuaCIKICNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKQEAgLTM0LDEwICszMywxMiBAQAog
I2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlLmgiCiAjaW5jbHVkZSAiVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHsKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
ICAgIGVudW0gY2xhc3MgQXV0aGVudGljYXRvckF0dGFjaG1lbnQgewogICAgICAgICBQbGF0Zm9y
bSwKICAgICAgICAgQ3Jvc3NQbGF0Zm9ybQpAQCAtODksOCArOTAsMTAgQEAgc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiB9OwogCisj
aWYgRU5BQkxFKFdFQl9BVVRITikKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewpAQCAtMTk2LDkgKzE5OSwxMSBAQCBPcHRpb25hbDxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOgogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
VEhOKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1l
bnQ+IHsKQEAgLTIxMCw1ICsyMTUsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCi0KICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMjJkYTMyNTFhZDAxZmY1Y2M3ODVh
MWRhN2M4ZGYwZmZkM2Y3NzkzYS4uNzlhNWVjOWQwOTFkMGE0OTQ0NDJhMjVjMzE4MTRiMTQwNDBk
YWFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0yNiwxNiAr
MjYsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIgogI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgeworI2lm
IEVOQUJMRShXRUJfQVVUSE4pCiAgICAgQnVmZmVyU291cmNlIGNoYWxsZW5nZTsKICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gdGltZW91dDsKICAgICBtdXRhYmxlIFN0cmluZyBycElkOwpAQCAtNDUs
OCArNDYsMTAgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVVEhOKQogfTsKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAvLyBOb3QgZXZlcnkg
bWVtYmVyIGlzIGVuY29kZWQuCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dApAQCAtODQsNyArODcsNiBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZAogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3Bw
CmluZGV4IGU1Y2I0NzM4NjliZjE3ZjQwMzBkODNmZWZkYjQ4ZGM0MmEyMzk2NzEuLmEwOWE2OTA5
ZWM5MWUwNGFkYjYwNjE3ODJiM2NlOWUyYmU4NTVmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKQEAg
LTQxLDEwICs0MSwxNiBAQCBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGlj
YXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0IEF1dGhlbnRpY2F0b3JNYQogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwobWFuYWdlciwgcnBJZCwgdHJhbnNwb3J0
cywgdHlwZSkpOwogfQogCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsKCkKKyAgICA6IG1fbWFuYWdlcihXVEY6Om1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1h
bmFnZXI+KCkpCisgICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGlj
YXRpb25QYW5lbENsaWVudD4oKSkKK3sKK30KKwogV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwg
Y29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cywg
Q2xpZW50RGF0YVR5cGUgdHlwZSkKLSAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2Vy
KSkKKyAgICA6IG1fY2xpZW50KFdURjo6bWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50PigpKQorICAgICwgbV93ZWFrTWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkK
ICAgICAsIG1fcnBJZChycElkKQotICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5
cGUpCiB7CiAgICAgbV90cmFuc3BvcnRzID0gVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+
KCk7CkBAIC01OSwxMCArNjUsMTYgQEAgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWcKIAogV2ViQXV0
aGVudGljYXRpb25QYW5lbDo6fldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoKSA9IGRlZmF1bHQ7CiAK
K3ZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNh
dGlvblJlcXVlc3REYXRhJiYgcmVxdWVzdCwgQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQobV9tYW5hZ2VyKTsKKyAgICBtX21hbmFnZXItPmhhbmRsZVJlcXVlc3QoV1RGTW92ZShy
ZXF1ZXN0KSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCiB2b2lkIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw6OmNhbmNlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKKyAgICBpZiAobV93ZWFrTWFuYWdlcikKKyAg
ICAgICAgbV93ZWFrTWFuYWdlci0+Y2FuY2VsUmVxdWVzdCgqdGhpcyk7CiB9CiAKIHZvaWQgV2Vi
QXV0aGVudGljYXRpb25QYW5lbDo6c2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50PiYmIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IGNjNDJhNWY2YzU2MDk4
NjhlYjM0MWQxYjMyMTU0Mjg0NzgwODM2NjQuLjgzOWY2OWJhNDljZDY5NjVjZGM2ZjM2MjM2YjNm
NjE5ODQzMmE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaApAQCAtMzUsMTAgKzM1LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgQ2xpZW50RGF0YVR5cGUgOiBib29sOworCitjbGFz
cyBBdXRoZW50aWNhdG9yUmVzcG9uc2U7CisKK3N0cnVjdCBFeGNlcHRpb25EYXRhOwogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOworCitzdHJ1Y3Qg
V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00
NywyNSArNTMsMzUgQEAgY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xh
c3MgV2ViQXV0aGVudGljYXRpb25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVj
dDo6VHlwZTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgVHJhbnNwb3J0U2V0
ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBXVEY6OkludEhhc2g8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFp
dHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHVzaW5nIFJlc3BvbmQg
PSBWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPjsKKyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoUmVzcG9uZCYmKT47CiAKLSAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+
IGNyZWF0ZShjb25zdCBXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpT
dHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBl
KTsKKyAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKTsKIAotICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7
IH0KLSAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRy
YW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcG9ydHM7IH0KLSAgICBXZWJDb3JlOjpD
bGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0
YVR5cGU7IH0KKyAgICB2b2lkIGhhbmRsZVJlcXVlc3QoV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhJiYsIENhbGxiYWNrJiYpOwogICAgIHZvaWQgY2FuY2VsKCkgY29uc3Q7CiAK
ICAgICBjb25zdCBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAorICAgIC8vIEZJWE1FPHJkYXI6Ly9w
cm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMu
CisgICAgdXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9y
VHJhbnNwb3J0LCBXVEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dD4+OworICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwg
Y29uc3QgVHJhbnNwb3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6
U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zcG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnRE
YXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToK
KyAgICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sb3dp
bmcgZGVwcmVjYXRlZCBtZXRob2QuCiAgICAgV2ViQXV0aGVudGljYXRpb25QYW5lbChjb25zdCBX
ZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNv
bnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKIAotICAgIFdlYWtQ
dHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIFdURjo6U3Ry
aW5nIG1fcnBJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFu
YWdlcj4gbV9tYW5hZ2VyOyAvLyBGSVhNRSgpOiBDaGFuZ2UgdG8gVW5pcXVlUmVmLgogICAgIFVu
aXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiBtX2NsaWVudDsKKworICAgIC8v
IEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXBy
ZWNhdGVkIGZpZWxkcy4KKyAgICBXZWFrUHRyPFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI+
IG1fd2Vha01hbmFnZXI7CisgICAgV1RGOjpTdHJpbmcgbV9ycElkOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiBtX3RyYW5zcG9ydHM7CiAgICAgV2ViQ29yZTo6
Q2xpZW50RGF0YVR5cGUgbV9jbGllbnREYXRhVHlwZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwuaAppbmRleCAxMjE0ODliMGVkZjUyM2VjMjdmM2MwODJhMjVlNzlhMTUzMmQzMmUzLi5kYWZh
Y2MzMGY5YTZkZjc5N2FkNTU1NjdiMDg0OWI3ZDQzMTI1NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLmgKQEAgLTc1LDYgKzc1LDMwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9X
S1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAgICAgX1dLV2ViQXV0aGVudGljYXRpb25Tb3Vy
Y2VFeHRlcm5hbCwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKIAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXV0aGVudGljYXRv
ckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbCwKKyAgICBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAorICAgIF9XS0F1dGhlbnRpY2F0b3JB
dHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
UHVibGljS2V5Q3JlZGVudGlhbFR5cGUpIHsKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlw
ZVB1YmxpY0tleSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50KSB7CisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVx
dWlyZWQsCisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLAorICAg
IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkLAorfSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKSB7Cisg
ICAgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmUsCisgICAgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0LAorICAgIF9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VEaXJlY3QsCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83
MTUwOTE0MT4KIEBwcm90b2NvbCBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgPE5T
T2JqZWN0PgogCiBAb3B0aW9uYWwKQEAgLTg3LDE4ICsxMTEsMTY0IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAKIEBlbmQKIAorV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgOiBOU09iamVjdAorCistIChpbnN0
YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICpuYW1lOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWNvbjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5p
dCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZTsKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWRlbnRpZmllcjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZToo
TlNTdHJpbmcgKiluYW1lIE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlz
cGxheU5hbWU6KE5TU3RyaW5nICopZGlzcGxheU5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmRpc3BsYXlOYW1lOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycyA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5
Q3JlZGVudGlhbFR5cGUpdHlwZSBhbGc6KE5TTnVtYmVyICopYWxnOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU051bWJlciAqYWxnOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0
b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7
IC8vIERlZmF1bHQgdG8gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwuCitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCByZXF1aXJlUmVzaWRlbnRLZXk7IC8vIERlZmF1bHQgdG8gTk8uCitA
cHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJW
ZXJpZmljYXRpb247IC8vIERlZmF1bHQgdG8gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
UHJlZmVycmVkLgorCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxF
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5
cGUpdHlwZSBpZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHM7CisKK0BlbmQK
KworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
CitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyA6IE5T
T2JqZWN0CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KmFwcGlkOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFC
TEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5ICopcnAgdXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2Vy
IHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25n
KSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwOworQHByb3BlcnR5IChub25hdG9t
aWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXI7CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwg
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
ICo+ICpleGNsdWRlQ3JlZGVudGlhbHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMs
IHN0cm9uZykgX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9y
U2VsZWN0aW9uOworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UgYXR0ZXN0YXRpb247IC8vIERlZmF1bHQgdG8gX1dLQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZU5vbmUuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQg
dXNlclZlcmlmaWNhdGlvbjsgLy8gRGVmYXVsdCB0byBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWly
ZW1lbnRQcmVmZXJyZWQuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykg
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitA
ZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRz
IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGFwcGlk
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVj
dAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJv
cGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEg
KmF0dGVzdGF0aW9uT2JqZWN0OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAo
bnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVu
ZAorCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSkKIEBpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNs
ZWFyQWxsTG9jYWxBdXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlm
eWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZTsKIAorLSAoaW5zdGFuY2V0eXBlKWlu
aXQ7CisKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkzOTQ+CisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5NDg1PgorLSAodm9pZCltYWtlQ3JlZGVudGlhbFdpdGhIYXNoOihO
U0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9y
QXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpZ2V0QXNzZXJ0
aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dL
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZCljYW5jZWw7CiAKIEBlbmQKIAorQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IChXS0RlcHJlY2F0ZWQpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkg
TlNTdHJpbmcgKnJlbHlpbmdQYXJ0eUlEOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU1NldCAqdHJhbnNwb3J0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgX1dLV2ViQXV0aGVudGljYXRpb25UeXBlIHR5cGU7CisKK0BlbmQKKwogTlNfQVNTVU1FX05P
Tk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDRhZWU2MjllODdiZGU4
MTM4MjdjOWNiNDJkNDgyZjc3YTJhZWRlMjEuLjIyODg4ZWRiOWI2ZGE1MTM0MmYwMTY0ZjBjNjA4
Nzc4YjkyZDdmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC0yNywxMCArMjcs
MTg1IEBACiAjaW1wb3J0ICJfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwuaCIKIAog
I2ltcG9ydCAiTG9jYWxBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0ICJMb2NhbFNlcnZpY2UuaCIK
KyNpbXBvcnQgIldLRXJyb3IuaCIKICNpbXBvcnQgIldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGll
bnQuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
QXV0aGVudGljYXRpb25Db25zdGFudHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEFwcGlkOihCT09MKWFwcGlkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXBwaWQgPSBhcHBpZDsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclJlc3Bv
bnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKilyYXdJZCBleHRl
bnNpb25zOihfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICopZXh0ZW5z
aW9ucworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX3Jhd0lkID0gcmF3SWQ7CisgICAgX2V4dGVuc2lvbnMgPSBleHRlbnNpb25z
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3
SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zIGF1dGhlbnRpY2F0b3JEYXRhOihOU0RhdGEgKilh
dXRoZW50aWNhdG9yRGF0YSBzaWduYXR1cmU6KE5TRGF0YSAqKXNpZ25hdHVyZSB1c2VySGFuZGxl
OihOU0RhdGEgKil1c2VySGFuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aFJhd0lkOnJhd0lkIGV4dGVuc2lvbnM6ZXh0ZW5zaW9uc10pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgX2F1dGhlbnRpY2F0b3JEYXRhID0gYXV0aGVudGljYXRvckRhdGE7CisgICAgX3Np
Z25hdHVyZSA9IHNpZ25hdHVyZTsKKyAgICBfdXNlckhhbmRsZSA9IHVzZXJIYW5kbGU7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihO
U0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRPdXRwdXRzICopZXh0ZW5zaW9ucyBhdHRlc3RhdGlvbk9iamVjdDooTlNEYXRhICopYXR0ZXN0
YXRpb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3
SWQgZXh0ZW5zaW9uczpleHRlbnNpb25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
YXR0ZXN0YXRpb25PYmplY3QgPSBhdHRlc3RhdGlvbk9iamVjdDsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNy
aXRlcmlhCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmF1dGhlbnRpY2F0b3JB
dHRhY2htZW50ID0gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGw7CisgICAgc2VsZi5yZXF1
aXJlUmVzaWRlbnRLZXkgPSBOTzsKKyAgICBzZWxmLnVzZXJWZXJpZmljYXRpb24gPSBfV0tVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUnA6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eSAqKXJwIHVzZXI6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICop
dXNlciBwdWJLZXlDcmVkUGFyYW1zOihOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzICo+ICopcHViS2V5Q3JlZFBhcmFtcworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5ycCA9IHJwOworICAgIHNl
bGYudXNlciA9IHVzZXI7CisgICAgc2VsZi5wdWJLZXlDcmVkUGFyYW1zID0gcHViS2V5Q3JlZFBh
cmFtczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VHlwZTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUpdHlwZSBpZGVudGlmaWVyOihOU0RhdGEg
KilpZGVudGlmaWVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLnR5cGUgPSB0eXBlOworICAgIHNlbGYuaWRlbnRpZmll
ciA9IGlkZW50aWZpZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm5hbWUgPSBuYW1lOworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZSl0eXBlIGFsZzooTlNOdW1iZXIgKilhbGcKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNl
bGYudHlwZSA9IHR5cGU7CisgICAgc2VsZi5hbGcgPSBhbGc7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0
aW9uID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKilu
YW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRl
bnRpZmllciBkaXNwbGF5TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFt
ZSA9IGRpc3BsYXlOYW1lOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxl
bWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVU
SE4pCiAgICAgV2Vha1B0cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9j
bGllbnQ7CkBAIC0zOCw2ICsyMTMsMTUgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgewogI2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBB
UEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6V2ViQXV0aGVudGljYXRpb25QYW5l
bD4oc2VsZik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
CiAtICh2b2lkKWRlYWxsb2MKQEAgLTEzNSw2ICszMTksMjUyIEBAIC0gKHZvaWQpY2FuY2VsCiAj
ZW5kaWYKIH0KIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvckZyb21OU0RhdGEoTlNEYXRhKiBkYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgoY29uc3QgdWludDhfdCopW2RhdGEgYnl0ZXNdLCBb
ZGF0YSBsZW5ndGhdKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBlbmNv
ZGVFbnRpdHkoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6RW50
aXR5JiBvdXRwdXQsIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkqIGlucHV0KQoreworICAg
IG91dHB1dC5uYW1lID0gaW5wdXQubmFtZTsKKyAgICBvdXRwdXQuaWNvbiA9IGlucHV0Lmljb247
Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSByZXN1bHQ7CisgICAgZW5jb2RlRW50aXR5KHJl
c3VsdCwgcnBFbnRpdHkpOworICAgIHJlc3VsdC5pZCA9IHJwRW50aXR5LmlkZW50aWZpZXI7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVu
dGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlckVudGl0eSkKK3sKKyAg
ICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpVc2VyRW50aXR5
IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVzdWx0LCB1c2VyRW50aXR5KTsKKyAgICByZXN1
bHQuaWRWZWN0b3IgPSB2ZWN0b3JGcm9tTlNEYXRhKHVzZXJFbnRpdHkuaWRlbnRpZmllcik7Cisg
ICAgcmVzdWx0LmRpc3BsYXlOYW1lID0gdXNlckVudGl0eS5kaXNwbGF5TmFtZTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5
Q3JlZFBhcmFtcykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHB1YktleUNyZWRQYXJhbXMuY291bnQpOworCisgICAgZm9yIChfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqcGFyYW0gOiBwdWJLZXlDcmVkUGFyYW1zKQorICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bFR5cGU6OlB1YmxpY0tleSwgcGFyYW0uYWxnLmxvbmdMb25nVmFsdWUgfSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydCBh
dXRoZW50aWNhdG9yVHJhbnNwb3J0KF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0IHRyYW5z
cG9ydCkKK3sKKyAgICBzd2l0Y2ggKHRyYW5zcG9ydCkgeworICAgIGNhc2UgX1dLV2ViQXV0aGVu
dGljYXRpb25UcmFuc3BvcnRVU0I6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNh
dG9yVHJhbnNwb3J0OjpVc2I7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dE5GQzoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5m
YzsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWw6CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsKKyAgICB9Cit9CisKK3N0YXRp
YyBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gYXV0aGVudGljYXRvclRy
YW5zcG9ydHMoTlNBcnJheTxOU051bWJlciAqPiAqdHJhbnNwb3J0cykKK3sKKyAgICBWZWN0b3I8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHRyYW5zcG9ydHMuY291bnQpOworCisgICAgZm9yIChOU051bWJl
ciAqdHJhbnNwb3J0IDogdHJhbnNwb3J0cykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChhdXRoZW50aWNhdG9yVHJhbnNwb3J0KChfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydCl0
cmFuc3BvcnQuaW50VmFsdWUpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBW
ZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IHB1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9ycyhOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yICo+ICpjcmVkZW50aWFscykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3I+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjcmVkZW50aWFscy5jb3VudCk7CisKKyAgICBmb3IgKF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yICpjcmVkZW50aWFsIDogY3JlZGVudGlhbHMpCisgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGlj
S2V5LCB7IH0sIHZlY3RvckZyb21OU0RhdGEoY3JlZGVudGlhbC5pZGVudGlmaWVyKSwgYXV0aGVu
dGljYXRvclRyYW5zcG9ydHMoY3JlZGVudGlhbC50cmFuc3BvcnRzKSB9KTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudD4gYXV0aGVudGljYXRv
ckF0dGFjaG1lbnQoX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXR0YWNobWVudCkKK3sKKyAg
ICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50QWxsOgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGNhc2UgX1dLQXV0aGVu
dGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQ
bGF0Zm9ybTsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQbGF0Zm9y
bToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uKF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1
dikKK3sKKyAgICBzd2l0Y2ggKHV2KSB7CisgICAgY2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnRSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudDo6UmVxdWlyZWQ7CisgICAgY2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnRQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0
aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudERpc2NvdXJhZ2VkOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50OjpEaXNjb3VyYWdlZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEoX1dLQXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9yU2VsZWN0aW9uKQoreworICAgIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb25Dcml0ZXJpYSByZXN1bHQ7CisgICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JBdHRhY2htZW50
ID0gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoYXV0aGVudGljYXRvclNlbGVjdGlvbi5hdXRoZW50
aWNhdG9yQXR0YWNobWVudCk7CisgICAgcmVzdWx0LnJlcXVpcmVSZXNpZGVudEtleSA9IGF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5OworICAgIHJlc3VsdC51c2VyVmVy
aWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnVzZXJW
ZXJpZmljYXRpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6
OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0ZXN0YXRpb25Db252ZXlhbmNlUHJl
ZmVyZW5jZShfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIGF0dGVzdGF0aW9uKQor
eworICAgIHN3aXRjaCAoYXR0ZXN0YXRpb24pIHsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VOb25lOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVz
dGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0OworICAgIGNhc2UgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVjdDsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0
dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7CisgICAgfQorfQorCitzdGF0aWMg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGF1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMgKmV4dGVuc2lvbnMpCit7CisgICAgV2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwaWQgPSBleHRlbnNpb25z
LmFwcGlkOworICAgIHJlc3VsdC5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQgPSBmYWxzZTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9w
dGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKilvcHRpb25zCit7
CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyByZXN1bHQ7
CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJlc3VsdC5ycCA9IHB1YmxpY0tleUNyZWRl
bnRpYWxScEVudGl0eShvcHRpb25zLnJwKTsKKyAgICByZXN1bHQudXNlciA9IHB1YmxpY0tleUNy
ZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlvbnMudXNlcik7CisKKyAgICByZXN1bHQucHViS2V5Q3Jl
ZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKG9wdGlvbnMucHViS2V5Q3Jl
ZFBhcmFtcyk7CisKKyAgICBpZiAob3B0aW9ucy50aW1lb3V0KQorICAgICAgICByZXN1bHQudGlt
ZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZEludFZhbHVlOworICAgIGlmIChvcHRpb25z
LmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscyA9
IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFs
cyk7CisgICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbikKKyAgICAgICAgcmVz
dWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKTsKKyAgICByZXN1bHQuYXR0ZXN0YXRp
b24gPSBhdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKG9wdGlvbnMuYXR0ZXN0YXRpb24p
OworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIF9XS0F1dGhlbnRpY2F0b3JBdHRl
c3RhdGlvblJlc3BvbnNlKiB3a0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEmIGRhdGEpCit7CisgICAgcmV0dXJu
IFtbX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3
SWQ6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5y
YXdJZC0+Ynl0ZUxlbmd0aCgpXSBleHRlbnNpb25zOm5pbCBhdHRlc3RhdGlvbk9iamVjdDpbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+ZGF0YSgpIGxlbmd0aDpk
YXRhLmF0dGVzdGF0aW9uT2JqZWN0LT5ieXRlTGVuZ3RoKCldXTsKK30KKyNlbmRpZgorCistICh2
b2lkKW1ha2VDcmVkZW50aWFsV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlICosIE5TRXJy
b3IgKikpaGFuZGxlcgoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFj
ayA9IFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29y
ZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJl
ZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAg
ICAgaGFuZGxlcih3a0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKHJlc3BvbnNlLT5k
YXRhKCkpLCBuaWwpOworICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YSYgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JX
aXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpuaWxd
KTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3QoeyB2ZWN0
b3JGcm9tTlNEYXRhKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6
V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6
bnVsbG9wdCwgeyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5k
aWYKK30KKworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zKWNv
bnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zIHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisg
ICAgaWYgKG9wdGlvbnMudGltZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25z
LnRpbWVvdXQudW5zaWduZWRJbnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5ycElkKQorICAgICAg
ICByZXN1bHQucnBJZCA9IG9wdGlvbnMucnBJZDsKKyAgICBpZiAob3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzKQorICAgICAgICByZXN1bHQuYWxsb3dDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRl
bnRpYWxEZXNjcmlwdG9ycyhvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIHJlc3VsdC51
c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihvcHRpb25zLnVzZXJWZXJpZmljYXRp
b24pOworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIF9XS0F1dGhlbnRpY2F0b3JB
c3NlcnRpb25SZXNwb25zZSogd2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpleHRlbnNpb25zID0gbmlsOworICAg
IGlmIChkYXRhLmFwcGlkKQorICAgICAgICBleHRlbnNpb25zID0gW1tfV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIGFsbG9jXSBpbml0V2l0aEFwcGlkOmRhdGEuYXBwaWQu
dmFsdWUoKV07CisKKyAgICBOU0RhdGEgKnVzZXJIYW5kbGUgPSBuaWw7CisgICAgaWYgKGRhdGEu
dXNlckhhbmRsZSkKKyAgICAgICAgdXNlckhhbmRsZSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLnVzZXJIYW5kbGUtPmRhdGEoKSBsZW5ndGg6ZGF0YS51c2VySGFuZGxlLT5ieXRlTGVuZ3Ro
KCldOworCisgICAgcmV0dXJuIFtbX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLnJhd0lkLT5kYXRh
KCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5zaW9uczpuaWwgYXV0aGVu
dGljYXRvckRhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuYXV0aGVudGljYXRvckRhdGEt
PmRhdGEoKSBsZW5ndGg6ZGF0YS5hdXRoZW50aWNhdG9yRGF0YS0+Ynl0ZUxlbmd0aCgpXSBzaWdu
YXR1cmU6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuc2lnbmF0dXJlLT5kYXRhKCkgbGVuZ3Ro
OmRhdGEuc2lnbmF0dXJlLT5ieXRlTGVuZ3RoKCldIHVzZXJIYW5kbGU6dXNlckhhbmRsZV07Cit9
CisjZW5kaWYKKworLSAodm9pZClnZXRBc3NlcnRpb25XaXRoSGFzaDooTlNEYXRhICopaGFzaCBv
cHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9u
c2UgKiwgTlNFcnJvciAqKSloYW5kbGVyCit7CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBh
dXRvIGNhbGxiYWNrID0gW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIChWYXJpYW50
PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25E
YXRhPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBb
Jl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7
CisgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKHJl
c3BvbnNlLT5kYXRhKCkpLCBuaWwpOworICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJy
b3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2Vy
SW5mbzpuaWxdKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBfcGFuZWwtPmhhbmRsZVJlcXVl
c3QoeyB2ZWN0b3JGcm9tTlNEYXRhKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwg
V2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0
ciwgV1RGOjpudWxsb3B0LCB7IH0sIHRydWUsIFN0cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyNlbmRpZgorfQorCisrIChCT09MKWlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGlj
YXRvckF2YWlsYWJsZQoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgcmV0dXJuIFdlYktp
dDo6TG9jYWxTZXJ2aWNlOjppc0F2YWlsYWJsZSgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87Cisj
ZW5kaWYKK30KKwogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAjcHJhZ21hIG1hcmsgV0tPYmplY3Qg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bEZvclRlc3RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTAwZTU5MDY3MjFiZjU5ZTgxNmM1NTlmM2UyNjNm
MGE1ZjMxZDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0ICJfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9uczsKK30KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKFdL
VGVzdGluZykKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTcxND4KKy8vIEZvciB0
ZXN0aW5nIG9ubHkuCisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zKWNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKysgKFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0
aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCitAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKaW5kZXggNmU0
MDJmY2RmMTI1YzZlMjM2MWJkMjdkZmI1ODAyMmJkYzE3MjRkOS4uZDYyYjNjZDc3N2M4NGIwZDkx
NTJhYzcxN2I4N2YwMmVlNjkzOWM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0
aW9uUmVxdWVzdERhdGEuaApAQCAtNDUsMTEgKzQ1LDE0IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsK
IHN0cnVjdCBXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhIHsKICAgICBWZWN0b3I8dWludDhf
dD4gaGFzaDsKICAgICBWYXJpYW50PFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gb3B0
aW9uczsKKworICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRo
ZSBmb2xvd2luZyBkZXByZWNhdGVkIGZpZWxkcy4KICAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4g
cGFnZTsKICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHBhbmVsUmVzdWx0IHsgV2Vi
QXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUgfTsKICAgICBSZWZQdHI8QVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBwYW5lbDsKICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNv
cmU6Okdsb2JhbEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRDsKICAgICBXZWJLaXQ6OkZyYW1lSW5m
b0RhdGEgZnJhbWVJbmZvOworCiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAgICAg
U3RyaW5nIGNhY2hlZFBpbjsgLy8gT25seSB1c2VkIHRvIGltcHJvdmUgTkZDIENsaWVudCBQSU4g
ZXhwZXJpZW5jZS4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA1OGQyNGE0YjgwNTkzMDliN2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVl
Li40ZTBkMDVlZjdiMjdlNDFlYzdjY2UzNGQ5OTg1ZTk0Y2M1NzFlMWU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjYsNiArMTEy
Niw3IEBACiAJCTU3N0ZGNzgyMjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzdGRjc4MTIzNDZFODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5l
bENsaWVudC5oICovOyB9OwogCQk1NzdGRjc4NTIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVu
dGljYXRpb25QYW5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc3RkY3ODMyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxDbGllbnQuaCAqLzsgfTsKIAkJNTc4REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2Fs
QXV0aGVudGljYXRpb25Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc4REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGlj
YXRpb25Tb2Z0TGluay5oICovOyB9OworCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjUxMjU2NURFNkEwMDc3QzVBNyAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3OUYxQkY2MjNDODBEQjYwMEM3RDRCNCAvKiBf
V0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGNDIzQzgwREI2MDBDN0Q0QjQgLyog
X1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRC
NCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkY4MjNDODBF
QzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJu
YWwuaCAqLzsgfTsKIAkJNTc5RjFCRkMyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3OUYxQkZBMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi87IH07CkBAIC0zOTgwLDYgKzM5ODEsNyBAQAog
CQk1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3N0ZGNzg0MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJB
dXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXV0
aGVudGljYXRpb25QYW5lbENsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTc4REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3OUYxQkY0MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlv
blJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9u
UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjUyM0M4MERC
NjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0
QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ0NCw2ICs3NDQ2LDcgQEAKIAkJ
CQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRp
b25SZXNwb25zZUludGVybmFsLmggKi8sCiAJCQkJNTc0NzI4Q0YyMzQ1NkU5ODAwMTcwMEFGIC8q
IF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCAqLywKIAkJCQk1NzQ3MjhEMDIzNDU2RTk4MDAx
NzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSAqLywKKwkJCQk1NzkwQTY1MTI1
NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCAq
LywKIAkJCQk1NzQ3MjhEMzIzNDU3MEFFMDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEludGVybmFsLmggKi8sCiAJCQkJMUFFMjg2NzYxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dl
YnNpdGVEYXRhU2l6ZS5oICovLAogCQkJCTFBRTI4Njc1MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tX
ZWJzaXRlRGF0YVNpemUubW0gKi8sCkBAIC0xMDg3Niw2ICsxMDg3OSw3IEBACiAJCQkJNTc5RjFC
RjYyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9u
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3NDcyOEQxMjM0NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3
NDcyOEQ0MjM0NTcwQUUwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4Njc4MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tX
ZWJzaXRlRGF0YVNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4NjgwMUM3RjkyQzAwMDY5
QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4
YTE3Y2IyZDFkYTVlMmRlYzMwYmZmZmRhOTcyM2IxNi4uNjExYWQ4MjQzYzYxY2Y2MTFlODJjYzll
YTA1Yzg3ZTYwYjFlNDJmZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amll
d2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZv
ciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoKTog
RGVsZXRlZC4KKwogMjAyMC0xMS0xMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogcjI2OTUxNCBSZXNldCBzZXJ2ZXIgcG9ydCBiZWZv
cmUgcmVzdGFydGluZyB3ZWJzZXJ2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQppbmRleCBhOTRhYjc4OGJmZDE0OTAyZDYzNzg1ZjIwM2Y2MWNlODlmYjYwZDA0Li40ZTBmODE4
NjE3ZDFiZDQ1OWExZjBjZWZmMDVlMmY4MDE0MDJiMzA5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tCkBAIC0zMywxMSArMzMsMTQgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQg
PExvY2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oPgorI2ltcG9ydCA8V2ViS2l0
L19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbXBvcnQgPHd0Zi9zcGkv
Y29jb2EvU2VjdXJpdHlTUEkuaD4KQEAgLTIzNyw2ICsyNDAsNyBAQCAtIChfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsICopcGFuZWwKIEBlbmQKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTE0MzIsNiArMTQz
NiwzMzIgQEAgVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBMQUdldEFzc2VydGlvbk11bHRp
cGxlT3JkZXIpCiAKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSB8fCBQTEFURk9S
TShJT1MpCiAKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uc01pbmltdW4pCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7
IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSAqcnAgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5p
dFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSAqdXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2Nd
IGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6W05TRGF0
YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV0gZGlz
cGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdOworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVu
dGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtN10gXTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAgdXNlcjp1c2VyIHB1YktleUNyZWRQYXJh
bXM6cHViS2V5Q3JlZFBhcmFtc107CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9u
c107CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIp
OworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3Vs
dC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUo
cmVzdWx0LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlk
VmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21w
KHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZp
ZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAi
SiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5z
aXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5
cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVY
UEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVD
VF9FUShyZXN1bHQudGltZW91dCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZh
bHNlKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlm
aWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRp
ZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRl
bnRpZmllcildOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycCA9IFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFt
cGxlLmNvbSJdOworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyID0g
W1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAi
amFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5h
bWU6QCJKIEFwcGxlc2VlZCJdOworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBh
cmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRp
YWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5
cGVQdWJsaWNLZXkgYWxnOkAtN10sIFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBh
bGc6QC0yNTddIF07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
ICpvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9j
XSBpbml0V2l0aFJwOnJwIHVzZXI6dXNlciBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJh
bXNdOworICAgIG9wdGlvbnMudGltZW91dCA9IEAxMjA7CisgICAgb3B0aW9ucy5leGNsdWRlQ3Jl
ZGVudGlhbHMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgaWRlbnRpZmll
cjpuc0lkZW50aWZpZXJdIF07CisgICAgb3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0g
W1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdOworICAgIG9w
dGlvbnMuZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5w
dXRzIGFsbG9jXSBpbml0XTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNd
OworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX1RS
VUUocmVzdWx0LnJwLmlkLmlzTnVsbCgpKTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
dXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC51c2VyLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZl
Y3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChy
ZXN1bHQudXNlci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVy
KSksIDApOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkog
QXBwbGVzZWVkIik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6
ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBl
LCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBh
cmFtc1sxXS5hbGcsIC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1
KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMWx1
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVu
dGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxz
WzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7
CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRp
Y2F0b3JBdHRhY2htZW50LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0
aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCBmYWxzZSk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZCk7CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF0dGVzdGF0aW9uLCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25l
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOwor
fQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnNNYXhpbXVtMSkKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgw
MSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0
YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisK
KyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwID0gW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl07Cisg
ICAgcnAuaWNvbiA9IEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyI7CisgICAgcnAu
aWRlbnRpZmllciA9IEAiZXhhbXBsZS5jb20iOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgKnVzZXIgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFs
bG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5z
SWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl07CisgICAgdXNlci5pY29uID0g
QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIjsKKworICAgIE5TQXJyYXk8X1dLUHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVi
bGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtN10sIFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50
aWFsVHlwZVB1YmxpY0tleSBhbGc6QC0yNTddIF07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zICpvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwIHVzZXI6dXNlciBwdWJLZXlDcmVkUGFy
YW1zOnB1YktleUNyZWRQYXJhbXNdOworICAgIG9wdGlvbnMudGltZW91dCA9IEAxMjA7CisKKyAg
ICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA9IFtbX1dLUHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBpZGVudGlmaWVyOm5zSWRlbnRpZmllcl07CisgICAg
Y3JlZGVudGlhbC50cmFuc3BvcnRzID0gQFsgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2Vi
QXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tX
ZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQ10sIFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9X
S1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdIF07CisgICAgb3B0aW9ucy5leGNs
dWRlQ3JlZGVudGlhbHMgPSBAWyBjcmVkZW50aWFsLCBjcmVkZW50aWFsIF07CisKKyAgICBfV0tB
dXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBb
W19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF07CisgICAgYXV0
aGVudGljYXRvclNlbGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9IF9XS0F1dGhlbnRp
Y2F0b3JBdHRhY2htZW50UGxhdGZvcm07CisgICAgYXV0aGVudGljYXRvclNlbGVjdGlvbi5yZXF1
aXJlUmVzaWRlbnRLZXkgPSBZRVM7CisgICAgYXV0aGVudGljYXRvclNlbGVjdGlvbi51c2VyVmVy
aWZpY2F0aW9uID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ7CisgICAg
b3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYXV0aGVudGljYXRvclNlbGVjdGlvbjsK
KworICAgIG9wdGlvbnMuYXR0ZXN0YXRpb24gPSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVm
ZXJlbmNlRGlyZWN0OworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc107CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAg
IEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUu
Y29tIik7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNl
ZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwg
QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1Rf
RVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9m
KGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3Bs
YXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3Jl
ZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFy
YW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5w
dWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRp
bWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMu
c2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBd
LnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAg
IEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwg
c2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRl
Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRp
ZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50
cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVk
ZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0s
IEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6
SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
LT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZp
Y2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKworICAgIEVY
UEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVu
Y2U6OkRpcmVjdCk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01heGltdW0yKQoreworICAgIHVpbnQ4X3QgaWRlbnRp
ZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50
aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlk
ZW50aWZpZXIpXTsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnAgPSBb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhh
bXBsZS5jb20iXTsKKyAgICBycC5pY29uID0gQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24u
anBnIjsKKyAgICBycC5pZGVudGlmaWVyID0gQCJleGFtcGxlLmNvbSI7CisKKyAgICBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20i
IGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsKKyAg
ICB1c2VyLmljb24gPSBAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciOworCisgICAg
TlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBh
cmFtcyA9IEBbIFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRX
aXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBhbGc6QC03XSwgW1tf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1
YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGFsZzpALTI1N10gXTsKKworICAgIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAgdXNlcjp1c2Vy
IHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc107CisgICAgb3B0aW9ucy50aW1lb3V0
ID0gQDEyMDsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50
aWFsID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhU
eXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGlkZW50aWZpZXI6bnNJZGVu
dGlmaWVyXTsKKyAgICBjcmVkZW50aWFsLnRyYW5zcG9ydHMgPSBAWyBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0sIFtOU051bWJlciBudW1i
ZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDXSwgW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0gXTsKKyAg
ICBvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyA9IEBbIGNyZWRlbnRpYWwsIGNyZWRlbnRpYWwg
XTsKKworICAgIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGljYXRv
clNlbGVjdGlvbiA9IFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBp
bml0XTsKKyAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50
ID0gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRDcm9zc1BsYXRmb3JtOyAvLworICAgIGF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5ID0gWUVTOworICAgIGF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24udXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudERpc2NvdXJhZ2VkOyAvLworICAgIG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlv
biA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisKKyAgICBvcHRpb25zLmF0dGVzdGF0aW9uID0g
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0OyAvLworCisgICAgYXV0
byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRp
b25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc107CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
cnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwg
c2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlk
VmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1
YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywg
LTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iu
ZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBd
LCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVu
dCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OkNyb3NzUGxhdGZvcm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRv
clNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3QpOwor
fQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGltZW91
dCkKK3sKKyAgICByZXNldCgpOworCisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICB1aW50OF90IGhhc2hbXSA9IHsgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw
NCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCB9OworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycCA9IFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFt
cGxlLmNvbSJdOworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyID0g
W1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAi
amFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXSBkaXNwbGF5TmFtZTpAIkogQXBw
bGVzZWVkIl07CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAq
PiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tl
eSBhbGc6QC03XSBdOworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMg
Km9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2Nd
IGluaXRXaXRoUnA6cnAgdXNlcjp1c2VyIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFt
c107CisgICAgb3B0aW9ucy50aW1lb3V0ID0gQDEwMDsKKworICAgIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgKnBhbmVsID0gW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGFsbG9jXSBpbml0
XTsKKyAgICBbcGFuZWwgbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDpbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXSBvcHRpb25zOm9wdGlvbnMgY29tcGxldGlvbkhh
bmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqcmVzcG9uc2UsIE5T
RXJyb3IgKmVycm9yKSB7CisgICAgICAgIHdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4gPSB0cnVl
OworCisgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKKyAgICAgICAgRVhQRUNUX0VRKGVy
cm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2Rl
LCBXS0Vycm9yVW5rbm93bik7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ3ZWJBdXRoZW50aWNh
dGlvblBhbmVsUmFuKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNaW5pbXVuKQoreworICAgIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqb3B0aW9ucyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25z
Om9wdGlvbnNdOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQp
OworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycElkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAwbHUpOworICAgIEVYUEVDVF9FUShyZXN1
bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJy
ZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBv
cnQsIGZhbHNlKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlk
ZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJ
ZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVv
ZihpZGVudGlmaWVyKV07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxv
Y10gaW5pdF07CisgICAgb3B0aW9ucy50aW1lb3V0ID0gQDEyMDsKKyAgICBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMgPSBAWyBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9j
XSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgaWRlbnRp
Zmllcjpuc0lkZW50aWZpZXJdIF07CisgICAgb3B0aW9ucy5leHRlbnNpb25zID0gW1tfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYWxsb2NdIGluaXRdOworCisgICAgYXV0
byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVz
dE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGlt
ZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6
ZSgpLCAxbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBl
LCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2Yo
aWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlh
bHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAw
KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRl
bnNpb25zLT5hcHBpZC5pc051bGwoKSk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5l
bCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zTWF4aW11bSkKK3sKKyAgICB1aW50
OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0
YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3Ro
OnNpemVvZihpZGVudGlmaWVyKV07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cyBhbGxvY10gaW5pdF07CisgICAgb3B0aW9ucy50aW1lb3V0ID0gQDEyMDsKKworICAgIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFsID0gW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRl
bnRpYWxUeXBlUHVibGljS2V5IGlkZW50aWZpZXI6bnNJZGVudGlmaWVyXTsKKyAgICBjcmVkZW50
aWFsLnRyYW5zcG9ydHMgPSBAWyBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50
aWNhdGlvblRyYW5zcG9ydFVTQl0sIFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhl
bnRpY2F0aW9uVHJhbnNwb3J0TkZDXSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0
aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0gXTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMgPSBAWyBjcmVkZW50aWFsLCBjcmVkZW50aWFsIF07CisKKyAgICBvcHRpb25zLnVzZXJW
ZXJpZmljYXRpb24gPSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDsKKwor
ICAgIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9ucyA9
IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XTsK
KyAgICBleHRlbnNpb25zLmFwcGlkID0gQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iOwor
ICAgIG9wdGlvbnMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisKKyAgICBhdXRvIHJlc3VsdCA9
IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dp
dGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1
KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDJsdSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVy
KSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZl
Y3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVY
UEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1sw
XSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFs
bG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6
TmZjKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0
c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VR
KHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJl
cXVpcmVkKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLCAi
aHR0cHMvL3d3dy5leGFtcGxlLmNvbS9maWRvIik7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRp
b25QYW5lbCwgR2V0QXNzZXJ0aW9uU1BJVGltZW91dCkKK3sKKyAgICByZXNldCgpOworCisgICAg
dWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQs
IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqb3B0aW9ucyA9IFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XTsKKyAgICBvcHRpb25zLnRpbWVvdXQg
PSBAMTIwOworCisgICAgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAqcGFuZWwgPSBbW19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgYWxsb2NdIGluaXRdOworICAgIFtwYW5lbCBnZXRBc3NlcnRp
b25XaXRoSGFzaDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gp
XSBvcHRpb25zOm9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3ZWJB
dXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChyZXNw
b25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOwor
ICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1dOwor
ICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>
<flag name="commit-queue"
          id="431412"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414496</attachid>
            <date>2020-11-18 15:22:51 -0800</date>
            <delta_ts>2020-11-18 17:35:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201118152250.patch</filename>
            <type>text/plain</type>
            <size>67286</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZmM0ZDhkZWZhMzQ1NGIyZTEwYmJiN2IxZWE3MDBkMWJhYzNhYzkxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yaSB0byB0aGlzIGNoYW5nZSwg
QXV0aGVudGljYXRvck1hbmFnZXIgb3ducyB0aGUgQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC4K
KyAgICAgICAgTm93LCBpdCdzIHRoZSBvcHBvc2l0ZSB3YXkuCisKKyAgICAgICAgU2luY2UgdGhl
cmUgd2lsbCBiZSBhIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhlIGRlcHJlY2F0ZWQgaW1wbGVtZW50
YXRpb24gd2lsbCBjb2V4aXN0IHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAg
dGhpcyBwYXRoIGFsc28gbWFya3MgdGhpbmdzIHRoYXQgYXJlIG1lYW50IHRvIGRlcHJlY2F0ZSBp
biB0aGUgZnV0dXJlIHRvIHJlZHVjZSBjb25mdXNpb25zLgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcDoKKyAgICAgICAgKEFQSTo6V2ViQXV0
aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChBUEk6
OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoQVBJOjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjYW5jZWwgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oOgorICAgICAgICBJbXBsZW1lbnRzIHRo
ZSBwbHVtYmluZyBmb3IgdGhlIG5ldyBTUEkgYW5kIG93bnMgdGhlIEF1dGhlbnRpY2F0b3JNYW5h
Z2VyIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cyBpbml0V2l0aEFwcGlkOl0pOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNh
dG9yUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOmF1
dGhlbnRpY2F0b3JEYXRhOnNpZ25hdHVyZTp1c2VySGFuZGxlOl0pOgorICAgICAgICAoLVtfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6
YXR0ZXN0YXRpb25PYmplY3Q6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBpbml0XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgaW5pdFdpdGhScDp1c2VyOnB1YktleUNyZWRQYXJhbXM6XSk6CisgICAgICAg
ICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGluaXRXaXRoVHlwZTppZGVudGlm
aWVyOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGluaXRXaXRo
TmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgaW5p
dFdpdGhUeXBlOmFsZzpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVl
c3RPcHRpb25zIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IGluaXRXaXRoTmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFVz
ZXJFbnRpdHkgaW5pdFdpdGhOYW1lOmlkZW50aWZpZXI6ZGlzcGxheU5hbWU6XSk6CisgICAgICAg
ICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgaW5pdF0pOgorICAgICAgICAodmVjdG9yRnJv
bU5TRGF0YSk6CisgICAgICAgIChlbmNvZGVFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5
KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JUcmFuc3BvcnQpOgorICAgICAgICAoYXV0aGVudGljYXRvclRyYW5zcG9ydHMp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKToKKyAgICAgICAgKGF1
dGhlbnRpY2F0b3JBdHRhY2htZW50KToKKyAgICAgICAgKHVzZXJWZXJpZmljYXRpb24pOgorICAg
ICAgICAoYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKToKKyAgICAgICAgKGF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2UpOgorICAgICAgICAoYXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50SW5wdXRzKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm9wdGlvbnM6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgrW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRv
Q29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSk6CisgICAgICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpc1VzZXJWZXJpZnlpbmdQbGF0Zm9y
bUF1dGhlbnRpY2F0b3JBdmFpbGFibGVdKToKKyAgICAgICAgSW1wbGVtZW50cyB0aGUgU1BJLgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9u
UmVxdWVzdERhdGEuaDoKKyAgICAgICAgTWFya3MgdGhpbmdzIGFzIHRvIGRlcHJlY2F0ZS4KKwog
MjAyMC0xMS0xMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW21hY09TXSBJc3N1ZSBzYW5kYm94IGV4dGVuc2lvbiB0byB0aGUgV2ViQ29udGVudCBwcm9j
ZXNzIGZvciBjb20uYXBwbGUubHNrZGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKaW5kZXggOGY5MzU2MWRlMDM2MzcxNTk1NzkxZGZiYTBjZWMyYmJjYjhhYTRiMi4uYmMz
MzExOGI1OGYzNWZhODAzOGQ3ZDNjMGUzMzc3YzE0OWU3OGY3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1ZGUgIkF0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJ
bnB1dHMuaCIKICNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKQEAgLTM0LDEwICszMywxMiBAQAog
I2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlLmgiCiAjaW5jbHVkZSAiVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHsKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
ICAgIGVudW0gY2xhc3MgQXV0aGVudGljYXRvckF0dGFjaG1lbnQgewogICAgICAgICBQbGF0Zm9y
bSwKICAgICAgICAgQ3Jvc3NQbGF0Zm9ybQpAQCAtODksOCArOTAsMTAgQEAgc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
PiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiB9OwogCisj
aWYgRU5BQkxFKFdFQl9BVVRITikKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewpAQCAtMTk2LDkgKzE5OSwxMSBAQCBPcHRpb25hbDxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOgogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
VEhOKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1l
bnQ+IHsKQEAgLTIxMCw1ICsyMTUsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCi0KICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMjJkYTMyNTFhZDAxZmY1Y2M3ODVh
MWRhN2M4ZGYwZmZkM2Y3NzkzYS4uNzlhNWVjOWQwOTFkMGE0OTQ0NDJhMjVjMzE4MTRiMTQwNDBk
YWFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0yNiwxNiAr
MjYsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIgogI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgeworI2lm
IEVOQUJMRShXRUJfQVVUSE4pCiAgICAgQnVmZmVyU291cmNlIGNoYWxsZW5nZTsKICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gdGltZW91dDsKICAgICBtdXRhYmxlIFN0cmluZyBycElkOwpAQCAtNDUs
OCArNDYsMTAgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVVEhOKQogfTsKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAvLyBOb3QgZXZlcnkg
bWVtYmVyIGlzIGVuY29kZWQuCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dApAQCAtODQsNyArODcsNiBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZAogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3Bw
CmluZGV4IGU1Y2I0NzM4NjliZjE3ZjQwMzBkODNmZWZkYjQ4ZGM0MmEyMzk2NzEuLmEwOWE2OTA5
ZWM5MWUwNGFkYjYwNjE3ODJiM2NlOWUyYmU4NTVmMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKQEAg
LTQxLDEwICs0MSwxNiBAQCBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVudGlj
YXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0IEF1dGhlbnRpY2F0b3JNYQogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwobWFuYWdlciwgcnBJZCwgdHJhbnNwb3J0
cywgdHlwZSkpOwogfQogCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsKCkKKyAgICA6IG1fbWFuYWdlcihXVEY6Om1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1h
bmFnZXI+KCkpCisgICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGlj
YXRpb25QYW5lbENsaWVudD4oKSkKK3sKK30KKwogV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwg
Y29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cywg
Q2xpZW50RGF0YVR5cGUgdHlwZSkKLSAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2Vy
KSkKKyAgICA6IG1fY2xpZW50KFdURjo6bWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50PigpKQorICAgICwgbV93ZWFrTWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkK
ICAgICAsIG1fcnBJZChycElkKQotICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5
cGUpCiB7CiAgICAgbV90cmFuc3BvcnRzID0gVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+
KCk7CkBAIC01OSwxMCArNjUsMTYgQEAgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWcKIAogV2ViQXV0
aGVudGljYXRpb25QYW5lbDo6fldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoKSA9IGRlZmF1bHQ7CiAK
K3ZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNh
dGlvblJlcXVlc3REYXRhJiYgcmVxdWVzdCwgQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQobV9tYW5hZ2VyKTsKKyAgICBtX21hbmFnZXItPmhhbmRsZVJlcXVlc3QoV1RGTW92ZShy
ZXF1ZXN0KSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCiB2b2lkIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw6OmNhbmNlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9t
YW5hZ2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKKyAgICBpZiAobV93ZWFrTWFuYWdlcikKKyAg
ICAgICAgbV93ZWFrTWFuYWdlci0+Y2FuY2VsUmVxdWVzdCgqdGhpcyk7CiB9CiAKIHZvaWQgV2Vi
QXV0aGVudGljYXRpb25QYW5lbDo6c2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50PiYmIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IGNjNDJhNWY2YzU2MDk4
NjhlYjM0MWQxYjMyMTU0Mjg0NzgwODM2NjQuLjgzOWY2OWJhNDljZDY5NjVjZGM2ZjM2MjM2YjNm
NjE5ODQzMmE1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaApAQCAtMzUsMTAgKzM1LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgQ2xpZW50RGF0YVR5cGUgOiBib29sOworCitjbGFz
cyBBdXRoZW50aWNhdG9yUmVzcG9uc2U7CisKK3N0cnVjdCBFeGNlcHRpb25EYXRhOwogfQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOworCitzdHJ1Y3Qg
V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00
NywyNSArNTMsMzUgQEAgY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xh
c3MgV2ViQXV0aGVudGljYXRpb25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVj
dDo6VHlwZTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgVHJhbnNwb3J0U2V0
ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBXVEY6OkludEhhc2g8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFp
dHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHVzaW5nIFJlc3BvbmQg
PSBWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPjsKKyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoUmVzcG9uZCYmKT47CiAKLSAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+
IGNyZWF0ZShjb25zdCBXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpT
dHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBl
KTsKKyAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKTsKIAotICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7
IH0KLSAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRy
YW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcG9ydHM7IH0KLSAgICBXZWJDb3JlOjpD
bGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0
YVR5cGU7IH0KKyAgICB2b2lkIGhhbmRsZVJlcXVlc3QoV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhJiYsIENhbGxiYWNrJiYpOwogICAgIHZvaWQgY2FuY2VsKCkgY29uc3Q7CiAK
ICAgICBjb25zdCBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxX
ZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAorICAgIC8vIEZJWE1FPHJkYXI6Ly9w
cm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMu
CisgICAgdXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9y
VHJhbnNwb3J0LCBXVEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dD4+OworICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0
IFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwg
Y29uc3QgVHJhbnNwb3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6
U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zcG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnRE
YXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToK
KyAgICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sb3dp
bmcgZGVwcmVjYXRlZCBtZXRob2QuCiAgICAgV2ViQXV0aGVudGljYXRpb25QYW5lbChjb25zdCBX
ZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNv
bnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKIAotICAgIFdlYWtQ
dHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIFdURjo6U3Ry
aW5nIG1fcnBJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFu
YWdlcj4gbV9tYW5hZ2VyOyAvLyBGSVhNRSgpOiBDaGFuZ2UgdG8gVW5pcXVlUmVmLgogICAgIFVu
aXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiBtX2NsaWVudDsKKworICAgIC8v
IEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xvd2luZyBkZXBy
ZWNhdGVkIGZpZWxkcy4KKyAgICBXZWFrUHRyPFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI+
IG1fd2Vha01hbmFnZXI7CisgICAgV1RGOjpTdHJpbmcgbV9ycElkOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiBtX3RyYW5zcG9ydHM7CiAgICAgV2ViQ29yZTo6
Q2xpZW50RGF0YVR5cGUgbV9jbGllbnREYXRhVHlwZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwuaAppbmRleCAxMjE0ODliMGVkZjUyM2VjMjdmM2MwODJhMjVlNzlhMTUzMmQzMmUzLi5kYWZh
Y2MzMGY5YTZkZjc5N2FkNTU1NjdiMDg0OWI3ZDQzMTI1NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLmgKQEAgLTc1LDYgKzc1LDMwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9X
S1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAgICAgX1dLV2ViQXV0aGVudGljYXRpb25Tb3Vy
Y2VFeHRlcm5hbCwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKIAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXV0aGVudGljYXRv
ckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbCwKKyAgICBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAorICAgIF9XS0F1dGhlbnRpY2F0b3JB
dHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
UHVibGljS2V5Q3JlZGVudGlhbFR5cGUpIHsKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlw
ZVB1YmxpY0tleSwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50KSB7CisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVx
dWlyZWQsCisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLAorICAg
IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkLAorfSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKSB7Cisg
ICAgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmUsCisgICAgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0LAorICAgIF9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VEaXJlY3QsCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83
MTUwOTE0MT4KIEBwcm90b2NvbCBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgPE5T
T2JqZWN0PgogCiBAb3B0aW9uYWwKQEAgLTg3LDE4ICsxMTEsMTY0IEBAIHR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAKIEBlbmQKIAorV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgOiBOU09iamVjdAorCistIChpbnN0
YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICpuYW1lOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWNvbjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5p
dCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZTsKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqaWRlbnRpZmllcjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZToo
TlNTdHJpbmcgKiluYW1lIE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlz
cGxheU5hbWU6KE5TU3RyaW5nICopZGlzcGxheU5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmRpc3BsYXlOYW1lOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycyA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5
Q3JlZGVudGlhbFR5cGUpdHlwZSBhbGc6KE5TTnVtYmVyICopYWxnOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU051bWJlciAqYWxnOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0
b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7
IC8vIERlZmF1bHQgdG8gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwuCitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCByZXF1aXJlUmVzaWRlbnRLZXk7IC8vIERlZmF1bHQgdG8gTk8uCitA
cHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJW
ZXJpZmljYXRpb247IC8vIERlZmF1bHQgdG8gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
UHJlZmVycmVkLgorCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvciA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxF
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5
cGUpdHlwZSBpZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyOworCitAcHJvcGVydHkgKG5v
bmF0b21pYykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUgdHlwZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHM7CisKK0BlbmQK
KworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
CitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyA6IE5T
T2JqZWN0CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KmFwcGlkOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFC
TEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5ICopcnAgdXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2Vy
IHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25n
KSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwOworQHByb3BlcnR5IChub25hdG9t
aWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXI7CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwg
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
ICo+ICpleGNsdWRlQ3JlZGVudGlhbHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMs
IHN0cm9uZykgX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9y
U2VsZWN0aW9uOworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5j
ZVByZWZlcmVuY2UgYXR0ZXN0YXRpb247IC8vIERlZmF1bHQgdG8gX1dLQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZU5vbmUuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQg
dXNlclZlcmlmaWNhdGlvbjsgLy8gRGVmYXVsdCB0byBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWly
ZW1lbnRQcmVmZXJyZWQuCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykg
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitA
ZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRz
IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGFwcGlk
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVj
dAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJv
cGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEg
KmF0dGVzdGF0aW9uT2JqZWN0OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAo
bnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVu
ZAorCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSkKIEBpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNs
ZWFyQWxsTG9jYWxBdXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlm
eWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZTsKIAorLSAoaW5zdGFuY2V0eXBlKWlu
aXQ7CisKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkzOTQ+CisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5NDg1PgorLSAodm9pZCltYWtlQ3JlZGVudGlhbFdpdGhIYXNoOihO
U0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9y
QXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpZ2V0QXNzZXJ0
aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dL
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZCljYW5jZWw7CiAKIEBlbmQKIAorQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IChXS0RlcHJlY2F0ZWQpCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkg
TlNTdHJpbmcgKnJlbHlpbmdQYXJ0eUlEOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU1NldCAqdHJhbnNwb3J0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgX1dLV2ViQXV0aGVudGljYXRpb25UeXBlIHR5cGU7CisKK0BlbmQKKwogTlNfQVNTVU1FX05P
Tk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDRhZWU2MjllODdiZGU4
MTM4MjdjOWNiNDJkNDgyZjc3YTJhZWRlMjEuLjNkYTVjZmQ1NjVjZmZmM2NlMzUzY2MzZjhkODFj
YWJmMTczNzBhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC0yNywxMCArMjcs
MTg1IEBACiAjaW1wb3J0ICJfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwuaCIKIAog
I2ltcG9ydCAiTG9jYWxBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0ICJMb2NhbFNlcnZpY2UuaCIK
KyNpbXBvcnQgIldLRXJyb3IuaCIKICNpbXBvcnQgIldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGll
bnQuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
QXV0aGVudGljYXRpb25Db25zdGFudHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEFwcGlkOihCT09MKWFwcGlkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXBwaWQgPSBhcHBpZDsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclJlc3Bv
bnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKilyYXdJZCBleHRl
bnNpb25zOihfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICopZXh0ZW5z
aW9ucworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX3Jhd0lkID0gcmF3SWQ7CisgICAgX2V4dGVuc2lvbnMgPSBleHRlbnNpb25z
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3
SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zIGF1dGhlbnRpY2F0b3JEYXRhOihOU0RhdGEgKilh
dXRoZW50aWNhdG9yRGF0YSBzaWduYXR1cmU6KE5TRGF0YSAqKXNpZ25hdHVyZSB1c2VySGFuZGxl
OihOU0RhdGEgKil1c2VySGFuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aFJhd0lkOnJhd0lkIGV4dGVuc2lvbnM6ZXh0ZW5zaW9uc10pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgX2F1dGhlbnRpY2F0b3JEYXRhID0gYXV0aGVudGljYXRvckRhdGE7CisgICAgX3Np
Z25hdHVyZSA9IHNpZ25hdHVyZTsKKyAgICBfdXNlckhhbmRsZSA9IHVzZXJIYW5kbGU7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihO
U0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRPdXRwdXRzICopZXh0ZW5zaW9ucyBhdHRlc3RhdGlvbk9iamVjdDooTlNEYXRhICopYXR0ZXN0
YXRpb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3
SWQgZXh0ZW5zaW9uczpleHRlbnNpb25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
YXR0ZXN0YXRpb25PYmplY3QgPSBhdHRlc3RhdGlvbk9iamVjdDsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNy
aXRlcmlhCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmF1dGhlbnRpY2F0b3JB
dHRhY2htZW50ID0gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGw7CisgICAgc2VsZi5yZXF1
aXJlUmVzaWRlbnRLZXkgPSBOTzsKKyAgICBzZWxmLnVzZXJWZXJpZmljYXRpb24gPSBfV0tVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUnA6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eSAqKXJwIHVzZXI6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICop
dXNlciBwdWJLZXlDcmVkUGFyYW1zOihOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzICo+ICopcHViS2V5Q3JlZFBhcmFtcworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5ycCA9IHJwOworICAgIHNl
bGYudXNlciA9IHVzZXI7CisgICAgc2VsZi5wdWJLZXlDcmVkUGFyYW1zID0gcHViS2V5Q3JlZFBh
cmFtczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VHlwZTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGUpdHlwZSBpZGVudGlmaWVyOihOU0RhdGEg
KilpZGVudGlmaWVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLnR5cGUgPSB0eXBlOworICAgIHNlbGYuaWRlbnRpZmll
ciA9IGlkZW50aWZpZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm5hbWUgPSBuYW1lOworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZSl0eXBlIGFsZzooTlNOdW1iZXIgKilhbGcKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNl
bGYudHlwZSA9IHR5cGU7CisgICAgc2VsZi5hbGcgPSBhbGc7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0
aW9uID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKilu
YW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRl
bnRpZmllciBkaXNwbGF5TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFt
ZSA9IGRpc3BsYXlOYW1lOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxl
bWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVU
SE4pCiAgICAgV2Vha1B0cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9j
bGllbnQ7CkBAIC0zOCw2ICsyMTMsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgewogI2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxm
OworfQorCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUs
NiArMzIxLDI1MiBAQCAtICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VC
X0FVVEhOKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSog
ZGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQo
KGNvbnN0IHVpbnQ4X3QqKVtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlRW50aXR5KFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkVudGl0eSYgb3V0cHV0LCBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRW50aXR5KiBpbnB1dCkKK3sKKyAgICBvdXRwdXQubmFtZSA9IGlucHV0Lm5hbWU7
CisgICAgb3V0cHV0Lmljb24gPSBpbnB1dC5pY29uOworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnBFbnRpdHkpCit7
CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRp
dHkgcmVzdWx0OworICAgIGVuY29kZUVudGl0eShyZXN1bHQsIHJwRW50aXR5KTsKKyAgICByZXN1
bHQuaWQgPSBycEVudGl0eS5pZGVudGlmaWVyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJF
bnRpdHkgcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkoX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgKnVzZXJFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSByZXN1bHQ7CisgICAgZW5jb2RlRW50aXR5
KHJlc3VsdCwgdXNlckVudGl0eSk7CisgICAgcmVzdWx0LmlkVmVjdG9yID0gdmVjdG9yRnJvbU5T
RGF0YSh1c2VyRW50aXR5LmlkZW50aWZpZXIpOworICAgIHJlc3VsdC5kaXNwbGF5TmFtZSA9IHVz
ZXJFbnRpdHkuZGlzcGxheU5hbWU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
VmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFt
ZXRlcnM+IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKE5TQXJyYXk8X1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMpCit7CisgICAgVmVjdG9y
PFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+
IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwdWJLZXlDcmVkUGFy
YW1zLmNvdW50KTsKKworICAgIGZvciAoX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
KnBhcmFtIDogcHViS2V5Q3JlZFBhcmFtcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCh7IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXksIHBhcmFtLmFs
Zy5sb25nTG9uZ1ZhbHVlIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdl
YkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQgYXV0aGVudGljYXRvclRyYW5zcG9ydChfV0tX
ZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydCB0cmFuc3BvcnQpCit7CisgICAgc3dpdGNoICh0cmFu
c3BvcnQpIHsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCOgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOworICAgIGNh
c2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkM6CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmM7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50
aWNhdGlvblRyYW5zcG9ydEludGVybmFsOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVu
dGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpVc2I7CisgICAgfQorfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ+IGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKE5TQXJyYXk8TlNOdW1iZXIg
Kj4gKnRyYW5zcG9ydHMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0cmFuc3Bv
cnRzLmNvdW50KTsKKworICAgIGZvciAoTlNOdW1iZXIgKnRyYW5zcG9ydCA6IHRyYW5zcG9ydHMp
CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoYXV0aGVudGljYXRvclRyYW5zcG9ydCgo
X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnQpdHJhbnNwb3J0LmludFZhbHVlKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9yPiBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMoTlNBcnJh
eTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqY3JlZGVudGlhbHMpCit7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPiByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY3JlZGVudGlhbHMuY291bnQpOwor
CisgICAgZm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA6
IGNyZWRlbnRpYWxzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgeyB9LCB2ZWN0b3JGcm9tTlNEYXRh
KGNyZWRlbnRpYWwuaWRlbnRpZmllciksIGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKGNyZWRlbnRp
YWwudHJhbnNwb3J0cykgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgT3B0
aW9uYWw8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVu
dGljYXRvckF0dGFjaG1lbnQ+IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KF9XS0F1dGhlbnRpY2F0
b3JBdHRhY2htZW50IGF0dGFjaG1lbnQpCit7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7Cisg
ICAgY2FzZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbDoKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm06
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgY2FzZSBfV0tBdXRo
ZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxhdGZvcm06CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNo
bWVudDo6Q3Jvc3NQbGF0Zm9ybTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cit9CisKK3N0YXRp
YyBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbihf
V0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXYpCit7CisgICAgc3dpdGNoICh1dikgewor
ICAgIGNhc2UgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ6CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOwor
ICAgIGNhc2UgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOgorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7
CisgICAgY2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZDoKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291
cmFnZWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJl
ZDsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zOjpBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYXV0aGVudGljYXRvclNl
bGVjdGlvbkNyaXRlcmlhKF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVu
dGljYXRvclNlbGVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgcmVzdWx0OworICAg
IHJlc3VsdC5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50
KGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uYXV0aGVudGljYXRvckF0dGFjaG1lbnQpOworICAgIHJl
c3VsdC5yZXF1aXJlUmVzaWRlbnRLZXkgPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnJlcXVpcmVS
ZXNpZGVudEtleTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJpZmljYXRp
b24oYXV0aGVudGljYXRvclNlbGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVm
ZXJlbmNlIGF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UoX1dLQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZSBhdHRlc3RhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGF0dGVzdGF0aW9u
KSB7CisgICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9uZToKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5v
bmU7CisgICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3Q6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
OjpJbmRpcmVjdDsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VE
aXJlY3Q6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVm
ZXJlbmNlOjpEaXJlY3Q7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJl
bmNlOjpOb25lOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudElucHV0cyBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMo
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zKQorewor
ICAgIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyByZXN1bHQ7
CisgICAgcmVzdWx0LmFwcGlkID0gZXh0ZW5zaW9ucy5hcHBpZDsKKyAgICByZXN1bHQuZ29vZ2xl
TGVnYWN5QXBwaWRTdXBwb3J0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2Vu
ZGlmCisKKysgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29u
dmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikK
KyAgICByZXN1bHQucnAgPSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkob3B0aW9ucy5ycCk7
CisgICAgcmVzdWx0LnVzZXIgPSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eShvcHRpb25z
LnVzZXIpOworCisgICAgcmVzdWx0LnB1YktleUNyZWRQYXJhbXMgPSBwdWJsaWNLZXlDcmVkZW50
aWFsUGFyYW1ldGVycyhvcHRpb25zLnB1YktleUNyZWRQYXJhbXMpOworCisgICAgaWYgKG9wdGlv
bnMudGltZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5z
aWduZWRJbnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAg
ICAgIHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvcnMob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpOworICAgIGlmIChvcHRpb25zLmF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24pCisgICAgICAgIHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKG9wdGlvbnMuYXV0aGVudGljYXRvclNl
bGVjdGlvbik7CisgICAgcmVzdWx0LmF0dGVzdGF0aW9uID0gYXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZShvcHRpb25zLmF0dGVzdGF0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9
IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMp
OworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRI
TikKK3N0YXRpYyBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSogd2tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVz
cG9uc2VEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBbW19XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5z
aW9uczpuaWwgYXR0ZXN0YXRpb25PYmplY3Q6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuYXR0
ZXN0YXRpb25PYmplY3QtPmRhdGEoKSBsZW5ndGg6ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+Ynl0
ZUxlbmd0aCgpXV07Cit9CisjZW5kaWYKKworLSAodm9pZCltYWtlQ3JlZGVudGlhbFdpdGhIYXNo
OihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sKKyNpZiBFTkFC
TEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1ha2VCbG9ja1B0
cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4s
IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgV1RG
Ojpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJl
c3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50aWNhdG9y
QXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKSwgbmlsKTsKKyAgICAgICAgfSwg
WyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNv
ZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YShoYXNoKSwgW19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRp
b25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1
bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwgdHJ1ZSwgU3RyaW5n
KCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNX
aXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9u
cworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyByZXN1
bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGlmIChvcHRpb25zLnRpbWVvdXQpCisg
ICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVuc2lnbmVkSW50VmFsdWU7
CisgICAgaWYgKG9wdGlvbnMucnBJZCkKKyAgICAgICAgcmVzdWx0LnJwSWQgPSBvcHRpb25zLnJw
SWQ7CisgICAgaWYgKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LmFs
bG93Q3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMob3B0aW9ucy5h
bGxvd0NyZWRlbnRpYWxzKTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJp
ZmljYXRpb24ob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9u
cyA9IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lv
bnMpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9B
VVRITikKK3N0YXRpYyBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UqIHdrQXV0aGVu
dGljYXRvckFzc2VydGlvblJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNw
b25zZURhdGEmIGRhdGEpCit7CisgICAgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
T3V0cHV0cyAqZXh0ZW5zaW9ucyA9IG5pbDsKKyAgICBpZiAoZGF0YS5hcHBpZCkKKyAgICAgICAg
ZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyBh
bGxvY10gaW5pdFdpdGhBcHBpZDpkYXRhLmFwcGlkLnZhbHVlKCldOworCisgICAgTlNEYXRhICp1
c2VySGFuZGxlID0gbmlsOworICAgIGlmIChkYXRhLnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJI
YW5kbGUgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVu
Z3RoOmRhdGEudXNlckhhbmRsZS0+Ynl0ZUxlbmd0aCgpXTsKKworICAgIHJldHVybiBbW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6ZGF0YS5yYXdJZC0+ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lkLT5ieXRl
TGVuZ3RoKCldIGV4dGVuc2lvbnM6bmlsIGF1dGhlbnRpY2F0b3JEYXRhOltOU0RhdGEgZGF0YVdp
dGhCeXRlczpkYXRhLmF1dGhlbnRpY2F0b3JEYXRhLT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXV0aGVu
dGljYXRvckRhdGEtPmJ5dGVMZW5ndGgoKV0gc2lnbmF0dXJlOltOU0RhdGEgZGF0YVdpdGhCeXRl
czpkYXRhLnNpZ25hdHVyZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnNpZ25hdHVyZS0+Ynl0ZUxlbmd0
aCgpXSB1c2VySGFuZGxlOnVzZXJIYW5kbGVdOworfQorI2VuZGlmCisKKy0gKHZvaWQpZ2V0QXNz
ZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlcgor
eworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFtoYW5kbGVyID0g
bWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRv
clJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11dGFibGUgewor
ICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFuZGxlcih3a0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKSwgbmlsKTsKKyAg
ICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgewor
ICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9y
RG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0pOwor
ICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YShoYXNo
KSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25z
V2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25Q
YW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9wdCwgeyB9LCB0cnVl
LCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30KKworKyAoQk9PTClp
c1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUKK3sKKyNpZiBFTkFC
TEUoV0VCX0FVVEhOKQorICAgIHJldHVybiBXZWJLaXQ6OkxvY2FsU2VydmljZTo6aXNBdmFpbGFi
bGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKICNpZiBFTkFCTEUoV0VC
X0FVVEhOKQogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRo
ZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWUwMGU1OTA2NzIxYmY1OWU4MTZjNTU5ZjNlMjYzZjBhNWYzMWQxMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsRm9yVGVzdGluZy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2ltcG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczsK
K3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7Cit9CisKK1dLX0NMQVNT
X0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFj
ZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIChXS1Rlc3RpbmcpCisKKy8vIEZJWE1FOiA8cmRh
cjovL3Byb2JsZW0vNzE1MDk3MTQ+CisvLyBGb3IgdGVzdGluZyBvbmx5LgorKyAoV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9Db3JlQ3JlYXRpb25P
cHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMg
KilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29u
dmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0
YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVu
dGljYXRpb25SZXF1ZXN0RGF0YS5oCmluZGV4IDZlNDAyZmNkZjEyNWM2ZTIzNjFiZDI3ZGZiNTgw
MjJiZGMxNzI0ZDkuLmQ2MmIzY2Q3NzdjODRiMGQ5MTUyYWM3MTdiODdmMDJlZTY5MzljNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1
dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKQEAgLTQ1LDEx
ICs0NSwxNCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YSB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2g7CiAgICAgVmFyaWFudDxXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+IG9wdGlvbnM7CisKKyAgICAvLyBGSVhNRTxyZGFy
Oi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sb3dpbmcgZGVwcmVjYXRlZCBmaWVs
ZHMuCiAgICAgV2Vha1B0cjxXZWJQYWdlUHJveHk+IHBhZ2U7CiAgICAgV2ViQXV0aGVudGljYXRp
b25QYW5lbFJlc3VsdCBwYW5lbFJlc3VsdCB7IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6
OlVuYXZhaWxhYmxlIH07CiAgICAgUmVmUHRyPEFQSTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4g
cGFuZWw7CiAgICAgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpHbG9iYWxGcmFtZUlkZW50aWZpZXI+
IGZyYW1lSUQ7CiAgICAgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5mbzsKKwogICAgIGJv
b2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwogICAgIFN0cmluZyBjYWNoZWRQaW47IC8vIE9ubHkg
dXNlZCB0byBpbXByb3ZlIE5GQyBDbGllbnQgUElOIGV4cGVyaWVuY2UuCiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNThkMjRhNGI4
MDU5MzA5YjdmOGZiN2I0OTY5Y2Y3ZDY0OWRiYWM1ZS4uNGUwZDA1ZWY3YjI3ZTQxZWM3Y2NlMzRk
OTk4NWU5NGNjNTcxZTFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMTI2LDYgKzExMjYsNyBAQAogCQk1NzdGRjc4MjIzNDZFODFD
MDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3ODEyMzQ2RTgxQzAwNEVE
RkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsgfTsKIAkJNTc3RkY3
ODUyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3N0ZGNzgzMjM0NkVD
QUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi87IH07CiAJCTU3
OERDMjk4MjE1NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OERDMjk3MjE1
NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLzsgfTsKKwkJ
NTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JU
ZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRl
c3RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NzlGMUJGNjIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRp
b25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTc5RjFCRjQyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0
aW9uUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25B
c3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVu
dGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi87IH07CiAJCTU3OUYxQkZDMjND
ODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGQTIz
QzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5o
ICovOyB9OwpAQCAtMzk4MCw2ICszOTgxLDcgQEAKIAkJNTc3RkY3ODMyMzQ2RUNBQTAwNEVERkI5
IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXV0
aGVudGljYXRpb25QYW5lbENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NzdGRjc4NDIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OERDMjk3MjE1NUEwMDEwMDc0RTgxNSAv
KiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxBdXRo
ZW50aWNhdGlvblNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBB
NjUxMjU2NURFNkEwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGNDIzQzgwREI2MDBDN0Q0QjQg
LyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3OUYxQkY1MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLV2Vi
QXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9u
QXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc0NDQsNiArNzQ0Niw3IEBACiAJCQkJNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovLAog
CQkJCTU3NDcyOENGMjM0NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
LmggKi8sCiAJCQkJNTc0NzI4RDAyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0gKi8sCisJCQkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi8sCiAJCQkJNTc0NzI4RDMyMzQ1NzBBRTAw
MTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oICovLAogCQkJCTFB
RTI4Njc2MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUuaCAqLywKIAkJCQkx
QUUyODY3NTFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXplLm1tICovLApAQCAt
MTA4NzYsNiArMTA4NzksNyBAQAogCQkJCTU3OUYxQkY2MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25S
ZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzQ3MjhEMTIzNDU2RTk4MDAx
NzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JU
ZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzQ3MjhENDIzNDU3MEFFMDAxNzAwQUYgLyog
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUUyODY3ODFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUUyODY4MDFDN0Y5MkMwMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXpl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY5ZWQ2ODY1OGExN2NiMmQxZGE1ZTJkZWMzMGJmZmZkYTk3
MjNiMTYuLjYxMWFkODI0M2M2MWNmNjExZTgyY2M5ZWEwNWM4N2U2MGIxZTQyZmYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0aGVudGljYXRpb25TZXJ2aWNlcy5G
cmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEzNjQ3MzE+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIwMjAtMTEtMTMgIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046
IHIyNjk1MTQgUmVzZXQgc2VydmVyIHBvcnQgYmVmb3JlIHJlc3RhcnRpbmcgd2Vic2VydmVyCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggYTk0YWI3ODhiZmQxNDkwMmQ2
Mzc4NWYyMDNmNjFjZTg5ZmI2MGQwNC4uNGUwZjgxODYxN2QxYmQ0NTlhMWYwY2VmZjA1ZTJmODAx
NDAyYjMwOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQpAQCAtMzMsMTEg
KzMzLDE0IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdD
b25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxMb2NhbEF1dGhlbnRpY2F0aW9uL0xvY2Fs
QXV0aGVudGljYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tFeHBlcmltZW50YWxGZWF0dXJlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0aGVudGlj
YXRpb25Bc3NlcnRpb25SZXNwb25zZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
Rm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmFu
ZG9tTnVtYmVyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CkBAIC0y
MzcsNiArMjQwLDcgQEAgLSAoX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAqKXBhbmVsCiBAZW5k
CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgewogCkBAIC0xNDMyLDYgKzE0MzYsMzMyIEBAIFRFU1QoV2ViQXV0aGVudGlj
YXRpb25QYW5lbCwgTEFHZXRBc3NlcnRpb25NdWx0aXBsZU9yZGVyKQogCiAjZW5kaWYgLy8gVVNF
KEFQUExFX0lOVEVSTkFMX1NESykgfHwgUExBVEZPUk0oSU9TKQogCitURVNUKFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNaW5pbXVuKQor
eworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwID0gW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl07
CisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXIgPSBbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVk
QGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOltOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVy
IGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsK
KyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlD
cmVkUGFyYW1zID0gQFsgW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGFsZzpALTdd
IF07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpvcHRpb25z
ID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0
aFJwOnJwIHVzZXI6dXNlciBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdOworICAg
IGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNy
ZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQu
cnAuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmlkLmlzTnVsbCgp
KTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBl
eGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC51c2VyLmljb24uaXNOdWxsKCkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVu
dGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRh
KCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAxbHUpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQ
YXJhbXNbMF0uYWxnLCAtNyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIFdURjo6
bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgp
LCAwbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbiwgV1RG
OjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9uLCBBdHRlc3RhdGlv
bkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0
ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXh0ZW5zaW9u
cy0+Z29vZ2xlTGVnYWN5QXBwaWRTdXBwb3J0LCBmYWxzZSk7Cit9CisKK1RFU1QoV2ViQXV0aGVu
dGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01heGltdW1E
ZWZhdWx0KQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAz
LCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnAgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVz
ZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlk
ZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsKKyAgICBO
U0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFy
YW1zID0gQFsgW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdp
dGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGFsZzpALTddLCBbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVi
bGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtMjU3XSBdOworCisgICAgX1dLUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqb3B0aW9ucyA9IFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycCB1c2VyOnVzZXIg
cHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXTsKKyAgICBvcHRpb25zLnRpbWVvdXQg
PSBAMTIwOworICAgIG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzID0gQFsgW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxUeXBlUHVibGljS2V5IGlkZW50aWZpZXI6bnNJZGVudGlmaWVyXSBdOworICAgIG9w
dGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGFsbG9jXSBpbml0XTsKKyAgICBvcHRpb25zLmV4dGVuc2lvbnMgPSBbW19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF07CisKKyAgICBh
dXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVh
dGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShy
ZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJw
Lmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRp
ZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgp
LCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFy
YW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sx
XS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5l
eGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNb
MF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUSht
ZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50
aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxs
b3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVp
cmVSZXNpZGVudEtleSwgZmFsc2UpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRv
clNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
OjpQcmVmZXJyZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlv
blBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTEpCit7Cisg
ICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAg
ICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVy
IGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJwRW50aXR5ICpycCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBp
bml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdOworICAgIHJwLmljb24gPSBAImh0dHBzLy93d3cu
ZXhhbXBsZS5jb20vaWNvbi5qcGciOworICAgIHJwLmlkZW50aWZpZXIgPSBAImV4YW1wbGUuY29t
IjsKKworICAgIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyID0gW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxl
c2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJK
IEFwcGxlc2VlZCJdOworICAgIHVzZXIuaWNvbiA9IEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9p
Y29uLmpwZyI7CisKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
ICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1l
dGVycyBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tleUNyZWRlbnRpYWxUeXBlUHVibGlj
S2V5IGFsZzpALTddLCBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBp
bml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtMjU3
XSBdOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqb3B0aW9u
cyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdp
dGhScDpycCB1c2VyOnVzZXIgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXTsKKyAg
ICBvcHRpb25zLnRpbWVvdXQgPSBAMTIwOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3IgKmNyZWRlbnRpYWwgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
IGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkg
aWRlbnRpZmllcjpuc0lkZW50aWZpZXJdOworICAgIGNyZWRlbnRpYWwudHJhbnNwb3J0cyA9IEBb
IFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNC
XSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRO
RkNdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dEludGVybmFsXSBdOworICAgIG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzID0gQFsgY3JlZGVu
dGlhbCwgY3JlZGVudGlhbCBdOworCisgICAgX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRl
cmlhICphdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9u
Q3JpdGVyaWEgYWxsb2NdIGluaXRdOworICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uYXV0aGVu
dGljYXRvckF0dGFjaG1lbnQgPSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtOwor
ICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5ID0gWUVTOworICAg
IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24udXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudFJlcXVpcmVkOworICAgIG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVj
dGlvbiA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisKKyAgICBvcHRpb25zLmF0dGVzdGF0aW9u
ID0gX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdDsKKworICAgIGF1dG8g
cmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9u
T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3Vs
dC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJw
Lmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9X
S19TVFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9p
Y29uLmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNp
emVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZl
Y3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVY
UEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAg
IEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlD
cmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJs
aWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0y
NTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAg
RVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRh
dGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwg
QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpO
ZmMpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9y
dHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQs
IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OjpQbGF0Zm9ybSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0
aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXksIHRydWUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0
aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50OjpSZXF1aXJlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9u
LCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3QpOworfQorCitURVNUKFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNN
YXhpbXVtMikKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisKKyAgICBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBF
bnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl07CisgICAgcnAuaWNvbiA9
IEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyI7CisgICAgcnAuaWRlbnRpZmllciA9
IEAiZXhhbXBsZS5jb20iOworCisgICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkg
KnVzZXIgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0
aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBk
aXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl07CisgICAgdXNlci5pY29uID0gQCJodHRwcy8vd3d3
LmV4YW1wbGUuY29tL2ljb24uanBnIjsKKworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dLUHVibGljS2V5Q3JlZGVu
dGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtN10sIFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1Ymxp
Y0tleSBhbGc6QC0yNTddIF07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zICpvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
IGFsbG9jXSBpbml0V2l0aFJwOnJwIHVzZXI6dXNlciBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNy
ZWRQYXJhbXNdOworICAgIG9wdGlvbnMudGltZW91dCA9IEAxMjA7CisKKyAgICBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA9IFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZVB1YmxpY0tleSBpZGVudGlmaWVyOm5zSWRlbnRpZmllcl07CisgICAgY3JlZGVudGlhbC50
cmFuc3BvcnRzID0gQFsgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRp
b25UcmFuc3BvcnRVU0JdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNh
dGlvblRyYW5zcG9ydE5GQ10sIFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRp
Y2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdIF07CisgICAgb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlh
bHMgPSBAWyBjcmVkZW50aWFsLCBjcmVkZW50aWFsIF07CisKKyAgICBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBbW19XS0F1dGhlbnRp
Y2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF07CisgICAgYXV0aGVudGljYXRvclNl
bGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50Q3Jvc3NQbGF0Zm9ybTsgLy8KKyAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnJlcXVpcmVS
ZXNpZGVudEtleSA9IFlFUzsKKyAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnVzZXJWZXJpZmlj
YXRpb24gPSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZDsgLy8KKyAg
ICBvcHRpb25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9u
OworCisgICAgb3B0aW9ucy5hdHRlc3RhdGlvbiA9IF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2VJbmRpcmVjdDsgLy8KKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlv
bnNdOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20i
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmljb24sIEAiaHR0cHMvL3d3dy5leGFt
cGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWQsICJl
eGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJq
YXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2Vy
Lmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9F
UShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAg
RVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIs
IHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNl
ci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5
Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVi
bGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAt
Nyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJl
c3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRl
bnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50
aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5z
aXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQu
ZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9m
KGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6
VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3Bv
cnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNl
bGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtKTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVu
dEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
LT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJh
Z2VkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0KTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlv
blBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAg
IHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAg
dWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQs
IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworICAgIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxScEVudGl0eSAqcnAgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVz
ZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlk
ZW50aWZpZXI6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihp
ZGVudGlmaWVyKV0gZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdOworICAgIE5TQXJyYXk8X1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFR5cGU6X1dL
UHVibGljS2V5Q3JlZGVudGlhbFR5cGVQdWJsaWNLZXkgYWxnOkAtN10gXTsKKyAgICBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICpvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwIHVzZXI6dXNlciBw
dWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdOworICAgIG9wdGlvbnMudGltZW91dCA9
IEAxMDA7CisKKyAgICBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICpwYW5lbCA9IFtbX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10gaW5pdF07CisgICAgW3BhbmVsIG1ha2VDcmVkZW50
aWFsV2l0aEhhc2g6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNo
KV0gb3B0aW9uczpvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckF0
dGVzdGF0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChy
ZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4p
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKK1RFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
TWluaW11bikKK3sKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKm9w
dGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5p
dF07CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0
VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudGltZW91dCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQu
cnBJZC5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNp
emUoKSwgMGx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXh0
ZW5zaW9ucy0+Z29vZ2xlTGVnYWN5QXBwaWRTdXBwb3J0LCBmYWxzZSk7Cit9CisKK1RFU1QoV2Vi
QXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zTWF4
aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdp
dGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgX1dL
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICpvcHRpb25zID0gW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdOworICAgIG9wdGlvbnMudGlt
ZW91dCA9IEAxMjA7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gQFsgW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhUeXBlOl9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlUHVibGljS2V5IGlkZW50aWZpZXI6bnNJZGVudGlmaWVyXSBdOworICAg
IG9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzIGFsbG9jXSBpbml0XTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9u
c107CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRp
YWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1Rf
RVEobWVtY21wKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRl
bnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVk
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOwor
fQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9uc01heGltdW0pCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEg
ZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisg
ICAgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICpvcHRpb25zID0gW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdOworICAgIG9wdGlv
bnMudGltZW91dCA9IEAxMjA7CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
ciAqY3JlZGVudGlhbCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2Nd
IGluaXRXaXRoVHlwZTpfV0tQdWJsaWNLZXlDcmVkZW50aWFsVHlwZVB1YmxpY0tleSBpZGVudGlm
aWVyOm5zSWRlbnRpZmllcl07CisgICAgY3JlZGVudGlhbC50cmFuc3BvcnRzID0gQFsgW05TTnVt
YmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdLCBbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQ10sIFtO
U051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJu
YWxdIF07CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gQFsgY3JlZGVudGlhbCwgY3Jl
ZGVudGlhbCBdOworCisgICAgb3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ7CisKKyAgICBfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnMgPSBbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF07CisgICAgZXh0ZW5zaW9ucy5hcHBpZCA9IEAi
aHR0cHMvL3d3dy5leGFtcGxlLmNvbS9maWRvIjsKKyAgICBvcHRpb25zLmV4dGVuc2lvbnMgPSBl
eHRlbnNpb25zOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxs
b3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6
UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRW
ZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAo
cmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBz
aXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVu
dGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
bGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9y
dHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3Bv
cnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwg
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZCwgImh0dHBzLy93d3cuZXhhbXBsZS5jb20vZmlk
byIpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIEdldEFzc2VydGlvblNQSVRp
bWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAw
eDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAz
LCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAw
eDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAy
LCAweDAzLCAweDA0IH07CisKKyAgICBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgKm9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxv
Y10gaW5pdF07CisgICAgb3B0aW9ucy50aW1lb3V0ID0gQDEyMDsKKworICAgIF9XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwgKnBhbmVsID0gW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGFsbG9j
XSBpbml0XTsKKyAgICBbcGFuZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV0gb3B0aW9uczpvcHRpb25zIGNvbXBsZXRp
b25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICpyZXNwb25zZSwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbiA9IHRy
dWU7CisKKyAgICAgICAgRVhQRUNUX05VTEwocmVzcG9uc2UpOworICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9tYWluKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNv
ZGUsIFdLRXJyb3JVbmtub3duKTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJndlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxSYW4pOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414520</attachid>
            <date>2020-11-18 17:35:26 -0800</date>
            <delta_ts>2020-11-19 12:59:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201118173525.patch</filename>
            <type>text/plain</type>
            <size>69214</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uNTU3YjhiNGQ5
NjBjYmExODYyNmQ3Y2ZmMThiYThlZjUzMjI1ZDQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKK3sKK30KKwogV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWdlciwgY29uc3Qg
V1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cywgQ2xpZW50
RGF0YVR5cGUgdHlwZSkKLSAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKKyAg
ICA6IG1fY2xpZW50KFdURjo6bWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xp
ZW50PigpKQorICAgICwgbV93ZWFrTWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKICAgICAs
IG1fcnBJZChycElkKQotICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5cGUpCiB7
CiAgICAgbV90cmFuc3BvcnRzID0gVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+KCk7CkBA
IC01OSwxMCArNjUsMTYgQEAgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRp
b25QYW5lbChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWcKIAogV2ViQXV0aGVudGlj
YXRpb25QYW5lbDo6fldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoKSA9IGRlZmF1bHQ7CiAKK3ZvaWQg
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJl
cXVlc3REYXRhJiYgcmVxdWVzdCwgQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQo
bV9tYW5hZ2VyKTsKKyAgICBtX21hbmFnZXItPmhhbmRsZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0
KSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCiB2b2lkIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6
OmNhbmNlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2Vy
LT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKKyAgICBpZiAobV93ZWFrTWFuYWdlcikKKyAgICAgICAg
bV93ZWFrTWFuYWdlci0+Y2FuY2VsUmVxdWVzdCgqdGhpcyk7CiB9CiAKIHZvaWQgV2ViQXV0aGVu
dGljYXRpb25QYW5lbDo6c2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50PiYmIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IGNjNDJhNWY2YzU2MDk4NjhlYjM0
MWQxYjMyMTU0Mjg0NzgwODM2NjQuLjcyYWUyMGIwMWQ5YTAwNjJlZDEyMDY4MDkxMmQ3OTNhZjQ0
ODFjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwuaApAQCAtMzUsMTAgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGVudW0gY2xhc3MgQ2xpZW50RGF0YVR5cGUgOiBib29sOworCitjbGFzcyBBdXRo
ZW50aWNhdG9yUmVzcG9uc2U7CisKK3N0cnVjdCBFeGNlcHRpb25EYXRhOwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOworCitzdHJ1Y3QgV2ViQXV0
aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00NywyNSAr
NTMsMzUgQEAgY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xhc3MgV2Vi
QXV0aGVudGljYXRpb25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlw
ZTo6V2ViQXV0aGVudGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFz
aFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBXVEY6OkludEhhc2g8V2ViQ29y
ZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8V2Vi
Q29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHVzaW5nIFJlc3BvbmQgPSBWYXJp
YW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhPjsKKyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVz
cG9uZCYmKT47CiAKLSAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNyZWF0
ZShjb25zdCBXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcm
IHJwSWQsIGNvbnN0IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKKyAg
ICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAgICAgfldlYkF1dGhlbnRpY2F0aW9uUGFuZWwo
KTsKIAotICAgIFdURjo6U3RyaW5nIHJwSWQoKSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KLSAg
ICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9y
dHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcG9ydHM7IH0KLSAgICBXZWJDb3JlOjpDbGllbnRE
YXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7
IH0KKyAgICB2b2lkIGhhbmRsZVJlcXVlc3QoV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblJlcXVl
c3REYXRhJiYsIENhbGxiYWNrJiYpOwogICAgIHZvaWQgY2FuY2VsKCkgY29uc3Q7CiAKICAgICBj
b25zdCBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudC5nZXQoKTsgfQogICAgIHZvaWQgc2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRo
ZW50aWNhdGlvblBhbmVsQ2xpZW50PiYmKTsKIAorICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vNzE1MDk4NDg+IFJlbW92ZSB0aGUgZm9sb3dpbmcgZGVwcmVjYXRlZCBtZXRob2RzLgorICAg
IHVzaW5nIFRyYW5zcG9ydFNldCA9IEhhc2hTZXQ8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5z
cG9ydCwgV1RGOjpJbnRIYXNoPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+LCBXVEY6
OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+PjsK
KyAgICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNyZWF0ZShjb25zdCBXZWJL
aXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0
IFRyYW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKKyAgICBXVEY6OlN0cmlu
ZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9CisgICAgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc3BvcnRzOyB9CisgICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUgY2xpZW50RGF0YVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisKIHByaXZhdGU6CisgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRoZSBmb2xvd2luZyBk
ZXByZWNhdGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktp
dDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3Qg
VHJhbnNwb3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxX
ZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcg
bV9ycElkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2Vy
PiBtX21hbmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0
byBVbmlxdWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+
IG1fY2xpZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVt
b3ZlIHRoZSBmb2xvd2luZyBkZXByZWNhdGVkIGZpZWxkcy4KKyAgICBXZWFrUHRyPFdlYktpdDo6
QXV0aGVudGljYXRvck1hbmFnZXI+IG1fd2Vha01hbmFnZXI7CisgICAgV1RGOjpTdHJpbmcgbV9y
cElkOwogICAgIFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiBtX3RyYW5z
cG9ydHM7CiAgICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUgbV9jbGllbnREYXRhVHlwZTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCAxMjE0ODliMGVkZjUyM2VjMjdmM2MwODJh
MjVlNzlhMTUzMmQzMmUzLi5hMmYxMGI4ZWNlZmIxN2JkNGM1Zjg2ZjJlYTg5YTE5YWMwM2Y0NzVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTc1LDYgKzc1LDI2IEBAIHR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAgICAgX1dL
V2ViQXV0aGVudGljYXRpb25Tb3VyY2VFeHRlcm5hbCwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAordHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9y
QXR0YWNobWVudEFsbCwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAor
ICAgIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KSB7CisgICAg
X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQsCisgICAgX1dLVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudERpc2NvdXJhZ2VkLAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tBdHRl
c3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKSB7CisgICAgX1dLQXR0ZXN0YXRpb25Db252ZXlh
bmNlUHJlZmVyZW5jZU5vbmUsCisgICAgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5j
ZUluZGlyZWN0LAorICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3Qs
Cit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTE0MT4KIEBwcm90b2NvbCBfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgPE5TT2JqZWN0PgogCiBAb3B0aW9uYWwKQEAg
LTg3LDE4ICsxMDcsMTcyIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1dlYkF1dGhl
bnRpY2F0aW9uU291cmNlKSB7CiAKIEBlbmQKIAorV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxFbnRpdHkgOiBOU09iamVjdAorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxB
QkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqbmFtZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKmljb247CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxScEVudGl0eSA6IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkKKworKyAoaW5z
dGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VO
QVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1l
OworCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppZGVu
dGlmaWVyOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVu
dGl0eSA6IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkKKworKyAoaW5zdGFuY2V0eXBlKW5l
dyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIE5TX1VOQVZBSUxB
QkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGlkZW50
aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlzcGxheU5hbWU6KE5TU3RyaW5nICopZGlzcGxh
eU5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmRpc3BsYXlOYW1lOworCitA
ZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyA6IE5TT2Jq
ZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5
cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFsZ29yaXRo
bTooTlNOdW1iZXIgKilhbGdvcml0aG07CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U051bWJlciAqYWxnb3JpdGhtOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdAorCisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVs
dCB2YWx1ZSBpcyBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbC4qLworQHByb3BlcnR5IChu
b25hdG9taWMpIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50OworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTk8uKi8KK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIHJlcXVpcmVSZXNpZGVudEtleTsKKy8qIUBkaXNjdXNzaW9uIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJl
ZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVu
dCB1c2VyVmVyaWZpY2F0aW9uOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvciA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNfVU5B
VkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXI7CisKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG51
bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHM7
CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmFwcGlkOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5ICopcnAgdXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRp
dHkgKil1c2VyIHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG5vbmF0b21p
Yywgc3Ryb25nKSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwOworQHByb3BlcnR5
IChub25hdG9taWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVz
ZXI7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zOworCitAcHJvcGVydHkgKG51
bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChu
dWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yICo+ICpleGNsdWRlQ3JlZGVudGlhbHM7CitAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIHN0cm9uZykgX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRo
ZW50aWNhdG9yU2VsZWN0aW9uOworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMg
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmUuKi8KK0Bwcm9wZXJ0eSAobm9u
YXRvbWljKSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIGF0dGVzdGF0aW9uOwor
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCitXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2Ug
X1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIDogTlNPYmplY3QKKworQHByb3Bl
cnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqdGltZW91dDsKK0Bwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnJwSWQ7CitAcHJvcGVy
dHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IgKj4gKmFsbG93Q3JlZGVudGlhbHM7CisvKiFAZGlzY3Vzc2lvbiBUaGUg
ZGVmYXVsdCB2YWx1ZSBpcyBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQu
Ki8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQg
dXNlclZlcmlmaWNhdGlvbjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25n
KSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnM7CisK
K0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgYXBw
aWQ7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZSA6IE5TT2Jq
ZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICpyYXdJZDsKK0Bw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHksIHN0cm9uZykgX1dLQXV0aGVu
dGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCisK
K1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQor
QGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSA6IF9XS0F1dGhl
bnRpY2F0b3JSZXNwb25zZQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0
YSAqYXR0ZXN0YXRpb25PYmplY3Q7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSA6IF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZQorCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqYXV0aGVudGljYXRvckRhdGE7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqc2lnbmF0dXJlOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICp1c2VySGFuZGxlOworCitA
ZW5kCisKIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQogQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIDogTlNPYmplY3QKIAog
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbERlbGVnYXRlPiBkZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSwgY29weSkgTlNTdHJpbmcgKnJlbHlpbmdQYXJ0eUlEOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBOU1NldCAqdHJhbnNwb3J0czsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgX1dLV2ViQXV0aGVudGljYXRpb25UeXBlIHR5cGU7CiAKICsgKHZvaWQp
Y2xlYXJBbGxMb2NhbEF1dGhlbnRpY2F0b3JDcmVkZW50aWFsczsKKysgKEJPT0wpaXNVc2VyVmVy
aWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlOwogCistIChpbnN0YW5jZXR5cGUp
aW5pdDsKKworLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTM5ND4gQWRkcyBDbGllbnRE
YXRhSlNPTi4KKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk0ODU+IEFkZHMgZGV0YWls
ZWQgTlNFcnJvci4KKy0gKHZvaWQpbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDooTlNEYXRhICopaGFz
aCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9u
cyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9u
UmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWdldEFzc2VydGlvbldpdGhIYXNo
OihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpY2FuY2VsOwog
CiBAZW5kCiAKK0BpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tEZXByZWNh
dGVkKQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpy
ZWx5aW5nUGFydHlJRDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNT
ZXQgKnRyYW5zcG9ydHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1dlYkF1
dGhlbnRpY2F0aW9uVHlwZSB0eXBlOworCitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCA0YWVlNjI5ZTg3YmRlODEzODI3YzljYjQy
ZDQ4MmY3N2EyYWVkZTIxLi40YjBiNTQ1NTQ2ZDU4NmYwNGU3NTllMzVhYzUzMWIxNjc2NGVmZTJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQpAQCAtMjcsMTAgKzI3LDE4MyBAQAogI2lt
cG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmgiCiAKICNpbXBvcnQgIkxv
Y2FsQXV0aGVudGljYXRvci5oIgorI2ltcG9ydCAiTG9jYWxTZXJ2aWNlLmgiCisjaW1wb3J0ICJX
S0Vycm9yLmgiCiAjaW1wb3J0ICJXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmgiCisjaW1w
b3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9B
dXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkF1dGhlbnRpY2F0
aW9uQ29uc3RhbnRzLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAorQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudElucHV0cworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50T3V0cHV0cworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBcHBpZDoo
Qk9PTClhcHBpZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX2FwcGlkID0gYXBwaWQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczooX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9yYXdJZCA9IHJhd0lkOworICAgIF9leHRlbnNpb25zID0gZXh0ZW5zaW9uczsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckFz
c2VydGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEg
KilyYXdJZCBleHRlbnNpb25zOihfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzICopZXh0ZW5zaW9ucyBhdXRoZW50aWNhdG9yRGF0YTooTlNEYXRhICopYXV0aGVudGljYXRv
ckRhdGEgc2lnbmF0dXJlOihOU0RhdGEgKilzaWduYXR1cmUgdXNlckhhbmRsZTooTlNEYXRhICop
dXNlckhhbmRsZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJ
ZCBleHRlbnNpb25zOmV4dGVuc2lvbnNdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
dXRoZW50aWNhdG9yRGF0YSA9IGF1dGhlbnRpY2F0b3JEYXRhOworICAgIF9zaWduYXR1cmUgPSBz
aWduYXR1cmU7CisgICAgX3VzZXJIYW5kbGUgPSB1c2VySGFuZGxlOworICAgIHJldHVybiBzZWxm
OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3
SWQgZXh0ZW5zaW9uczooX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAq
KWV4dGVuc2lvbnMgYXR0ZXN0YXRpb25PYmplY3Q6KE5TRGF0YSAqKWF0dGVzdGF0aW9uT2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFJhd0lkOnJhd0lkIGV4dGVuc2lv
bnM6ZXh0ZW5zaW9uc10pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2F0dGVzdGF0aW9u
T2JqZWN0ID0gYXR0ZXN0YXRpb25PYmplY3Q7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYQorCist
IChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9
IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOworICAgIHNlbGYucmVxdWlyZVJlc2lkZW50
S2V5ID0gTk87CisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZlcmlmaWNhdGlv
blJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zCisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkg
KilycCB1c2VyOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5
Q3JlZFBhcmFtczooTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
KXB1YktleUNyZWRQYXJhbXMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYucnAgPSBycDsKKyAgICBzZWxmLnVzZXIgPSB1
c2VyOworICAgIHNlbGYucHViS2V5Q3JlZFBhcmFtcyA9IHB1YktleUNyZWRQYXJhbXM7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6
KE5TRGF0YSAqKWlkZW50aWZpZXIKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNT
dHJpbmcgKiluYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLm5hbWUgPSBuYW1lOworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1l
dGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbGdvcml0aG06KE5TTnVtYmVyICopYWxn
b3JpdGhtCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBzZWxmLmFsZ29yaXRobSA9IGFsZ29yaXRobTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLnVzZXJWZXJp
ZmljYXRpb24gPSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxScEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmlu
ZyAqKW5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoTmFtZTpuYW1lXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpZGVudGlmaWVyOihOU0RhdGEg
KilpZGVudGlmaWVyIGRpc3BsYXlOYW1lOihOU1N0cmluZyAqKWRpc3BsYXlOYW1lCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxmLmRpc3Bs
YXlOYW1lID0gZGlzcGxheU5hbWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworCiBA
aW1wbGVtZW50YXRpb24gX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCB7CiAjaWYgRU5BQkxFKFdF
Ql9BVVRITikKICAgICBXZWFrUHRyPFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dD4gX2NsaWVudDsKQEAgLTM4LDYgKzIxMSwxNyBAQCBAaW1wbGVtZW50YXRpb24gX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCB7CiAjZW5kaWYKIH0KIAorLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
I2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBl
cjxBUEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw+KHNlbGYpOworI2VuZGlmCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogCiAtICh2b2lkKWRlYWxsb2MKQEAg
LTEzNSw2ICszMTksMjU0IEBAIC0gKHZvaWQpY2FuY2VsCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJM
RShXRUJfQVVUSE4pCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvckZyb21OU0RhdGEoTlNE
YXRhKiBkYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFw
cGVuZCgoY29uc3QgdWludDhfdCopZGF0YS5ieXRlcywgZGF0YS5sZW5ndGgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUVudGl0eShXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpFbnRpdHkmIG91dHB1dCwgX1dLUHVibGljS2V5
Q3JlZGVudGlhbEVudGl0eSogaW5wdXQpCit7CisgICAgb3V0cHV0Lm5hbWUgPSBpbnB1dC5uYW1l
OworICAgIG91dHB1dC5pY29uID0gaW5wdXQuaWNvbjsKK30KKworc3RhdGljIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlJwRW50aXR5IHB1YmxpY0tleUNyZWRl
bnRpYWxScEVudGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKnJwRW50aXR5KQor
eworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlJwRW50
aXR5IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVzdWx0LCBycEVudGl0eSk7CisgICAgcmVz
dWx0LmlkID0gcnBFbnRpdHkuaWRlbnRpZmllcjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpVc2Vy
RW50aXR5IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxVc2VyRW50aXR5ICp1c2VyRW50aXR5KQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJFbnRpdHkgcmVzdWx0OworICAgIGVuY29kZUVudGl0
eShyZXN1bHQsIHVzZXJFbnRpdHkpOworICAgIHJlc3VsdC5pZFZlY3RvciA9IHZlY3RvckZyb21O
U0RhdGEodXNlckVudGl0eS5pZGVudGlmaWVyKTsKKyAgICByZXN1bHQuZGlzcGxheU5hbWUgPSB1
c2VyRW50aXR5LmRpc3BsYXlOYW1lOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IFZlY3RvcjxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJh
bWV0ZXJzPiBwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyhOU0FycmF5PF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zKQoreworICAgIFZlY3Rv
cjxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJz
PiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHViS2V5Q3JlZFBh
cmFtcy5jb3VudCk7CisKKyAgICBmb3IgKF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
ICpwYXJhbSA6IHB1YktleUNyZWRQYXJhbXMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5LCBwYXJhbS5h
bGdvcml0aG0ubG9uZ0xvbmdWYWx1ZSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0IGF1dGhlbnRpY2F0b3JUcmFuc3Bv
cnQoX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnQgdHJhbnNwb3J0KQoreworICAgIHN3aXRj
aCAodHJhbnNwb3J0KSB7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVT
QjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsK
KyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjOworICAgIGNhc2UgX1dLV2Vi
QXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGlj
YXRvclRyYW5zcG9ydDo6VXNiOworICAgIH0KK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpB
dXRoZW50aWNhdG9yVHJhbnNwb3J0PiBhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyhOU0FycmF5PE5T
TnVtYmVyICo+ICp0cmFuc3BvcnRzKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNh
dG9yVHJhbnNwb3J0PiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
dHJhbnNwb3J0cy5jb3VudCk7CisKKyAgICBmb3IgKE5TTnVtYmVyICp0cmFuc3BvcnQgOiB0cmFu
c3BvcnRzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQoKF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0KXRyYW5zcG9ydC5pbnRWYWx1ZSkp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Jz
KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmNyZWRlbnRpYWxz
KQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4g
cmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNyZWRlbnRpYWxzLmNv
dW50KTsKKworICAgIGZvciAoX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKmNyZWRl
bnRpYWwgOiBjcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXksIHsgfSwgdmVjdG9yRnJv
bU5TRGF0YShjcmVkZW50aWFsLmlkZW50aWZpZXIpLCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyhj
cmVkZW50aWFsLnRyYW5zcG9ydHMpIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIE9wdGlvbmFsPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6
OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBhdXRoZW50aWNhdG9yQXR0YWNobWVudChfV0tBdXRo
ZW50aWNhdG9yQXR0YWNobWVudCBhdHRhY2htZW50KQoreworICAgIHN3aXRjaCAoYXR0YWNobWVu
dCkgeworICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGw6CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgY2FzZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBs
YXRmb3JtOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRmb3JtOworICAgIGNhc2Ug
X1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRDcm9zc1BsYXRmb3JtOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRv
ckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorfQor
CitzdGF0aWMgV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmlj
YXRpb24oX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHV2KQoreworICAgIHN3aXRjaCAo
dXYpIHsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkOgor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1
aXJlZDsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDoK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJl
ZmVycmVkOworICAgIGNhc2UgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFn
ZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6
OkRpc2NvdXJhZ2VkOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQ
cmVmZXJyZWQ7CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb25Dcml0ZXJpYShfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEg
KmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIHJlc3Vs
dDsKKyAgICByZXN1bHQuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBhdXRoZW50aWNhdG9yQXR0
YWNobWVudChhdXRoZW50aWNhdG9yU2VsZWN0aW9uLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50KTsK
KyAgICByZXN1bHQucmVxdWlyZVJlc2lkZW50S2V5ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi5y
ZXF1aXJlUmVzaWRlbnRLZXk7CisgICAgcmVzdWx0LnVzZXJWZXJpZmljYXRpb24gPSB1c2VyVmVy
aWZpY2F0aW9uKGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24udXNlclZlcmlmaWNhdGlvbik7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlh
bmNlUHJlZmVyZW5jZSBhdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKF9XS0F0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0ZXN0YXRpb24pCit7CisgICAgc3dpdGNoIChhdHRl
c3RhdGlvbikgeworICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5v
bmU6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJl
bmNlOjpOb25lOworICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUlu
ZGlyZWN0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJl
ZmVyZW5jZTo6SW5kaXJlY3Q7CisgICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVm
ZXJlbmNlRGlyZWN0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlh
bmNlUHJlZmVyZW5jZTo6RGlyZWN0OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZTo6Tm9uZTsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzKF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9u
cykKK3sKKyAgICBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMg
cmVzdWx0OworICAgIHJlc3VsdC5hcHBpZCA9IGV4dGVuc2lvbnMuYXBwaWQ7CisgICAgcmVzdWx0
Lmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCA9IGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZgorCisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zKWNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJf
QVVUSE4pCisgICAgcmVzdWx0LnJwID0gcHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5KG9wdGlv
bnMucnApOworICAgIHJlc3VsdC51c2VyID0gcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHko
b3B0aW9ucy51c2VyKTsKKworICAgIHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zID0gcHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMob3B0aW9ucy5wdWJLZXlDcmVkUGFyYW1zKTsKKworICAgIGlm
IChvcHRpb25zLnRpbWVvdXQpCisgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1l
b3V0LnVuc2lnbmVkSW50VmFsdWU7CisgICAgaWYgKG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxz
KQorICAgICAgICByZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3JzKG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzKTsKKyAgICBpZiAob3B0aW9u
cy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKQorICAgICAgICByZXN1bHQuYXV0aGVudGljYXRvclNl
bGVjdGlvbiA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYShvcHRpb25zLmF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24pOworICAgIHJlc3VsdC5hdHRlc3RhdGlvbiA9IGF0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2Uob3B0aW9ucy5hdHRlc3RhdGlvbik7CisgICAgcmVzdWx0LmV4dGVu
c2lvbnMgPSBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMob3B0aW9ucy5leHRl
bnNpb25zKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShX
RUJfQVVUSE4pCitzdGF0aWMgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UqIHdr
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZSogcmVzdWx0ID0gW1tfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5yYXdJZC0+
ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lkLT5ieXRlTGVuZ3RoKCldIGV4dGVuc2lvbnM6bmlsIGF0
dGVzdGF0aW9uT2JqZWN0OltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLmF0dGVzdGF0aW9uT2Jq
ZWN0LT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXR0ZXN0YXRpb25PYmplY3QtPmJ5dGVMZW5ndGgoKV1d
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sK
KyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JS
ZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKSwgbmlsKTsKKyAg
ICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgewor
ICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9y
RG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0pOwor
ICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YShoYXNo
KSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9u
c1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwgdHJ1
ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVxdWVz
dE9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
ICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGlmIChvcHRpb25zLnRp
bWVvdXQpCisgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVuc2lnbmVk
SW50VmFsdWU7CisgICAgaWYgKG9wdGlvbnMucnBJZCkKKyAgICAgICAgcmVzdWx0LnJwSWQgPSBv
cHRpb25zLnJwSWQ7CisgICAgaWYgKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAgICAgICAg
cmVzdWx0LmFsbG93Q3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMo
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9
IHVzZXJWZXJpZmljYXRpb24ob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKTsKKyAgICByZXN1bHQu
ZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25z
LmV4dGVuc2lvbnMpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5B
QkxFKFdFQl9BVVRITikKK3N0YXRpYyBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2Uq
IHdrQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JSZXNwb25zZURhdGEmIGRhdGEpCit7CisgICAgX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50T3V0cHV0cyAqZXh0ZW5zaW9ucyA9IG5pbDsKKyAgICBpZiAoZGF0YS5hcHBpZCkK
KyAgICAgICAgZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
T3V0cHV0cyBhbGxvY10gaW5pdFdpdGhBcHBpZDpkYXRhLmFwcGlkLnZhbHVlKCldOworCisgICAg
TlNEYXRhICp1c2VySGFuZGxlID0gbmlsOworICAgIGlmIChkYXRhLnVzZXJIYW5kbGUpCisgICAg
ICAgIHVzZXJIYW5kbGUgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS51c2VySGFuZGxlLT5k
YXRhKCkgbGVuZ3RoOmRhdGEudXNlckhhbmRsZS0+Ynl0ZUxlbmd0aCgpXTsKKworICAgIF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAqcmVzdWx0ID0gW1tfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgpXSBl
eHRlbnNpb25zOm5pbCBhdXRoZW50aWNhdG9yRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0
YS5hdXRoZW50aWNhdG9yRGF0YS0+ZGF0YSgpIGxlbmd0aDpkYXRhLmF1dGhlbnRpY2F0b3JEYXRh
LT5ieXRlTGVuZ3RoKCldIHNpZ25hdHVyZTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5zaWdu
YXR1cmUtPmRhdGEoKSBsZW5ndGg6ZGF0YS5zaWduYXR1cmUtPmJ5dGVMZW5ndGgoKV0gdXNlckhh
bmRsZTp1c2VySGFuZGxlXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy0gKHZv
aWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikp
aGFuZGxlcgoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFto
YW5kbGVyID0gbWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0
aGVudGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11
dGFibGUgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJD
b3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFu
ZGxlcih3a0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKSwg
bmlsKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2Vw
dGlvbikgeworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFp
bjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAg
ICAgIH0pOworICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5T
RGF0YShoYXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVl
c3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0aGVu
dGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9wdCwg
eyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30KKwor
KyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUKK3sK
KyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJldHVybiBXZWJLaXQ6OkxvY2FsU2VydmljZTo6
aXNBdmFpbGFibGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKICNpZiBF
TkFCTEUoV0VCX0FVVEhOKQogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVu
dGF0aW9uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTliOGI3ZjcyMjk1NmQwNWMwYTAxMjEwYTVjYmRhYjY0ZmY2NGVlYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRo
ZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uczsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7Cit9CisK
K1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQor
QGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIChXS1Rlc3RpbmcpCisKKy8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk3MTQ+IEludHJvZHVjZXMgbW9jayB0ZXN0aW5nLgor
KyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9D
b3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRp
b25SZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCmluZGV4IDZlNDAyZmNkZjEyNWM2ZTIz
NjFiZDI3ZGZiNTgwMjJiZGMxNzI0ZDkuLmQ2MmIzY2Q3NzdjODRiMGQ5MTUyYWM3MTdiODdmMDJl
ZTY5MzljNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRh
LmgKQEAgLTQ1LDExICs0NSwxNCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgV2ViQXV0
aGVudGljYXRpb25SZXF1ZXN0RGF0YSB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2g7CiAgICAg
VmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+IG9wdGlvbnM7CisKKyAgICAv
LyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sb3dpbmcgZGVw
cmVjYXRlZCBmaWVsZHMuCiAgICAgV2Vha1B0cjxXZWJQYWdlUHJveHk+IHBhZ2U7CiAgICAgV2Vi
QXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCBwYW5lbFJlc3VsdCB7IFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlIH07CiAgICAgUmVmUHRyPEFQSTo6V2ViQXV0aGVudGlj
YXRpb25QYW5lbD4gcGFuZWw7CiAgICAgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpHbG9iYWxGcmFt
ZUlkZW50aWZpZXI+IGZyYW1lSUQ7CiAgICAgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5m
bzsKKwogICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwogICAgIFN0cmluZyBjYWNoZWRQ
aW47IC8vIE9ubHkgdXNlZCB0byBpbXByb3ZlIE5GQyBDbGllbnQgUElOIGV4cGVyaWVuY2UuCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNThkMjRhNGI4MDU5MzA5YjdmOGZiN2I0OTY5Y2Y3ZDY0OWRiYWM1ZS4uNGUwZDA1ZWY3YjI3
ZTQxZWM3Y2NlMzRkOTk4NWU5NGNjNTcxZTFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI2LDYgKzExMjYsNyBAQAogCQk1NzdG
Rjc4MjIzNDZFODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3ODEy
MzQ2RTgxQzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsg
fTsKIAkJNTc3RkY3ODUyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
N0ZGNzgzMjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmgg
Ki87IH07CiAJCTU3OERDMjk4MjE1NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9u
U29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3OERDMjk3MjE1NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsu
aCAqLzsgfTsKKwkJNTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbEZvclRlc3RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NzlGMUJGNjIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGlj
YXRpb25Bc3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5RjFCRjQyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0
aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyog
X1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi87IH07CiAJ
CTU3OUYxQkZDMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlv
blJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzlGMUJGQTIzQzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0aGVudGljYXRpb25Bc3NlcnRp
b25SZXNwb25zZS5oICovOyB9OwpAQCAtMzk4MCw2ICszOTgxLDcgQEAKIAkJNTc3RkY3ODMyMzQ2
RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzdGRjc4NDIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OERDMjk3MjE1NUEw
MDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3OTBBNjUxMjU2NURFNkEwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsRm9yVGVzdGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
Rm9yVGVzdGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGNDIzQzgw
REI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY1MjNDODBEQjYwMEM3RDRCNCAvKiBf
V0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1
dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NDQsNiArNzQ0Niw3IEBACiAJCQkJNTc5RjFCRjgyM0M4
MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRl
cm5hbC5oICovLAogCQkJCTU3NDcyOENGMjM0NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLmggKi8sCiAJCQkJNTc0NzI4RDAyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gKi8sCisJCQkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi8sCiAJCQkJNTc0NzI4
RDMyMzQ1NzBBRTAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5o
ICovLAogCQkJCTFBRTI4Njc2MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUu
aCAqLywKIAkJCQkxQUUyODY3NTFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXpl
Lm1tICovLApAQCAtMTA4NzYsNiArMTA4NzksNyBAQAogCQkJCTU3OUYxQkY2MjNDODBEQjYwMEM3
RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRp
b25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzQ3MjhE
MTIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzQ3MjhENDIzNDU3MEFF
MDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUUyODY3ODFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXpl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyODY4MDFDN0Y5MkMwMDA2OUFDNEYgLyogX1dLV2Vi
c2l0ZURhdGFTaXplSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY5ZWQ2ODY1OGExN2NiMmQxZGE1ZTJk
ZWMzMGJmZmZkYTk3MjNiMTYuLjYxMWFkODI0M2M2MWNmNjExZTgyY2M5ZWEwNWM4N2U2MGIxZTQy
ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0aGVudGljYXRp
b25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEzNjQ3MzE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIw
MjAtMTEtMTMgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT046IHIyNjk1MTQgUmVzZXQgc2VydmVyIHBvcnQgYmVmb3JlIHJlc3RhcnRpbmcg
d2Vic2VydmVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggYTk0YWI3
ODhiZmQxNDkwMmQ2Mzc4NWYyMDNmNjFjZTg5ZmI2MGQwNC4uZTQ4MGI4ZmRkZjNiYTA2ZWI0OGI2
MWRiMWIwZTkzOGY3OTE2NzJmNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQpAQCAtMzMsMTEgKzMzLDE0IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxMb2NhbEF1dGhlbnRp
Y2F0aW9uL0xvY2FsQXV0aGVudGljYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tFeHBlcmltZW50YWxGZWF0dXJlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
V2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1w
b3J0IDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5
U1BJLmg+CkBAIC0yMzcsNiArMjQwLDcgQEAgLSAoX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAq
KXBhbmVsCiBAZW5kCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCkBAIC0xNDMyLDYgKzE0MzYsMzU4IEBAIFRFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgTEFHZXRBc3NlcnRpb25NdWx0aXBsZU9yZGVyKQogCiAj
ZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykgfHwgUExBVEZPUk0oSU9TKQogCitURVNU
KFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnNNaW5pbXVuKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAw
eDAzLCAweDA0IH07CisgICAgUmV0YWluUHRyPE5TRGF0YT4gbnNJZGVudGlmaWVyID0gW05TRGF0
YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07Cisg
ICAgUmV0YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJz
ID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdv
cml0aG06QC03XTsKKworICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHk+IHJwID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRo
TmFtZTpAImV4YW1wbGUuY29tIl07CisgICAgUmV0YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxVc2VyRW50aXR5PiB1c2VyID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBh
bGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpu
c0lkZW50aWZpZXIuZ2V0KCkgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdOworICAgIE5TQXJy
YXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMg
PSBAWyBwYXJhbWV0ZXJzLmdldCgpIF07CisKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucz4gb3B0aW9ucyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0
KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXTsKKyAgICBhdXRvIHJlc3VsdCA9
IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNX
aXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
cnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24u
aXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5j
b20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikp
OworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVu
dGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJl
c3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBd
LmFsZywgLTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMGx1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24sIFdURjo6bnVsbG9w
dCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlh
bmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMt
PmFwcGlkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2ds
ZUxlZ2FjeUFwcGlkU3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtRGVmYXVsdCkK
K3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9
OworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhC
eXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIFJldGFpblB0
cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycz4gcGFyYW1ldGVyczEgPSBbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTdd
OworICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycz4gcGFyYW1l
dGVyczIgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0
aEFsZ29yaXRobTpALTI1N107CisgICAgUmV0YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yPiBkZXNjcmlwdG9yID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
ciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllci5nZXQoKV07CisKKyAgICBS
ZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5PiBycCA9IFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJd
OworICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eT4gdXNlciA9
IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpA
ImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyLmdldCgpIGRp
c3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVyczEuZ2V0
KCksIHBhcmFtZXRlcnMyLmdldCgpIF07CisgICAgUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0b3JT
ZWxlY3Rpb25Dcml0ZXJpYT4gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IFtbX1dLQXV0aGVudGlj
YXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XTsKKyAgICBSZXRhaW5QdHI8X1dLQXV0
aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzPiBleHRlbnNpb25zID0gW1tfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYWxsb2NdIGluaXRdOworCisgICAgUmV0
YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IG9wdGlvbnMgPSBb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6
cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFt
c107CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNs
dWRlQ3JlZGVudGlhbHM6QFsgZGVzY3JpcHRvci5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRB
dXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworICAg
IFtvcHRpb25zIHNldEV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJl
c3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9w
dGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShy
ZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJw
Lmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRp
ZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgp
LCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFy
YW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sx
XS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5l
eGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNb
MF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUSht
ZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50
aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxs
b3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVp
cmVSZXNpZGVudEtleSwgZmFsc2UpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRv
clNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
OjpQcmVmZXJyZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlv
blBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTEpCit7Cisg
ICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBSZXRhaW5QdHI8X1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMxID0gW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XTsKKyAg
ICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMy
ID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdv
cml0aG06QC0yNTddOworCisgICAgUmV0YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eT4gcnAgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdp
dGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBbcnAgc2V0SWNvbjpAImh0dHBzLy93d3cuZXhh
bXBsZS5jb20vaWNvbi5qcGciXTsKKyAgICBbcnAgc2V0SWRlbnRpZmllcjpAImV4YW1wbGUuY29t
Il07CisKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk+IHVz
ZXIgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5h
bWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllci5nZXQo
KSBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl07CisgICAgW3VzZXIgc2V0SWNvbjpAImh0dHBz
Ly93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciXTsKKworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBwYXJhbWV0ZXJz
MS5nZXQoKSwgcGFyYW1ldGVyczIuZ2V0KCkgXTsKKworICAgIFJldGFpblB0cjxfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPiBvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNl
ci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdOworICAgIFtvcHRpb25z
IHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IHVzYiA9IFtOU051
bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXTsKKyAg
ICBSZXRhaW5QdHI8TlNOdW1iZXI+IG5mYyA9IFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dl
YkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDXTsKKyAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IGlu
dGVybmFsID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFu
c3BvcnRJbnRlcm5hbF07CisgICAgUmV0YWluUHRyPF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNj
cmlwdG9yPiBjcmVkZW50aWFsID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBh
bGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllci5nZXQoKV07CisgICAgW2NyZWRl
bnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0
KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwu
Z2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBSZXRhaW5QdHI8X1dLQXV0aGVudGlj
YXRvclNlbGVjdGlvbkNyaXRlcmlhPiBhdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gW1tfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdOworICAgIFthdXRoZW50aWNh
dG9yU2VsZWN0aW9uIHNldEF1dGhlbnRpY2F0b3JBdHRhY2htZW50Ol9XS0F1dGhlbnRpY2F0b3JB
dHRhY2htZW50UGxhdGZvcm1dOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldFJlcXVp
cmVSZXNpZGVudEtleTpZRVNdOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldFVzZXJW
ZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWRdOworICAg
IFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0aGVudGljYXRvclNlbGVjdGlv
bi5nZXQoKV07CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlvbjpfV0tBdHRlc3RhdGlvbkNv
bnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0XTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25z
Om9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAi
ZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmljb24sIEAiaHR0
cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1
bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51
c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlm
aWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRhKCks
IGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19TVFJF
UShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJh
bXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFd
LnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAg
IEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcpOworCisgICAg
RVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQu
ZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlw
ZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1sw
XS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1l
bWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRp
Zmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0aGVudGljYXRv
clRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFs
c1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhl
bnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0
aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9y
bSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5yZXF1aXJl
UmVzaWRlbnRLZXksIHRydWUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNl
bGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9uLCBBdHRlc3RhdGlv
bkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3QpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtMikKK3sK
KyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9Owor
ICAgIFJldGFpblB0cjxOU0RhdGE+IG5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRl
czppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIFJldGFpblB0cjxf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycz4gcGFyYW1ldGVyczEgPSBbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddOwor
ICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycz4gcGFyYW1ldGVy
czIgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFs
Z29yaXRobTpALTI1N107CisKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5PiBycCA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0
V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdOworICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5l
eGFtcGxlLmNvbS9pY29uLmpwZyJdOworICAgIFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5j
b20iXTsKKworICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eT4g
dXNlciA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRo
TmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyLmdl
dCgpIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXTsKKyAgICBbdXNlciBzZXRJY29uOkAiaHR0
cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRl
cnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAgUmV0YWluUHRyPF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IG9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1
c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc107CisgICAgW29wdGlv
bnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIFJldGFpblB0cjxOU051bWJlcj4gdXNiID0gW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdOwor
ICAgIFJldGFpblB0cjxOU051bWJlcj4gbmZjID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdOworICAgIFJldGFpblB0cjxOU051bWJlcj4g
aW50ZXJuYWwgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRy
YW5zcG9ydEludGVybmFsXTsKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3I+IGNyZWRlbnRpYWwgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
IGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyLmdldCgpXTsKKyAgICBbY3Jl
ZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5n
ZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlh
bC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIFJldGFpblB0cjxfV0tBdXRoZW50
aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE+IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBbW19XS0F1
dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF07CisgICAgW2F1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRv
ckF0dGFjaG1lbnRDcm9zc1BsYXRmb3JtXTsgLy8KKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlv
biBzZXRSZXF1aXJlUmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlv
biBzZXRVc2VyVmVyaWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2Nv
dXJhZ2VkXTsgLy8KKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0XTsgLy8KKworICAgIGF1
dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0
aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVzdWx0LnJwLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAg
IEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQ
RUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7
CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFt
cGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5z
aXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQu
dXNlci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDAp
OworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVz
ZWVkIik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAy
bHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxU
eXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sx
XS5hbGcsIC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVy
KSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlk
VmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCks
IDNsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1swXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpOZmMpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBd
LnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0
dGFjaG1lbnQsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0
b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGly
ZWN0KTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQ
SVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0g
eyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQs
IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0lkZW50aWZpZXIgPSBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIp
XTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnM+IHBhcmFtZXRlcnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddOworCisgICAgUmV0YWluUHRy
PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eT4gcnAgPSBbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXTsKKyAgICBS
ZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk+IHVzZXIgPSBbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVz
ZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllci5nZXQoKSBkaXNwbGF5TmFt
ZTpAIkogQXBwbGVzZWVkIl07CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKyAg
ICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4gb3B0aW9u
cyA9IFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdp
dGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVk
UGFyYW1zXTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgUmV0YWluUHRy
PF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IHBhbmVsID0gW1tfV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsIGFsbG9jXSBpbml0XTsKKyAgICBbcGFuZWwgbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDpu
c0hhc2guZ2V0KCkgb3B0aW9uczpvcHRpb25zLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dL
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJv
cikgeworICAgICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAg
ICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4s
IFdLRXJyb3JEb21haW4pOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVu
a25vd24pOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJh
bik7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zTWluaW11bikKK3sKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdOworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6
b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIFdURjo6bnVs
bG9wdCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwSWQuaXNOdWxsKCkpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlBy
ZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVs
bCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2dsZUxlZ2FjeUFwcGlk
U3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW1EZWZhdWx0KQoreworICAgIHVpbnQ4
X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgUmV0YWlu
UHRyPE5TRGF0YT4gbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZp
ZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgUmV0YWluUHRyPF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yPiBkZXNjcmlwdG9yID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllci5nZXQo
KV07CisgICAgUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cz4gZXh0ZW5zaW9ucyA9IFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRz
IGFsbG9jXSBpbml0XTsKKworICAgIFJldGFpblB0cjxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnM+IG9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyBhbGxvY10gaW5pdF07CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBb
b3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0KCkgXV07CisgICAg
W29wdGlvbnMgc2V0RXh0ZW5zaW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAgIGF1dG8gcmVz
dWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRp
b25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRp
bWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNp
emUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHlw
ZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9m
KGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxvd0NyZWRlbnRp
YWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwg
MCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0
ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW0pCit7CisgICAgdWlu
dDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBSZXRh
aW5QdHI8TlNEYXRhPiBuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRp
ZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKworICAgIFJldGFpblB0cjxfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+IG9wdGlvbnMgPSBbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF07CisgICAgW29wdGlvbnMgc2V0VGlt
ZW91dDpAMTIwXTsKKworICAgIFJldGFpblB0cjxOU051bWJlcj4gdXNiID0gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdOworICAgIFJldGFp
blB0cjxOU051bWJlcj4gbmZjID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVu
dGljYXRpb25UcmFuc3BvcnRORkNdOworICAgIFJldGFpblB0cjxOU051bWJlcj4gaW50ZXJuYWwg
PSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydElu
dGVybmFsXTsKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+
IGNyZWRlbnRpYWwgPSBbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyLmdldCgpXTsKKyAgICBbY3JlZGVudGlhbCBz
ZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBdXTsK
KyAgICBbb3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNy
ZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBbb3B0aW9ucyBzZXRVc2VyVmVyaWZpY2F0aW9uOl9X
S1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkXTsKKworICAgIFJldGFpblB0cjxf
V0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHM+IGV4dGVuc2lvbnMgPSBbW19X
S0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF07CisgICAg
W2V4dGVuc2lvbnMgc2V0QXBwaWQ6QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iXTsKKyAg
ICBbb3B0aW9ucyBzZXRFeHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byBy
ZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9w
dGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQu
dGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMu
c2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50
eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXpl
b2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVu
dGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikp
LCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0
cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBd
LnRyYW5zcG9ydHNbMF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxz
WzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKwor
ICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5leHRlbnNp
b25zLT5hcHBpZCwgImh0dHBzLy93d3cuZXhhbXBsZS5jb20vZmlkbyIpOworfQorCitURVNUKFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwsIEdldEFzc2VydGlvblNQSVRpbWVvdXQpCit7CisgICAgcmVz
ZXQoKTsKKworICAgIHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAw
eDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAy
LCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAw
eDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07Cisg
ICAgUmV0YWluUHRyPE5TRGF0YT4gbnNIYXNoID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2gg
bGVuZ3RoOnNpemVvZihoYXNoKV07CisKKyAgICBSZXRhaW5QdHI8X1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zID0gW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07
CisKKyAgICBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICpwYW5lbCA9IFtbX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBhbGxvY10gaW5pdF07CisgICAgW3BhbmVsIGdldEFzc2VydGlvbldpdGhI
YXNoOm5zSGFzaC5nZXQoKSBvcHRpb25zOm9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6
XihfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICpl
cnJvcikgeworICAgICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAg
ICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21h
aW4sIFdLRXJyb3JEb21haW4pOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJv
clVua25vd24pOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5l
bFJhbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414613</attachid>
            <date>2020-11-19 12:59:31 -0800</date>
            <delta_ts>2020-11-19 14:27:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201119125930.patch</filename>
            <type>text/plain</type>
            <size>67763</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5
YTE1MzJkMzJlMy4uYTJmMTBiOGVjZWZiMTdiZDRjNWY4NmYyZWE4OWExOWFjMDNmNDc1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC03NSw2ICs3NSwyNiBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlvblNvdXJjZSkgewogICAgIF9XS1dlYkF1
dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7CisgICAgX1dLQXV0aGVudGljYXRvckF0dGFj
aG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxhdGZvcm0sCit9IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkgeworICAgIF9XS1Vz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkLAorICAgIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1l
bnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRp
cmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0LAorfSBX
S19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCisK
Ky8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkxNDE+CiBAcHJvdG9jb2wgX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbERlbGVnYXRlIDxOU09iamVjdD4KIAogQG9wdGlvbmFsCkBAIC04Nywx
OCArMTA3LDE3MiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNh
dGlvblNvdXJjZSkgewogCiBAZW5kCiAKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
RW50aXR5IDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsK
Ky0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm5hbWU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkp
IE5TU3RyaW5nICppY29uOworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKysgKGluc3RhbmNl
dHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlM
QUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsKKwor
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmll
cjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkg
OiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBOU19VTkFWQUlMQUJMRTsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpZGVudGlmaWVy
OihOU0RhdGEgKilpZGVudGlmaWVyIGRpc3BsYXlOYW1lOihOU1N0cmluZyAqKWRpc3BsYXlOYW1l
OworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNEYXRhICppZGVudGlmaWVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpkaXNwbGF5TmFtZTsKKworQGVuZAor
CitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkK
K0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgOiBOU09iamVjdAor
CisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWlu
aXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbGdvcml0aG06KE5T
TnVtYmVyICopYWxnb3JpdGhtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNOdW1i
ZXIgKmFsZ29yaXRobTsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRvclNlbGVj
dGlvbkNyaXRlcmlhIDogTlNPYmplY3QKKworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFs
dWUgaXMgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwuKi8KK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudCBhdXRoZW50aWNhdG9yQXR0YWNobWVudDsK
Ky8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5PLiovCitAcHJvcGVydHkgKG5v
bmF0b21pYykgQk9PTCByZXF1aXJlUmVzaWRlbnRLZXk7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVm
YXVsdCB2YWx1ZSBpcyBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQuKi8K
K0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNl
clZlcmlmaWNhdGlvbjsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3IgOiBOU09iamVjdAorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxB
QkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyOworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNEYXRhICppZGVudGlmaWVyOworQHByb3BlcnR5IChudWxsYWJs
ZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PE5TTnVtYmVyICo+ICp0cmFuc3BvcnRzOworCitA
ZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMg
OiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICphcHBpZDsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucyA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZB
SUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUnA6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eSAqKXJwIHVzZXI6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICop
dXNlciBwdWJLZXlDcmVkUGFyYW1zOihOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzICo+ICopcHViS2V5Q3JlZFBhcmFtczsKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0
cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycDsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyOwor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtczsKKworQHByb3BlcnR5IChudWxsYWJs
ZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqdGltZW91dDsKK0Bwcm9wZXJ0eSAobnVsbGFi
bGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvciAqPiAqZXhjbHVkZUNyZWRlbnRpYWxzOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRv
bWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGlj
YXRvclNlbGVjdGlvbjsKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F0
dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLiovCitAcHJvcGVydHkgKG5vbmF0b21p
YykgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSBhdHRlc3RhdGlvbjsKK0Bwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAo
bnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKnRpbWVvdXQ7CitAcHJvcGVydHkg
KG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpycElkOworQHByb3BlcnR5IChu
dWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yICo+ICphbGxvd0NyZWRlbnRpYWxzOworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1
bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLiovCitA
cHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJW
ZXJpZmljYXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykgX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitAZW5k
CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIDog
TlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGFwcGlkOwor
CitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVjdAor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJvcGVy
dHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNh
dG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF0
dGVzdGF0aW9uT2JqZWN0OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAobnVs
bGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVuZAor
CiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkK
IEBpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWxEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNsZWFy
QWxsTG9jYWxBdXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlmeWlu
Z1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZTsKIAorLSAoaW5zdGFuY2V0eXBlKWluaXQ7
CisKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkzOTQ+IEFkZHMgQ2xpZW50RGF0YUpT
T04uCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5NDg1PiBBZGRzIGRldGFpbGVkIE5T
RXJyb3IuCistICh2b2lkKW1ha2VDcmVkZW50aWFsV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0
aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlICosIE5TRXJyb3IgKikpaGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClnZXRBc3NlcnRpb25XaXRoSGFzaDooTlNE
YXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMg
KilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKWNhbmNlbDsKIAogQGVu
ZAogCitAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKFdLRGVwcmVjYXRlZCkK
KworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWlu
Z1BhcnR5SUQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0
cmFuc3BvcnRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50
aWNhdGlvblR5cGUgdHlwZTsKKworQGVuZAorCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJm
NzdhMmFlZGUyMS4uNGIwYjU0NTU0NmQ1ODZmMDRlNzU5ZTM1YWM1MzFiMTY3NjRlZmUyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxODMgQEAKICNpbXBvcnQg
Il9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1
dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJv
ci5oIgogI2ltcG9ydCAiV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8
V2ViQ29yZS9BdXRoZW50aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVu
dGljYXRvclJlc3BvbnNlRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNv
bnN0YW50cy5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wp
YXBwaWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF9hcHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhl
bnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmF3
SWQgPSByYXdJZDsKKyAgICBfZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRp
b25SZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3
SWQgZXh0ZW5zaW9uczooX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAq
KWV4dGVuc2lvbnMgYXV0aGVudGljYXRvckRhdGE6KE5TRGF0YSAqKWF1dGhlbnRpY2F0b3JEYXRh
IHNpZ25hdHVyZTooTlNEYXRhICopc2lnbmF0dXJlIHVzZXJIYW5kbGU6KE5TRGF0YSAqKXVzZXJI
YW5kbGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3SWQgZXh0
ZW5zaW9uczpleHRlbnNpb25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXV0aGVu
dGljYXRvckRhdGEgPSBhdXRoZW50aWNhdG9yRGF0YTsKKyAgICBfc2lnbmF0dXJlID0gc2lnbmF0
dXJlOworICAgIF91c2VySGFuZGxlID0gdXNlckhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVz
cG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4
dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRl
bnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOmV4
dGVuc2lvbnNdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hdHRlc3RhdGlvbk9iamVj
dCA9IGF0dGVzdGF0aW9uT2JqZWN0OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEKKworLSAoaW5z
dGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBfV0tB
dXRoZW50aWNhdG9yQXR0YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVSZXNpZGVudEtleSA9
IE5POworICAgIHNlbGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudFByZWZlcnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAg
dXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQ
YXJhbXM6KE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJL
ZXlDcmVkUGFyYW1zCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLnJwID0gcnA7CisgICAgc2VsZi51c2VyID0gdXNlcjsK
KyAgICBzZWxmLnB1YktleUNyZWRQYXJhbXMgPSBwdWJLZXlDcmVkUGFyYW1zOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0Rh
dGEgKilpZGVudGlmaWVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRW50aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgc2VsZi5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMK
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRo
bQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgc2VsZi5hbGdvcml0aG0gPSBhbGdvcml0aG07CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0
aW9uID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKilu
YW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRl
bnRpZmllciBkaXNwbGF5TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFt
ZSA9IGRpc3BsYXlOYW1lOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxl
bWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVU
SE4pCiAgICAgV2Vha1B0cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9j
bGllbnQ7CkBAIC0zOCw2ICsyMTEsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgewogI2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxm
OworfQorCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUs
NiArMzE5LDI1NCBAQCAtICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VC
X0FVVEhOKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSog
ZGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQo
KGNvbnN0IHVpbnQ4X3QqKWRhdGEuYnl0ZXMsIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVFbnRpdHkoV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6RW50aXR5JiBvdXRwdXQsIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxFbnRpdHkqIGlucHV0KQoreworICAgIG91dHB1dC5uYW1lID0gaW5wdXQubmFtZTsKKyAg
ICBvdXRwdXQuaWNvbiA9IGlucHV0Lmljb247Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFs
UnBFbnRpdHkoX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAg
ICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSBy
ZXN1bHQ7CisgICAgZW5jb2RlRW50aXR5KHJlc3VsdCwgcnBFbnRpdHkpOworICAgIHJlc3VsdC5p
ZCA9IHJwRW50aXR5LmlkZW50aWZpZXI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0
eSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSAqdXNlckVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zOjpVc2VyRW50aXR5IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVz
dWx0LCB1c2VyRW50aXR5KTsKKyAgICByZXN1bHQuaWRWZWN0b3IgPSB2ZWN0b3JGcm9tTlNEYXRh
KHVzZXJFbnRpdHkuaWRlbnRpZmllcik7CisgICAgcmVzdWx0LmRpc3BsYXlOYW1lID0gdXNlckVu
dGl0eS5kaXNwbGF5TmFtZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0
b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVy
cz4gcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcykKK3sKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcmVz
dWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1YktleUNyZWRQYXJhbXMu
Y291bnQpOworCisgICAgZm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqcGFy
YW0gOiBwdWJLZXlDcmVkUGFyYW1zKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgcGFyYW0uYWxnb3Jp
dGhtLmxvbmdMb25nVmFsdWUgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0KF9X
S1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0IHRyYW5zcG9ydCkKK3sKKyAgICBzd2l0Y2ggKHRy
YW5zcG9ydCkgeworICAgIGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0I6Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7CisgICAg
Y2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQzoKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYzsKKyAgICBjYXNlIF9XS1dlYkF1dGhl
bnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWw6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JU
cmFuc3BvcnQ6OlVzYjsKKyAgICB9Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclRyYW5zcG9ydD4gYXV0aGVudGljYXRvclRyYW5zcG9ydHMoTlNBcnJheTxOU051bWJl
ciAqPiAqdHJhbnNwb3J0cykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRy
YW5zcG9ydD4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyYW5z
cG9ydHMuY291bnQpOworCisgICAgZm9yIChOU051bWJlciAqdHJhbnNwb3J0IDogdHJhbnNwb3J0
cykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChhdXRoZW50aWNhdG9yVHJhbnNwb3J0
KChfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydCl0cmFuc3BvcnQuaW50VmFsdWUpKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbERlc2NyaXB0b3I+IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhOU0Fy
cmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpjcmVkZW50aWFscykKK3sK
KyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IHJlc3Vs
dDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjcmVkZW50aWFscy5jb3VudCk7
CisKKyAgICBmb3IgKF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFs
IDogY3JlZGVudGlhbHMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5LCB7IH0sIHZlY3RvckZyb21OU0Rh
dGEoY3JlZGVudGlhbC5pZGVudGlmaWVyKSwgYXV0aGVudGljYXRvclRyYW5zcG9ydHMoY3JlZGVu
dGlhbC50cmFuc3BvcnRzKSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBP
cHRpb25hbDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRo
ZW50aWNhdG9yQXR0YWNobWVudD4gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoX1dLQXV0aGVudGlj
YXRvckF0dGFjaG1lbnQgYXR0YWNobWVudCkKK3sKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOgorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9y
bToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICBjYXNlIF9XS0F1
dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQbGF0Zm9ybToKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRh
Y2htZW50OjpDcm9zc1BsYXRmb3JtOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KK30KKworc3Rh
dGljIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9u
KF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1dikKK3sKKyAgICBzd2l0Y2ggKHV2KSB7
CisgICAgY2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDoKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQ7
CisgICAgY2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ6CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJl
ZDsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkOgor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpEaXNj
b3VyYWdlZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVy
cmVkOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEoX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRo
ZW50aWNhdG9yU2VsZWN0aW9uKQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSByZXN1bHQ7Cisg
ICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JBdHRhY2htZW50ID0gYXV0aGVudGljYXRvckF0dGFjaG1l
bnQoYXV0aGVudGljYXRvclNlbGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCk7CisgICAg
cmVzdWx0LnJlcXVpcmVSZXNpZGVudEtleSA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWly
ZVJlc2lkZW50S2V5OworICAgIHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNh
dGlvbihhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnVzZXJWZXJpZmljYXRpb24pOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2UgYXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShfV0tBdHRlc3RhdGlvbkNv
bnZleWFuY2VQcmVmZXJlbmNlIGF0dGVzdGF0aW9uKQoreworICAgIHN3aXRjaCAoYXR0ZXN0YXRp
b24pIHsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lOgor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6
Tm9uZTsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVj
dDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVu
Y2U6OkluZGlyZWN0OworICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5j
ZURpcmVjdDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2U6OkRpcmVjdDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZl
cmVuY2U6Ok5vbmU7CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50SW5wdXRzIGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cyhfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnMpCit7
CisgICAgV2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIHJlc3Vs
dDsKKyAgICByZXN1bHQuYXBwaWQgPSBleHRlbnNpb25zLmFwcGlkOworICAgIHJlc3VsdC5nb29n
bGVMZWdhY3lBcHBpZFN1cHBvcnQgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9Cisj
ZW5kaWYKKworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucylj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhO
KQorICAgIHJlc3VsdC5ycCA9IHB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eShvcHRpb25zLnJw
KTsKKyAgICByZXN1bHQudXNlciA9IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlv
bnMudXNlcik7CisKKyAgICByZXN1bHQucHViS2V5Q3JlZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzKG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcyk7CisKKyAgICBpZiAob3B0
aW9ucy50aW1lb3V0KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51
bnNpZ25lZEludFZhbHVlOworICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAg
ICAgICAgcmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNj
cmlwdG9ycyhvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgaWYgKG9wdGlvbnMuYXV0
aGVudGljYXRvclNlbGVjdGlvbikKKyAgICAgICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24gPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEob3B0aW9ucy5hdXRoZW50aWNhdG9y
U2VsZWN0aW9uKTsKKyAgICByZXN1bHQuYXR0ZXN0YXRpb24gPSBhdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlKG9wdGlvbnMuYXR0ZXN0YXRpb24pOworICAgIHJlc3VsdC5leHRlbnNpb25z
ID0gYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9u
cyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FV
VEhOKQorc3RhdGljIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKiB3a0F1dGhl
bnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JS
ZXNwb25zZURhdGEmIGRhdGEpCit7CisgICAgX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVz
cG9uc2UqIHJlc3VsdCA9IFtbX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgYWxs
b2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEucmF3SWQtPmRhdGEo
KSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgpXSBleHRlbnNpb25zOm5pbCBhdHRlc3Rh
dGlvbk9iamVjdDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+
ZGF0YSgpIGxlbmd0aDpkYXRhLmF0dGVzdGF0aW9uT2JqZWN0LT5ieXRlTGVuZ3RoKCldXTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy0gKHZvaWQpbWFrZUNyZWRlbnRpYWxXaXRo
SGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVu
dGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyCit7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKKyAgICBhdXRvIGNhbGxiYWNrID0gW2hhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoaGFuZGxlcildIChWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9u
c2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSksIG5pbCk7CisgICAgICAg
IH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsKKyAgICAg
ICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFp
biBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9KTsKKyAgICB9
OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEoaGFzaCksIFtf
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRo
T3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblBhbmVs
UmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgV1RGOjpudWxsb3B0LCB7IH0sIHRydWUsIFN0
cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKKyNlbmRpZgorfQorCisrIChXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RPcHRp
b25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9w
dGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMg
cmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBpZiAob3B0aW9ucy50aW1lb3V0
KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZEludFZh
bHVlOworICAgIGlmIChvcHRpb25zLnJwSWQpCisgICAgICAgIHJlc3VsdC5ycElkID0gb3B0aW9u
cy5ycElkOworICAgIGlmIChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpCisgICAgICAgIHJlc3Vs
dC5hbGxvd0NyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyk7CisgICAgcmVzdWx0LnVzZXJWZXJpZmljYXRpb24gPSB1c2Vy
VmVyaWZpY2F0aW9uKG9wdGlvbnMudXNlclZlcmlmaWNhdGlvbik7CisgICAgcmVzdWx0LmV4dGVu
c2lvbnMgPSBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMob3B0aW9ucy5leHRl
bnNpb25zKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShX
RUJfQVVUSE4pCitzdGF0aWMgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiB3a0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdG9y
UmVzcG9uc2VEYXRhJiBkYXRhKQoreworICAgIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudE91dHB1dHMgKmV4dGVuc2lvbnMgPSBuaWw7CisgICAgaWYgKGRhdGEuYXBwaWQpCisgICAg
ICAgIGV4dGVuc2lvbnMgPSBbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMgYWxsb2NdIGluaXRXaXRoQXBwaWQ6ZGF0YS5hcHBpZC52YWx1ZSgpXTsKKworICAgIE5TRGF0
YSAqdXNlckhhbmRsZSA9IG5pbDsKKyAgICBpZiAoZGF0YS51c2VySGFuZGxlKQorICAgICAgICB1
c2VySGFuZGxlID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEudXNlckhhbmRsZS0+ZGF0YSgp
IGxlbmd0aDpkYXRhLnVzZXJIYW5kbGUtPmJ5dGVMZW5ndGgoKV07CisKKyAgICBfV0tBdXRoZW50
aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3VsdCA9IFtbX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5z
aW9uczpuaWwgYXV0aGVudGljYXRvckRhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuYXV0
aGVudGljYXRvckRhdGEtPmRhdGEoKSBsZW5ndGg6ZGF0YS5hdXRoZW50aWNhdG9yRGF0YS0+Ynl0
ZUxlbmd0aCgpXSBzaWduYXR1cmU6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuc2lnbmF0dXJl
LT5kYXRhKCkgbGVuZ3RoOmRhdGEuc2lnbmF0dXJlLT5ieXRlTGVuZ3RoKCldIHVzZXJIYW5kbGU6
dXNlckhhbmRsZV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCistICh2b2lkKWdl
dEFzc2VydGlvbldpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRs
ZXIKK3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JSZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6
QXV0aGVudGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIo
d2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSksIG5pbCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tF
cnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9
KTsKKyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEo
aGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwg
dHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKEJP
T0wpaXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlCit7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKKyAgICByZXR1cm4gV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZh
aWxhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCiAjaWYgRU5BQkxF
KFdFQl9BVVRITikKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlv
bgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE5YjhiN2Y3MjI5NTZkMDVjMGEwMTIxMGE1Y2JkYWI2NGZmNjRlZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbEZvclRlc3RpbmcuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnM7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOworfQorCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tUZXN0aW5nKQorCisvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzcxNTA5NzE0PiBJbnRyb2R1Y2VzIG1vY2sgdGVzdGluZy4KKysgKFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNy
ZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zICopb3B0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zKWNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVx
dWVzdERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYxMjVjNmUyMzYxYmQy
N2RmYjU4MDIyYmRjMTcyNGQ5Li5kMzg2MzdlNjY4NzI3NDAzMjc4NTZlODkyOTI3ODIyMjRjZDEy
Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCkBA
IC00NSwxMSArNDUsMTQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFdlYkF1dGhlbnRp
Y2F0aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoOwogICAgIFZhcmlh
bnQ8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOworCisgICAgLy8gRklY
TUU8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIGZpZWxkcy4KICAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gcGFnZTsKICAgICBXZWJBdXRo
ZW50aWNhdGlvblBhbmVsUmVzdWx0IHBhbmVsUmVzdWx0IHsgV2ViQXV0aGVudGljYXRpb25QYW5l
bFJlc3VsdDo6VW5hdmFpbGFibGUgfTsKICAgICBSZWZQdHI8QVBJOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsPiBwYW5lbDsKICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6Okdsb2JhbEZyYW1lSWRl
bnRpZmllcj4gZnJhbWVJRDsKICAgICBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvOwor
CiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAgICAgU3RyaW5nIGNhY2hlZFBpbjsg
Ly8gT25seSB1c2VkIHRvIGltcHJvdmUgTkZDIENsaWVudCBQSU4gZXhwZXJpZW5jZS4KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
OGQyNGE0YjgwNTkzMDliN2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVlLi40ZTBkMDVlZjdiMjdlNDFl
YzdjY2UzNGQ5OTg1ZTk0Y2M1NzFlMWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjYsNiArMTEyNiw3IEBACiAJCTU3N0ZGNzgy
MjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzdGRjc4MTIzNDZF
ODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovOyB9Owog
CQk1NzdGRjc4NTIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3
ODMyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsg
fTsKIAkJNTc4REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0
TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4
REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICov
OyB9OworCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3OTBBNjUxMjU2NURFNkEwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsRm9yVGVzdGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTU3OUYxQkY2MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlv
bkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzlGMUJGNDIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRp
b25Bc3NlcnRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNTc5
RjFCRkMyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVz
cG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
OUYxQkZBMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJl
c3BvbnNlLmggKi87IH07CkBAIC0zOTgwLDYgKzM5ODEsNyBAQAogCQk1NzdGRjc4MzIzNDZFQ0FB
MDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU3N0ZGNzg0MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbENs
aWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc4REMyOTcyMTU1QTAwMTAw
NzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxG
b3JUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JU
ZXN0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY0MjNDODBEQjYw
MEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjUyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVu
dGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzQ0NCw2ICs3NDQ2LDcgQEAKIAkJCQk1NzlGMUJGODIzQzgwRUM2
MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFs
LmggKi8sCiAJCQkJNTc0NzI4Q0YyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwuaCAqLywKIAkJCQk1NzQ3MjhEMDIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbSAqLywKKwkJCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyog
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLywKIAkJCQk1NzQ3MjhEMzIz
NDU3MEFFMDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggKi8s
CiAJCQkJMUFFMjg2NzYxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oICov
LAogCQkJCTFBRTI4Njc1MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUubW0g
Ki8sCkBAIC0xMDg3Niw2ICsxMDg3OSw3IEBACiAJCQkJNTc5RjFCRjYyM0M4MERCNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFz
c2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQxMjM0
NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQ0MjM0NTcwQUUwMDE3
MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTI4Njc4MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRTI4NjgwMUM3RjkyQzAwMDY5QUM0RiAvKiBfV0tXZWJzaXRl
RGF0YVNpemVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4YTE3Y2IyZDFkYTVlMmRlYzMw
YmZmZmRhOTcyM2IxNi4uNjExYWQ4MjQzYzYxY2Y2MTFlODJjYzllYTA1Yzg3ZTYwYjFlNDJmZiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNl
cnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0x
MS0xMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTjogcjI2OTUxNCBSZXNldCBzZXJ2ZXIgcG9ydCBiZWZvcmUgcmVzdGFydGluZyB3ZWJz
ZXJ2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCBhOTRhYjc4OGJm
ZDE0OTAyZDYzNzg1ZjIwM2Y2MWNlODlmYjYwZDA0Li5jMDBjOTMyZjA2MjY2M2I1ZjVkNzljMjYx
YWMzMmVjNWZhMDVhNjNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBA
IC0zMywxMSArMzMsMTQgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldL
V2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExvY2FsQXV0aGVudGljYXRp
b24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJB
dXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEku
aD4KQEAgLTIzNyw2ICsyNDAsNyBAQCAtIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICopcGFu
ZWwKIEBlbmQKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTE0MzIsNiArMTQzNiwzNTggQEAgVEVTVChXZWJB
dXRoZW50aWNhdGlvblBhbmVsLCBMQUdldEFzc2VydGlvbk11bHRpcGxlT3JkZXIpCiAKICNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSB8fCBQTEFURk9STShJT1MpCiAKK1RFU1QoV2Vi
QXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01p
bmltdW4pCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRl
czppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5j
b20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxV
c2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBp
ZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAg
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXMgPSBAWyBwYXJhbWV0ZXJzLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdp
dGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVk
UGFyYW1zXSk7CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAg
IEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2Vy
Lm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9y
LnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3Vs
dC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwg
MCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBs
ZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCks
IDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQudGltZW91dCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50
aWNhdG9yU2VsZWN0aW9uLCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0
ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOworICAgIEVY
UEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsK
K30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zTWF4aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10g
PSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmll
cildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8g
cGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisgICAgYXV0byBkZXNjcmlwdG9yID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBs
ZS5jb20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRp
YWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29t
IiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOwor
ICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNy
ZWRQYXJhbXMgPSBAWyBwYXJhbWV0ZXJzMS5nZXQoKSwgcGFyYW1ldGVyczIuZ2V0KCkgXTsKKyAg
ICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBleHRlbnNpb25zID0g
YWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10g
aW5pdF0pOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2Vy
LmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25z
IHNldFRpbWVvdXQ6QDEyMF07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBb
IGRlc2NyaXB0b3IuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVj
dGlvbjphdXRoZW50aWNhdG9yU2VsZWN0aW9uLmdldCgpXTsKKyAgICBbb3B0aW9ucyBzZXRFeHRl
bnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6
b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJl
eGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAg
RVhQRUNUX1RSVUUocmVzdWx0LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBF
Q1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6
ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRp
c3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5
Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHMuc2l6ZSgpLCAxbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxz
WzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRl
bnRpZmllcikpLCAwKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVj
dGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXksIGZh
bHNlKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJW
ZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2U6Ok5vbmUpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBp
ZC5pc051bGwoKSk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01heGltdW0xKQoreworICAgIHVpbnQ4X3QgaWRlbnRp
ZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50
aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlk
ZW50aWZpZXIpXTsKKyAgICBhdXRvIHBhcmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTI1N10pOworCisgICAgYXV0byBycCA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRo
TmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFt
cGxlLmNvbS9pY29uLmpwZyJdOworICAgIFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5jb20i
XTsKKworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRl
bnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBb
dXNlciBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAg
TlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBh
cmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNy
ZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEy
MF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMo
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNd
KTsKKyAgICBhdXRvIGludGVybmFsID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpf
V0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50
aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJh
bnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAg
W29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRl
bnRpYWwuZ2V0KCkgXV07CisKKyAgICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9w
dE5TKFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7Cisg
ICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dL
QXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybV07CisgICAgW2F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24gc2V0UmVxdWlyZVJlc2lkZW50S2V5OllFU107CisgICAgW2F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24gc2V0VXNlclZlcmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRS
ZXF1aXJlZF07CisgICAgW29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVjdGlvbjphdXRoZW50
aWNhdG9yU2VsZWN0aW9uLmdldCgpXTsKKworICAgIFtvcHRpb25zIHNldEF0dGVzdGF0aW9uOl9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3RdOworCisgICAgYXV0byByZXN1
bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRp
b25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
cnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwg
c2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlk
VmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1
YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywg
LTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iu
ZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBd
LCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVu
dCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OlBsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRp
b24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVjdCk7Cit9CisKK1RFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
c01heGltdW0yKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAw
eDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIHBh
cmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFs
bG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMyID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFs
Z29yaXRobTpALTI1N10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOwor
ICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworICAg
IFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5jb20iXTsKKworICAgIGF1dG8gdXNlciA9IGFk
b3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhO
YW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlz
cGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBbdXNlciBzZXRJY29uOkAiaHR0cHMvL3d3
dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdl
dCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6
cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFt
c10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFk
b3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3Bv
cnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0g
YWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5z
cG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVu
dGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5m
Yy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRl
bnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBh
dXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvclNl
bGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rp
b24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRD
cm9zc1BsYXRmb3JtXTsgLy8KKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRSZXF1aXJl
UmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRVc2VyVmVy
aWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkXTsgLy8K
KyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246X1dLQXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0XTsgLy8KKworICAgIGF1dG8gcmVzdWx0ID0g
W19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dp
dGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5y
cC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmlj
b24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29u
LmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVv
ZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rv
ci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVD
VF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVY
UEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVk
ZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQ
RUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEo
KSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0
aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
Ml0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50
OjpDcm9zc1BsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0
YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0KTsKK30KKwor
VEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQSVRpbWVvdXQpCit7
CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAy
LCAweDAzLCAweDA0IH07CisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpp
ZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIE5TRGF0YSAqbnNIYXNo
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJleGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNl
ZWQiXSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
cHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKyAgICBhdXRvIG9wdGlv
bnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxv
Y10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpw
dWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAg
IGF1dG8gcGFuZWwgPSBhZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10g
aW5pdF0pOworICAgIFtwYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm5zSGFzaCBvcHRpb25z
Om9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXR0ZXN0
YXRpb25SZXNwb25zZSAqcmVzcG9uc2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHdlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSYW4gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9OVUxMKHJlc3Bv
bnNlKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7Cisg
ICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgfV07Cisg
ICAgVXRpbDo6cnVuKCZ3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuKTsKK30KKworVEVTVChXZWJB
dXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNaW5p
bXVuKQoreworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRp
b25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6
Om51bGxvcHQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycElkLmlzTnVsbCgpKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAwbHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
OjpQcmVmZXJyZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5p
c051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lB
cHBpZFN1cHBvcnQsIGZhbHNlKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1
aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5T
RGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVu
Z3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6bnNJZGVudGlmaWVyXSk7CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworCisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyBhbGxvY10gaW5pdF0pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisgICAg
W29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFsczpAWyBkZXNjcmlwdG9yLmdldCgpIF1dOworICAg
IFtvcHRpb25zIHNldEV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJl
c3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50
aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5z
aXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5
cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVv
ZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuYWxsb3dDcmVkZW50
aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSks
IDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4
dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBh
bmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtKQoreworICAgIHVp
bnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNE
YXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5n
dGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBb
b3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgYXV0byB1c2IgPSBhZG9wdE5TKFtOU051
bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXSk7Cisg
ICAgYXV0byBuZmMgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhl
bnRpY2F0aW9uVHJhbnNwb3J0TkZDXSk7CisgICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0TlMoW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5h
bF0pOworICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllcl0pOwor
ICAgIFtjcmVkZW50aWFsIHNldFRyYW5zcG9ydHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0KCksIGlu
dGVybmFsLmdldCgpIF1dOworICAgIFtvcHRpb25zIHNldEFsbG93Q3JlZGVudGlhbHM6QFsgY3Jl
ZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIFtvcHRpb25zIHNldFVz
ZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWRdOwor
CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworICAgIFtleHRlbnNpb25zIHNldEFwcGlk
OkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9maWRvIl07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5z
aW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0
aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxv
d0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRh
dGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgpLCAzbHUpOworICAg
IEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVk
ZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzJdLCBB
dXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQp
OworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQsICJodHRwcy8v
d3d3LmV4YW1wbGUuY29tL2ZpZG8iKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVs
LCBHZXRBc3NlcnRpb25TUElUaW1lb3V0KQoreworICAgIHJlc2V0KCk7CisKKyAgICB1aW50OF90
IGhhc2hbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw
NCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNIYXNoID0g
W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisKKyAgICBh
dXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAg
IGF1dG8gcGFuZWwgPSBhZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10g
aW5pdF0pOworICAgIFtwYW5lbCBnZXRBc3NlcnRpb25XaXRoSGFzaDpuc0hhc2ggb3B0aW9uczpv
cHRpb25zLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgd2ViQXV0aGVu
dGljYXRpb25QYW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05VTEwocmVzcG9uc2Up
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9tYWluKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAgICB9XTsKKyAgICBV
dGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414619</attachid>
            <date>2020-11-19 14:27:02 -0800</date>
            <delta_ts>2020-11-19 16:02:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201119142701.patch</filename>
            <type>text/plain</type>
            <size>68090</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5
YTE1MzJkMzJlMy4uOTc5YzMzZmRhZGIxYzc5YTJmNDFmNzc5ZTkzMDVjNWExY2QwYTFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0yOCw2ICsyOCw4IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IFNlcGFy
YXRlIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW50IGludGVyZmFjZXMgaW50byBzZXBhcmF0ZSBmaWxl
cy4KKwogQGNsYXNzIExBQ29udGV4dDsKIEBjbGFzcyBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2Vy
dGlvblJlc3BvbnNlOwogQGNsYXNzIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw7CkBAIC03NSw2
ICs3NywyNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlv
blNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7Cisg
ICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxh
dGZvcm0sCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudCkgeworICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVk
LAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlRGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5MTQx
PiBPcHRpbWl6ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBBdXRoZW50aWNhdGlvblNlcnZpY2UuZnJh
bWV3b3JrLgogQHByb3RvY29sIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxEZWxlZ2F0ZSA8TlNP
YmplY3Q+CiAKIEBvcHRpb25hbApAQCAtODcsMTggKzEwOCwxNjkgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2UpIHsKIAogQGVuZAogCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSA6IE5TT2JqZWN0CisKKysgKGluc3Rh
bmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsK
KworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpuYW1lOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWNvbjsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IDogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAo
aW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0
eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBl
KWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqZGlzcGxheU5hbWU7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobTsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICphbGdvcml0aG07CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8q
IUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50QWxsLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2
YWx1ZSBpcyBOTy4qLworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50
S2V5OworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIDogTlNPYmplY3QKKworKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRh
ICopaWRlbnRpZmllcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRl
bnRpZmllcjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxO
U051bWJlciAqPiAqdHJhbnNwb3J0czsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNPYmplY3QKKworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXBwaWQ7CisKK0BlbmQKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJm
YWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdAorCist
IChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJh
eTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXM7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSAqcnA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eSAqdXNlcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXM7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIg
KnRpbWVvdXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVDcmVkZW50aWFsczsK
K0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisvKiFAZGlzY3Vzc2lv
biBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
Tm9uZS4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudFByZWZlcnJlZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVu
dGljYXRvclJlc3BvbnNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU0RhdGEgKnJhd0lkOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFk
b25seSwgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpl
eHRlbnNpb25zOworCitAZW5kCisKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNEYXRhICphdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGlj
YXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICph
dXRoZW50aWNhdG9yRGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRh
ICpzaWduYXR1cmU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKnVzZXJIYW5kbGU7CisKK0BlbmQKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgOiBOU09iamVjdAogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdl
YWspIGlkIDxfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGU+IGRlbGVnYXRlOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5
SUQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3Bv
cnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlv
blR5cGUgdHlwZTsKIAogKyAodm9pZCljbGVhckFsbExvY2FsQXV0aGVudGljYXRvckNyZWRlbnRp
YWxzOworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFi
bGU7CiAKKy0gKGluc3RhbmNldHlwZSlpbml0OworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxNTA5Mzk0PiBBZGRzIENsaWVudERhdGFKU09OLgorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS83MTUwOTQ4NT4gQWRkcyBkZXRhaWxlZCBOU0Vycm9yLgorLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZv
aWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikp
aGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogLSAodm9pZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4
NDg+IFJlbW92ZSB0aGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgbWV0aG9kLgorQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5SUQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3BvcnRzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlvblR5cGUgdHlw
ZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJmNzdhMmFlZGUyMS4uYjE2
YTllYWMyYTc2M2U3YjMxNTYxZDg5NmY1Y2YzYzFlMzFiYjgyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxODMgQEAKICNpbXBvcnQgIl9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0b3IuaCIK
KyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJvci5oIgogI2ltcG9ydCAi
V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50
aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNl
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNvbnN0YW50cy5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wpYXBwaWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
cHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmF3SWQgPSByYXdJZDsKKyAg
ICBfZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczoo
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMgYXV0
aGVudGljYXRvckRhdGE6KE5TRGF0YSAqKWF1dGhlbnRpY2F0b3JEYXRhIHNpZ25hdHVyZTooTlNE
YXRhICopc2lnbmF0dXJlIHVzZXJIYW5kbGU6KE5TRGF0YSAqKXVzZXJIYW5kbGUKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3SWQgZXh0ZW5zaW9uczpleHRlbnNp
b25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXV0aGVudGljYXRvckRhdGEgPSBh
dXRoZW50aWNhdG9yRGF0YTsKKyAgICBfc2lnbmF0dXJlID0gc2lnbmF0dXJlOworICAgIF91c2Vy
SGFuZGxlID0gdXNlckhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zIGF0dGVzdGF0
aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOmV4dGVuc2lvbnNdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hdHRlc3RhdGlvbk9iamVjdCA9IGF0dGVzdGF0aW9u
T2JqZWN0OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBf
V0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEKKworLSAoaW5zdGFuY2V0eXBlKWluaXQK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBfV0tBdXRoZW50aWNhdG9yQXR0
YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVSZXNpZGVudEtleSA9IE5POworICAgIHNlbGYu
dXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJl
ZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAgdXNlcjooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLnJwID0gcnA7CisgICAgc2VsZi51c2VyID0gdXNlcjsKKyAgICBzZWxmLnB1Yktl
eUNyZWRQYXJhbXMgPSBwdWJLZXlDcmVkUGFyYW1zOworICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVy
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
c2VsZi5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5h
bGdvcml0aG0gPSBhbGdvcml0aG07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucworCistIChp
bnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuaWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1l
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxlbWVudGF0aW9uIF9XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgV2Vha1B0
cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9jbGllbnQ7CkBAIC0zOCw2
ICsyMTEsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewog
I2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhO
KQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpXZWJBdXRoZW50aWNh
dGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxmOworfQorCiAjaWYgRU5B
QkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUsNiArMzE5LDI1NCBAQCAt
ICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSogZGF0YSkKK3sKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoKGNvbnN0IHVpbnQ4X3Qq
KWRhdGEuYnl0ZXMsIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgdm9pZCBlbmNvZGVFbnRpdHkoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uczo6RW50aXR5JiBvdXRwdXQsIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkqIGlu
cHV0KQoreworICAgIG91dHB1dC5uYW1lID0gaW5wdXQubmFtZTsKKyAgICBvdXRwdXQuaWNvbiA9
IGlucHV0Lmljb247Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSByZXN1bHQ7CisgICAgZW5j
b2RlRW50aXR5KHJlc3VsdCwgcnBFbnRpdHkpOworICAgIHJlc3VsdC5pZCA9IHJwRW50aXR5Lmlk
ZW50aWZpZXI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSBwdWJsaWNLZXlDcmVk
ZW50aWFsVXNlckVudGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlckVu
dGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpVc2VyRW50aXR5IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVzdWx0LCB1c2VyRW50aXR5
KTsKKyAgICByZXN1bHQuaWRWZWN0b3IgPSB2ZWN0b3JGcm9tTlNEYXRhKHVzZXJFbnRpdHkuaWRl
bnRpZmllcik7CisgICAgcmVzdWx0LmRpc3BsYXlOYW1lID0gdXNlckVudGl0eS5kaXNwbGF5TmFt
ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyAqPiAqcHViS2V5Q3JlZFBhcmFtcykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1YktleUNyZWRQYXJhbXMuY291bnQpOworCisgICAg
Zm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqcGFyYW0gOiBwdWJLZXlDcmVk
UGFyYW1zKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgcGFyYW0uYWxnb3JpdGhtLmxvbmdMb25nVmFs
dWUgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVu
dGljYXRvclRyYW5zcG9ydCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0KF9XS1dlYkF1dGhlbnRpY2F0
aW9uVHJhbnNwb3J0IHRyYW5zcG9ydCkKK3sKKyAgICBzd2l0Y2ggKHRyYW5zcG9ydCkgeworICAg
IGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0I6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7CisgICAgY2FzZSBfV0tXZWJBdXRo
ZW50aWNhdGlvblRyYW5zcG9ydE5GQzoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ6Ok5mYzsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNw
b3J0SW50ZXJuYWw6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNw
b3J0OjpJbnRlcm5hbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsK
KyAgICB9Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dD4gYXV0aGVudGljYXRvclRyYW5zcG9ydHMoTlNBcnJheTxOU051bWJlciAqPiAqdHJhbnNwb3J0
cykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyYW5zcG9ydHMuY291bnQpOwor
CisgICAgZm9yIChOU051bWJlciAqdHJhbnNwb3J0IDogdHJhbnNwb3J0cykKKyAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChhdXRoZW50aWNhdG9yVHJhbnNwb3J0KChfV0tXZWJBdXRoZW50
aWNhdGlvblRyYW5zcG9ydCl0cmFuc3BvcnQuaW50VmFsdWUpKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3I+IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhOU0FycmF5PF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpjcmVkZW50aWFscykKK3sKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjcmVkZW50aWFscy5jb3VudCk7CisKKyAgICBmb3IgKF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFsIDogY3JlZGVudGlhbHMp
CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5LCB7IH0sIHZlY3RvckZyb21OU0RhdGEoY3JlZGVudGlhbC5p
ZGVudGlmaWVyKSwgYXV0aGVudGljYXRvclRyYW5zcG9ydHMoY3JlZGVudGlhbC50cmFuc3BvcnRz
KSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNo
bWVudD4gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQg
YXR0YWNobWVudCkKK3sKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIF9XS0F1
dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybToKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRp
Y2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRh
Y2htZW50Q3Jvc3NQbGF0Zm9ybToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1Bs
YXRmb3JtOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OlVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uKF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudCB1dikKK3sKKyAgICBzd2l0Y2ggKHV2KSB7CisgICAgY2FzZSBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQ7CisgICAgY2FzZSBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICBjYXNlIF9X
S1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpEaXNjb3VyYWdlZDsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIH0KK30K
Kworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1
dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEoX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9yU2VsZWN0
aW9uKQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6
OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSByZXN1bHQ7CisgICAgcmVzdWx0LmF1dGhl
bnRpY2F0b3JBdHRhY2htZW50ID0gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoYXV0aGVudGljYXRv
clNlbGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCk7CisgICAgcmVzdWx0LnJlcXVpcmVS
ZXNpZGVudEtleSA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5Owor
ICAgIHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihhdXRoZW50aWNh
dG9yU2VsZWN0aW9uLnVzZXJWZXJpZmljYXRpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJl
bmNlIGF0dGVzdGF0aW9uKQoreworICAgIHN3aXRjaCAoYXR0ZXN0YXRpb24pIHsKKyAgICBjYXNl
IF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAgICBjYXNl
IF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdDoKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0Owor
ICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdDoKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVj
dDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7Cisg
ICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzIGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhfV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnMpCit7CisgICAgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIHJlc3VsdDsKKyAgICByZXN1bHQu
YXBwaWQgPSBleHRlbnNpb25zLmFwcGlkOworICAgIHJlc3VsdC5nb29nbGVMZWdhY3lBcHBpZFN1
cHBvcnQgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworKyAoV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9Db3JlQ3Jl
YXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJlc3VsdC5y
cCA9IHB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eShvcHRpb25zLnJwKTsKKyAgICByZXN1bHQu
dXNlciA9IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlvbnMudXNlcik7CisKKyAg
ICByZXN1bHQucHViS2V5Q3JlZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
KG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcyk7CisKKyAgICBpZiAob3B0aW9ucy50aW1lb3V0KQor
ICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZEludFZhbHVl
OworICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhvcHRpb25z
LmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVj
dGlvbikKKyAgICAgICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uQ3JpdGVyaWEob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKTsKKyAg
ICByZXN1bHQuYXR0ZXN0YXRpb24gPSBhdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKG9w
dGlvbnMuYXR0ZXN0YXRpb24pOworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIF9X
S0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKiB3a0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEmIGRh
dGEpCit7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvckF0dGVz
dGF0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0aEJ5dGVz
OmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgpXSBleHRl
bnNpb25zOm5pbCBhdHRlc3RhdGlvbk9iamVjdDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5h
dHRlc3RhdGlvbk9iamVjdC0+ZGF0YSgpIGxlbmd0aDpkYXRhLmF0dGVzdGF0aW9uT2JqZWN0LT5i
eXRlTGVuZ3RoKCldXSk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCist
ICh2b2lkKW1ha2VDcmVkZW50aWFsV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dL
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlICosIE5T
RXJyb3IgKikpaGFuZGxlcgoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxs
YmFjayA9IFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2Vi
Q29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiBy
ZXN1bHQpIG11dGFibGUgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0
IFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAg
ICAgICAgaGFuZGxlcih3a0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKHJlc3BvbnNl
LT5kYXRhKCkpLCBuaWwpOworICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9u
RGF0YSYgZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJy
b3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpu
aWxdKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3QoeyB2
ZWN0b3JGcm9tTlNEYXRhKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0
VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktp
dDo6V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdU
Rjo6bnVsbG9wdCwgeyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cisj
ZW5kaWYKK30KKworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
KWNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJfQVVUSE4p
CisgICAgaWYgKG9wdGlvbnMudGltZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRp
b25zLnRpbWVvdXQudW5zaWduZWRJbnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5ycElkKQorICAg
ICAgICByZXN1bHQucnBJZCA9IG9wdGlvbnMucnBJZDsKKyAgICBpZiAob3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzKQorICAgICAgICByZXN1bHQuYWxsb3dDcmVkZW50aWFscyA9IHB1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9ycyhvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIHJlc3Vs
dC51c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihvcHRpb25zLnVzZXJWZXJpZmlj
YXRpb24pOworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZSogd2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBSZXRh
aW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4gZXh0ZW5zaW9u
cyA9IG5pbDsKKyAgICBpZiAoZGF0YS5hcHBpZCkKKyAgICAgICAgZXh0ZW5zaW9ucyA9IGFkb3B0
TlMoW1tfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIGFsbG9jXSBpbml0
V2l0aEFwcGlkOmRhdGEuYXBwaWQudmFsdWUoKV0pOworCisgICAgTlNEYXRhICp1c2VySGFuZGxl
ID0gbmlsOworICAgIGlmIChkYXRhLnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJIYW5kbGUgPSBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVuZ3RoOmRhdGEu
dXNlckhhbmRsZS0+Ynl0ZUxlbmd0aCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhb
W19XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5yYXdJZC0+ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lk
LT5ieXRlTGVuZ3RoKCldIGV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKSBhdXRoZW50aWNhdG9y
RGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5hdXRoZW50aWNhdG9yRGF0YS0+ZGF0YSgp
IGxlbmd0aDpkYXRhLmF1dGhlbnRpY2F0b3JEYXRhLT5ieXRlTGVuZ3RoKCldIHNpZ25hdHVyZTpb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5zaWduYXR1cmUtPmRhdGEoKSBsZW5ndGg6ZGF0YS5z
aWduYXR1cmUtPmJ5dGVMZW5ndGgoKV0gdXNlckhhbmRsZTp1c2VySGFuZGxlXSk7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCistICh2b2lkKWdldEFzc2VydGlvbldpdGhI
YXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRp
Y2F0b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sKKyNpZiBFTkFC
TEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1ha2VCbG9ja1B0
cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4s
IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgV1RG
Ojpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJl
c3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSksIG5pbCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsKKyAgICAgICAgICAg
IGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2Rl
OldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9KTsKKyAgICB9OworICAg
IF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEoaGFzaCksIFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25z
Om9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6
OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwgdHJ1ZSwgU3RyaW5nKCkg
fSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKEJPT0wpaXNVc2VyVmVyaWZ5
aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlCit7CisjaWYgRU5BQkxFKFdFQl9BVVRI
TikKKyAgICByZXR1cm4gV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZhaWxhYmxlKCk7CisjZWxz
ZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICNw
cmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5YjhiN2Y3MjI5
NTZkMDVjMGEwMTIxMGE1Y2JkYWI2NGZmNjRlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRl
c3RpbmcuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM7CitzdHJ1Y3QgUHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOworfQorCitXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCAoV0tUZXN0aW5nKQorCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxNTA5NzE0PiBJbnRyb2R1Y2VzIG1vY2sgdGVzdGluZy4KKysgKFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dp
dGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9u
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
KyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zKWNvbnZlcnRUb0Nv
cmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9u
UmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYxMjVjNmUyMzYxYmQyN2RmYjU4MDIyYmRjMTcy
NGQ5Li5kMzg2MzdlNjY4NzI3NDAzMjc4NTZlODkyOTI3ODIyMjRjZDEyY2I2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNh
dGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCkBAIC00NSwxMSArNDUsMTQg
QEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERh
dGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoOwogICAgIFZhcmlhbnQ8V2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOworCisgICAgLy8gRklYTUU8cmRhcjovL3Byb2Js
ZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIGZpZWxkcy4KICAg
ICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gcGFnZTsKICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVs
UmVzdWx0IHBhbmVsUmVzdWx0IHsgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFp
bGFibGUgfTsKICAgICBSZWZQdHI8QVBJOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBwYW5lbDsK
ICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6Okdsb2JhbEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJ
RDsKICAgICBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvOworCiAgICAgYm9vbCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmU7CiAgICAgU3RyaW5nIGNhY2hlZFBpbjsgLy8gT25seSB1c2VkIHRv
IGltcHJvdmUgTkZDIENsaWVudCBQSU4gZXhwZXJpZW5jZS4KIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1OGQyNGE0YjgwNTkzMDli
N2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVlLi40ZTBkMDVlZjdiMjdlNDFlYzdjY2UzNGQ5OTg1ZTk0
Y2M1NzFlMWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTExMjYsNiArMTEyNiw3IEBACiAJCTU3N0ZGNzgyMjM0NkU4MUMwMDRFREZC
OSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzdGRjc4MTIzNDZFODFDMDA0RURGQjkgLyog
QVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovOyB9OwogCQk1NzdGRjc4NTIzNDZF
Q0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3ODMyMzQ2RUNBQTAwNEVE
RkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsgfTsKIAkJNTc4REMyOTgy
MTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4REMyOTcyMTU1QTAwMTAw
NzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovOyB9OworCQk1NzkwQTY1
MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3Rpbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjUx
MjU2NURFNkEwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3OUYx
QkY2MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3Bv
bnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlG
MUJGNDIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNw
b25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlv
blJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlv
bkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNTc5RjFCRkMyM0M4MTFDRjAw
QzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkZBMjNDODExQ0Yw
MEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi87IH07
CkBAIC0zOTgwLDYgKzM5ODEsNyBAQAogCQk1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdXRoZW50aWNh
dGlvblBhbmVsQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3N0ZGNzg0
MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc4REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2Fs
QXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEF1dGhlbnRpY2F0
aW9uU29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NTEyNTY1
REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY0MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTc5RjFCRjUyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9u
QXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRp
b25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9u
QXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzQ0NCw2ICs3NDQ2LDcgQEAKIAkJCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dL
V2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8sCiAJCQkJNTc0
NzI4Q0YyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCAqLywK
IAkJCQk1NzQ3MjhEMDIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbSAqLywKKwkJCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLywKIAkJCQk1NzQ3MjhEMzIzNDU3MEFFMDAxNzAwQUYg
LyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggKi8sCiAJCQkJMUFFMjg2NzYx
QzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oICovLAogCQkJCTFBRTI4Njc1
MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUubW0gKi8sCkBAIC0xMDg3Niw2
ICsxMDg3OSw3IEBACiAJCQkJNTc5RjFCRjYyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhl
bnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3OUYxQkY5
MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQxMjM0NTZFOTgwMDE3MDBBRiAv
KiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY1
MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3Rpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQ0MjM0NTcwQUUwMDE3MDBBRiAvKiBfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4Njc4
MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTI4NjgwMUM3RjkyQzAwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4YTE3Y2IyZDFkYTVlMmRlYzMwYmZmZmRhOTcyM2IxNi4u
NjExYWQ4MjQzYzYxY2Y2MTFlODJjYzllYTA1Yzg3ZTYwYjFlNDJmZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIw
LTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dl
YkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29y
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkz
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0xMS0xMyAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogcjI2OTUx
NCBSZXNldCBzZXJ2ZXIgcG9ydCBiZWZvcmUgcmVzdGFydGluZyB3ZWJzZXJ2ZXIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCBhOTRhYjc4OGJmZDE0OTAyZDYzNzg1ZjIw
M2Y2MWNlODlmYjYwZDA0Li5jMDBjOTMyZjA2MjY2M2I1ZjVkNzljMjYxYWMzMmVjNWZhMDVhNjNk
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC0zMywxMSArMzMsMTQg
QEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3Vy
YXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExvY2FsQXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50
aWNhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVy
aW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlvbkFz
c2VydGlvblJlc3BvbnNlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0
aW5nLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SYW5kb21OdW1i
ZXIuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KQEAgLTIzNyw2ICsy
NDAsNyBAQCAtIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICopcGFuZWwKIEBlbmQKIAogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSB7CiAKQEAgLTE0MzIsNiArMTQzNiwzNTggQEAgVEVTVChXZWJBdXRoZW50aWNhdGlvblBh
bmVsLCBMQUdldEFzc2VydGlvbk11bHRpcGxlT3JkZXIpCiAKICNlbmRpZiAvLyBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKSB8fCBQTEFURk9STShJT1MpCiAKK1RFU1QoV2ViQXV0aGVudGljYXRpb25Q
YW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01pbmltdW4pCit7CisgICAg
dWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBO
U0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxl
bmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1ldGVycyA9IGFkb3B0TlMo
W1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0
aG06QC03XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAgYXV0
byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9j
XSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRl
bnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIE5TQXJyYXk8X1dLUHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBwYXJh
bWV0ZXJzLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1
c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAg
YXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3Jl
YXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWQuaXNO
dWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVz
ZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnVzZXIuaWNvbi5pc051
bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9m
KGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9y
LmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDFsdSk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5
Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwg
V1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5z
aXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVz
dGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOworICAgIEVYUEVDVF9UUlVFKHJlc3Vs
dC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leHRl
bnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsKK30KKworVEVTVChXZWJB
dXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4
aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdp
dGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8g
cGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8gcGFyYW1ldGVyczIgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRo
QWxnb3JpdGhtOkAtMjU3XSk7CisgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJ
ZGVudGlmaWVyXSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAg
YXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFs
bG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5z
SWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIE5TQXJyYXk8X1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBw
YXJhbWV0ZXJzMS5nZXQoKSwgcGFyYW1ldGVyczIuZ2V0KCkgXTsKKyAgICBhdXRvIGF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRl
cmlhIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworCisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNy
ZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEy
MF07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0
KCkgXV07CisgICAgW29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVjdGlvbjphdXRoZW50aWNh
dG9yU2VsZWN0aW9uLmdldCgpXTsKKyAgICBbb3B0aW9ucyBzZXRFeHRlbnNpb25zOmV4dGVuc2lv
bnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07
CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51
c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVz
dWx0LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVj
dG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJl
c3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIp
KSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBB
cHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXpl
KCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUs
IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVD
VF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFy
YW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAxbHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50
aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNb
MF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGlj
YXRvckF0dGFjaG1lbnQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRo
ZW50aWNhdG9yU2VsZWN0aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXksIGZhbHNlKTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUp
OworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7Cit9
CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uc01heGltdW0xKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAx
LCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBp
bml0V2l0aEFsZ29yaXRobTpALTI1N10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUu
Y29tIl0pOworICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpw
ZyJdOworICAgIFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5jb20iXTsKKworICAgIGF1dG8g
dXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10g
aW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50
aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBbdXNlciBzZXRJY29uOkAi
aHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFt
ZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAgYXV0byBvcHRpb25zID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGlu
aXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5
Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRv
IHVzYiA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRp
b25UcmFuc3BvcnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGlu
dGVybmFsID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNh
dGlvblRyYW5zcG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6bnNJZGVudGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2Iu
Z2V0KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhj
bHVkZUNyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07
CisKKyAgICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVu
dGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgW2F1dGhlbnRpY2F0
b3JTZWxlY3Rpb24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybV07CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0UmVxdWly
ZVJlc2lkZW50S2V5OllFU107CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0VXNlclZl
cmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZF07CisgICAg
W29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVjdGlvbjphdXRoZW50aWNhdG9yU2VsZWN0aW9u
LmdldCgpXTsKKworICAgIFtvcHRpb25zIHNldEF0dGVzdGF0aW9uOl9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VEaXJlY3RdOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6
b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJl
eGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWNvbiwgQCJodHRw
cy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3Vs
dC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVz
ZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZp
ZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwg
aWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFt
c1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0u
dHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5l
eGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBd
LmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVt
Y21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlm
aWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRoZW50aWNhdG9y
VHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxz
WzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVu
dGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRo
ZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OlBsYXRmb3Jt
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVS
ZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJl
cXVpcmVkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVjdCk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRp
b25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01heGltdW0yKQorewor
ICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07Cisg
ICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmll
ciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIHBhcmFtZXRlcnMxID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFs
Z29yaXRobTpALTddKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMyID0gYWRvcHROUyhbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTI1N10p
OworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIFtycCBzZXRJY29u
OkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworICAgIFtycCBzZXRJZGVudGlm
aWVyOkAiZXhhbXBsZS5jb20iXTsKKworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2Vl
ZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFw
cGxlc2VlZCJdKTsKKyAgICBbdXNlciBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9p
Y29uLmpwZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJz
Mi5nZXQoKSBdOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1
c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRp
b25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0TlMoW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdKTsKKyAgICBh
dXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGlj
YXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0gYWRvcHROUyhbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydEludGVybmFsXSk7
CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisgICAg
W2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5nZXQoKSwgaW50ZXJu
YWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBbIGNyZWRl
bnRpYWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBhdXRvIGF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlh
IGFsbG9jXSBpbml0XSk7CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0QXV0aGVudGlj
YXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRDcm9zc1BsYXRmb3JtXTsg
Ly8KKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRSZXF1aXJlUmVzaWRlbnRLZXk6WUVT
XTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uOl9XS1Vz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkXTsgLy8KKyAgICBbb3B0aW9ucyBz
ZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOwor
CisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJl
ZmVyZW5jZUluZGlyZWN0XTsgLy8KKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlv
bnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBs
ZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmljb24sIEAiaHR0cHMvL3d3
dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAu
aWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLm5h
bWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3Vs
dC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVY
UEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7
CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRhKCksIGlkZW50
aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1
bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlw
ZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0u
YWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUs
IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVD
VF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVi
bGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZl
Y3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChy
ZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwg
c2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3Jl
ZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0aGVudGljYXRvclRyYW5z
cG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50
cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOworICAgIEVYUEVDVF9F
UShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1BsYXRmb3Jt
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVS
ZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRp
c2NvdXJhZ2VkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0
aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0KTsKK30KKworVEVTVChXZWJBdXRoZW50
aWNhdGlvblBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsK
KworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4
MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0Rh
dGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0
aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIE5TRGF0YSAqbnNIYXNoID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0
V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJd
KTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJF
bnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50
aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXSk7CisgICAgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFt
cyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpy
cC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1z
XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8gcGFuZWwgPSBh
ZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10gaW5pdF0pOworICAgIFtw
YW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm5zSGFzaCBvcHRpb25zOm9wdGlvbnMuZ2V0KCkg
Y29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAq
cmVzcG9uc2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHdlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxSYW4gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKKyAgICAgICAg
RVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7CisgICAgICAgIEVYUEVDVF9F
UShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgfV07CisgICAgVXRpbDo6cnVuKCZ3
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBh
bmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNaW5pbXVuKQoreworICAgIGF1
dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0
KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQpOworICAg
IEVYUEVDVF9UUlVFKHJlc3VsdC5ycElkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAwbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNl
clZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZh
bHNlKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlkZW50aWZp
ZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlm
aWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVu
dGlmaWVyKV07CisgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVy
XSk7CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworCisgICAgYXV0byBvcHRpb25zID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5p
dF0pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisgICAgW29wdGlvbnMgc2V0QWxs
b3dDcmVkZW50aWFsczpAWyBkZXNjcmlwdG9yLmdldCgpIF1dOworICAgIFtvcHRpb25zIHNldEV4
dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25z
Om9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDFsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
YWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7
CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rv
ci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1l
bnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlk
LmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmll
cltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZp
ZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50
aWZpZXIpXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1l
b3V0OkAxMjBdOworCisgICAgYXV0byB1c2IgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRo
SW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXSk7CisgICAgYXV0byBuZmMgPSBh
ZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNw
b3J0TkZDXSk7CisgICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0pOworICAgIGF1dG8g
Y3JlZGVudGlhbCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBh
bGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllcl0pOworICAgIFtjcmVkZW50aWFs
IHNldFRyYW5zcG9ydHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0KCksIGludGVybmFsLmdldCgpIF1d
OworICAgIFtvcHRpb25zIHNldEFsbG93Q3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQoKSwg
Y3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIFtvcHRpb25zIHNldFVzZXJWZXJpZmljYXRpb246
X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWRdOworCisgICAgYXV0byBleHRl
bnNpb25zID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cyBhbGxvY10gaW5pdF0pOworICAgIFtleHRlbnNpb25zIHNldEFwcGlkOkAiaHR0cHMvL3d3dy5l
eGFtcGxlLmNvbS9maWRvIl07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5zaW9uczpleHRlbnNpb25z
LmdldCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwg
Y29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJl
c3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBd
LmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVt
Y21wKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmll
ciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0Ny
ZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgpLCAzbHUpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRoZW50aWNhdG9yVHJhbnNw
b3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFu
c3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzJdLCBBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpJbnRlcm5hbCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRp
b24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAgIEVYUEVDVF9X
S19TVFJFUShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQsICJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ZpZG8iKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBHZXRBc3NlcnRpb25T
UElUaW1lb3V0KQoreworICAgIHJlc2V0KCk7CisKKyAgICB1aW50OF90IGhhc2hbXSA9IHsgMHgw
MSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw
NCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNIYXNoID0gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIGFsbG9jXSBpbml0
XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8gcGFuZWwgPSBh
ZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10gaW5pdF0pOworICAgIFtw
YW5lbCBnZXRBc3NlcnRpb25XaXRoSGFzaDpuc0hhc2ggb3B0aW9uczpvcHRpb25zLmdldCgpIGNv
bXBsZXRpb25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICpyZXNw
b25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgd2ViQXV0aGVudGljYXRpb25QYW5lbFJh
biA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05VTEwocmVzcG9uc2UpOworICAgICAgICBFWFBF
Q1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9tYWluKTsKKyAgICAgICAgRVhQRUNUX0VRKGVy
cm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4oJndlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414632</attachid>
            <date>2020-11-19 16:02:28 -0800</date>
            <delta_ts>2020-11-19 16:42:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201119160227.patch</filename>
            <type>text/plain</type>
            <size>68056</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5
YTE1MzJkMzJlMy4uOTc5YzMzZmRhZGIxYzc5YTJmNDFmNzc5ZTkzMDVjNWExY2QwYTFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0yOCw2ICsyOCw4IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IFNlcGFy
YXRlIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW50IGludGVyZmFjZXMgaW50byBzZXBhcmF0ZSBmaWxl
cy4KKwogQGNsYXNzIExBQ29udGV4dDsKIEBjbGFzcyBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2Vy
dGlvblJlc3BvbnNlOwogQGNsYXNzIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw7CkBAIC03NSw2
ICs3NywyNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlv
blNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7Cisg
ICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxh
dGZvcm0sCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudCkgeworICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVk
LAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlRGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5MTQx
PiBPcHRpbWl6ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBBdXRoZW50aWNhdGlvblNlcnZpY2UuZnJh
bWV3b3JrLgogQHByb3RvY29sIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxEZWxlZ2F0ZSA8TlNP
YmplY3Q+CiAKIEBvcHRpb25hbApAQCAtODcsMTggKzEwOCwxNjkgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2UpIHsKIAogQGVuZAogCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSA6IE5TT2JqZWN0CisKKysgKGluc3Rh
bmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsK
KworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpuYW1lOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWNvbjsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IDogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAo
aW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0
eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBl
KWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqZGlzcGxheU5hbWU7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobTsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICphbGdvcml0aG07CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8q
IUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50QWxsLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2
YWx1ZSBpcyBOTy4qLworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50
S2V5OworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIDogTlNPYmplY3QKKworKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRh
ICopaWRlbnRpZmllcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRl
bnRpZmllcjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxO
U051bWJlciAqPiAqdHJhbnNwb3J0czsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNPYmplY3QKKworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXBwaWQ7CisKK0BlbmQKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJm
YWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdAorCist
IChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJh
eTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXM7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSAqcnA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eSAqdXNlcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXM7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIg
KnRpbWVvdXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVDcmVkZW50aWFsczsK
K0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisvKiFAZGlzY3Vzc2lv
biBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
Tm9uZS4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudFByZWZlcnJlZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVu
dGljYXRvclJlc3BvbnNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU0RhdGEgKnJhd0lkOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFk
b25seSwgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpl
eHRlbnNpb25zOworCitAZW5kCisKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNEYXRhICphdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGlj
YXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICph
dXRoZW50aWNhdG9yRGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRh
ICpzaWduYXR1cmU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKnVzZXJIYW5kbGU7CisKK0BlbmQKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgOiBOU09iamVjdAogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdl
YWspIGlkIDxfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGU+IGRlbGVnYXRlOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5
SUQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3Bv
cnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlv
blR5cGUgdHlwZTsKIAogKyAodm9pZCljbGVhckFsbExvY2FsQXV0aGVudGljYXRvckNyZWRlbnRp
YWxzOworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFi
bGU7CiAKKy0gKGluc3RhbmNldHlwZSlpbml0OworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxNTA5Mzk0PiBBZGRzIENsaWVudERhdGFKU09OLgorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS83MTUwOTQ4NT4gQWRkcyBkZXRhaWxlZCBOU0Vycm9yLgorLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZv
aWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikp
aGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogLSAodm9pZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4
NDg+IFJlbW92ZSB0aGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgbWV0aG9kLgorQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5SUQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3BvcnRzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlvblR5cGUgdHlw
ZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJmNzdhMmFlZGUyMS4uMWEw
NGRhNjI0NTU3NjZhMTQ4MzI0ZDFjZjM5YTVjYzlkZWM4ZmQ5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxODMgQEAKICNpbXBvcnQgIl9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0b3IuaCIK
KyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJvci5oIgogI2ltcG9ydCAi
V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50
aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNl
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNvbnN0YW50cy5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wpYXBwaWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
cHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmF3SWQgPSByYXdJZDsKKyAg
ICBfZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczoo
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMgYXV0
aGVudGljYXRvckRhdGE6KE5TRGF0YSAqKWF1dGhlbnRpY2F0b3JEYXRhIHNpZ25hdHVyZTooTlNE
YXRhICopc2lnbmF0dXJlIHVzZXJIYW5kbGU6KE5TRGF0YSAqKXVzZXJIYW5kbGUKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3SWQgZXh0ZW5zaW9uczpleHRlbnNp
b25zXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYXV0aGVudGljYXRvckRhdGEgPSBh
dXRoZW50aWNhdG9yRGF0YTsKKyAgICBfc2lnbmF0dXJlID0gc2lnbmF0dXJlOworICAgIF91c2Vy
SGFuZGxlID0gdXNlckhhbmRsZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KF9XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25zIGF0dGVzdGF0
aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOmV4dGVuc2lvbnNdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hdHRlc3RhdGlvbk9iamVjdCA9IGF0dGVzdGF0aW9u
T2JqZWN0OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBf
V0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEKKworLSAoaW5zdGFuY2V0eXBlKWluaXQK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBfV0tBdXRoZW50aWNhdG9yQXR0
YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVSZXNpZGVudEtleSA9IE5POworICAgIHNlbGYu
dXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJl
ZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAgdXNlcjooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQYXJhbXM6KE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJLZXlDcmVkUGFyYW1zCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLnJwID0gcnA7CisgICAgc2VsZi51c2VyID0gdXNlcjsKKyAgICBzZWxmLnB1Yktl
eUNyZWRQYXJhbXMgPSBwdWJLZXlDcmVkUGFyYW1zOworICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVy
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
c2VsZi5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5h
bGdvcml0aG0gPSBhbGdvcml0aG07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucworCistIChp
bnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuaWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1l
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxlbWVudGF0aW9uIF9XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgV2Vha1B0
cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9jbGllbnQ7CkBAIC0zOCw2
ICsyMTEsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewog
I2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhO
KQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpXZWJBdXRoZW50aWNh
dGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxmOworfQorCiAjaWYgRU5B
QkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUsNiArMzE5LDI1MiBAQCAt
ICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSogZGF0YSkKK3sKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoKGNvbnN0IHVpbnQ4X3Qq
KWRhdGEuYnl0ZXMsIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgdm9pZCBlbmNvZGVFbnRpdHkoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uczo6RW50aXR5JiBvdXRwdXQsIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkqIGlu
cHV0KQoreworICAgIG91dHB1dC5uYW1lID0gaW5wdXQubmFtZTsKKyAgICBvdXRwdXQuaWNvbiA9
IGlucHV0Lmljb247Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSByZXN1bHQ7CisgICAgZW5j
b2RlRW50aXR5KHJlc3VsdCwgcnBFbnRpdHkpOworICAgIHJlc3VsdC5pZCA9IHJwRW50aXR5Lmlk
ZW50aWZpZXI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSBwdWJsaWNLZXlDcmVk
ZW50aWFsVXNlckVudGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNlckVu
dGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpVc2VyRW50aXR5IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVzdWx0LCB1c2VyRW50aXR5
KTsKKyAgICByZXN1bHQuaWRWZWN0b3IgPSB2ZWN0b3JGcm9tTlNEYXRhKHVzZXJFbnRpdHkuaWRl
bnRpZmllcik7CisgICAgcmVzdWx0LmRpc3BsYXlOYW1lID0gdXNlckVudGl0eS5kaXNwbGF5TmFt
ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyAqPiAqcHViS2V5Q3JlZFBhcmFtcykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1YktleUNyZWRQYXJhbXMuY291bnQpOworCisgICAg
Zm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqcGFyYW0gOiBwdWJLZXlDcmVk
UGFyYW1zKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgcGFyYW0uYWxnb3JpdGhtLmxvbmdMb25nVmFs
dWUgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVu
dGljYXRvclRyYW5zcG9ydCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0KF9XS1dlYkF1dGhlbnRpY2F0
aW9uVHJhbnNwb3J0IHRyYW5zcG9ydCkKK3sKKyAgICBzd2l0Y2ggKHRyYW5zcG9ydCkgeworICAg
IGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0I6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7CisgICAgY2FzZSBfV0tXZWJBdXRo
ZW50aWNhdGlvblRyYW5zcG9ydE5GQzoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ6Ok5mYzsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNw
b3J0SW50ZXJuYWw6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNw
b3J0OjpJbnRlcm5hbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsK
KyAgICB9Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dD4gYXV0aGVudGljYXRvclRyYW5zcG9ydHMoTlNBcnJheTxOU051bWJlciAqPiAqdHJhbnNwb3J0
cykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyYW5zcG9ydHMuY291bnQpOwor
CisgICAgZm9yIChOU051bWJlciAqdHJhbnNwb3J0IDogdHJhbnNwb3J0cykKKyAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChhdXRoZW50aWNhdG9yVHJhbnNwb3J0KChfV0tXZWJBdXRoZW50
aWNhdGlvblRyYW5zcG9ydCl0cmFuc3BvcnQuaW50VmFsdWUpKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3I+IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhOU0FycmF5PF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpjcmVkZW50aWFscykKK3sKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjcmVkZW50aWFscy5jb3VudCk7CisKKyAgICBmb3IgKF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFsIDogY3JlZGVudGlhbHMp
CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5LCB7IH0sIHZlY3RvckZyb21OU0RhdGEoY3JlZGVudGlhbC5p
ZGVudGlmaWVyKSwgYXV0aGVudGljYXRvclRyYW5zcG9ydHMoY3JlZGVudGlhbC50cmFuc3BvcnRz
KSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNo
bWVudD4gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQg
YXR0YWNobWVudCkKK3sKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIF9XS0F1
dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybToKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRp
Y2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRh
Y2htZW50Q3Jvc3NQbGF0Zm9ybToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9zc1Bs
YXRmb3JtOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OlVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uKF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudCB1dikKK3sKKyAgICBzd2l0Y2ggKHV2KSB7CisgICAgY2FzZSBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQ7CisgICAgY2FzZSBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICBjYXNlIF9X
S1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpEaXNjb3VyYWdlZDsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIH0KK30K
Kworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1
dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEoX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9yU2VsZWN0
aW9uKQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6
OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSByZXN1bHQ7CisgICAgcmVzdWx0LmF1dGhl
bnRpY2F0b3JBdHRhY2htZW50ID0gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoYXV0aGVudGljYXRv
clNlbGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCk7CisgICAgcmVzdWx0LnJlcXVpcmVS
ZXNpZGVudEtleSA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5Owor
ICAgIHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihhdXRoZW50aWNh
dG9yU2VsZWN0aW9uLnVzZXJWZXJpZmljYXRpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJl
bmNlIGF0dGVzdGF0aW9uKQoreworICAgIHN3aXRjaCAoYXR0ZXN0YXRpb24pIHsKKyAgICBjYXNl
IF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAgICBjYXNl
IF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdDoKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0Owor
ICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdDoKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVj
dDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7Cisg
ICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzIGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhfV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnMpCit7CisgICAgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIHJlc3VsdDsKKyAgICByZXN1bHQu
YXBwaWQgPSBleHRlbnNpb25zLmFwcGlkOworICAgIHJlc3VsdC5nb29nbGVMZWdhY3lBcHBpZFN1
cHBvcnQgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworKyAoV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9Db3JlQ3Jl
YXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJlc3VsdC5y
cCA9IHB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eShvcHRpb25zLnJwKTsKKyAgICByZXN1bHQu
dXNlciA9IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlvbnMudXNlcik7CisKKyAg
ICByZXN1bHQucHViS2V5Q3JlZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
KG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcyk7CisKKyAgICBpZiAob3B0aW9ucy50aW1lb3V0KQor
ICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZEludFZhbHVl
OworICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhvcHRpb25z
LmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVj
dGlvbikKKyAgICAgICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhdXRoZW50aWNh
dG9yU2VsZWN0aW9uQ3JpdGVyaWEob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKTsKKyAg
ICByZXN1bHQuYXR0ZXN0YXRpb24gPSBhdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKG9w
dGlvbnMuYXR0ZXN0YXRpb24pOworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIFJl
dGFpblB0cjxfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZT4gd2tBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9u
c2VEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvckF0
dGVzdGF0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgpXSBl
eHRlbnNpb25zOm5pbCBhdHRlc3RhdGlvbk9iamVjdDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0
YS5hdHRlc3RhdGlvbk9iamVjdC0+ZGF0YSgpIGxlbmd0aDpkYXRhLmF0dGVzdGF0aW9uT2JqZWN0
LT5ieXRlTGVuZ3RoKCldXSk7Cit9CisjZW5kaWYKKworLSAodm9pZCltYWtlQ3JlZGVudGlhbFdp
dGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1ha2VC
bG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNw
b25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAg
ICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGlj
YXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKS5nZXQoKSwgbmlsKTsK
KyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vy
cm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAgIH0p
OworICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0YSho
YXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwg
dHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVx
dWVzdE9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGlmIChvcHRpb25z
LnRpbWVvdXQpCisgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVuc2ln
bmVkSW50VmFsdWU7CisgICAgaWYgKG9wdGlvbnMucnBJZCkKKyAgICAgICAgcmVzdWx0LnJwSWQg
PSBvcHRpb25zLnJwSWQ7CisgICAgaWYgKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAgICAg
ICAgcmVzdWx0LmFsbG93Q3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
cnMob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlv
biA9IHVzZXJWZXJpZmljYXRpb24ob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKTsKKyAgICByZXN1
bHQuZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRp
b25zLmV4dGVuc2lvbnMpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYg
RU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlPiB3a0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShjb25zdCBXZWJD
b3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhJiBkYXRhKQoreworICAgIFJldGFpblB0cjxf
V0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiBleHRlbnNpb25zID0gbmls
OworICAgIGlmIChkYXRhLmFwcGlkKQorICAgICAgICBleHRlbnNpb25zID0gYWRvcHROUyhbW19X
S0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgYWxsb2NdIGluaXRXaXRoQXBw
aWQ6ZGF0YS5hcHBpZC52YWx1ZSgpXSk7CisKKyAgICBOU0RhdGEgKnVzZXJIYW5kbGUgPSBuaWw7
CisgICAgaWYgKGRhdGEudXNlckhhbmRsZSkKKyAgICAgICAgdXNlckhhbmRsZSA9IFtOU0RhdGEg
ZGF0YVdpdGhCeXRlczpkYXRhLnVzZXJIYW5kbGUtPmRhdGEoKSBsZW5ndGg6ZGF0YS51c2VySGFu
ZGxlLT5ieXRlTGVuZ3RoKCldOworCisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tBdXRoZW50aWNh
dG9yQXNzZXJ0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgp
XSBleHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCkgYXV0aGVudGljYXRvckRhdGE6W05TRGF0YSBk
YXRhV2l0aEJ5dGVzOmRhdGEuYXV0aGVudGljYXRvckRhdGEtPmRhdGEoKSBsZW5ndGg6ZGF0YS5h
dXRoZW50aWNhdG9yRGF0YS0+Ynl0ZUxlbmd0aCgpXSBzaWduYXR1cmU6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEuc2lnbmF0dXJlLT5kYXRhKCkgbGVuZ3RoOmRhdGEuc2lnbmF0dXJlLT5ieXRl
TGVuZ3RoKCldIHVzZXJIYW5kbGU6dXNlckhhbmRsZV0pOworfQorI2VuZGlmCisKKy0gKHZvaWQp
Z2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFu
ZGxlcgoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFtoYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11dGFi
bGUgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJDb3Jl
OjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFuZGxl
cih3a0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKS5nZXQo
KSwgbmlsKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4
Y2VwdGlvbikgeworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJv
bU5TRGF0YShoYXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJl
cXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0
aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9w
dCwgeyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30K
KworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUK
K3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJldHVybiBXZWJLaXQ6OkxvY2FsU2Vydmlj
ZTo6aXNBdmFpbGFibGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKICNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxl
bWVudGF0aW9uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTliOGI3ZjcyMjk1NmQwNWMwYTAxMjEwYTVjYmRhYjY0ZmY2NGVlYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uczsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7Cit9
CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIChXS1Rlc3RpbmcpCisKKy8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk3MTQ+IEludHJvZHVjZXMgbW9jayB0ZXN0aW5n
LgorKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0
VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGlj
YXRpb25SZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCmluZGV4IDZlNDAyZmNkZjEyNWM2
ZTIzNjFiZDI3ZGZiNTgwMjJiZGMxNzI0ZDkuLmQzODYzN2U2Njg3Mjc0MDMyNzg1NmU4OTI5Mjc4
MjIyNGNkMTJjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3RE
YXRhLmgKQEAgLTQ1LDExICs0NSwxNCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgV2Vi
QXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2g7CiAg
ICAgVmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+IG9wdGlvbnM7CisKKyAg
ICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sbG93aW5n
IGRlcHJlY2F0ZWQgZmllbGRzLgogICAgIFdlYWtQdHI8V2ViUGFnZVByb3h5PiBwYWdlOwogICAg
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcGFuZWxSZXN1bHQgeyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSB9OwogICAgIFJlZlB0cjxBUEk6OldlYkF1dGhl
bnRpY2F0aW9uUGFuZWw+IHBhbmVsOwogICAgIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6R2xvYmFs
RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEOwogICAgIFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFt
ZUluZm87CisKICAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZTsKICAgICBTdHJpbmcgY2Fj
aGVkUGluOyAvLyBPbmx5IHVzZWQgdG8gaW1wcm92ZSBORkMgQ2xpZW50IFBJTiBleHBlcmllbmNl
LgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDU4ZDI0YTRiODA1OTMwOWI3ZjhmYjdiNDk2OWNmN2Q2NDlkYmFjNWUuLjRlMGQwNWVm
N2IyN2U0MWVjN2NjZTM0ZDk5ODVlOTRjYzU3MWUxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyNiw2ICsxMTI2LDcgQEAKIAkJ
NTc3RkY3ODIyMzQ2RTgxQzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3N0ZG
NzgxMjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmgg
Ki87IH07CiAJCTU3N0ZGNzg1MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dC5oICovOyB9OwogCQk1NzhEQzI5ODIxNTVBMDAyMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNh
dGlvblNvZnRMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzhEQzI5NzIxNTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRM
aW5rLmggKi87IH07CisJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTc5RjFCRjYyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhl
bnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkY0MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRo
ZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTc5RjFCRjkyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovOyB9
OwogCQk1NzlGMUJGQzIzQzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0aGVudGljYXRpb25Bc3Nl
cnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTc5RjFCRkEyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNz
ZXJ0aW9uUmVzcG9uc2UuaCAqLzsgfTsKQEAgLTM5ODAsNiArMzk4MSw3IEBACiAJCTU3N0ZGNzgz
MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc3RkY3ODQyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzhEQzI5NzIx
NTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbEZvclRlc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjQy
M0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGNTIzQzgwREI2MDBDN0Q0QjQg
LyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDQ0LDYgKzc0NDYsNyBAQAogCQkJCTU3OUYxQkY4
MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCAqLywKIAkJCQk1NzQ3MjhDRjIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oICovLAogCQkJCTU3NDcyOEQwMjM0NTZFOTgwMDE3MDBBRiAvKiBf
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tICovLAorCQkJCTU3OTBBNjUxMjU2NURFNkEwMDc3
QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oICovLAogCQkJCTU3
NDcyOEQzMjM0NTcwQUUwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJu
YWwuaCAqLywKIAkJCQkxQUUyODY3NjFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFT
aXplLmggKi8sCiAJCQkJMUFFMjg2NzUxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRh
U2l6ZS5tbSAqLywKQEAgLTEwODc2LDYgKzEwODc5LDcgQEAKIAkJCQk1NzlGMUJGNjIzQzgwREI2
MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTc5RjFCRjkyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0
NzI4RDEyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0NzI4RDQyMzQ1
NzBBRTAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMjg2NzgxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRh
U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMjg2ODAxQzdGOTJDMDAwNjlBQzRGIC8qIF9X
S1dlYnNpdGVEYXRhU2l6ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OWVkNjg2NThhMTdjYjJkMWRh
NWUyZGVjMzBiZmZmZGE5NzIzYjE2Li42MTFhZDgyNDNjNjFjZjYxMWU4MmNjOWVhMDVjODdlNjBi
MWU0MmZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTEtMTcgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIEltcGxlbWVudCBTUEkgZm9yIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXMuRnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTg4OTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcxMzY0NzMx
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1t
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICgpOiBEZWxldGVkLgor
CiAyMDIwLTExLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OOiByMjY5NTE0IFJlc2V0IHNlcnZlciBwb3J0IGJlZm9yZSByZXN0YXJ0
aW5nIHdlYnNlcnZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IGE5
NGFiNzg4YmZkMTQ5MDJkNjM3ODVmMjAzZjYxY2U4OWZiNjBkMDQuLmMwMGM5MzJmMDYyNjYzYjVm
NWQ3OWMyNjFhYzMyZWM1ZmEwNWE2M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KQEAgLTMzLDExICszMywxNCBAQAogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2lt
cG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCA8TG9jYWxBdXRo
ZW50aWNhdGlvbi9Mb2NhbEF1dGhlbnRpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVudGFsRmVhdHVyZS5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JhbmRvbU51bWJlci5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9TZWN1
cml0eVNQSS5oPgpAQCAtMjM3LDYgKzI0MCw3IEBAIC0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgKilwYW5lbAogQGVuZAogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIApAQCAtMTQzMiw2ICsxNDM2LDM1OCBAQCBU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIExBR2V0QXNzZXJ0aW9uTXVsdGlwbGVPcmRlcikK
IAogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspIHx8IFBMQVRGT1JNKElPUykKIAor
VEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zTWluaW11bikKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
IGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5T
KFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJl
eGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBs
ZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQi
XSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHVi
S2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKworICAgIGF1dG8gb3B0aW9u
cyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9j
XSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1
YktleUNyZWRQYXJhbXNdKTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdl
dCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29t
Iik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVD
VF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIu
aWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1j
bXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRp
ZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUs
ICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1z
LnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0u
dHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMGx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24sIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7
CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCwg
ZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlkZW50
aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVu
dGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihp
ZGVudGlmaWVyKV07CisgICAgYXV0byBwYXJhbWV0ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7Cisg
ICAgYXV0byBwYXJhbWV0ZXJzMiA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC0yNTddKTsKKyAgICBhdXRvIGRlc2Ny
aXB0b3IgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2Nd
IGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKworICAgIGF1dG8gcnAgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJleGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNl
ZWQiXSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
cHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQo
KSBdOworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGV4dGVu
c2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRz
IGFsbG9jXSBpbml0XSk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1
c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAg
W29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVu
dGlhbHM6QFsgZGVzY3JpcHRvci5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNh
dG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworICAgIFtvcHRpb25z
IHNldEV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtf
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRo
T3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAu
bmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNO
dWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20i
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOwor
ICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlm
aWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0
LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6
OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFs
ZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFscy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3Jl
ZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1Ymxp
Y0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0
b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVz
dWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNp
emVvZihpZGVudGlmaWVyKSksIDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNh
dG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxsb3B0KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVu
dEtleSwgZmFsc2UpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlv
bi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJy
ZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lv
bnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTEpCit7CisgICAgdWludDhf
dCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEg
Km5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpz
aXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAt
N10pOworICAgIGF1dG8gcGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBh
dXRvIHJwID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10g
aW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8v
d3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFt
cGxlLmNvbSJdOworCisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUu
Y29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0p
OworICAgIFt1c2VyIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07
CisKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJL
ZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07
CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkg
cHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGlt
ZW91dDpAMTIwXTsKKworICAgIGF1dG8gdXNiID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0pOworICAgIGF1dG8gbmZjID0g
YWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5z
cG9ydE5GQ10pOworICAgIGF1dG8gaW50ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJX
aXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsKKyAgICBhdXRv
IGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ig
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBbY3JlZGVudGlh
bCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBd
XTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQo
KSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlv
biA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGlu
aXRdKTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNo
bWVudDpfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtXTsKKyAgICBbYXV0aGVudGlj
YXRvclNlbGVjdGlvbiBzZXRSZXF1aXJlUmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGlj
YXRvclNlbGVjdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudFJlcXVpcmVkXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9u
OmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0
YXRpb246X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdF07CisKKyAgICBh
dXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVh
dGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC5ycC5pY29uLCBAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmlkLCAiZXhhbXBsZS5jb20iKTsKKworICAgIEVY
UEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIp
OworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5pY29uLCBAImh0dHBzLy93d3cuZXhh
bXBsZS5jb20vaWNvbi5qcGciKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iu
c2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0
LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAw
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxl
c2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwg
Mmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1
bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNb
MV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmll
cikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5p
ZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAg
IEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgp
LCAzbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5z
cG9ydHNbMF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6TmZjKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1sw
XS50cmFuc3BvcnRzWzJdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JB
dHRhY2htZW50LCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNh
dG9yQXR0YWNobWVudDo6UGxhdGZvcm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6RGlyZWN0KTsKK30K
KworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zTWF4aW11bTIpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEg
ZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAg
IGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8gcGFyYW1ldGVy
czIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGlu
aXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5j
b20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBn
Il07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFtcGxlLmNvbSJdOworCisgICAgYXV0byB1
c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBp
bml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRp
ZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIFt1c2VyIHNldEljb246QCJo
dHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisKKyAgICBOU0FycmF5PF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1l
dGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5p
dFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlD
cmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8g
dXNiID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlv
blRyYW5zcG9ydFVTQl0pOworICAgIGF1dG8gbmZjID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQ10pOworICAgIGF1dG8gaW50
ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0
aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpuc0lkZW50aWZpZXJdKTsKKyAgICBbY3JlZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5n
ZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNs
dWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsK
KworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRoZW50
aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBbYXV0aGVudGljYXRv
clNlbGVjdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudDpfV0tBdXRoZW50aWNhdG9yQXR0
YWNobWVudENyb3NzUGxhdGZvcm1dOyAvLworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNl
dFJlcXVpcmVSZXNpZGVudEtleTpZRVNdOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNl
dFVzZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFn
ZWRdOyAvLworICAgIFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0aGVudGlj
YXRvclNlbGVjdGlvbi5nZXQoKV07CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlvbjpfV0tB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3RdOyAvLworCisgICAgYXV0byBy
ZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25P
cHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1
bHQucnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUu
Y29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2Vy
LmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQi
KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1
bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6
OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFs
ZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsK
KyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0
b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRz
WzBdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
ZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3Bv
cnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJh
bnNwb3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNo
bWVudCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3Qp
OworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGlt
ZW91dCkKK3sKKyAgICByZXNldCgpOworCisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICB1aW50OF90IGhhc2hbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywg
MHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgw
MSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgTlNEYXRh
ICpuc0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gp
XTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworCisgICAgYXV0byBy
cCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRX
aXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxl
c2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJK
IEFwcGxlc2VlZCJdKTsKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVycy5nZXQoKSBdOworICAgIGF1
dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVk
UGFyYW1zOnB1YktleUNyZWRQYXJhbXNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6bnNIYXNo
IG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05V
TEwocmVzcG9uc2UpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9t
YWluKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAg
ICB9XTsKKyAgICBVdGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCitU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9uc01pbmltdW4pCit7CisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcmVzdWx0
ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25z
V2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVv
dXQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwSWQuaXNOdWxsKCkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDBsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMt
PmFwcGlkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2ds
ZUxlZ2FjeUFwcGlkU3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW1EZWZhdWx0KQor
eworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRp
ZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRo
SWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5T
KFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7
CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIw
XTsKKyAgICBbb3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0KCkg
XV07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5zaW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAg
IGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJl
cXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRl
bnRpYWxzLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlh
bHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxv
d0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50
aWZpZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW0pCit7
CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsK
KyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlm
aWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgYXV0byBvcHRpb25zID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0p
OworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0
TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRV
U0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0gYWRv
cHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlm
aWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5n
ZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFs
czpAWyBjcmVkZW50aWFsLmdldCgpLCBjcmVkZW50aWFsLmdldCgpIF1dOworCisgICAgW29wdGlv
bnMgc2V0VXNlclZlcmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1
aXJlZF07CisKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisgICAgW2V4dGVuc2lvbnMg
c2V0QXBwaWQ6QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iXTsKKyAgICBbb3B0aW9ucyBz
ZXRFeHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0
aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIw
dSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAybHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmll
cikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRW
ZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNs
dSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
MF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
bGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9y
dHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZCwg
Imh0dHBzLy93d3cuZXhhbXBsZS5jb20vZmlkbyIpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIEdldEFzc2VydGlvblNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAg
IHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAw
eDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0
LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAw
eDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpu
c0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsK
KworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIGdldEFzc2VydGlvbldpdGhIYXNoOm5zSGFzaCBv
cHRpb25zOm9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChy
ZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4p
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414639</attachid>
            <date>2020-11-19 16:42:49 -0800</date>
            <delta_ts>2020-11-19 16:46:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201119164248.patch</filename>
            <type>text/plain</type>
            <size>68284</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5
YTE1MzJkMzJlMy4uOTc5YzMzZmRhZGIxYzc5YTJmNDFmNzc5ZTkzMDVjNWExY2QwYTFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0yOCw2ICsyOCw4IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IFNlcGFy
YXRlIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW50IGludGVyZmFjZXMgaW50byBzZXBhcmF0ZSBmaWxl
cy4KKwogQGNsYXNzIExBQ29udGV4dDsKIEBjbGFzcyBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2Vy
dGlvblJlc3BvbnNlOwogQGNsYXNzIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw7CkBAIC03NSw2
ICs3NywyNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlv
blNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7Cisg
ICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxh
dGZvcm0sCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudCkgeworICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVk
LAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlRGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5MTQx
PiBPcHRpbWl6ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBBdXRoZW50aWNhdGlvblNlcnZpY2UuZnJh
bWV3b3JrLgogQHByb3RvY29sIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxEZWxlZ2F0ZSA8TlNP
YmplY3Q+CiAKIEBvcHRpb25hbApAQCAtODcsMTggKzEwOCwxNjkgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2UpIHsKIAogQGVuZAogCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSA6IE5TT2JqZWN0CisKKysgKGluc3Rh
bmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsK
KworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpuYW1lOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWNvbjsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IDogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAo
aW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0
eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBl
KWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqZGlzcGxheU5hbWU7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobTsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICphbGdvcml0aG07CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8q
IUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50QWxsLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2
YWx1ZSBpcyBOTy4qLworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50
S2V5OworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIDogTlNPYmplY3QKKworKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRh
ICopaWRlbnRpZmllcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRl
bnRpZmllcjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxO
U051bWJlciAqPiAqdHJhbnNwb3J0czsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNPYmplY3QKKworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXBwaWQ7CisKK0BlbmQKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJm
YWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdAorCist
IChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJh
eTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXM7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSAqcnA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eSAqdXNlcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXM7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIg
KnRpbWVvdXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVDcmVkZW50aWFsczsK
K0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisvKiFAZGlzY3Vzc2lv
biBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
Tm9uZS4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudFByZWZlcnJlZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVu
dGljYXRvclJlc3BvbnNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU0RhdGEgKnJhd0lkOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFk
b25seSwgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpl
eHRlbnNpb25zOworCitAZW5kCisKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNEYXRhICphdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGlj
YXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICph
dXRoZW50aWNhdG9yRGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRh
ICpzaWduYXR1cmU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKnVzZXJIYW5kbGU7CisKK0BlbmQKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgOiBOU09iamVjdAogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdl
YWspIGlkIDxfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGU+IGRlbGVnYXRlOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5
SUQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3Bv
cnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlv
blR5cGUgdHlwZTsKIAogKyAodm9pZCljbGVhckFsbExvY2FsQXV0aGVudGljYXRvckNyZWRlbnRp
YWxzOworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFi
bGU7CiAKKy0gKGluc3RhbmNldHlwZSlpbml0OworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxNTA5Mzk0PiBBZGRzIENsaWVudERhdGFKU09OLgorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS83MTUwOTQ4NT4gQWRkcyBkZXRhaWxlZCBOU0Vycm9yLgorLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZv
aWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikp
aGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogLSAodm9pZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4
NDg+IFJlbW92ZSB0aGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgbWV0aG9kLgorQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5SUQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3BvcnRzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlvblR5cGUgdHlw
ZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJmNzdhMmFlZGUyMS4uMDhm
ZmE0NTgzZWE3MmMwZmRkMzEwZDdjYjQ5ODRiYjM0Yjc0MjRlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxOTAgQEAKICNpbXBvcnQgIl9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0b3IuaCIK
KyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJvci5oIgogI2ltcG9ydCAi
V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50
aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNl
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNvbnN0YW50cy5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wpYXBwaWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
cHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgeworICAgIFJldGFpblB0cjxfV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiBfZXh0ZW5zaW9uczsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KFJldGFp
blB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiYmKWV4dGVuc2lv
bnMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9yYXdJZCA9IHJhd0lkOworICAgIF9leHRlbnNpb25zID0gZXh0ZW5zaW9uczsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMKK3sKKyAgICByZXR1cm4gX2V4dGVuc2lvbnMuYXV0b3Jl
bGVhc2UoKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckFz
c2VydGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEg
KilyYXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF1dGhlbnRpY2F0b3JEYXRhOihOU0RhdGEgKilh
dXRoZW50aWNhdG9yRGF0YSBzaWduYXR1cmU6KE5TRGF0YSAqKXNpZ25hdHVyZSB1c2VySGFuZGxl
OihOU0RhdGEgKil1c2VySGFuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aFJhd0lkOnJhd0lkIGV4dGVuc2lvbnM6V1RGTW92ZShleHRlbnNpb25zKV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX2F1dGhlbnRpY2F0b3JEYXRhID0gYXV0aGVudGljYXRvckRhdGE7
CisgICAgX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKKyAgICBfdXNlckhhbmRsZSA9IHVzZXJIYW5k
bGU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFJhd0lkOihOU0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF0dGVzdGF0aW9uT2Jq
ZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOldURk1vdmUoZXh0ZW5zaW9ucyldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9hdHRlc3RhdGlvbk9iamVjdCA9IGF0dGVzdGF0
aW9uT2JqZWN0OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFjaG1lbnQgPSBfV0tBdXRoZW50aWNhdG9y
QXR0YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVSZXNpZGVudEtleSA9IE5POworICAgIHNl
bGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZl
cnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dL
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAgdXNlcjooX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQYXJhbXM6KE5TQXJy
YXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJLZXlDcmVkUGFyYW1z
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBzZWxmLnJwID0gcnA7CisgICAgc2VsZi51c2VyID0gdXNlcjsKKyAgICBzZWxmLnB1
YktleUNyZWRQYXJhbXMgPSBwdWJLZXlDcmVkUGFyYW1zOworICAgIHJldHVybiBzZWxmOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRv
cgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlm
aWVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJldHVybiBzZWxm
OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50
aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgc2VsZi5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobQoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2Vs
Zi5hbGdvcml0aG0gPSBhbGdvcml0aG07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucworCist
IChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxmOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkK
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhO
YW1lOihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNw
bGF5TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
aWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlO
YW1lOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKwogQGltcGxlbWVudGF0aW9uIF9X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgewogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgV2Vh
a1B0cjxXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IF9jbGllbnQ7CkBAIC0z
OCw2ICsyMTgsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwg
ewogI2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBFTkFCTEUoV0VCX0FV
VEhOKQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpXZWJBdXRoZW50
aWNhdGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxmOworfQorCiAjaWYg
RU5BQkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUsNiArMzI2LDI1MiBA
QCAtICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSogZGF0YSkKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoKGNvbnN0IHVpbnQ4
X3QqKWRhdGEuYnl0ZXMsIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgdm9pZCBlbmNvZGVFbnRpdHkoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uczo6RW50aXR5JiBvdXRwdXQsIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkq
IGlucHV0KQoreworICAgIG91dHB1dC5uYW1lID0gaW5wdXQubmFtZTsKKyAgICBvdXRwdXQuaWNv
biA9IGlucHV0Lmljb247Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dL
UHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSByZXN1bHQ7CisgICAg
ZW5jb2RlRW50aXR5KHJlc3VsdCwgcnBFbnRpdHkpOworICAgIHJlc3VsdC5pZCA9IHJwRW50aXR5
LmlkZW50aWZpZXI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSBwdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eShfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqdXNl
ckVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zOjpVc2VyRW50aXR5IHJlc3VsdDsKKyAgICBlbmNvZGVFbnRpdHkocmVzdWx0LCB1c2VyRW50
aXR5KTsKKyAgICByZXN1bHQuaWRWZWN0b3IgPSB2ZWN0b3JGcm9tTlNEYXRhKHVzZXJFbnRpdHku
aWRlbnRpZmllcik7CisgICAgcmVzdWx0LmRpc3BsYXlOYW1lID0gdXNlckVudGl0eS5kaXNwbGF5
TmFtZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1l
dGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVycz4gcmVzdWx0OworICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1YktleUNyZWRQYXJhbXMuY291bnQpOworCisg
ICAgZm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqcGFyYW0gOiBwdWJLZXlD
cmVkUGFyYW1zKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgcGFyYW0uYWxnb3JpdGhtLmxvbmdMb25n
VmFsdWUgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0KF9XS1dlYkF1dGhlbnRp
Y2F0aW9uVHJhbnNwb3J0IHRyYW5zcG9ydCkKK3sKKyAgICBzd2l0Y2ggKHRyYW5zcG9ydCkgewor
ICAgIGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0I6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7CisgICAgY2FzZSBfV0tXZWJB
dXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQzoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhl
bnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYzsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJh
bnNwb3J0SW50ZXJuYWw6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpJbnRlcm5hbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVz
YjsKKyAgICB9Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5z
cG9ydD4gYXV0aGVudGljYXRvclRyYW5zcG9ydHMoTlNBcnJheTxOU051bWJlciAqPiAqdHJhbnNw
b3J0cykKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gcmVz
dWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyYW5zcG9ydHMuY291bnQp
OworCisgICAgZm9yIChOU051bWJlciAqdHJhbnNwb3J0IDogdHJhbnNwb3J0cykKKyAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChhdXRoZW50aWNhdG9yVHJhbnNwb3J0KChfV0tXZWJBdXRo
ZW50aWNhdGlvblRyYW5zcG9ydCl0cmFuc3BvcnQuaW50VmFsdWUpKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3I+IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhOU0FycmF5PF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpjcmVkZW50aWFscykKK3sKKyAgICBWZWN0b3I8
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+IHJlc3VsdDsKKyAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjcmVkZW50aWFscy5jb3VudCk7CisKKyAgICBmb3Ig
KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICpjcmVkZW50aWFsIDogY3JlZGVudGlh
bHMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsVHlwZTo6UHVibGljS2V5LCB7IH0sIHZlY3RvckZyb21OU0RhdGEoY3JlZGVudGlh
bC5pZGVudGlmaWVyKSwgYXV0aGVudGljYXRvclRyYW5zcG9ydHMoY3JlZGVudGlhbC50cmFuc3Bv
cnRzKSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0
YWNobWVudD4gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnQgYXR0YWNobWVudCkKK3sKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIF9X
S0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybToKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhl
bnRpY2F0b3JBdHRhY2htZW50OjpQbGF0Zm9ybTsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JB
dHRhY2htZW50Q3Jvc3NQbGF0Zm9ybToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50OjpDcm9z
c1BsYXRmb3JtOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6
OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uKF9XS1VzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudCB1dikKK3sKKyAgICBzd2l0Y2ggKHV2KSB7CisgICAgY2FzZSBf
V0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQ7CisgICAgY2FzZSBf
V0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICBjYXNl
IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpEaXNjb3VyYWdlZDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIH0K
K30KKworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6
OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3Jp
dGVyaWEoX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uKQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnM6OkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSByZXN1bHQ7CisgICAgcmVzdWx0LmF1
dGhlbnRpY2F0b3JBdHRhY2htZW50ID0gYXV0aGVudGljYXRvckF0dGFjaG1lbnQoYXV0aGVudGlj
YXRvclNlbGVjdGlvbi5hdXRoZW50aWNhdG9yQXR0YWNobWVudCk7CisgICAgcmVzdWx0LnJlcXVp
cmVSZXNpZGVudEtleSA9IGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24ucmVxdWlyZVJlc2lkZW50S2V5
OworICAgIHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uID0gdXNlclZlcmlmaWNhdGlvbihhdXRoZW50
aWNhdG9yU2VsZWN0aW9uLnVzZXJWZXJpZmljYXRpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0
ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVm
ZXJlbmNlIGF0dGVzdGF0aW9uKQoreworICAgIHN3aXRjaCAoYXR0ZXN0YXRpb24pIHsKKyAgICBj
YXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAgICBj
YXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdDoKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0
OworICAgIGNhc2UgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdDoKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRp
cmVjdDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7
CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50SW5wdXRzIGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhfV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnMpCit7CisgICAgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIHJlc3VsdDsKKyAgICByZXN1
bHQuYXBwaWQgPSBleHRlbnNpb25zLmFwcGlkOworICAgIHJlc3VsdC5nb29nbGVMZWdhY3lBcHBp
ZFN1cHBvcnQgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworKyAo
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0VG9Db3Jl
Q3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJlc3Vs
dC5ycCA9IHB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eShvcHRpb25zLnJwKTsKKyAgICByZXN1
bHQudXNlciA9IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlvbnMudXNlcik7CisK
KyAgICByZXN1bHQucHViS2V5Q3JlZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzKG9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcyk7CisKKyAgICBpZiAob3B0aW9ucy50aW1lb3V0
KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZEludFZh
bHVlOworICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscykKKyAgICAgICAgcmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9ycyhvcHRp
b25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRvclNl
bGVjdGlvbikKKyAgICAgICAgcmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhdXRoZW50
aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKTsK
KyAgICByZXN1bHQuYXR0ZXN0YXRpb24gPSBhdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
KG9wdGlvbnMuYXR0ZXN0YXRpb24pOworICAgIHJlc3VsdC5leHRlbnNpb25zID0gYXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKG9wdGlvbnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorc3RhdGlj
IFJldGFpblB0cjxfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZT4gd2tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVz
cG9uc2VEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgp
XSBleHRlbnNpb25zOm5pbCBhdHRlc3RhdGlvbk9iamVjdDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+ZGF0YSgpIGxlbmd0aDpkYXRhLmF0dGVzdGF0aW9uT2Jq
ZWN0LT5ieXRlTGVuZ3RoKCldXSk7Cit9CisjZW5kaWYKKworLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sK
KyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JS
ZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKS5nZXQoKSwgbmls
KTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlv
bikgeworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpX
S0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7CisgICAgICAg
IH0pOworICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJvbU5TRGF0
YShoYXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9u
T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsg
fSwgdHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysg
KFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyljb252ZXJ0VG9Db3Jl
UmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RP
cHRpb25zICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9ucyByZXN1bHQ7CisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGlmIChvcHRp
b25zLnRpbWVvdXQpCisgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVu
c2lnbmVkSW50VmFsdWU7CisgICAgaWYgKG9wdGlvbnMucnBJZCkKKyAgICAgICAgcmVzdWx0LnJw
SWQgPSBvcHRpb25zLnJwSWQ7CisgICAgaWYgKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykKKyAg
ICAgICAgcmVzdWx0LmFsbG93Q3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvcnMob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNh
dGlvbiA9IHVzZXJWZXJpZmljYXRpb24ob3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uKTsKKyAgICBy
ZXN1bHQuZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhv
cHRpb25zLmV4dGVuc2lvbnMpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisj
aWYgRU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRvckFz
c2VydGlvblJlc3BvbnNlPiB3a0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShjb25zdCBX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhJiBkYXRhKQoreworICAgIFJldGFpblB0
cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiBleHRlbnNpb25zOwor
ICAgIGlmIChkYXRhLmFwcGlkKQorICAgICAgICBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgYWxsb2NdIGluaXRXaXRoQXBwaWQ6
ZGF0YS5hcHBpZC52YWx1ZSgpXSk7CisKKyAgICBOU0RhdGEgKnVzZXJIYW5kbGUgPSBuaWw7Cisg
ICAgaWYgKGRhdGEudXNlckhhbmRsZSkKKyAgICAgICAgdXNlckhhbmRsZSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczpkYXRhLnVzZXJIYW5kbGUtPmRhdGEoKSBsZW5ndGg6ZGF0YS51c2VySGFuZGxl
LT5ieXRlTGVuZ3RoKCldOworCisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoUmF3SWQ6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmRhdGEucmF3SWQtPmRhdGEoKSBsZW5ndGg6ZGF0YS5yYXdJZC0+Ynl0ZUxlbmd0aCgpXSBl
eHRlbnNpb25zOldURk1vdmUoZXh0ZW5zaW9ucykgYXV0aGVudGljYXRvckRhdGE6W05TRGF0YSBk
YXRhV2l0aEJ5dGVzOmRhdGEuYXV0aGVudGljYXRvckRhdGEtPmRhdGEoKSBsZW5ndGg6ZGF0YS5h
dXRoZW50aWNhdG9yRGF0YS0+Ynl0ZUxlbmd0aCgpXSBzaWduYXR1cmU6W05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEuc2lnbmF0dXJlLT5kYXRhKCkgbGVuZ3RoOmRhdGEuc2lnbmF0dXJlLT5ieXRl
TGVuZ3RoKCldIHVzZXJIYW5kbGU6dXNlckhhbmRsZV0pOworfQorI2VuZGlmCisKKy0gKHZvaWQp
Z2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFu
ZGxlcgoreworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFtoYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11dGFi
bGUgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJDb3Jl
OjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFuZGxl
cih3a0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZShyZXNwb25zZS0+ZGF0YSgpKS5nZXQo
KSwgbmlsKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmIGV4
Y2VwdGlvbikgeworICAgICAgICAgICAgaGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvclVua25vd24gdXNlckluZm86bmlsXSk7Cisg
ICAgICAgIH0pOworICAgIH07CisgICAgX3BhbmVsLT5oYW5kbGVSZXF1ZXN0KHsgdmVjdG9yRnJv
bU5TRGF0YShoYXNoKSwgW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJl
cXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0
aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9w
dCwgeyB9LCB0cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30K
KworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUK
K3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIHJldHVybiBXZWJLaXQ6OkxvY2FsU2Vydmlj
ZTo6aXNBdmFpbGFibGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKICNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxl
bWVudGF0aW9uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTliOGI3ZjcyMjk1NmQwNWMwYTAxMjEwYTVjYmRhYjY0ZmY2NGVlYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9uczsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7Cit9
CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIChXS1Rlc3RpbmcpCisKKy8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk3MTQ+IEludHJvZHVjZXMgbW9jayB0ZXN0aW5n
LgorKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyljb252ZXJ0
VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGlj
YXRpb25SZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCmluZGV4IDZlNDAyZmNkZjEyNWM2
ZTIzNjFiZDI3ZGZiNTgwMjJiZGMxNzI0ZDkuLmQzODYzN2U2Njg3Mjc0MDMyNzg1NmU4OTI5Mjc4
MjIyNGNkMTJjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3RE
YXRhLmgKQEAgLTQ1LDExICs0NSwxNCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgV2Vi
QXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSB7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2g7CiAg
ICAgVmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+IG9wdGlvbnM7CisKKyAg
ICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD46IFJlbW92ZSB0aGUgZm9sbG93aW5n
IGRlcHJlY2F0ZWQgZmllbGRzLgogICAgIFdlYWtQdHI8V2ViUGFnZVByb3h5PiBwYWdlOwogICAg
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcGFuZWxSZXN1bHQgeyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSB9OwogICAgIFJlZlB0cjxBUEk6OldlYkF1dGhl
bnRpY2F0aW9uUGFuZWw+IHBhbmVsOwogICAgIFdURjo6T3B0aW9uYWw8V2ViQ29yZTo6R2xvYmFs
RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEOwogICAgIFdlYktpdDo6RnJhbWVJbmZvRGF0YSBmcmFt
ZUluZm87CisKICAgICBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZTsKICAgICBTdHJpbmcgY2Fj
aGVkUGluOyAvLyBPbmx5IHVzZWQgdG8gaW1wcm92ZSBORkMgQ2xpZW50IFBJTiBleHBlcmllbmNl
LgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDU4ZDI0YTRiODA1OTMwOWI3ZjhmYjdiNDk2OWNmN2Q2NDlkYmFjNWUuLjRlMGQwNWVm
N2IyN2U0MWVjN2NjZTM0ZDk5ODVlOTRjYzU3MWUxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyNiw2ICsxMTI2LDcgQEAKIAkJ
NTc3RkY3ODIyMzQ2RTgxQzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3N0ZG
NzgxMjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmgg
Ki87IH07CiAJCTU3N0ZGNzg1MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dC5oICovOyB9OwogCQk1NzhEQzI5ODIxNTVBMDAyMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNh
dGlvblNvZnRMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzhEQzI5NzIxNTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRM
aW5rLmggKi87IH07CisJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTc5RjFCRjYyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhl
bnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkY0MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRo
ZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTc5RjFCRjkyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovOyB9
OwogCQk1NzlGMUJGQzIzQzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0aGVudGljYXRpb25Bc3Nl
cnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTc5RjFCRkEyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNz
ZXJ0aW9uUmVzcG9uc2UuaCAqLzsgfTsKQEAgLTM5ODAsNiArMzk4MSw3IEBACiAJCTU3N0ZGNzgz
MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc3RkY3ODQyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlv
blBhbmVsQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzhEQzI5NzIx
NTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbEZvclRlc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjQy
M0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGNTIzQzgwREI2MDBDN0Q0QjQg
LyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDQ0LDYgKzc0NDYsNyBAQAogCQkJCTU3OUYxQkY4
MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCAqLywKIAkJCQk1NzQ3MjhDRjIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oICovLAogCQkJCTU3NDcyOEQwMjM0NTZFOTgwMDE3MDBBRiAvKiBf
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tICovLAorCQkJCTU3OTBBNjUxMjU2NURFNkEwMDc3
QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oICovLAogCQkJCTU3
NDcyOEQzMjM0NTcwQUUwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJu
YWwuaCAqLywKIAkJCQkxQUUyODY3NjFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFT
aXplLmggKi8sCiAJCQkJMUFFMjg2NzUxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRh
U2l6ZS5tbSAqLywKQEAgLTEwODc2LDYgKzEwODc5LDcgQEAKIAkJCQk1NzlGMUJGNjIzQzgwREI2
MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTc5RjFCRjkyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0
NzI4RDEyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0NzI4RDQyMzQ1
NzBBRTAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMjg2NzgxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRh
U2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMjg2ODAxQzdGOTJDMDAwNjlBQzRGIC8qIF9X
S1dlYnNpdGVEYXRhU2l6ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OWVkNjg2NThhMTdjYjJkMWRh
NWUyZGVjMzBiZmZmZGE5NzIzYjE2Li42MTFhZDgyNDNjNjFjZjYxMWU4MmNjOWVhMDVjODdlNjBi
MWU0MmZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTEtMTcgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIEltcGxlbWVudCBTUEkgZm9yIEF1dGhlbnRp
Y2F0aW9uU2VydmljZXMuRnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTg4OTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcxMzY0NzMx
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1t
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICgpOiBEZWxldGVkLgor
CiAyMDIwLTExLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OOiByMjY5NTE0IFJlc2V0IHNlcnZlciBwb3J0IGJlZm9yZSByZXN0YXJ0
aW5nIHdlYnNlcnZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IGE5
NGFiNzg4YmZkMTQ5MDJkNjM3ODVmMjAzZjYxY2U4OWZiNjBkMDQuLmMwMGM5MzJmMDYyNjYzYjVm
NWQ3OWMyNjFhYzMyZWM1ZmEwNWE2M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KQEAgLTMzLDExICszMywxNCBAQAogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2lt
cG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCA8TG9jYWxBdXRo
ZW50aWNhdGlvbi9Mb2NhbEF1dGhlbnRpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVudGFsRmVhdHVyZS5oPgogI2ltcG9ydCA8V2ViS2l0
L19XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JhbmRvbU51bWJlci5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9TZWN1
cml0eVNQSS5oPgpAQCAtMjM3LDYgKzI0MCw3IEBAIC0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgKilwYW5lbAogQGVuZAogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIApAQCAtMTQzMiw2ICsxNDM2LDM1OCBAQCBU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIExBR2V0QXNzZXJ0aW9uTXVsdGlwbGVPcmRlcikK
IAogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspIHx8IFBMQVRGT1JNKElPUykKIAor
VEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zTWluaW11bikKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
IGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5T
KFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJl
eGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBs
ZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQi
XSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHVi
S2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKworICAgIGF1dG8gb3B0aW9u
cyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9j
XSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1
YktleUNyZWRQYXJhbXNdKTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdl
dCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29t
Iik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVD
VF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIu
aWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1j
bXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRp
ZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUs
ICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1z
LnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0u
dHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMGx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24sIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7
CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCwg
ZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlkZW50
aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVu
dGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihp
ZGVudGlmaWVyKV07CisgICAgYXV0byBwYXJhbWV0ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7Cisg
ICAgYXV0byBwYXJhbWV0ZXJzMiA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC0yNTddKTsKKyAgICBhdXRvIGRlc2Ny
aXB0b3IgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2Nd
IGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKworICAgIGF1dG8gcnAgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJleGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNl
ZWQiXSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
cHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQo
KSBdOworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGV4dGVu
c2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRz
IGFsbG9jXSBpbml0XSk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1
c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAg
W29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVu
dGlhbHM6QFsgZGVzY3JpcHRvci5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNh
dG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworICAgIFtvcHRpb25z
IHNldEV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtf
V0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRo
T3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAu
bmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNO
dWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20i
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOwor
ICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlm
aWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0
LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6
OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFs
ZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFscy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3Jl
ZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1Ymxp
Y0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0
b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVz
dWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNp
emVvZihpZGVudGlmaWVyKSksIDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNh
dG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxsb3B0KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVu
dEtleSwgZmFsc2UpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlv
bi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJy
ZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252
ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lv
bnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTEpCit7CisgICAgdWludDhf
dCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEg
Km5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpz
aXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAt
N10pOworICAgIGF1dG8gcGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBh
dXRvIHJwID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10g
aW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8v
d3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFt
cGxlLmNvbSJdOworCisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUu
Y29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0p
OworICAgIFt1c2VyIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07
CisKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJL
ZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07
CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkg
cHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGlt
ZW91dDpAMTIwXTsKKworICAgIGF1dG8gdXNiID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0pOworICAgIGF1dG8gbmZjID0g
YWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5z
cG9ydE5GQ10pOworICAgIGF1dG8gaW50ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJX
aXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsKKyAgICBhdXRv
IGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ig
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBbY3JlZGVudGlh
bCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBd
XTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQo
KSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlv
biA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGlu
aXRdKTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNo
bWVudDpfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtXTsKKyAgICBbYXV0aGVudGlj
YXRvclNlbGVjdGlvbiBzZXRSZXF1aXJlUmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGlj
YXRvclNlbGVjdGlvbiBzZXRVc2VyVmVyaWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudFJlcXVpcmVkXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9u
OmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0
YXRpb246X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdF07CisKKyAgICBh
dXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVh
dGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC5ycC5pY29uLCBAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmlkLCAiZXhhbXBsZS5jb20iKTsKKworICAgIEVY
UEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIp
OworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5pY29uLCBAImh0dHBzLy93d3cuZXhh
bXBsZS5jb20vaWNvbi5qcGciKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iu
c2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0
LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAw
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxl
c2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwg
Mmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1
bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNb
MV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmll
cikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5p
ZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAg
IEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgp
LCAzbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5z
cG9ydHNbMF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRy
YW5zcG9ydDo6TmZjKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1sw
XS50cmFuc3BvcnRzWzJdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JB
dHRhY2htZW50LCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNh
dG9yQXR0YWNobWVudDo6UGxhdGZvcm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6RGlyZWN0KTsKK30K
KworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zTWF4aW11bTIpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEg
ZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAg
IGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8gcGFyYW1ldGVy
czIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGlu
aXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5j
b20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBn
Il07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFtcGxlLmNvbSJdOworCisgICAgYXV0byB1
c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBp
bml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRp
ZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIFt1c2VyIHNldEljb246QCJo
dHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisKKyAgICBOU0FycmF5PF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1l
dGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5p
dFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlD
cmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8g
dXNiID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlv
blRyYW5zcG9ydFVTQl0pOworICAgIGF1dG8gbmZjID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQ10pOworICAgIGF1dG8gaW50
ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0
aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtb
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpuc0lkZW50aWZpZXJdKTsKKyAgICBbY3JlZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5n
ZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNs
dWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsK
KworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRoZW50
aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBbYXV0aGVudGljYXRv
clNlbGVjdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudDpfV0tBdXRoZW50aWNhdG9yQXR0
YWNobWVudENyb3NzUGxhdGZvcm1dOyAvLworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNl
dFJlcXVpcmVSZXNpZGVudEtleTpZRVNdOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNl
dFVzZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFn
ZWRdOyAvLworICAgIFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0aGVudGlj
YXRvclNlbGVjdGlvbi5nZXQoKV07CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlvbjpfV0tB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3RdOyAvLworCisgICAgYXV0byBy
ZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25P
cHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1
bHQucnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUu
Y29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2Vy
LmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQi
KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1
bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1
YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6
OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFs
ZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsK
KyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0
b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRz
WzBdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
ZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3Bv
cnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJh
bnNwb3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNo
bWVudCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0
dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3Qp
OworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGlt
ZW91dCkKK3sKKyAgICByZXNldCgpOworCisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICB1aW50OF90IGhhc2hbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywg
MHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgw
MSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgTlNEYXRh
ICpuc0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gp
XTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworCisgICAgYXV0byBy
cCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRX
aXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxl
c2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJK
IEFwcGxlc2VlZCJdKTsKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVycy5nZXQoKSBdOworICAgIGF1
dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVk
UGFyYW1zOnB1YktleUNyZWRQYXJhbXNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6bnNIYXNo
IG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05V
TEwocmVzcG9uc2UpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9t
YWluKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAg
ICB9XTsKKyAgICBVdGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCitU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9uc01pbmltdW4pCit7CisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcmVzdWx0
ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25z
V2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVv
dXQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwSWQuaXNOdWxsKCkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDBsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMt
PmFwcGlkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2ds
ZUxlZ2FjeUFwcGlkU3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW1EZWZhdWx0KQor
eworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRp
ZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRo
SWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5T
KFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7
CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIw
XTsKKyAgICBbb3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0KCkg
XV07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5zaW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAg
IGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJl
cXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRl
bnRpYWxzLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlh
bHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxv
d0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50
aWZpZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW0pCit7
CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsK
KyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlm
aWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgYXV0byBvcHRpb25zID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0p
OworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0
TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRV
U0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0gYWRv
cHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlm
aWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5n
ZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFs
czpAWyBjcmVkZW50aWFsLmdldCgpLCBjcmVkZW50aWFsLmdldCgpIF1dOworCisgICAgW29wdGlv
bnMgc2V0VXNlclZlcmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1
aXJlZF07CisKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisgICAgW2V4dGVuc2lvbnMg
c2V0QXBwaWQ6QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iXTsKKyAgICBbb3B0aW9ucyBz
ZXRFeHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0
aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIw
dSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAybHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmll
cikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRW
ZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNs
dSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
MF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
bGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9y
dHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZCwg
Imh0dHBzLy93d3cuZXhhbXBsZS5jb20vZmlkbyIpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIEdldEFzc2VydGlvblNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAg
IHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAw
eDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0
LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAw
eDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpu
c0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsK
KworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIGdldEFzc2VydGlvbldpdGhIYXNoOm5zSGFzaCBv
cHRpb25zOm9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChy
ZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4p
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414640</attachid>
            <date>2020-11-19 16:46:17 -0800</date>
            <delta_ts>2020-11-20 00:56:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201119164616.patch</filename>
            <type>text/plain</type>
            <size>68276</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5
YTE1MzJkMzJlMy4uOTc5YzMzZmRhZGIxYzc5YTJmNDFmNzc5ZTkzMDVjNWExY2QwYTFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0yOCw2ICsyOCw4IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IFNlcGFy
YXRlIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW50IGludGVyZmFjZXMgaW50byBzZXBhcmF0ZSBmaWxl
cy4KKwogQGNsYXNzIExBQ29udGV4dDsKIEBjbGFzcyBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2Vy
dGlvblJlc3BvbnNlOwogQGNsYXNzIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw7CkBAIC03NSw2
ICs3NywyNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlv
blNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7Cisg
ICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0
dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxh
dGZvcm0sCit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudCkgeworICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVk
LAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlRGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5MTQx
PiBPcHRpbWl6ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBBdXRoZW50aWNhdGlvblNlcnZpY2UuZnJh
bWV3b3JrLgogQHByb3RvY29sIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxEZWxlZ2F0ZSA8TlNP
YmplY3Q+CiAKIEBvcHRpb25hbApAQCAtODcsMTggKzEwOCwxNjkgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2UpIHsKIAogQGVuZAogCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSA6IE5TT2JqZWN0CisKKysgKGluc3Rh
bmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsK
KworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpuYW1lOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWNvbjsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IDogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAo
aW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0
eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBl
KWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5
TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqZGlzcGxheU5hbWU7CisKK0BlbmQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFW
QUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRobTsKKworQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICphbGdvcml0aG07CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8q
IUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50QWxsLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnQgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2
YWx1ZSBpcyBOTy4qLworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50
S2V5OworLyohQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CisKK0BlbmQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIDogTlNPYmplY3QKKworKyAo
aW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5T
X1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRh
ICopaWRlbnRpZmllcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRl
bnRpZmllcjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxO
U051bWJlciAqPiAqdHJhbnNwb3J0czsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNPYmplY3QKKworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXBwaWQ7CisKK0BlbmQKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJm
YWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgOiBOU09iamVjdAorCist
IChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJh
eTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXM7
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eSAqcnA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eSAqdXNlcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXM7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIg
KnRpbWVvdXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVDcmVkZW50aWFsczsK
K0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdG9y
U2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisvKiFAZGlzY3Vzc2lv
biBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
Tm9uZS4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0
cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25z
OworCitAZW5kCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5T
TnVtYmVyICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqcnBJZDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNB
cnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqYWxsb3dDcmVkZW50aWFs
czsKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudFByZWZlcnJlZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOworQHByb3BlcnR5IChudWxs
YWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cyAqZXh0ZW5zaW9uczsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVu
dGljYXRvclJlc3BvbnNlIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBOU0RhdGEgKnJhd0lkOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFk
b25seSwgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpl
eHRlbnNpb25zOworCitAZW5kCisKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNEYXRhICphdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGlj
YXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICph
dXRoZW50aWNhdG9yRGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRh
ICpzaWduYXR1cmU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKnVzZXJIYW5kbGU7CisKK0BlbmQKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgOiBOU09iamVjdAogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdl
YWspIGlkIDxfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGU+IGRlbGVnYXRlOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5
SUQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3Bv
cnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlv
blR5cGUgdHlwZTsKIAogKyAodm9pZCljbGVhckFsbExvY2FsQXV0aGVudGljYXRvckNyZWRlbnRp
YWxzOworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFi
bGU7CiAKKy0gKGluc3RhbmNldHlwZSlpbml0OworCisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzcxNTA5Mzk0PiBBZGRzIENsaWVudERhdGFKU09OLgorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS83MTUwOTQ4NT4gQWRkcyBkZXRhaWxlZCBOU0Vycm9yLgorLSAodm9pZCltYWtlQ3JlZGVudGlh
bFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZv
aWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikp
aGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogLSAodm9pZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4
NDg+IFJlbW92ZSB0aGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgbWV0aG9kLgorQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqcmVseWluZ1BhcnR5SUQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU2V0ICp0cmFuc3BvcnRzOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJBdXRoZW50aWNhdGlvblR5cGUgdHlw
ZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgyN2M5Y2I0MmQ0ODJmNzdhMmFlZGUyMS4uODE5
ZTVkNTc3M2FjODgyMmE5YTIwZDY1MWJjOGNiNjhhNmNjZjdiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwubW0KQEAgLTI3LDEwICsyNywxOTAgQEAKICNpbXBvcnQgIl9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0b3IuaCIK
KyNpbXBvcnQgIkxvY2FsU2VydmljZS5oIgorI2ltcG9ydCAiV0tFcnJvci5oIgogI2ltcG9ydCAi
V2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIgorI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50
aWNhdG9yUmVzcG9uc2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNl
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNhdGlvbkNvbnN0YW50cy5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6KEJPT0wpYXBwaWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
cHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgeworICAgIFJldGFpblB0cjxfV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiBfZXh0ZW5zaW9uczsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KFJldGFp
blB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiYmKWV4dGVuc2lv
bnMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9yYXdJZCA9IHJhd0lkOworICAgIF9leHRlbnNpb25zID0gZXh0ZW5zaW9uczsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMKK3sKKyAgICByZXR1cm4gX2V4dGVuc2lvbnMuZ2V0KCk7
Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25S
ZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQg
ZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91
dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdXRoZW50aWNhdG9yRGF0YTooTlNEYXRhICopYXV0aGVudGlj
YXRvckRhdGEgc2lnbmF0dXJlOihOU0RhdGEgKilzaWduYXR1cmUgdXNlckhhbmRsZTooTlNEYXRh
ICopdXNlckhhbmRsZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpy
YXdJZCBleHRlbnNpb25zOldURk1vdmUoZXh0ZW5zaW9ucyldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9hdXRoZW50aWNhdG9yRGF0YSA9IGF1dGhlbnRpY2F0b3JEYXRhOworICAgIF9z
aWduYXR1cmUgPSBzaWduYXR1cmU7CisgICAgX3VzZXJIYW5kbGUgPSB1c2VySGFuZGxlOworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDoo
TlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdHRlc3RhdGlvbk9iamVjdDooTlNE
YXRhICopYXR0ZXN0YXRpb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoUmF3SWQ6cmF3SWQgZXh0ZW5zaW9uczpXVEZNb3ZlKGV4dGVuc2lvbnMpXSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBfYXR0ZXN0YXRpb25PYmplY3QgPSBhdHRlc3RhdGlvbk9iamVj
dDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0
aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBzZWxmLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50ID0gX1dLQXV0aGVudGljYXRvckF0dGFjaG1l
bnRBbGw7CisgICAgc2VsZi5yZXF1aXJlUmVzaWRlbnRLZXkgPSBOTzsKKyAgICBzZWxmLnVzZXJW
ZXJpZmljYXRpb24gPSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUnA6
KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqKXJwIHVzZXI6KF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxVc2VyRW50aXR5ICopdXNlciBwdWJLZXlDcmVkUGFyYW1zOihOU0FycmF5PF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICopcHViS2V5Q3JlZFBhcmFtcworeworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
c2VsZi5ycCA9IHJwOworICAgIHNlbGYudXNlciA9IHVzZXI7CisgICAgc2VsZi5wdWJLZXlDcmVk
UGFyYW1zID0gcHViS2V5Q3JlZFBhcmFtczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllcgorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
bmFtZSA9IG5hbWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEFsZ29yaXRobTooTlNOdW1iZXIgKilhbGdvcml0aG0KK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYWxnb3Jp
dGhtID0gYWxnb3JpdGhtOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIHNlbGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNT
dHJpbmcgKiluYW1lIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlzcGxheU5hbWU6
KE5TU3RyaW5nICopZGlzcGxheU5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoTmFtZTpuYW1lXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmlkZW50aWZp
ZXIgPSBpZGVudGlmaWVyOworICAgIHNlbGYuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCisKIEBpbXBsZW1lbnRhdGlvbiBfV0tXZWJBdXRo
ZW50aWNhdGlvblBhbmVsIHsKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogICAgIFdlYWtQdHI8V2Vi
S2l0OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiBfY2xpZW50OwpAQCAtMzgsNiArMjE4
LDE3IEBAIEBpbXBsZW1lbnRhdGlvbiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIHsKICNlbmRp
ZgogfQogCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAg
ICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6V2ViQXV0aGVudGljYXRpb25Q
YW5lbD4oc2VsZik7CisjZW5kaWYKKyAgICByZXR1cm4gc2VsZjsKK30KKwogI2lmIEVOQUJMRShX
RUJfQVVUSE4pCiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAtMTM1LDYgKzMyNiwyNTIgQEAgLSAodm9p
ZCljYW5jZWwKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBWZWN0
b3I8dWludDhfdD4gdmVjdG9yRnJvbU5TRGF0YShOU0RhdGEqIGRhdGEpCit7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKChjb25zdCB1aW50OF90KilkYXRh
LmJ5dGVzLCBkYXRhLmxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZv
aWQgZW5jb2RlRW50aXR5KFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnM6OkVudGl0eSYgb3V0cHV0LCBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5KiBpbnB1dCkK
K3sKKyAgICBvdXRwdXQubmFtZSA9IGlucHV0Lm5hbWU7CisgICAgb3V0cHV0Lmljb24gPSBpbnB1
dC5pY29uOworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uczo6UnBFbnRpdHkgcHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5KF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxScEVudGl0eSAqcnBFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcmVzdWx0OworICAgIGVuY29kZUVu
dGl0eShyZXN1bHQsIHJwRW50aXR5KTsKKyAgICByZXN1bHQuaWQgPSBycEVudGl0eS5pZGVudGlm
aWVyOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJFbnRpdHkgcHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkoX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXJFbnRpdHkp
Cit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNl
ckVudGl0eSByZXN1bHQ7CisgICAgZW5jb2RlRW50aXR5KHJlc3VsdCwgdXNlckVudGl0eSk7Cisg
ICAgcmVzdWx0LmlkVmVjdG9yID0gdmVjdG9yRnJvbU5TRGF0YSh1c2VyRW50aXR5LmlkZW50aWZp
ZXIpOworICAgIHJlc3VsdC5kaXNwbGF5TmFtZSA9IHVzZXJFbnRpdHkuZGlzcGxheU5hbWU7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHB1YmxpY0tleUNyZWRlbnRp
YWxQYXJhbWV0ZXJzKE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4g
KnB1YktleUNyZWRQYXJhbXMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHJlc3VsdDsKKyAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShwdWJLZXlDcmVkUGFyYW1zLmNvdW50KTsKKworICAgIGZvciAo
X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKnBhcmFtIDogcHViS2V5Q3JlZFBhcmFt
cykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXksIHBhcmFtLmFsZ29yaXRobS5sb25nTG9uZ1ZhbHVlIH0p
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQgYXV0aGVudGljYXRvclRyYW5zcG9ydChfV0tXZWJBdXRoZW50aWNhdGlvblRy
YW5zcG9ydCB0cmFuc3BvcnQpCit7CisgICAgc3dpdGNoICh0cmFuc3BvcnQpIHsKKyAgICBjYXNl
IF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOworICAgIGNhc2UgX1dLV2ViQXV0aGVudGlj
YXRpb25UcmFuc3BvcnRORkM6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9y
VHJhbnNwb3J0OjpOZmM7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydElu
dGVybmFsOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6
SW50ZXJuYWw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2I7CisgICAg
fQorfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+IGF1
dGhlbnRpY2F0b3JUcmFuc3BvcnRzKE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9ydHMpCit7
CisgICAgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+IHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0cmFuc3BvcnRzLmNvdW50KTsKKworICAg
IGZvciAoTlNOdW1iZXIgKnRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpCisgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoYXV0aGVudGljYXRvclRyYW5zcG9ydCgoX1dLV2ViQXV0aGVudGljYXRp
b25UcmFuc3BvcnQpdHJhbnNwb3J0LmludFZhbHVlKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
PiBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMoTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvciAqPiAqY3JlZGVudGlhbHMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoY3JlZGVudGlhbHMuY291bnQpOworCisgICAgZm9yIChfV0tQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA6IGNyZWRlbnRpYWxzKQorICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bFR5cGU6OlB1YmxpY0tleSwgeyB9LCB2ZWN0b3JGcm9tTlNEYXRhKGNyZWRlbnRpYWwuaWRlbnRp
ZmllciksIGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKGNyZWRlbnRpYWwudHJhbnNwb3J0cykgfSk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ+
IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF0dGFj
aG1lbnQpCit7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBfV0tBdXRoZW50
aWNhdG9yQXR0YWNobWVudEFsbDoKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBj
YXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm06CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9y
QXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgY2FzZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVu
dENyb3NzUGxhdGZvcm06CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jvc3NQbGF0Zm9y
bTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpVc2VyVmVy
aWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbihfV0tVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQgdXYpCit7CisgICAgc3dpdGNoICh1dikgeworICAgIGNhc2UgX1dLVXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOworICAgIGNhc2UgX1dLVXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7CisgICAgY2FzZSBfV0tVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQ7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAgICB9Cit9CisKK3N0
YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50
aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKF9X
S0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGljYXRvclNlbGVjdGlvbikK
K3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgcmVzdWx0OworICAgIHJlc3VsdC5hdXRoZW50aWNh
dG9yQXR0YWNobWVudCA9IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KGF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24uYXV0aGVudGljYXRvckF0dGFjaG1lbnQpOworICAgIHJlc3VsdC5yZXF1aXJlUmVzaWRl
bnRLZXkgPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnJlcXVpcmVSZXNpZGVudEtleTsKKyAgICBy
ZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJpZmljYXRpb24oYXV0aGVudGljYXRvclNl
bGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIGF0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2UoX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSBh
dHRlc3RhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGF0dGVzdGF0aW9uKSB7CisgICAgY2FzZSBfV0tB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9uZToKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7CisgICAgY2FzZSBfV0tB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3Q6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpJbmRpcmVjdDsKKyAgICBj
YXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3Q6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3Q7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lOworICAgIH0K
K30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cyBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoX1dLQXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zKQoreworICAgIFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGlk
ID0gZXh0ZW5zaW9ucy5hcHBpZDsKKyAgICByZXN1bHQuZ29vZ2xlTGVnYWN5QXBwaWRTdXBwb3J0
ID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKysgKFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNyZWF0aW9u
T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
ICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICByZXN1bHQucnAgPSBw
dWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkob3B0aW9ucy5ycCk7CisgICAgcmVzdWx0LnVzZXIg
PSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eShvcHRpb25zLnVzZXIpOworCisgICAgcmVz
dWx0LnB1YktleUNyZWRQYXJhbXMgPSBwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyhvcHRp
b25zLnB1YktleUNyZWRQYXJhbXMpOworCisgICAgaWYgKG9wdGlvbnMudGltZW91dCkKKyAgICAg
ICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5zaWduZWRJbnRWYWx1ZTsKKyAg
ICBpZiAob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAgICAgIHJlc3VsdC5leGNsdWRl
Q3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMob3B0aW9ucy5leGNs
dWRlQ3JlZGVudGlhbHMpOworICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24p
CisgICAgICAgIHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYXV0aGVudGljYXRvclNl
bGVjdGlvbkNyaXRlcmlhKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbik7CisgICAgcmVz
dWx0LmF0dGVzdGF0aW9uID0gYXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZShvcHRpb25z
LmF0dGVzdGF0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9IGF1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMpOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKK3N0YXRpYyBSZXRhaW5Q
dHI8X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2U+IHdrQXV0aGVudGljYXRvckF0
dGVzdGF0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlRGF0
YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5z
aW9uczpuaWwgYXR0ZXN0YXRpb25PYmplY3Q6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmRhdGEuYXR0
ZXN0YXRpb25PYmplY3QtPmRhdGEoKSBsZW5ndGg6ZGF0YS5hdHRlc3RhdGlvbk9iamVjdC0+Ynl0
ZUxlbmd0aCgpXV0pOworfQorI2VuZGlmCisKKy0gKHZvaWQpbWFrZUNyZWRlbnRpYWxXaXRoSGFz
aDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGlj
YXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyCit7CisjaWYgRU5B
QkxFKFdFQl9BVVRITikKKyAgICBhdXRvIGNhbGxiYWNrID0gW2hhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoaGFuZGxlcildIChWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+
LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIFdU
Rjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JS
ZXNwb25zZT4mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBoYW5kbGVyKHdrQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSkuZ2V0KCksIG5pbCk7CisgICAg
ICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsKKyAg
ICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRv
bWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEoaGFzaCks
IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNX
aXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblBh
bmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgV1RGOjpudWxsb3B0LCB7IH0sIHRydWUs
IFN0cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKKyNlbmRpZgorfQorCisrIChXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29udmVydFRvQ29yZVJlcXVlc3RP
cHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAq
KW9wdGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBpZiAob3B0aW9ucy50aW1l
b3V0KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91dC51bnNpZ25lZElu
dFZhbHVlOworICAgIGlmIChvcHRpb25zLnJwSWQpCisgICAgICAgIHJlc3VsdC5ycElkID0gb3B0
aW9ucy5ycElkOworICAgIGlmIChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpCisgICAgICAgIHJl
c3VsdC5hbGxvd0NyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKG9w
dGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisgICAgcmVzdWx0LnVzZXJWZXJpZmljYXRpb24gPSB1
c2VyVmVyaWZpY2F0aW9uKG9wdGlvbnMudXNlclZlcmlmaWNhdGlvbik7CisgICAgcmVzdWx0LmV4
dGVuc2lvbnMgPSBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMob3B0aW9ucy5l
eHRlbnNpb25zKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJM
RShXRUJfQVVUSE4pCitzdGF0aWMgUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25S
ZXNwb25zZT4gd2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBSZXRhaW5QdHI8X1dLQXV0
aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4gZXh0ZW5zaW9uczsKKyAgICBpZiAo
ZGF0YS5hcHBpZCkKKyAgICAgICAgZXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIGFsbG9jXSBpbml0V2l0aEFwcGlkOmRhdGEuYXBw
aWQudmFsdWUoKV0pOworCisgICAgTlNEYXRhICp1c2VySGFuZGxlID0gbmlsOworICAgIGlmIChk
YXRhLnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJIYW5kbGUgPSBbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVuZ3RoOmRhdGEudXNlckhhbmRsZS0+Ynl0ZUxl
bmd0aCgpXTsKKworICAgIHJldHVybiBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRh
LnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5zaW9u
czpXVEZNb3ZlKGV4dGVuc2lvbnMpIGF1dGhlbnRpY2F0b3JEYXRhOltOU0RhdGEgZGF0YVdpdGhC
eXRlczpkYXRhLmF1dGhlbnRpY2F0b3JEYXRhLT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXV0aGVudGlj
YXRvckRhdGEtPmJ5dGVMZW5ndGgoKV0gc2lnbmF0dXJlOltOU0RhdGEgZGF0YVdpdGhCeXRlczpk
YXRhLnNpZ25hdHVyZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnNpZ25hdHVyZS0+Ynl0ZUxlbmd0aCgp
XSB1c2VySGFuZGxlOnVzZXJIYW5kbGVdKTsKK30KKyNlbmRpZgorCistICh2b2lkKWdldEFzc2Vy
dGlvbldpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9X
S0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sK
KyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1h
a2VCbG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JS
ZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSkuZ2V0KCksIG5pbCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tF
cnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9
KTsKKyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEo
aGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwg
dHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKEJP
T0wpaXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlCit7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKKyAgICByZXR1cm4gV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZh
aWxhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCiAjaWYgRU5BQkxF
KFdFQl9BVVRITikKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlv
bgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE5YjhiN2Y3MjI5NTZkMDVjMGEwMTIxMGE1Y2JkYWI2NGZmNjRlZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbEZvclRlc3RpbmcuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnM7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOworfQorCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tUZXN0aW5nKQorCisvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzcxNTA5NzE0PiBJbnRyb2R1Y2VzIG1vY2sgdGVzdGluZy4KKysgKFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNy
ZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zICopb3B0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zKWNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVx
dWVzdERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYxMjVjNmUyMzYxYmQy
N2RmYjU4MDIyYmRjMTcyNGQ5Li5kMzg2MzdlNjY4NzI3NDAzMjc4NTZlODkyOTI3ODIyMjRjZDEy
Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCkBA
IC00NSwxMSArNDUsMTQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFdlYkF1dGhlbnRp
Y2F0aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoOwogICAgIFZhcmlh
bnQ8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOworCisgICAgLy8gRklY
TUU8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIGZpZWxkcy4KICAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gcGFnZTsKICAgICBXZWJBdXRo
ZW50aWNhdGlvblBhbmVsUmVzdWx0IHBhbmVsUmVzdWx0IHsgV2ViQXV0aGVudGljYXRpb25QYW5l
bFJlc3VsdDo6VW5hdmFpbGFibGUgfTsKICAgICBSZWZQdHI8QVBJOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsPiBwYW5lbDsKICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6Okdsb2JhbEZyYW1lSWRl
bnRpZmllcj4gZnJhbWVJRDsKICAgICBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvOwor
CiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAgICAgU3RyaW5nIGNhY2hlZFBpbjsg
Ly8gT25seSB1c2VkIHRvIGltcHJvdmUgTkZDIENsaWVudCBQSU4gZXhwZXJpZW5jZS4KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
OGQyNGE0YjgwNTkzMDliN2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVlLi40ZTBkMDVlZjdiMjdlNDFl
YzdjY2UzNGQ5OTg1ZTk0Y2M1NzFlMWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjYsNiArMTEyNiw3IEBACiAJCTU3N0ZGNzgy
MjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzdGRjc4MTIzNDZF
ODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovOyB9Owog
CQk1NzdGRjc4NTIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3
ODMyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsg
fTsKIAkJNTc4REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0
TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4
REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICov
OyB9OworCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3OTBBNjUxMjU2NURFNkEwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsRm9yVGVzdGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTU3OUYxQkY2MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlv
bkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzlGMUJGNDIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRp
b25Bc3NlcnRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNTc5
RjFCRkMyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVz
cG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
OUYxQkZBMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJl
c3BvbnNlLmggKi87IH07CkBAIC0zOTgwLDYgKzM5ODEsNyBAQAogCQk1NzdGRjc4MzIzNDZFQ0FB
MDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU3N0ZGNzg0MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbENs
aWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc4REMyOTcyMTU1QTAwMTAw
NzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxG
b3JUZXN0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JU
ZXN0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY0MjNDODBEQjYw
MEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjUyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVu
dGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dl
YkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzQ0NCw2ICs3NDQ2LDcgQEAKIAkJCQk1NzlGMUJGODIzQzgwRUM2
MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFs
LmggKi8sCiAJCQkJNTc0NzI4Q0YyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwuaCAqLywKIAkJCQk1NzQ3MjhEMDIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbSAqLywKKwkJCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyog
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLywKIAkJCQk1NzQ3MjhEMzIz
NDU3MEFFMDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggKi8s
CiAJCQkJMUFFMjg2NzYxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oICov
LAogCQkJCTFBRTI4Njc1MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUubW0g
Ki8sCkBAIC0xMDg3Niw2ICsxMDg3OSw3IEBACiAJCQkJNTc5RjFCRjYyM0M4MERCNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFz
c2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQxMjM0
NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3NDcyOEQ0MjM0NTcwQUUwMDE3
MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTI4Njc4MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRTI4NjgwMUM3RjkyQzAwMDY5QUM0RiAvKiBfV0tXZWJzaXRl
RGF0YVNpemVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4YTE3Y2IyZDFkYTVlMmRlYzMw
YmZmZmRhOTcyM2IxNi4uNjExYWQ4MjQzYzYxY2Y2MTFlODJjYzllYTA1Yzg3ZTYwYjFlNDJmZiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNl
cnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0x
MS0xMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTjogcjI2OTUxNCBSZXNldCBzZXJ2ZXIgcG9ydCBiZWZvcmUgcmVzdGFydGluZyB3ZWJz
ZXJ2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRleCBhOTRhYjc4OGJm
ZDE0OTAyZDYzNzg1ZjIwM2Y2MWNlODlmYjYwZDA0Li5jMDBjOTMyZjA2MjY2M2I1ZjVkNzljMjYx
YWMzMmVjNWZhMDVhNjNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBA
IC0zMywxMSArMzMsMTQgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldL
V2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExvY2FsQXV0aGVudGljYXRp
b24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJB
dXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEku
aD4KQEAgLTIzNyw2ICsyNDAsNyBAQCAtIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICopcGFu
ZWwKIEBlbmQKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTE0MzIsNiArMTQzNiwzNTggQEAgVEVTVChXZWJB
dXRoZW50aWNhdGlvblBhbmVsLCBMQUdldEFzc2VydGlvbk11bHRpcGxlT3JkZXIpCiAKICNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSB8fCBQTEFURk9STShJT1MpCiAKK1RFU1QoV2Vi
QXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01p
bmltdW4pCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRl
czppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5j
b20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxV
c2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBp
ZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAg
IE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQ
YXJhbXMgPSBAWyBwYXJhbWV0ZXJzLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdp
dGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVk
UGFyYW1zXSk7CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAg
IEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2Vy
Lm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9y
LnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3Vs
dC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwg
MCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBs
ZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCks
IDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQudGltZW91dCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50
aWNhdG9yU2VsZWN0aW9uLCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0
ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOworICAgIEVY
UEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsK
K30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zTWF4aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10g
PSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmll
cildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8g
cGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisgICAgYXV0byBkZXNjcmlwdG9yID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBs
ZS5jb20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRp
YWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29t
IiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOwor
ICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNy
ZWRQYXJhbXMgPSBAWyBwYXJhbWV0ZXJzMS5nZXQoKSwgcGFyYW1ldGVyczIuZ2V0KCkgXTsKKyAg
ICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBleHRlbnNpb25zID0g
YWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10g
aW5pdF0pOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2Vy
LmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25z
IHNldFRpbWVvdXQ6QDEyMF07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBb
IGRlc2NyaXB0b3IuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVj
dGlvbjphdXRoZW50aWNhdG9yU2VsZWN0aW9uLmdldCgpXTsKKyAgICBbb3B0aW9ucyBzZXRFeHRl
bnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6
b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJl
eGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAg
RVhQRUNUX1RSVUUocmVzdWx0LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBF
Q1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6
ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRp
c3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5
Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHMuc2l6ZSgpLCAxbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxz
WzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRl
bnRpZmllcikpLCAwKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVj
dGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXksIGZh
bHNlKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnVzZXJW
ZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2U6Ok5vbmUpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBp
ZC5pc051bGwoKSk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc01heGltdW0xKQoreworICAgIHVpbnQ4X3QgaWRlbnRp
ZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50
aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlk
ZW50aWZpZXIpXTsKKyAgICBhdXRvIHBhcmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTI1N10pOworCisgICAgYXV0byBycCA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRo
TmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFt
cGxlLmNvbS9pY29uLmpwZyJdOworICAgIFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5jb20i
XTsKKworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRl
bnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBb
dXNlciBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAg
TlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBh
cmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNy
ZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEy
MF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMo
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNd
KTsKKyAgICBhdXRvIGludGVybmFsID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpf
V0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50
aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBp
bml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJh
bnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAg
W29wdGlvbnMgc2V0RXhjbHVkZUNyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRl
bnRpYWwuZ2V0KCkgXV07CisKKyAgICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9w
dE5TKFtbX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7Cisg
ICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dL
QXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybV07CisgICAgW2F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24gc2V0UmVxdWlyZVJlc2lkZW50S2V5OllFU107CisgICAgW2F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24gc2V0VXNlclZlcmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRS
ZXF1aXJlZF07CisgICAgW29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVjdGlvbjphdXRoZW50
aWNhdG9yU2VsZWN0aW9uLmdldCgpXTsKKworICAgIFtvcHRpb25zIHNldEF0dGVzdGF0aW9uOl9X
S0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3RdOworCisgICAgYXV0byByZXN1
bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRp
b25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
cnAuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC5ycC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwg
c2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlk
VmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
cHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMV0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1
YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywg
LTI1Nyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iu
ZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBd
LCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNw
b3J0c1syXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVu
dCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OlBsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0YXRp
b24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkRpcmVjdCk7Cit9CisKK1RFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
c01heGltdW0yKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAw
eDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIHBh
cmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFs
bG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMyID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFs
Z29yaXRobTpALTI1N10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOwor
ICAgIFtycCBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworICAg
IFtycCBzZXRJZGVudGlmaWVyOkAiZXhhbXBsZS5jb20iXTsKKworICAgIGF1dG8gdXNlciA9IGFk
b3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhO
YW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlz
cGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBbdXNlciBzZXRJY29uOkAiaHR0cHMvL3d3
dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMxLmdl
dCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6
cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFt
c10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFk
b3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3Bv
cnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0g
YWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5z
cG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVu
dGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5m
Yy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhjbHVkZUNyZWRl
bnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBh
dXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvclNl
bGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rp
b24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRD
cm9zc1BsYXRmb3JtXTsgLy8KKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRSZXF1aXJl
UmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRVc2VyVmVy
aWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2VkXTsgLy8K
KyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246X1dLQXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0XTsgLy8KKworICAgIGF1dG8gcmVzdWx0ID0g
W19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dp
dGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5y
cC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmlj
b24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29u
LmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVv
ZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rv
ci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVD
VF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVY
UEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVk
ZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQ
RUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEo
KSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0
aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
Ml0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50
OjpDcm9zc1BsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxl
Y3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
dXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0ZXN0
YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0KTsKK30KKwor
VEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQSVRpbWVvdXQpCit7
CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAy
LCAweDAzLCAweDA0IH07CisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpp
ZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIE5TRGF0YSAqbnNIYXNo
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJleGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhh
bXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNl
ZWQiXSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
cHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBhcmFtZXRlcnMuZ2V0KCkgXTsKKyAgICBhdXRvIG9wdGlv
bnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxv
Y10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpw
dWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAg
IGF1dG8gcGFuZWwgPSBhZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10g
aW5pdF0pOworICAgIFtwYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm5zSGFzaCBvcHRpb25z
Om9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXR0ZXN0
YXRpb25SZXNwb25zZSAqcmVzcG9uc2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHdlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSYW4gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9OVUxMKHJlc3Bv
bnNlKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7Cisg
ICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgfV07Cisg
ICAgVXRpbDo6cnVuKCZ3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuKTsKK30KKworVEVTVChXZWJB
dXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNaW5p
bXVuKQoreworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRp
b25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCBXVEY6
Om51bGxvcHQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycElkLmlzTnVsbCgpKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAwbHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
OjpQcmVmZXJyZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5p
c051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lB
cHBpZFN1cHBvcnQsIGZhbHNlKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1
aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5T
RGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVu
Z3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZp
ZXI6bnNJZGVudGlmaWVyXSk7CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworCisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyBhbGxvY10gaW5pdF0pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisgICAg
W29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFsczpAWyBkZXNjcmlwdG9yLmdldCgpIF1dOworICAg
IFtvcHRpb25zIHNldEV4dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJl
c3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50
aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5z
aXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5
cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVv
ZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuYWxsb3dDcmVkZW50
aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSks
IDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4
dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBh
bmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNNYXhpbXVtKQoreworICAgIHVp
bnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNE
YXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5n
dGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBb
b3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgYXV0byB1c2IgPSBhZG9wdE5TKFtOU051
bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXSk7Cisg
ICAgYXV0byBuZmMgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhl
bnRpY2F0aW9uVHJhbnNwb3J0TkZDXSk7CisgICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0TlMoW05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5h
bF0pOworICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllcl0pOwor
ICAgIFtjcmVkZW50aWFsIHNldFRyYW5zcG9ydHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0KCksIGlu
dGVybmFsLmdldCgpIF1dOworICAgIFtvcHRpb25zIHNldEFsbG93Q3JlZGVudGlhbHM6QFsgY3Jl
ZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIFtvcHRpb25zIHNldFVz
ZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWRdOwor
CisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudElucHV0cyBhbGxvY10gaW5pdF0pOworICAgIFtleHRlbnNpb25zIHNldEFwcGlk
OkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9maWRvIl07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5z
aW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0
aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxv
d0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAg
ICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRh
dGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgpLCAzbHUpOworICAg
IEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVk
ZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzJdLCBB
dXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UmVxdWlyZWQp
OworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQsICJodHRwcy8v
d3d3LmV4YW1wbGUuY29tL2ZpZG8iKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVs
LCBHZXRBc3NlcnRpb25TUElUaW1lb3V0KQoreworICAgIHJlc2V0KCk7CisKKyAgICB1aW50OF90
IGhhc2hbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw
NCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNIYXNoID0g
W05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07CisKKyAgICBh
dXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAg
IGF1dG8gcGFuZWwgPSBhZG9wdE5TKFtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBhbGxvY10g
aW5pdF0pOworICAgIFtwYW5lbCBnZXRBc3NlcnRpb25XaXRoSGFzaDpuc0hhc2ggb3B0aW9uczpv
cHRpb25zLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgd2ViQXV0aGVu
dGljYXRpb25QYW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05VTEwocmVzcG9uc2Up
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9tYWluKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAgICB9XTsKKyAgICBV
dGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414661</attachid>
            <date>2020-11-20 00:56:16 -0800</date>
            <delta_ts>2020-11-20 12:03:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201120005615.patch</filename>
            <type>text/plain</type>
            <size>149716</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmExZGUyY2U3NjQxZTg4YzU5YTBiYWUyMGEwNDJkYTdiNGI2YTQyMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgor
CitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkK
K0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNP
YmplY3QKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
YXBwaWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50SW5wdXRzLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDM3NWM0
ODc1NTExZDg4ZjkzODI2NzViOTRjOTY2NjQ2OWZhNzAyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudElucHV0cy5tbQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1
dHMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRPdXRwdXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTgyNGI3OWU5ZDg1NjAwZGFlYWQ0Nzg2ZjU4YmZmODA4
ZGIwZGE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tG
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19B
U1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzAxNzFmZmJmMzU0M2MwNzcwNTk5ZGExNDM3YTc1MWUxOGE0YWEyNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6
KEJPT0wpYXBwaWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9hcHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQor
CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0c0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTc1NWM2YjMxODU0NDYyZjJmZDZlNmY2
ODI2N2Y1ZTFiMDVmOTcwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzSW50
ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCIKKworTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzICgpCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFwcGlkOihC
T09MKWFwcGlkOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBc3NlcnRp
b25SZXNwb25zZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhl
bnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhZWY3MDkxYjUyYTJjOGNj
YmE3MjU3NzFiY2NmMTE5MTdlZWI0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxX
ZWJLaXQvX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JF
R0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgOiBfV0tB
dXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdlOGNmYWVhY2I5NGI1YjY1NmE0YWM5YTM5OTgwZGE4YzVlYzc1ZTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFz
c2VydGlvblJlc3BvbnNlLm1tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5o
IgorCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgi
CisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oIgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKily
YXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF1dGhlbnRpY2F0b3JEYXRhOihOU0RhdGEgKilhdXRo
ZW50aWNhdG9yRGF0YSBzaWduYXR1cmU6KE5TRGF0YSAqKXNpZ25hdHVyZSB1c2VySGFuZGxlOihO
U0RhdGEgKil1c2VySGFuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFJh
d0lkOnJhd0lkIGV4dGVuc2lvbnM6V1RGTW92ZShleHRlbnNpb25zKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX2F1dGhlbnRpY2F0b3JEYXRhID0gYXV0aGVudGljYXRvckRhdGE7Cisg
ICAgX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKKyAgICBfdXNlckhhbmRsZSA9IHVzZXJIYW5kbGU7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRl
cm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I4MWU1N2UzNTgyNTVh
NjkyMDgwMjYyYmUzMDNiNjQ3NTMyM2VmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJ
bnRlcm5hbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2ltcG9ydCAiX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmgiCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAoKQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdXRoZW50aWNhdG9y
RGF0YTooTlNEYXRhICopYXV0aGVudGljYXRvckRhdGEgc2lnbmF0dXJlOihOU0RhdGEgKilzaWdu
YXR1cmUgdXNlckhhbmRsZTooTlNEYXRhICopdXNlckhhbmRsZTsKKworQGVuZAorCitOU19BU1NV
TUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTUwZjc5ZTY1NjVlZDZjNzk4NDNlNzZlYWJiOWE4NjM0NGFiM2JmZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JS
ZXNwb25zZS5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UK
KworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF0dGVzdGF0aW9uT2Jq
ZWN0OworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRp
Y2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NmY5MmE1YTBkMzZkNzI0
NmNjYTg1ODgyZDgwZDY2MDA2MjcwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2Uu
bW0KQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCIKKworI2ltcG9ydCAi
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oIgorI2ltcG9ydCAiX1dL
QXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKilyYXdJZCBleHRlbnNp
b25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4m
JilleHRlbnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNp
b25zOldURk1vdmUoZXh0ZW5zaW9ucyldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
dHRlc3RhdGlvbk9iamVjdCA9IGF0dGVzdGF0aW9uT2JqZWN0OworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlSW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTE4OTRhZGMyMjZmOGQ5OGE0OTc1YzAwOWI1OGRk
ZGM5ZWQ2YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwuaApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIl9XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlICgpCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihO
U0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0Rh
dGEgKilhdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
dXRoZW50aWNhdG9yUmVzcG9uc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGNkNzEyNmFmNGZlOGIzN2RjZjcz
N2QyMGZjZWIwN2M0YWQ1OTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KKworQGNsYXNzIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dE91dHB1dHM7CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVj
dAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJv
cGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MzU4ODRiMjQ0OTc4MmJiNTdkMmVjZTNhZWQwMmFkMmJkMWVkOGIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNw
b25zZS5tbQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgiCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9u
c2UgeworICAgIFJldGFpblB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzPiBfZXh0ZW5zaW9uczsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5T
RGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KFJldGFpblB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzPiYmKWV4dGVuc2lvbnMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9yYXdJZCA9IHJhd0lkOwor
ICAgIF9leHRlbnNpb25zID0gZXh0ZW5zaW9uczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMKK3sK
KyAgICByZXR1cm4gX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJ
bnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRp
Y2F0b3JSZXNwb25zZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQzOTI2MzlhNzk2NGE1MmJiMjJi
ZWU1MDZmZDllNmQ5YTRjYjQyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiX1dLQXV0
aGVudGljYXRvclJlc3BvbnNlLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZSAoKQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9u
czooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYp
ZXh0ZW5zaW9uczsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yU2VsZWN0
aW9uQ3JpdGVyaWEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2Y3MTU0N2VkZWM4NGQ0
YzU2ZTA3MzM3NDBjMGU4MWFmYWY4OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5o
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaD4KKwor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
QXV0aGVudGljYXRvckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVu
dEFsbCwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAorICAgIF9XS0F1
dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworV0tfQ0xBU1NfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhl
bnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8qIUBkaXNjdXNzaW9uIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsLiovCitAcHJv
cGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXV0aGVudGljYXRv
ckF0dGFjaG1lbnQ7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOTy4qLwor
QHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50S2V5OworLyohQGRpc2N1
c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0
aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44OGQwNDNkZTUwNzQ3NmMwNDdiYTgzYzg4MDJmYWRkMDdkYzg3ODFiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JT
ZWxlY3Rpb25Dcml0ZXJpYS5tbQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEu
aCIKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYQor
CistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hdXRoZW50aWNhdG9yQXR0YWNobWVu
dCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsOworICAgIHNlbGYucmVxdWlyZVJlc2lk
ZW50S2V5ID0gTk87CisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZmJhMWQyZWNiZmI5ODAxNGE1N2RmNDZjODRhODc2OTI3NzVmN2VkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0Bj
bGFzcyBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHM7CitAY2xhc3MgX1dL
QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxEZXNjcmlwdG9yOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
OworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eTsKK0BjbGFzcyBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgeworICAgIF9XS0F0dGVzdGF0aW9u
Q29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVBy
ZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
RGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cyA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChp
bnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFJwOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJheTxf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXM7CisK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eSAqcnA7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsVXNlckVudGl0eSAqdXNlcjsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJh
bXM7CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKnRp
bWVvdXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8X1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmV4Y2x1ZGVDcmVkZW50aWFsczsKK0Bw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb247CisvKiFAZGlzY3Vzc2lvbiBU
aGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9u
ZS4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZl
cmVuY2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9u
ZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOwor
CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGVlYTVhN2U5MjE1ZGFjZGI4
NjkxMTFmYjAyYjBlMjE2OTI5NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
bW0KQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIgorCisjaW1wb3J0
ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxVc2VyRW50aXR5LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJwOihf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgKilycCB1c2VyOihfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsVXNlckVudGl0eSAqKXVzZXIgcHViS2V5Q3JlZFBhcmFtczooTlNBcnJheTxfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqKXB1YktleUNyZWRQYXJhbXMKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNl
bGYucnAgPSBycDsKKyAgICBzZWxmLnVzZXIgPSB1c2VyOworICAgIHNlbGYucHViS2V5Q3JlZFBh
cmFtcyA9IHB1YktleUNyZWRQYXJhbXM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMyOTJjMjY3
ZGJiZWZjNGQwMTkzOThkMzRjYzA5NjJlMjIwYTViNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvci5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lt
cG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5l
dyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllcjsK
KworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxOU051bWJlciAqPiAqdHJh
bnNwb3J0czsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVz
Y3JpcHRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjIzMmYyZTgwZmM4YzMwN2E5
MmRmODg2MDhiODRkZmFiZmMwYzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
Il9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVudGlmaWVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmlkZW50aWZpZXIg
PSBpZGVudGlmaWVyOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbEVu
dGl0eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxFbnRpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWMwNTZmYjhhMWE0YmVjZDZiODA4YjdjMTY5
M2M5ZDIwZGY5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRp
b24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK05TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IDog
TlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3Rh
bmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFt
ZTooTlNTdHJpbmcgKiluYW1lOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm5hbWU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TU3RyaW5n
ICppY29uOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRp
dHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzBmZmNlNWMzOTFiYjU0NmEwOWU3OTQ4ZmUw
Y2E0YjExYzk3Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkubW0KQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5
Q3JlZGVudGlhbEVudGl0eS5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVu
dGlhbEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5h
bWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYubmFtZSA9IG5hbWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg0Nzlk
YzExNzM4ZjY2MmYzMjhkNjA2MGI1M2RjMWEzYjNkNzNkMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBl
KW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxF
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxnb3JpdGhtOihOU051bWJlciAqKWFsZ29yaXRo
bTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TTnVtYmVyICphbGdvcml0aG07CisK
K0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhjOTZhZWRkM2JlMGFmZWMyOGRkNjE3ODE5Yjc5
YjFjYzU1YjU3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5tbQpAQCAtMCwwICsxLDQw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxnb3JpdGht
OihOU051bWJlciAqKWFsZ29yaXRobQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbGdvcml0aG0gPSBhbGdvcml0aG07
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGQ1YTYxYmMzYjcxYzhlYjQyOWM4ZTg0
M2NjMGZlZTg3NzYyOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0
L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaD4KKworTlNfQVNT
VU1FX05PTk5VTExfQkVHSU4KKworQGNsYXNzIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudElucHV0czsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcjsKKwor
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitA
aW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA6IE5TT2JqZWN0
CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKnRpbWVv
dXQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpycElk
OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICphbGxvd0NyZWRlbnRpYWxzOworLyohQGRpc2N1
c3Npb24gVGhlIGRlZmF1bHQgdmFsdWUgaXMgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
UHJlZmVycmVkLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLVXNlclZlcmlmaWNhdGlvblJl
cXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9t
aWMsIHN0cm9uZykgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRl
bnNpb25zOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI4ZjViODNiYTFi
NDI1MmY0NWU2ZjdkYzhiMTFjZDk2ZWNhZGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnMubW0KQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgiCisKK0Bp
bXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMKKworLSAo
aW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1
YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlODY3
ZmE5ZWQ0Y2M0YTcyOTFjNTIxNTE0OTc5MTNmMDY2NWMxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW1wb3J0IDxXZWJLaXQvX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5oPgorCitOU19BU1NV
TUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50
aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3
IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0
eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisKK0Bl
bmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NzFhNzY3OThkN2YxYWE5ZWQ2OTZmNDhlMjJjOGNmNmNlZTIx
MGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5tbQpAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
cEVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoTmFtZTpuYW1lXSkpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxVc2VyRW50aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBlNGU3YmVkYjgwYjFmOTgzMWVl
OWMyMTc3MjgxNmNhNzkwZWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5oCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0
L19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkuaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVH
SU4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IDogX1dLUHVi
bGljS2V5Q3JlZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxB
QkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaWRlbnRpZmllcjooTlNEYXRh
ICopaWRlbnRpZmllciBkaXNwbGF5TmFtZTooTlNTdHJpbmcgKilkaXNwbGF5TmFtZTsKKworQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TRGF0YSAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqZGlzcGxheU5hbWU7CisKK0BlbmQKKworTlNfQVNT
VU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmQ4YmJiYTM3OWViOTI1ZjVlNDk3NGRmZmRmYWE3N2I4YjY3NjJiZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJs
aWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eS5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJF
bnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGlk
ZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIgZGlzcGxheU5hbWU6KE5TU3RyaW5nICopZGlz
cGxheU5hbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoTmFtZTpuYW1lXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVy
OworICAgIHNlbGYuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmExYWM2Yzg1ODIwZmIzYzhhZjEyNWU4MDU2ZDhmYTYxZGNiNzM1NWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclZlcmlmaWNhdGlv
blJlcXVpcmVtZW50LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudCkgeworICAgIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkLAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25S
ZXF1aXJlbWVudFByZWZlcnJlZCwKKyAgICBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRE
aXNjb3VyYWdlZCwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IDEyMTQ4OWIwZWRmNTIz
ZWMyN2YzYzA4MmEyNWU3OWExNTMyZDMyZTMuLjQ1Y2UyNzI2NjYxNTRhMmJmNWExMGJlODk3MjY2
Y2NiYzFjOGQ4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaApAQCAtMjgsNyArMjgsMTAg
QEAKIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAotQGNsYXNzIExBQ29udGV4dDsKK0BjbGFz
cyBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZTsKK0BjbGFzcyBfV0tBdXRoZW50
aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U7CitAY2xhc3MgX1dLUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnM7CiBAY2xhc3MgX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTsKIEBjbGFz
cyBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsOwogCkBAIC03NSw2ICs3OCw3IEBAIHR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIF9XS1dlYkF1dGhlbnRpY2F0aW9uU291cmNlKSB7CiAgICAgX1dL
V2ViQXV0aGVudGljYXRpb25Tb3VyY2VFeHRlcm5hbCwKIH0gV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAorLy8gRklYTUU6IDxyZGFyOi8vcHJv
YmxlbS83MTUwOTE0MT4gT3B0aW1pemUgdGhlIGRlbGVnYXRlIGZvciB0aGUgQXV0aGVudGljYXRp
b25TZXJ2aWNlLmZyYW1ld29yay4KIEBwcm90b2NvbCBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
RGVsZWdhdGUgPE5TT2JqZWN0PgogCiBAb3B0aW9uYWwKQEAgLTkxLDE0ICs5NSwyMyBAQCBXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRl
cmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCA6IE5TT2JqZWN0CiAKIEBwcm9wZXJ0eSAo
bnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxE
ZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkp
IE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSwgY29weSkgTlNTZXQgKnRyYW5zcG9ydHM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHlwZSB0eXBlOwogCiArICh2b2lkKWNsZWFyQWxsTG9j
YWxBdXRoZW50aWNhdG9yQ3JlZGVudGlhbHM7CisrIChCT09MKWlzVXNlclZlcmlmeWluZ1BsYXRm
b3JtQXV0aGVudGljYXRvckF2YWlsYWJsZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXQ7CiAKKy8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkzOTQ+IEFkZHMgQ2xpZW50RGF0YUpTT04uCisv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5NDg1PiBBZGRzIGRldGFpbGVkIE5TRXJyb3Iu
CistICh2b2lkKW1ha2VDcmVkZW50aWFsV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczoo
X1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlICos
IE5TRXJyb3IgKikpaGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClnZXRBc3NlcnRpb25XaXRoSGFzaDooTlNEYXRhICop
aGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRp
b25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9u
UmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKWNhbmNlbDsKIAorLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gRGVwcmVjYXRlIHRoZSBmb2xsb3dpbmcgcHJvcGVy
dGllcy4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKnJl
bHlpbmdQYXJ0eUlEOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1Nl
dCAqdHJhbnNwb3J0czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLV2ViQXV0
aGVudGljYXRpb25UeXBlIHR5cGU7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDRhZWU2MjllODdiZGU4MTM4MjdjOWNiNDJk
NDgyZjc3YTJhZWRlMjEuLjQ4NTYzYTZlNDkzODJiODFkMDQ0YThkMDVkYzljZTRjYzc0OTc3ZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCkBAIC0yNiw5ICsyNiwyOCBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJuYWwu
aCIKIAorCiAjaW1wb3J0ICJMb2NhbEF1dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkxvY2FsU2Vy
dmljZS5oIgorI2ltcG9ydCAiV0tFcnJvci5oIgogI2ltcG9ydCAiV2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudC5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25z
ZUludGVybmFsLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZUludGVybmFsLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEu
aCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaCIKKyNp
bXBvcnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgiCisjaW1wb3J0ICJfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFs
UnBFbnRpdHkuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lmgi
CisjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9BdXRoZW50aWNhdG9yUmVzcG9uc2VEYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkF1dGhl
bnRpY2F0aW9uQ29uc3RhbnRzLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KIAogQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWwgewpAQCAtMzgsNiArNTcsMTcgQEAgQGltcGxlbWVudGF0aW9uIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgewogI2VuZGlmCiB9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsPihzZWxmKTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxm
OworfQorCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKIAogLSAodm9pZClkZWFsbG9jCkBAIC0xMzUs
NiArMTY1LDI0OCBAQCAtICh2b2lkKWNhbmNlbAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoV0VC
X0FVVEhOKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tTlNEYXRhKE5TRGF0YSog
ZGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQo
KGNvbnN0IHVpbnQ4X3QqKWRhdGEuYnl0ZXMsIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9uczo6UnBFbnRpdHkgcHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5KF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxScEVudGl0eSAqcnBFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcmVzdWx0OworICAgIHJlc3VsdC5uYW1l
ID0gcnBFbnRpdHkubmFtZTsKKyAgICByZXN1bHQuaWNvbiA9IHJwRW50aXR5Lmljb247CisgICAg
cmVzdWx0LmlkID0gcnBFbnRpdHkuaWRlbnRpZmllcjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpV
c2VyRW50aXR5IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5ICp1c2VyRW50aXR5KQoreworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJFbnRpdHkgcmVzdWx0OworICAgIHJlc3VsdC5u
YW1lID0gdXNlckVudGl0eS5uYW1lOworICAgIHJlc3VsdC5pY29uID0gdXNlckVudGl0eS5pY29u
OworICAgIHJlc3VsdC5pZFZlY3RvciA9IHZlY3RvckZyb21OU0RhdGEodXNlckVudGl0eS5pZGVu
dGlmaWVyKTsKKyAgICByZXN1bHQuZGlzcGxheU5hbWUgPSB1c2VyRW50aXR5LmRpc3BsYXlOYW1l
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJzPiBwdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyhOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
ICo+ICpwdWJLZXlDcmVkUGFyYW1zKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJzPiByZXN1bHQ7CisgICAgcmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHViS2V5Q3JlZFBhcmFtcy5jb3VudCk7CisKKyAgICBm
b3IgKF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICpwYXJhbSA6IHB1YktleUNyZWRQ
YXJhbXMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5LCBwYXJhbS5hbGdvcml0aG0ubG9uZ0xvbmdWYWx1
ZSB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0IGF1dGhlbnRpY2F0b3JUcmFuc3BvcnQoX1dLV2ViQXV0aGVudGljYXRp
b25UcmFuc3BvcnQgdHJhbnNwb3J0KQoreworICAgIHN3aXRjaCAodHJhbnNwb3J0KSB7CisgICAg
Y2FzZSBfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQjoKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsKKyAgICBjYXNlIF9XS1dlYkF1dGhl
bnRpY2F0aW9uVHJhbnNwb3J0TkZDOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGlj
YXRvclRyYW5zcG9ydDo6TmZjOworICAgIGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3Bv
cnRJbnRlcm5hbDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3Bv
cnQ6OkludGVybmFsOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOwor
ICAgIH0KK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0
PiBhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyhOU0FycmF5PE5TTnVtYmVyICo+ICp0cmFuc3BvcnRz
KQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHJhbnNwb3J0cy5jb3VudCk7CisK
KyAgICBmb3IgKE5TTnVtYmVyICp0cmFuc3BvcnQgOiB0cmFuc3BvcnRzKQorICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGF1dGhlbnRpY2F0b3JUcmFuc3BvcnQoKF9XS1dlYkF1dGhlbnRp
Y2F0aW9uVHJhbnNwb3J0KXRyYW5zcG9ydC5pbnRWYWx1ZSkpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvcj4gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKE5TQXJyYXk8X1dLUHVibGljS2V5
Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmNyZWRlbnRpYWxzKQoreworICAgIFZlY3RvcjxXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gcmVzdWx0OworICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNyZWRlbnRpYWxzLmNvdW50KTsKKworICAgIGZvciAoX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKmNyZWRlbnRpYWwgOiBjcmVkZW50aWFscykK
KyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxUeXBlOjpQdWJsaWNLZXksIHsgfSwgdmVjdG9yRnJvbU5TRGF0YShjcmVkZW50aWFsLmlk
ZW50aWZpZXIpLCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyhjcmVkZW50aWFsLnRyYW5zcG9ydHMp
IH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2ht
ZW50PiBhdXRoZW50aWNhdG9yQXR0YWNobWVudChfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudCBh
dHRhY2htZW50KQoreworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgX1dLQXV0
aGVudGljYXRvckF0dGFjaG1lbnRBbGw6CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgY2FzZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGlj
YXRvckF0dGFjaG1lbnQ6OlBsYXRmb3JtOworICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFj
aG1lbnRDcm9zc1BsYXRmb3JtOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxh
dGZvcm07CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6VXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb24oX1dLVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50IHV2KQoreworICAgIHN3aXRjaCAodXYpIHsKKyAgICBjYXNlIF9XS1Vz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZDsKKyAgICBjYXNlIF9XS1Vz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIGNhc2UgX1dL
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFnZWQ6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7CisgICAgfQorfQor
CitzdGF0aWMgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0
aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJp
YShfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24pCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6
QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIHJlc3VsdDsKKyAgICByZXN1bHQuYXV0aGVu
dGljYXRvckF0dGFjaG1lbnQgPSBhdXRoZW50aWNhdG9yQXR0YWNobWVudChhdXRoZW50aWNhdG9y
U2VsZWN0aW9uLmF1dGhlbnRpY2F0b3JBdHRhY2htZW50KTsKKyAgICByZXN1bHQucmVxdWlyZVJl
c2lkZW50S2V5ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi5yZXF1aXJlUmVzaWRlbnRLZXk7Cisg
ICAgcmVzdWx0LnVzZXJWZXJpZmljYXRpb24gPSB1c2VyVmVyaWZpY2F0aW9uKGF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24udXNlclZlcmlmaWNhdGlvbik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSBhdHRlc3Rh
dGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlKF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVu
Y2UgYXR0ZXN0YXRpb24pCit7CisgICAgc3dpdGNoIChhdHRlc3RhdGlvbikgeworICAgIGNhc2Ug
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmU6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lOworICAgIGNhc2Ug
X1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0OgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3Q7Cisg
ICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0OgorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6RGlyZWN0
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJ
bnB1dHMgYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKF9XS0F1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9ucykKK3sKKyAgICBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgcmVzdWx0OworICAgIHJlc3VsdC5h
cHBpZCA9IGV4dGVuc2lvbnMuYXBwaWQ7CisgICAgcmVzdWx0Lmdvb2dsZUxlZ2FjeUFwcGlkU3Vw
cG9ydCA9IGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisrIChXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKWNvbnZlcnRUb0NvcmVDcmVh
dGlvbk9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucyAqKW9wdGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zIHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgcmVzdWx0LnJw
ID0gcHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5KG9wdGlvbnMucnApOworICAgIHJlc3VsdC51
c2VyID0gcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkob3B0aW9ucy51c2VyKTsKKworICAg
IHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zID0gcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMo
b3B0aW9ucy5wdWJLZXlDcmVkUGFyYW1zKTsKKworICAgIGlmIChvcHRpb25zLnRpbWVvdXQpCisg
ICAgICAgIHJlc3VsdC50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0LnVuc2lnbmVkSW50VmFsdWU7
CisgICAgaWYgKG9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzKQorICAgICAgICByZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKG9wdGlvbnMu
ZXhjbHVkZUNyZWRlbnRpYWxzKTsKKyAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0
aW9uKQorICAgICAgICByZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGF1dGhlbnRpY2F0
b3JTZWxlY3Rpb25Dcml0ZXJpYShvcHRpb25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pOworICAg
IHJlc3VsdC5hdHRlc3RhdGlvbiA9IGF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2Uob3B0
aW9ucy5hdHRlc3RhdGlvbik7CisgICAgcmVzdWx0LmV4dGVuc2lvbnMgPSBhdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRJbnB1dHMob3B0aW9ucy5leHRlbnNpb25zKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCitzdGF0aWMgUmV0
YWluUHRyPF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlPiB3a0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNwb25z
ZURhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yQXR0
ZXN0YXRpb25SZXNwb25zZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6ZGF0YS5yYXdJZC0+ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lkLT5ieXRlTGVuZ3RoKCldIGV4
dGVuc2lvbnM6bmlsIGF0dGVzdGF0aW9uT2JqZWN0OltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRh
LmF0dGVzdGF0aW9uT2JqZWN0LT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXR0ZXN0YXRpb25PYmplY3Qt
PmJ5dGVMZW5ndGgoKV1dKTsKK30KKyNlbmRpZgorCistICh2b2lkKW1ha2VDcmVkZW50aWFsV2l0
aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhl
bnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlICosIE5TRXJyb3IgKikpaGFuZGxlcgoreworI2lm
IEVOQUJMRShXRUJfQVVUSE4pCisgICAgYXV0byBjYWxsYmFjayA9IFtoYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGhhbmRsZXIpXSAoVmFyaWFudDxSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3Bv
bnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAg
ICBXVEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFJlZjxXZWJDb3JlOjpBdXRoZW50aWNh
dG9yUmVzcG9uc2U+JiByZXNwb25zZSkgeworICAgICAgICAgICAgaGFuZGxlcih3a0F1dGhlbnRp
Y2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKHJlc3BvbnNlLT5kYXRhKCkpLmdldCgpLCBuaWwpOwor
ICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJy
b3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgfSk7
CisgICAgfTsKKyAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3QoeyB2ZWN0b3JGcm9tTlNEYXRhKGhh
c2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRp
b25zV2l0aE9wdGlvbnM6b3B0aW9uc10sIG51bGxwdHIsIFdlYktpdDo6V2ViQXV0aGVudGljYXRp
b25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUsIG51bGxwdHIsIFdURjo6bnVsbG9wdCwgeyB9LCB0
cnVlLCBTdHJpbmcoKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisjZW5kaWYKK30KKworKyAoV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zKWNvbnZlcnRUb0NvcmVSZXF1
ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnMgKilvcHRpb25zCit7CisgICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RP
cHRpb25zIHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgaWYgKG9wdGlvbnMu
dGltZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5zaWdu
ZWRJbnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5ycElkKQorICAgICAgICByZXN1bHQucnBJZCA9
IG9wdGlvbnMucnBJZDsKKyAgICBpZiAob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKQorICAgICAg
ICByZXN1bHQuYWxsb3dDcmVkZW50aWFscyA9IHB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
cyhvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIHJlc3VsdC51c2VyVmVyaWZpY2F0aW9u
ID0gdXNlclZlcmlmaWNhdGlvbihvcHRpb25zLnVzZXJWZXJpZmljYXRpb24pOworICAgIHJlc3Vs
dC5leHRlbnNpb25zID0gYXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKG9wdGlv
bnMuZXh0ZW5zaW9ucyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorc3RhdGljIFJldGFpblB0cjxfV0tBdXRoZW50aWNhdG9yQXNzZXJ0
aW9uUmVzcG9uc2U+IHdrQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEmIGRhdGEpCit7CisgICAgUmV0YWluUHRyPF9X
S0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+IGV4dGVuc2lvbnM7CisgICAg
aWYgKGRhdGEuYXBwaWQpCisgICAgICAgIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVu
dGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyBhbGxvY10gaW5pdFdpdGhBcHBpZDpkYXRh
LmFwcGlkLnZhbHVlKCldKTsKKworICAgIE5TRGF0YSAqdXNlckhhbmRsZSA9IG5pbDsKKyAgICBp
ZiAoZGF0YS51c2VySGFuZGxlKQorICAgICAgICB1c2VySGFuZGxlID0gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEudXNlckhhbmRsZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnVzZXJIYW5kbGUtPmJ5
dGVMZW5ndGgoKV07CisKKyAgICByZXR1cm4gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZSBhbGxvY10gaW5pdFdpdGhSYXdJZDpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
ZGF0YS5yYXdJZC0+ZGF0YSgpIGxlbmd0aDpkYXRhLnJhd0lkLT5ieXRlTGVuZ3RoKCldIGV4dGVu
c2lvbnM6V1RGTW92ZShleHRlbnNpb25zKSBhdXRoZW50aWNhdG9yRGF0YTpbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6ZGF0YS5hdXRoZW50aWNhdG9yRGF0YS0+ZGF0YSgpIGxlbmd0aDpkYXRhLmF1dGhl
bnRpY2F0b3JEYXRhLT5ieXRlTGVuZ3RoKCldIHNpZ25hdHVyZTpbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6ZGF0YS5zaWduYXR1cmUtPmRhdGEoKSBsZW5ndGg6ZGF0YS5zaWduYXR1cmUtPmJ5dGVMZW5n
dGgoKV0gdXNlckhhbmRsZTp1c2VySGFuZGxlXSk7Cit9CisjZW5kaWYKKworLSAodm9pZClnZXRB
c3NlcnRpb25XaXRoSGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVy
Cit7CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBhdXRvIGNhbGxiYWNrID0gW2hhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIChWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNh
dG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgbXV0YWJsZSB7
CisgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1
dGhlbnRpY2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBoYW5kbGVyKHdr
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKHJlc3BvbnNlLT5kYXRhKCkpLmdldCgpLCBu
aWwpOworICAgICAgICB9LCBbJl0oY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYgZXhjZXB0
aW9uKSB7CisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yVW5rbm93biB1c2VySW5mbzpuaWxdKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICBfcGFuZWwtPmhhbmRsZVJlcXVlc3QoeyB2ZWN0b3JGcm9tTlNE
YXRhKGhhc2gpLCBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVz
dE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpXZWJBdXRoZW50
aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgV1RGOjpudWxsb3B0LCB7
IH0sIHRydWUsIFN0cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKKyNlbmRpZgorfQorCisr
IChCT09MKWlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZQorewor
I2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgcmV0dXJuIFdlYktpdDo6TG9jYWxTZXJ2aWNlOjpp
c0F2YWlsYWJsZSgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKK30KKwogI2lmIEVO
QUJMRShXRUJfQVVUSE4pCiAjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50
YXRpb24KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xOWI4YjdmNzIyOTU2ZDA1YzBhMDEyMTBhNWNiZGFiNjRmZjY0ZWViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW1wb3J0ICJfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczsKK30KKwor
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitA
aW50ZXJmYWNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKFdLVGVzdGluZykKKworLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTcxND4gSW50cm9kdWNlcyBtb2NrIHRlc3RpbmcuCisr
IChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKWNvbnZlcnRUb0Nv
cmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyAqKW9wdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKysgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucyljb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczooX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCitAZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKaW5kZXggNmU0MDJmY2RmMTI1YzZlMjM2
MWJkMjdkZmI1ODAyMmJkYzE3MjRkOS4uZDM4NjM3ZTY2ODcyNzQwMzI3ODU2ZTg5MjkyNzgyMjI0
Y2QxMmNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEu
aApAQCAtNDUsMTEgKzQ1LDE0IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBXZWJBdXRo
ZW50aWNhdGlvblJlcXVlc3REYXRhIHsKICAgICBWZWN0b3I8dWludDhfdD4gaGFzaDsKICAgICBW
YXJpYW50PFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMsIFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gb3B0aW9uczsKKworICAgIC8v
IEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PjogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGVw
cmVjYXRlZCBmaWVsZHMuCiAgICAgV2Vha1B0cjxXZWJQYWdlUHJveHk+IHBhZ2U7CiAgICAgV2Vi
QXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCBwYW5lbFJlc3VsdCB7IFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlIH07CiAgICAgUmVmUHRyPEFQSTo6V2ViQXV0aGVudGlj
YXRpb25QYW5lbD4gcGFuZWw7CiAgICAgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpHbG9iYWxGcmFt
ZUlkZW50aWZpZXI+IGZyYW1lSUQ7CiAgICAgV2ViS2l0OjpGcmFtZUluZm9EYXRhIGZyYW1lSW5m
bzsKKwogICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwogICAgIFN0cmluZyBjYWNoZWRQ
aW47IC8vIE9ubHkgdXNlZCB0byBpbXByb3ZlIE5GQyBDbGllbnQgUElOIGV4cGVyaWVuY2UuCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNThkMjRhNGI4MDU5MzA5YjdmOGZiN2I0OTY5Y2Y3ZDY0OWRiYWM1ZS4uYzA5OGM4Y2RjYmFh
NTNkYjk2ZDUzZjE0YmM2NWQ2NmZiZjhlNWZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI2LDYgKzExMjYsMzggQEAKIAkJNTc3
RkY3ODIyMzQ2RTgxQzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3N0ZGNzgx
MjM0NkU4MUMwMDRFREZCOSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi87
IH07CiAJCTU3N0ZGNzg1MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzdGRjc4MzIzNDZFQ0FBMDA0RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5o
ICovOyB9OwogCQk1NzhEQzI5ODIxNTVBMDAyMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlv
blNvZnRMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzhEQzI5NzIxNTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5r
LmggKi87IH07CisJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxGb3JUZXN0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NTYyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxFbnRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3OTBBNjU0MjU2Nzk5REEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
RW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTc5MEE2NTcyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRp
dHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzkw
QTY1NTI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbSAq
LzsgfTsKKwkJNTc5MEE2NUEyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTc5MEE2NTgyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTU3OTBBNjVCMjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzkw
QTY1OTI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5Lm1t
ICovOyB9OworCQk1NzkwQTY1RTI1Njc5QzExMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFVzZXJFbnRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3OTBBNjVDMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
VXNlckVudGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTU3OTBBNjVGMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
VXNlckVudGl0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OTBBNjVEMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eS5tbSAqLzsgfTsKKwkJNTc5MEE2NjIyNTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2MDI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk1NzkwQTY2MzI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzkwQTY2MTI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMubW0gKi87IH07CisJCTU3OTBBNjY2MjU2NzlDRUEwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjY0MjU2NzlDRUEwMDc3QzVBNyAvKiBf
V0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY2NzI1Njc5Q0VBMDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NjUyNTY3OUNFQTAwNzdDNUE3IC8qIF9X
S0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbSAqLzsgfTsKKwkJNTc5MEE2NjkyNTY3
OUUwMDAwNzdDNUE3IC8qIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NjgyNTY3OUUwMDAw
NzdDNUE3IC8qIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjZDMjU2NzlFQjcwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NkEyNTY3OUVCNzAwNzdDNUE3
IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NkQyNTY3OUVCNzAwNzdDNUE3
IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NkIyNTY3OUVCNzAwNzdDNUE3IC8q
IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tICovOyB9OworCQk1NzkwQTY3MDI1
Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2
RTI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5w
dXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTc5MEE2NzEyNTY3OUYxQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudElucHV0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OTBBNjZGMjU2NzlGMUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMubW0gKi87IH07CisJCTU3OTBBNjc0MjU2NzlGNzQwMDc3QzVBNyAvKiBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY3MjI1Njc5Rjc0MDA3N0M1QTcgLyog
X1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjc1MjU2NzlGNzQwMDc3QzVB
NyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NzMyNTY3OUY3NDAwNzdD
NUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMubW0gKi87IH07CisJ
CTU3OTBBNjc4MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3OTBBNjc2MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1NzkwQTY3OTI1NjdBMENEMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTc5MEE2NzcyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5tbSAqLzsgfTsKKwkJNTc5MEE2N0MyNTY3QTEzRTAwNzdDNUE3IC8qIF9X
S0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjdBMjU2N0ExM0UwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2N0QyNTY3QTEzRTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY3QjI1NjdB
MTNFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5t
bSAqLzsgfTsKKwkJNTc5MEE2ODAyNTY3QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JS
ZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc5MEE2N0UyNTY3QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjgx
MjU2N0ExQUMwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY3RjI1NjdBMUFDMDA3
N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tICovOyB9OworCQk1NzkwQTY4NDI1
NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjgyMjU2
N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjg1
MjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjgz
MjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5t
bSAqLzsgfTsKKwkJNTc5MEE2ODgyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JB
c3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc5MEE2ODYyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTU3OTBBNjg5MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzkwQTY4NzI1NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlLm1tICovOyB9OworCQk1NzkwQTY4QjI1NjdBNENDMDA3N0M1QTcgLyogX1dL
QXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjhBMjU2N0E0Q0MwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oICovOyB9OworCQk1NzkwQTY4RDI1NjdCNDQ5MDA3
N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2OEMyNTY3
QjQ0OTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJu
YWwuaCAqLzsgfTsKKwkJNTc5MEE2OEYyNTY3QjRDRjAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY4RTI1NjdCNENGMDA3N0M1QTcgLyogX1dLQXV0aGVu
dGljYXRvckFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKKwkJNTc5MEE2OTEyNTY3
QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc5MEE2OTAyNTY3QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudE91dHB1dHNJbnRlcm5hbC5oICovOyB9OwogCQk1NzlGMUJGNjIzQzgwREI2MDBDN0Q0QjQg
LyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5RjFCRjQyM0M4MERCNjAwQzdENEI0
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzlGMUJGOTIzQzgwRUM2MDBD
N0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGODIz
QzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUlu
dGVybmFsLmggKi87IH07CiAJCTU3OUYxQkZDMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRo
ZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGQTIzQzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0
aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICovOyB9OwpAQCAtMzk4MCw2ICs0MDEyLDM4
IEBACiAJCTU3N0ZGNzgzMjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc3RkY3ODQyMzQ2RUNBQTAwNEVERkI5IC8q
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzhEQzI5NzIxNTVBMDAxMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRM
aW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTc5MEE2NTQyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxF
bnRpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY1NTI1Njc5OURBMDA3N0M1QTcgLyog
X1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU3OTBBNjU4MjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBF
bnRpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjU5MjU2NzlCMjYwMDc3QzVBNyAv
KiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3OTBBNjVDMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsVXNlckVudGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY1RDI1Njc5QzEx
MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NjAyNTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3
OTBBNjYxMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY2NDI1Njc5Q0VBMDA3
N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1NzkwQTY2NTI1Njc5Q0VBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLQXV0aGVudGlj
YXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NzkwQTY2ODI1Njc5RTAwMDA3N0M1QTcgLyogX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY2QTI1Njc5RUI3MDA3N0M1QTcgLyogX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUHVibGlj
S2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTc5MEE2NkIyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2Ny
aXB0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjZFMjU2NzlGMUEw
MDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjZGMjU2NzlGMUEwMDc3QzVBNyAvKiBf
V0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjcyMjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTc5MEE2NzMyNTY3OUY3NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NzkwQTY3NjI1NjdBMENEMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVl
c3RPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3NzI1NjdBMENE
MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3QTI1NjdBMTNFMDA3N0M1QTcg
LyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjdCMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2N0UyNTY3QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhl
bnRpY2F0b3JSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yUmVzcG9u
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2N0YyNTY3QTFBQzAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTc5MEE2ODIyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlv
blJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjgzMjU2N0EyMUUw
MDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY4NjI1NjdBMjhBMDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1NzkwQTY4NzI1NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY4QTI1
NjdBNENDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2OEMyNTY3QjQ0OTAwNzdDNUE3IC8qIF9XS0F1dGhl
bnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dL
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NzkwQTY4RTI1NjdCNENGMDA3N0M1QTcgLyogX1dLQXV0aGVudGlj
YXRvckFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLQXV0aGVu
dGljYXRvckFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTc5MEE2OTAyNTY3QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjQyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGlj
YXRpb25Bc3NlcnRpb25SZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NzlGMUJGNTIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25S
ZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNz
ZXJ0aW9uUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY4
MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25S
ZXNwb25zZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzE2LDYg
KzczODAsMjIgQEAKIAkJCQlGNDQyOTE5MTFGQTU5MTA3MDAyQ0M5M0UgLyogX1dLQXR0YWNobWVu
dC5oICovLAogCQkJCUY0NDI5MTkzMUZBNTkzMTEwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50Lm1t
ICovLAogCQkJCUY0NDI5MTk1MUZBNTk0MkEwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50SW50ZXJu
YWwuaCAqLywKKwkJCQk1NzkwQTY2RTI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmggKi8sCisJCQkJNTc5MEE2NkYyNTY3OUYxQTAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbSAqLywKKwkJ
CQk1NzkwQTY3QTI1NjdBMTNFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cy5oICovLAorCQkJCTU3OTBBNjdCMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tICovLAorCQkJCTU3OTBBNjkw
MjU2N0I1RTAwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzSW50ZXJuYWwuaCAqLywKKwkJCQk1NzkwQTY4NjI1NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmggKi8sCisJCQkJNTc5MEE2ODcyNTY3QTI4QTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5tbSAqLywKKwkJCQk1
NzkwQTY4RTI1NjdCNENGMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3Bv
bnNlSW50ZXJuYWwuaCAqLywKKwkJCQk1NzkwQTY4MjI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCAqLywKKwkJCQk1NzkwQTY4MzI1NjdBMjFF
MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UubW0gKi8sCisJ
CQkJNTc5MEE2OEMyNTY3QjQ0OTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlv
blJlc3BvbnNlSW50ZXJuYWwuaCAqLywKKwkJCQk1NzkwQTY3RTI1NjdBMUFDMDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvclJlc3BvbnNlLmggKi8sCisJCQkJNTc5MEE2N0YyNTY3QTFBQzAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbSAqLywKKwkJCQk1NzkwQTY4QTI1NjdB
NENDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCAqLywKKwkJ
CQk1NzkwQTY2NDI1Njc5Q0VBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNy
aXRlcmlhLmggKi8sCisJCQkJNTc5MEE2NjUyNTY3OUNFQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRp
Y2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbSAqLywKIAkJCQk5OUU3MTRDMTFDMTI0OUU2MDA2NjVC
M0EgLyogX1dLQXV0b21hdGlvbkRlbGVnYXRlLmggKi8sCiAJCQkJOTkwRDI4QTcxQzY0MDRCMDAw
OTg2OTc3IC8qIF9XS0F1dG9tYXRpb25TZXNzaW9uLmggKi8sCiAJCQkJOTkwRDI4QUQxQzY1MTkw
NDAwOTg2OTc3IC8qIF9XS0F1dG9tYXRpb25TZXNzaW9uLm1tICovLApAQCAtNzM4OCw2ICs3NDY4
LDIwIEBACiAJCQkJMUE0M0U4MjgxODhGM0NEQzAwOUU0RDMwIC8qIF9XS1Byb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oICovLAogCQkJCTFBNDNFODI3MTg4RjNDREMwMDlFNEQzMCAvKiBfV0tQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24ubW0gKi8sCiAJCQkJN0M4OUQyRDYxQTZDNkJFNjAwM0E1RkRF
IC8qIF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmggKi8sCisJCQkJNTc5MEE2
NzIyNTY3OUY3NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaCAqLywKKwkJCQk1NzkwQTY3MzI1Njc5Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucy5tbSAqLywKKwkJCQk1NzkwQTY2QTI1Njc5RUI3MDA3N0M1
QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCAqLywKKwkJCQk1NzkwQTY2
QjI1Njc5RUI3MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IubW0g
Ki8sCisJCQkJNTc5MEE2NTQyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxFbnRpdHkuaCAqLywKKwkJCQk1NzkwQTY1NTI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGlj
S2V5Q3JlZGVudGlhbEVudGl0eS5tbSAqLywKKwkJCQk1NzkwQTY2MDI1Njc5Qzg2MDA3N0M1QTcg
LyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCAqLywKKwkJCQk1NzkwQTY2MTI1
Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0gKi8s
CisJCQkJNTc5MEE2NzYyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oICovLAorCQkJCTU3OTBBNjc3MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMubW0gKi8sCisJCQkJNTc5MEE2NTgyNTY3
OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oICovLAorCQkJ
CTU3OTBBNjU5MjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkubW0gKi8sCisJCQkJNTc5MEE2NUMyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxVc2VyRW50aXR5LmggKi8sCisJCQkJNTc5MEE2NUQyNTY3OUMxMTAwNzdDNUE3IC8q
IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lm1tICovLAogCQkJCUE1NUJBODBDMUJB
MTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICov
LAogCQkJCUE1NUJBODBEMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5tbSAqLywKIAkJCQk5OTBFMUUwODIzODRBODhCMDA0NjAyREYgLyogX1dL
UmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJQcml2YXRlLmggKi8sCkBAIC03NDM2LDYg
Kzc1MzAsNyBAQAogCQkJCTJEODc4NjFCMUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVT
aGVldC5oICovLAogCQkJCTJEODc4NjFDMUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVT
aGVldC5tbSAqLywKIAkJCQkyRDg3ODYxRjFCREI1N0Y1MDBEMDJBQkIgLyogX1dLVXNlclN0eWxl
U2hlZXRJbnRlcm5hbC5oICovLAorCQkJCTU3OTBBNjY4MjU2NzlFMDAwMDc3QzVBNyAvKiBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCAqLywKIAkJCQkxQTgxQjM3RjE4QkQ2NkFEMDAw
N0ZEQUMgLyogX1dLVmlzaXRlZExpbmtTdG9yZS5oICovLAogCQkJCTFBODFCMzdFMThCRDY2QUQw
MDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlLm1tICovLAogCQkJCTFBODFCMzg0MThCRDY3
M0EwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCAqLywKQEAgLTc0NDQs
NiArNzUzOSw3IEBACiAJCQkJNTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhl
bnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovLAogCQkJCTU3NDcyOENGMjM0
NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggKi8sCiAJCQkJNTc0
NzI4RDAyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gKi8s
CisJCQkJNTc5MEE2NTEyNTY1REU2QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxGb3JUZXN0aW5nLmggKi8sCiAJCQkJNTc0NzI4RDMyMzQ1NzBBRTAwMTcwMEFGIC8qIF9XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oICovLAogCQkJCTFBRTI4Njc2MUM3RTc2NTEw
MDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUuaCAqLywKIAkJCQkxQUUyODY3NTFDN0U3NjUx
MDA2OUFDNEYgLyogX1dLV2Vic2l0ZURhdGFTaXplLm1tICovLApAQCAtMTA3NzUsNiArMTA4NzEs
MTYgQEAKIAkJCQk2MzEwOEY5OTFGOTY3MUY3MDBBMERCODQgLyogX1dLQXBwbGljYXRpb25NYW5p
ZmVzdEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDQyOTE5MjFGQTU5MUM5MDAyQ0M5
M0UgLyogX1dLQXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ0MjkxOTYxRkE1OTQy
QTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTc5MEE2NzAyNTY3OUYxQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudElucHV0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2N0MyNTY3QTEzRTAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTU3OTBBNjkxMjU2N0I1RTAwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4
dGVuc2lvbnNDbGllbnRPdXRwdXRzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBB
Njg4MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjhGMjU2N0I0Q0YwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTc5MEE2ODQyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY4RDI1NjdCNDQ5MDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTc5MEE2ODAyNTY3QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNw
b25zZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2OEIyNTY3QTRDQzAwNzdDNUE3IC8qIF9X
S0F1dGhlbnRpY2F0b3JSZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Nzkw
QTY2NjI1Njc5Q0VBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlh
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyogX1dLQXV0
b21hdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBEMjhBQjFDNjQyMEM2MDA5
ODY5NzcgLyogX1dLQXV0b21hdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Nzg4
QUNCMUY0MjFEREEwMEMwODAwMCAvKiBfV0tBdXRvbWF0aW9uU2Vzc2lvbkNvbmZpZ3VyYXRpb24u
aCBpbiBIZWFkZXJzICovLApAQCAtMTA4MzEsNiArMTA5MzcsMTMgQEAKIAkJCQk5MzIzNjExRTFC
MDE1REE4MDBGQTkyMzIgLyogX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTQzRTgyQTE4OEYzQ0RDMDA5RTREMzAgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzg5RDJENzFBNkM2QkU2MDAzQTVGREUgLyog
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3OTBBNjc0MjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY2QzI1Njc5RUI3MDA3N0M1QTcg
LyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3OTBBNjU2MjU2Nzk5REEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY2MjI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjc4
MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjVBMjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUnBFbnRpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjVFMjU2
NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE5RTMyOEQxODIxNjVBOTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVj
dEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQkZFM0ExODI5QzFFRDAwNUIwNzBF
IC8qIF9XS1JlbW90ZU9iamVjdEludGVyZmFjZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTlFMzI4OTE4MjE2MzY5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBp
biBIZWFkZXJzICovLApAQCAtMTA4NzEsMTEgKzEwOTg0LDEzIEBACiAJCQkJN0NCMzY1QUQxRDMx
REMxMDAwNzE1OENBIC8qIF9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkQ4Nzg2MUQxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDg3ODYyMDFCREI1N0Y1MDBEMDJBQkIgLyogX1dLVXNl
clN0eWxlU2hlZXRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2NjkyNTY3OUUw
MDAwNzdDNUE3IC8qIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE4MUIzODExOEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBODFCMzg1MThCRDY3M0EwMDA3RkRBQyAvKiBfV0tWaXNp
dGVkTGlua1N0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3OUYxQkY2MjNDODBE
QjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVu
dGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NzQ3MjhEMTIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzQ3MjhENDIz
NDU3MEFFMDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUUyODY3ODFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0ZURh
dGFTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyODY4MDFDN0Y5MkMwMDA2OUFDNEYgLyog
X1dLV2Vic2l0ZURhdGFTaXplSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTMwMDAsNyAr
MTMxMTUsMjAgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTU3OTBBNjcxMjU2NzlGMUEw
MDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1NzkwQTY3RDI1NjdBMTNFMDA3N0M1QTcgLyogX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBB
Njg5MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2Uu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY4NTI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Nzkw
QTY4MTI1NjdBMUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNTc5MEE2NjcyNTY3OUNFQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0
b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDQkQ1OTVDMjI4MEVE
RjQwMDJCMjJBQSAvKiBfV0tDdXN0b21IZWFkZXJGaWVsZHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1NzkwQTY3NTI1Njc5Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBBNjZEMjU2NzlFQjcwMDc3QzVB
NyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTU3OTBBNjU3MjU2Nzk5REEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50
aXR5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5MEE2NjMyNTY3OUM4NjAwNzdDNUE3IC8qIF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5
MEE2NzkyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBBNjVCMjU2NzlCMjYwMDc3QzVBNyAvKiBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Nzkw
QTY1RjI1Njc5QzExMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHku
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0OUZCRUZGRDIzOUIwMTFEMDBCRDAzMkYgLyogX1dLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OUZC
RUZGRjIzOUIwMTJGMDBCRDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHkubW0gaW4gU291cmNlcyAqLywKIAkJCQk5OUU3MTg5QTIxRjc5RDlFMDA1NUU5NzUgLyogX1dL
VG91Y2hFdmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY5ZWQ2ODY1OGExN2NiMmQxZGE1ZTJk
ZWMzMGJmZmZkYTk3MjNiMTYuLjYxMWFkODI0M2M2MWNmNjExZTgyY2M5ZWEwNWM4N2U2MGIxZTQy
ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0aGVudGljYXRp
b25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEzNjQ3MzE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIw
MjAtMTEtMTMgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT046IHIyNjk1MTQgUmVzZXQgc2VydmVyIHBvcnQgYmVmb3JlIHJlc3RhcnRpbmcg
d2Vic2VydmVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggYTk0YWI3
ODhiZmQxNDkwMmQ2Mzc4NWYyMDNmNjFjZTg5ZmI2MGQwNC4uNWI5YzY5MDk0MjMyODZjZjMzMDFi
OTdhZmFhNDg0MDI2NmMzYzJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5t
bQpAQCAtMzMsMTEgKzMzLDI1IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxMb2NhbEF1dGhlbnRp
Y2F0aW9uL0xvY2FsQXV0aGVudGljYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMuaD4KKyNp
bXBvcnQgPFdlYktpdC9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmg+
CisjaW1wb3J0IDxXZWJLaXQvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaD4KKyNp
bXBvcnQgPFdlYktpdC9fV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaD4KICNpbXBv
cnQgPFdlYktpdC9fV0tFeHBlcmltZW50YWxGZWF0dXJlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dL
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUnBFbnRpdHkuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQdWJsaWNLZXlDcmVk
ZW50aWFsVXNlckVudGl0eS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhlbnRpY2F0aW9u
QXNzZXJ0aW9uUmVzcG9uc2UuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRl
c3RpbmcuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JhbmRvbU51
bWJlci5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9TZWN1cml0eVNQSS5oPgpAQCAtMjM3LDYg
KzI1MSw3IEBAIC0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgKilwYW5lbAogQGVuZAogCiBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIHsKIApAQCAtMTQzMiw2ICsxNDQ3LDM1OCBAQCBURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIExBR2V0QXNzZXJ0aW9uTXVsdGlwbGVPcmRlcikKIAogI2VuZGlmIC8vIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspIHx8IFBMQVRGT1JNKElPUykKIAorVEVTVChXZWJBdXRoZW50aWNhdGlv
blBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWluaW11bikKK3sKKyAg
ICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAg
IE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIg
bGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHRO
UyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29y
aXRobTpALTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdKTsKKyAgICBh
dXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxs
b2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6bnNJ
ZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXSk7CisgICAgTlNBcnJheTxfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBbIHBh
cmFtZXRlcnMuZ2V0KCkgXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgp
IHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVD
cmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUo
cmVzdWx0LnJwLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5p
c051bGwoKSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBs
ZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlz
TnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXpl
b2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0
b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisg
ICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMWx1KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJL
ZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0
LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxz
LnNpemUoKSwgMGx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24sIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0
ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVz
dWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4
dGVuc2lvbnMtPmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNN
YXhpbXVtRGVmYXVsdCkKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0
byBwYXJhbWV0ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisgICAgYXV0byBwYXJhbWV0ZXJzMiA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdp
dGhBbGdvcml0aG06QC0yNTddKTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdE5TKFtbX1dL
UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpu
c0lkZW50aWZpZXJdKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdKTsKKyAg
ICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkg
YWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6
bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXSk7CisgICAgTlNBcnJheTxf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHViS2V5Q3JlZFBhcmFtcyA9IEBb
IHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworICAgIGF1dG8gYXV0aGVu
dGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3Jp
dGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisKKyAg
ICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5
Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpA
MTIwXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6QFsgZGVzY3JpcHRvci5n
ZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRp
Y2F0b3JTZWxlY3Rpb24uZ2V0KCldOworICAgIFtvcHRpb25zIHNldEV4dGVuc2lvbnM6ZXh0ZW5z
aW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgp
XTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFtZSwgImV4YW1wbGUuY29tIik7
CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9U
UlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0
LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRW
ZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAo
cmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmll
cikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJK
IEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNp
emUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlw
ZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQ
YXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIw
dSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDFs
dSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRl
bnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFs
c1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDAp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50
aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1
dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgZmFsc2UpOworICAgIEVY
UEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwg
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOworCisgICAgRVhQRUNUX0VR
KHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9u
ZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsK
K30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zTWF4aW11bTEpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0Rh
dGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOwor
ICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBh
cmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8gcGFyYW1l
dGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2Nd
IGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBs
ZS5jb20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24u
anBnIl07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFtcGxlLmNvbSJdOworCisgICAgYXV0
byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9j
XSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRl
bnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIFt1c2VyIHNldEljb246
QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisKKyAgICBOU0FycmF5PF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFy
YW1ldGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMg
PSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10g
aW5pdFdpdGhScDpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJL
ZXlDcmVkUGFyYW1zXSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1
dG8gdXNiID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNh
dGlvblRyYW5zcG9ydFVTQl0pOworICAgIGF1dG8gbmZjID0gYWRvcHROUyhbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydE5GQ10pOworICAgIGF1dG8g
aW50ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRp
Y2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdE5T
KFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRp
Zmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBbY3JlZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVz
Yi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5hbC5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRF
eGNsdWRlQ3JlZGVudGlhbHM6QFsgY3JlZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBd
XTsKKworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsKKyAgICBbYXV0aGVudGlj
YXRvclNlbGVjdGlvbiBzZXRBdXRoZW50aWNhdG9yQXR0YWNobWVudDpfV0tBdXRoZW50aWNhdG9y
QXR0YWNobWVudFBsYXRmb3JtXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRSZXF1
aXJlUmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRVc2Vy
VmVyaWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkXTsKKyAg
ICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246X1dLQXR0ZXN0YXRpb25D
b252ZXlhbmNlUHJlZmVyZW5jZURpcmVjdF07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9u
czpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFtZSwg
ImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pY29uLCBAImh0
dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLmlkLCAiZXhhbXBsZS5jb20iKTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQu
dXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJF
UShyZXN1bHQudXNlci5pY29uLCBAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciKTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRp
ZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgp
LCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNU
X0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVu
dGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFy
YW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sx
XS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5l
eGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5
cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNb
MF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUSht
ZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50
aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhj
bHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgpLCAzbHUpOworICAgIEVYUEVDVF9F
UShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMF0sIEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzJdLCBBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1
dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JBdHRhY2htZW50LCBQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZv
cm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWly
ZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JT
ZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6
UmVxdWlyZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZTo6RGlyZWN0KTsKK30KKworVEVTVChXZWJBdXRoZW50aWNh
dGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTIpCit7
CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsK
KyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlm
aWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRo
QWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8gcGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3
XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVu
dGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAgW3JwIHNldElj
b246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisgICAgW3JwIHNldElkZW50
aWZpZXI6QCJleGFtcGxlLmNvbSJdOworCisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVz
ZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkog
QXBwbGVzZWVkIl0pOworICAgIFt1c2VyIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29t
L2ljb24uanBnIl07CisKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0
ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1zID0gQFsgcGFyYW1ldGVyczEuZ2V0KCksIHBhcmFtZXRl
cnMyLmdldCgpIF07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdpdGhScDpycC5nZXQoKSB1c2Vy
OnVzZXIuZ2V0KCkgcHViS2V5Q3JlZFBhcmFtczpwdWJLZXlDcmVkUGFyYW1zXSk7CisgICAgW29w
dGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8gdXNiID0gYWRvcHROUyhbTlNOdW1i
ZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0pOworICAg
IGF1dG8gbmZjID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50
aWNhdGlvblRyYW5zcG9ydE5GQ10pOworICAgIGF1dG8gaW50ZXJuYWwgPSBhZG9wdE5TKFtOU051
bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxd
KTsKKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAg
ICBbY3JlZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRl
cm5hbC5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6QFsgY3Jl
ZGVudGlhbC5nZXQoKSwgY3JlZGVudGlhbC5nZXQoKSBdXTsKKworICAgIGF1dG8gYXV0aGVudGlj
YXRvclNlbGVjdGlvbiA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEgYWxsb2NdIGluaXRdKTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRBdXRoZW50
aWNhdG9yQXR0YWNobWVudDpfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxhdGZvcm1d
OyAvLworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldFJlcXVpcmVSZXNpZGVudEtleTpZ
RVNdOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldFVzZXJWZXJpZmljYXRpb246X1dL
VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFnZWRdOyAvLworICAgIFtvcHRpb25z
IHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0aGVudGljYXRvclNlbGVjdGlvbi5nZXQoKV07
CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlvbjpfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQ
cmVmZXJlbmNlSW5kaXJlY3RdOyAvLworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0
aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFt
cGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWNvbiwgQCJodHRwcy8v
d3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5y
cC5pZCwgImV4YW1wbGUuY29tIik7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIu
bmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnVzZXIuaWNvbiwgQCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIik7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIp
KTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRl
bnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJl
c3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBsZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxU
eXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sw
XS5hbGcsIC03KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0udHlw
ZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLmFsZywgLTI1Nyk7CisKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNs
dWRlQ3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVk
ZUNyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQ
dWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlk
VmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21w
KHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVy
LCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzBdLCBBdXRoZW50aWNhdG9yVHJh
bnNwb3J0OjpVc2IpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBd
LnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVudGlj
YXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50
aWNhdG9yU2VsZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgUHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZv
cm0pOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWly
ZVJlc2lkZW50S2V5LCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JT
ZWxlY3Rpb24tPnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6
RGlzY291cmFnZWQpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3QpOworfQorCitURVNUKFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwsIE1ha2VDcmVkZW50aWFsU1BJVGltZW91dCkKK3sKKyAgICByZXNldCgp
OworCisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQg
fTsKKyAgICB1aW50OF90IGhhc2hbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwg
MHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5T
RGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVu
Z3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgTlNEYXRhICpuc0hhc2ggPSBbTlNEYXRhIGRh
dGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGlu
aXRXaXRoQWxnb3JpdGhtOkAtN10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29t
Il0pOworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRl
bnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBO
U0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFy
YW1zID0gQFsgcGFyYW1ldGVycy5nZXQoKSBdOworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMo
W1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJw
OnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJh
bXNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgYXV0byBwYW5lbCA9
IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGFsbG9jXSBpbml0XSk7CisgICAg
W3BhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6bnNIYXNoIG9wdGlvbnM6b3B0aW9ucy5nZXQo
KSBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
ICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgd2ViQXV0aGVudGljYXRpb25Q
YW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05VTEwocmVzcG9uc2UpOworICAgICAg
ICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9tYWluKTsKKyAgICAgICAgRVhQRUNU
X0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4o
JndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01pbmltdW4pCit7CisgICAg
YXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5n
ZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIFdURjo6bnVsbG9wdCk7Cisg
ICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwSWQuaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51
c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZCk7
CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCwg
ZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW1EZWZhdWx0KQoreworICAgIHVpbnQ4X3QgaWRlbnRp
ZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50
aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlk
ZW50aWZpZXIpXTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5
Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZp
ZXJdKTsKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisKKyAgICBhdXRvIG9wdGlvbnMg
PSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIGFsbG9jXSBp
bml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBbb3B0aW9ucyBzZXRB
bGxvd0NyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0
RXh0ZW5zaW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlv
bnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVvdXQsIDEyMHUp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMWx1KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6
UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIp
KTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVj
dG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJl
bWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBw
aWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW0pCit7CisgICAgdWludDhfdCBpZGVudGlm
aWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRp
ZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRl
bnRpZmllcildOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNy
ZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0pOworICAgIFtvcHRpb25zIHNldFRp
bWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9
IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFu
c3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydEludGVybmFsXSk7CisgICAgYXV0
byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
IGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisgICAgW2NyZWRlbnRp
YWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkg
XV07CisgICAgW29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFsczpAWyBjcmVkZW50aWFsLmdldCgp
LCBjcmVkZW50aWFsLmdldCgpIF1dOworCisgICAgW29wdGlvbnMgc2V0VXNlclZlcmlmaWNhdGlv
bjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1aXJlZF07CisKKyAgICBhdXRvIGV4
dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5w
dXRzIGFsbG9jXSBpbml0XSk7CisgICAgW2V4dGVuc2lvbnMgc2V0QXBwaWQ6QCJodHRwcy8vd3d3
LmV4YW1wbGUuY29tL2ZpZG8iXTsKKyAgICBbb3B0aW9ucyBzZXRFeHRlbnNpb25zOmV4dGVuc2lv
bnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
VHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNb
MF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUSht
ZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlm
aWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93
Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMF0sIEF1dGhlbnRpY2F0b3JUcmFu
c3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRy
YW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6Ok5mYyk7CisgICAgRVhQRUNUX0VR
KHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JU
cmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNh
dGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZCwgImh0dHBzLy93d3cuZXhhbXBsZS5j
b20vZmlkbyIpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIEdldEFzc2VydGlv
blNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaGFzaFtdID0geyAw
eDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAy
LCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAw
eDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAx
LCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0hhc2ggPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsKKworICAgIGF1dG8gb3B0aW9ucyA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgYWxsb2NdIGlu
aXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgYXV0byBwYW5lbCA9
IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGFsbG9jXSBpbml0XSk7CisgICAg
W3BhbmVsIGdldEFzc2VydGlvbldpdGhIYXNoOm5zSGFzaCBvcHRpb25zOm9wdGlvbnMuZ2V0KCkg
Y29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKnJl
c3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVs
UmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7CisgICAgICAgIEVY
UEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOworICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmd2Vi
QXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414703</attachid>
            <date>2020-11-20 12:03:35 -0800</date>
            <delta_ts>2020-11-20 13:47:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218893-20201120120335.patch</filename>
            <type>text/plain</type>
            <size>149724</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uMmQxYzBhOGFmYmFhNjgwZmU5ZmYyYzI2MzExZjRl
MGQyOTQ4MWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg6
CisgICAgICAgIFR3ZWFrcyBzb21lIG1hY3JvcyB0byBleHBvc2UgYW4gZW1wdHkgc3RydWN0IGZv
ciBwb3J0cyB0aGF0IGhhdmUgV2ViQXV0aG4gZGlzYWJsZWQuCisKIDIwMjAtMTEtMTMgIENsYXVk
aW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmVjNDhjNmIxYTE2OTRkNDVkNWJlNmE3NjU1MDVm
YzEwNzg3NWU0My4uZTJjNDRlNzZjZDM1NTNlNDk4M2M4NzRkY2NiMjBjYzc1YzhmNmZiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAyMC0xMS0xNyAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgQXV0
aGVudGljYXRpb25TZXJ2aWNlcy5GcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODg5MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzEz
NjQ3MzE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBTUEkgZm9yIEF1dGhlbnRpY2F0aW9uU2VydmljZXMu
RnJhbWV3b3JrLCB3aGljaCBpcyBtb3JlIG9yIGxlc3MgYSBkaXJlY3QKKyAgICAgICAgdHJhbnNs
YXRpb24gb2YgdGhlIFdlYkF1dGhuIFdlYiBJRExzIGFuZCBhIHRoaW4gd3JhcHBlciBvbiB0b3Ag
b2YgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXZWJBdXRobgorICAgICAgICBwcm9jZXNzLgorCisg
ICAgICAgIEl0IGRlcHJlY2F0ZXMgdGhlIGV4aXN0aW5nIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwgU1BJIHdoaWNoIGlzIGZvciBTYWZhcmkgdG8gc2hvdyBVSSBvbmx5LiBUaGlzCisgICAgICAg
IHBhdGNoIGRvZXMgbm90IGp1c3QgcmVwdXJwb3NlIHRoZSBTUEkgYnV0IGFsc28gbW9kaWZpZXMg
c29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zLiBUaGUgbW9zdCBub3RpY2VhYmxlIG9uZQorICAg
ICAgICBpcyB0aGUgY2hhbmdlIG9mIG93bmVyc2hpcHMuIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBB
dXRoZW50aWNhdG9yTWFuYWdlciBvd25zIHRoZSBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLgor
ICAgICAgICBOb3csIGl0J3MgdGhlIG9wcG9zaXRlIHdheS4KKworICAgICAgICBTaW5jZSB0aGVy
ZSB3aWxsIGJlIGEgcGVyaW9kIG9mIHRpbWUgdGhhdCB0aGUgZGVwcmVjYXRlZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGNvZXhpc3Qgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLAorICAgICAgICB0
aGlzIHBhdGggYWxzbyBtYXJrcyB0aGluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gZGVwcmVjYXRlIGlu
IHRoZSBmdXR1cmUgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAgICAgKEFQSTo6
V2ViQXV0aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChBUEk6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNlbCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgIEltcGxlbWVudHMgdGhl
IHBsdW1iaW5nIGZvciB0aGUgbmV3IFNQSSBhbmQgb3ducyB0aGUgQXV0aGVudGljYXRvck1hbmFn
ZXIgbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsLm1tOgorICAgICAgICAoLVtfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzIGluaXRXaXRoQXBwaWQ6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lvbnM6YXV0
aGVudGljYXRvckRhdGE6c2lnbmF0dXJlOnVzZXJIYW5kbGU6XSk6CisgICAgICAgICgtW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGluaXRXaXRoUmF3SWQ6ZXh0ZW5zaW9uczph
dHRlc3RhdGlvbk9iamVjdDpdKToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucyBpbml0V2l0aFJwOnVzZXI6cHViS2V5Q3JlZFBhcmFtczpdKToKKyAgICAgICAg
KC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgaW5pdFdpdGhUeXBlOmlkZW50aWZp
ZXI6XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkgaW5pdFdpdGhO
YW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBpbml0
V2l0aFR5cGU6YWxnOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgaW5pdF0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRp
dHkgaW5pdFdpdGhOYW1lOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBpbml0V2l0aE5hbWU6aWRlbnRpZmllcjpkaXNwbGF5TmFtZTpdKToKKyAgICAgICAg
KC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpbml0XSk6CisgICAgICAgICh2ZWN0b3JGcm9t
TlNEYXRhKToKKyAgICAgICAgKGVuY29kZUVudGl0eSk6CisgICAgICAgIChwdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkp
OgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvclRyYW5zcG9ydCk6CisgICAgICAgIChhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyk6
CisgICAgICAgIChwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMpOgorICAgICAgICAoYXV0
aGVudGljYXRvckF0dGFjaG1lbnQpOgorICAgICAgICAodXNlclZlcmlmaWNhdGlvbik6CisgICAg
ICAgIChhdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEpOgorICAgICAgICAoYXR0ZXN0YXRp
b25Db252ZXlhbmNlUHJlZmVyZW5jZSk6CisgICAgICAgIChhdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMpOgorICAgICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNv
bnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UpOgorICAgICAgICAoLVtfV0tXZWJBdXRoZW50
aWNhdGlvblBhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9D
b3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpdKToKKyAgICAgICAgKHdrQXV0aGVudGljYXRv
ckFzc2VydGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBnZXRBc3NlcnRpb25XaXRoSGFzaDpvcHRpb25zOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoK1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGlzVXNlclZlcmlmeWluZ1BsYXRmb3Jt
QXV0aGVudGljYXRvckF2YWlsYWJsZV0pOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBTUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25S
ZXF1ZXN0RGF0YS5oOgorICAgICAgICBNYXJrcyB0aGluZ3MgYXMgdG8gZGVwcmVjYXRlLgorCiAy
MDIwLTExLTEzICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIElzc3VlIHNhbmRib3ggZXh0ZW5zaW9uIHRvIHRoZSBXZWJDb250ZW50IHByb2Nl
c3MgZm9yIGNvbS5hcHBsZS5sc2tkZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAppbmRleCA4ZjkzNTYxZGUwMzYzNzE1OTU3OTFkZmJhMGNlYzJiYmNiOGFhNGIyLi5iYzMz
MTE4YjU4ZjM1ZmE4MDM4ZDdkM2MwZTMzNzdjMTQ5ZTc4Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVkZSAiQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIgogI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgpAQCAtMzQsMTAgKzMzLDEyIEBACiAj
aW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCIKICNpbmNsdWRlICJVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFB1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgeworI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAg
ICAgZW51bSBjbGFzcyBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB7CiAgICAgICAgIFBsYXRmb3Jt
LAogICAgICAgICBDcm9zc1BsYXRmb3JtCkBAIC04OSw4ICs5MCwxMCBAQCBzdHJ1Y3QgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+
IGRlY29kZShEZWNvZGVyJik7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikKIH07CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVyczo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CkBAIC0xOTYsOSArMTk5LDExIEBAIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVu
dD4gewpAQCAtMjEwLDUgKzIxNSw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVuCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKLQogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAppbmRleCAyMmRhMzI1MWFkMDFmZjVjYzc4NWEx
ZGE3YzhkZjBmZmQzZjc3OTNhLi43OWE1ZWM5ZDA5MWQwYTQ5NDQ0MmEyNWMzMTgxNGIxNDA0MGRh
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKQEAgLTI2LDE2ICsy
NiwxNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQotCiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgiCiAjaW5jbHVkZSAiQnVm
ZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7CisjaWYg
RU5BQkxFKFdFQl9BVVRITikKICAgICBCdWZmZXJTb3VyY2UgY2hhbGxlbmdlOwogICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiB0aW1lb3V0OwogICAgIG11dGFibGUgU3RyaW5nIHJwSWQ7CkBAIC00NSw4
ICs0NiwxMCBAQCBzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCiB9OwogCisjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE5vdCBldmVyeSBt
ZW1iZXIgaXMgZW5jb2RlZC4KIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC04NCw3ICs4Nyw2IEBAIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucz4gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOjpkCiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
aW5kZXggZTVjYjQ3Mzg2OWJmMTdmNDAzMGQ4M2ZlZmRiNDhkYzQyYTIzOTY3MS4uZmZmMzMwMThh
MjBhMWM4N2UwYzA3ZDQ4OTQ4Yzc3NzM0YTY3YTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcApAQCAt
NDEsMTAgKzQxLDE2IEBAIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBXZWJBdXRoZW50aWNh
dGlvblBhbmVsOjpjcmVhdGUoY29uc3QgQXV0aGVudGljYXRvck1hCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViQXV0aGVudGljYXRpb25QYW5lbChtYW5hZ2VyLCBycElkLCB0cmFuc3BvcnRz
LCB0eXBlKSk7CiB9CiAKK1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWwoKQorICAgIDogbV9tYW5hZ2VyKG1ha2VVbmlxdWU8QXV0aGVudGljYXRvck1hbmFnZXI+
KCkpCisgICAgLCBtX2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQ+KCkpCit7Cit9CisKIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0
aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBycElkLCBjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMsIENsaWVudERhdGFU
eXBlIHR5cGUpCi0gICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCisgICAgOiBt
X2NsaWVudChtYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+KCkpCisg
ICAgLCBtX3dlYWtNYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgICwgbV9ycElkKHJw
SWQpCi0gICAgLCBtX2NsaWVudChXVEY6Om1ha2VVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRpb25Q
YW5lbENsaWVudD4oKSkKICAgICAsIG1fY2xpZW50RGF0YVR5cGUodHlwZSkKIHsKICAgICBtX3Ry
YW5zcG9ydHMgPSBWZWN0b3I8QXV0aGVudGljYXRvclRyYW5zcG9ydD4oKTsKQEAgLTU5LDEwICs2
NSwxNiBAQCBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNv
bnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZwogCiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Ojp+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsOjpoYW5kbGVSZXF1ZXN0KFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEm
JiByZXF1ZXN0LCBDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX21hbmFnZXIp
OworICAgIG1fbWFuYWdlci0+aGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7Cit9CisKIHZvaWQgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6Y2FuY2VsKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPmNhbmNlbFJl
cXVlc3QoKnRoaXMpOworICAgIGlmIChtX3dlYWtNYW5hZ2VyKQorICAgICAgICBtX3dlYWtNYW5h
Z2VyLT5jYW5jZWxSZXF1ZXN0KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdGlvblBh
bmVsOjpzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+JiYg
Y2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggY2M0MmE1ZjZjNTYwOTg2OGViMzQxZDFiMzIxNTQy
ODQ3ODA4MzY2NC4uODM2MjBkYjRiMWVjNmZlMjczM2M2NjlhZjIxMmU4OTYzZGE1MWYwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5oCkBAIC0zNSwxMCArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBDbGllbnREYXRhVHlwZSA6IGJvb2w7CisKK2NsYXNzIEF1dGhlbnRpY2F0b3JS
ZXNwb25zZTsKKworc3RydWN0IEV4Y2VwdGlvbkRhdGE7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgQXV0aGVudGljYXRvck1hbmFnZXI7CisKK3N0cnVjdCBXZWJBdXRoZW50aWNhdGlv
blJlcXVlc3REYXRhOwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTQ3LDI1ICs1MywzNSBAQCBj
bGFzcyBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OwogCiBjbGFzcyBXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBUcmFuc3BvcnRTZXQgPSBIYXNoU2V0PFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQsIFdURjo6SW50SGFzaDxXZWJDb3JlOjpBdXRoZW50
aWNhdG9yVHJhbnNwb3J0PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yVHJhbnNwb3J0Pj47CisgICAgdXNpbmcgUmVzcG9uc2UgPSBWYXJpYW50PFJlZjxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsK
KyAgICB1c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uc2UmJik+
OwogCi0gICAgc3RhdGljIFJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsPiBjcmVhdGUoY29uc3Qg
V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlciYsIGNvbnN0IFdURjo6U3RyaW5nJiBycElkLCBj
b25zdCBUcmFuc3BvcnRTZXQmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSk7CisgICAgV2ViQXV0
aGVudGljYXRpb25QYW5lbCgpOwogICAgIH5XZWJBdXRoZW50aWNhdGlvblBhbmVsKCk7CiAKLSAg
ICBXVEY6OlN0cmluZyBycElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc3BvcnRzOyB9Ci0gICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUg
Y2xpZW50RGF0YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisgICAg
dm9pZCBoYW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYm
LCBDYWxsYmFjayYmKTsKICAgICB2b2lkIGNhbmNlbCgpIGNvbnN0OwogCiAgICAgY29uc3QgV2Vi
QXV0aGVudGljYXRpb25QYW5lbENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGll
bnQuZ2V0KCk7IH0KICAgICB2b2lkIHNldENsaWVudChVbmlxdWVSZWY8V2ViQXV0aGVudGljYXRp
b25QYW5lbENsaWVudD4mJik7CiAKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5
ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVkIG1ldGhvZHMuCisgICAgdXNpbmcg
VHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBX
VEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25n
RW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHN0
YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdURjo6U3RyaW5nIHJwSWQo
KSBjb25zdCB7IHJldHVybiBtX3JwSWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4mIHRyYW5zcG9ydHMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
cG9ydHM7IH0KKyAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBjbGllbnREYXRhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50RGF0YVR5cGU7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNh
dGVkIG1ldGhvZC4KICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsKGNvbnN0IFdlYktpdDo6QXV0
aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNw
b3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOwogCi0gICAgV2Vha1B0cjxXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9ycElk
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyPiBtX21h
bmFnZXI7IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IENoYW5nZSB0byBVbmlx
dWVSZWYuCiAgICAgVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ+IG1fY2xp
ZW50OworCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRo
ZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBmaWVsZHMuCisgICAgV2Vha1B0cjxXZWJLaXQ6OkF1dGhl
bnRpY2F0b3JNYW5hZ2VyPiBtX3dlYWtNYW5hZ2VyOworICAgIFdURjo6U3RyaW5nIG1fcnBJZDsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4gbV90cmFuc3BvcnRz
OwogICAgIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YVR5cGU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmExZGUyY2U3NjQxZTg4YzU5YTBiYWUyMGEwNDJkYTdiNGI2YTQyMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgor
CitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkK
K0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIDogTlNP
YmplY3QKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
YXBwaWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50SW5wdXRzLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1
dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDM3NWM0
ODc1NTExZDg4ZjkzODI2NzViOTRjOTY2NjQ2OWZhNzAyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudElucHV0cy5tbQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1
dHMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dElucHV0cworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRPdXRwdXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTgyNGI3OWU5ZDg1NjAwZGFlYWQ0Nzg2ZjU4YmZmODA4
ZGIwZGE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tG
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19B
U1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50T3V0cHV0cyA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgQk9PTCBhcHBpZDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzAxNzFmZmJmMzU0M2MwNzcwNTk5ZGExNDM3YTc1MWUxOGE0YWEyNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXBwaWQ6
KEJPT0wpYXBwaWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9hcHBpZCA9IGFwcGlkOworICAgIHJldHVybiBzZWxmOworfQor
CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0c0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTc1NWM2YjMxODU0NDYyZjJmZDZlNmY2
ODI2N2Y1ZTFiMDVmOTcwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzSW50
ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCIKKworTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzICgpCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFwcGlkOihC
T09MKWFwcGlkOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBc3NlcnRp
b25SZXNwb25zZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhl
bnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhZWY3MDkxYjUyYTJjOGNj
YmE3MjU3NzFiY2NmMTE5MTdlZWI0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxX
ZWJLaXQvX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JF
R0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgOiBfV0tB
dXRoZW50aWNhdG9yUmVzcG9uc2UKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBO
U0RhdGEgKmF1dGhlbnRpY2F0b3JEYXRhOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU0RhdGEgKnNpZ25hdHVyZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TRGF0YSAqdXNlckhhbmRsZTsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdlOGNmYWVhY2I5NGI1YjY1NmE0YWM5YTM5OTgwZGE4YzVlYzc1ZTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFz
c2VydGlvblJlc3BvbnNlLm1tCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5o
IgorCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgi
CisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oIgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKily
YXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF1dGhlbnRpY2F0b3JEYXRhOihOU0RhdGEgKilhdXRo
ZW50aWNhdG9yRGF0YSBzaWduYXR1cmU6KE5TRGF0YSAqKXNpZ25hdHVyZSB1c2VySGFuZGxlOihO
U0RhdGEgKil1c2VySGFuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFJh
d0lkOnJhd0lkIGV4dGVuc2lvbnM6V1RGTW92ZShleHRlbnNpb25zKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX2F1dGhlbnRpY2F0b3JEYXRhID0gYXV0aGVudGljYXRvckRhdGE7Cisg
ICAgX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKKyAgICBfdXNlckhhbmRsZSA9IHVzZXJIYW5kbGU7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRl
cm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I4MWU1N2UzNTgyNTVh
NjkyMDgwMjYyYmUzMDNiNjQ3NTMyM2VmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJ
bnRlcm5hbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2ltcG9ydCAiX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmgiCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAoKQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdXRoZW50aWNhdG9y
RGF0YTooTlNEYXRhICopYXV0aGVudGljYXRvckRhdGEgc2lnbmF0dXJlOihOU0RhdGEgKilzaWdu
YXR1cmUgdXNlckhhbmRsZTooTlNEYXRhICopdXNlckhhbmRsZTsKKworQGVuZAorCitOU19BU1NV
TUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTUwZjc5ZTY1NjVlZDZjNzk4NDNlNzZlYWJiOWE4NjM0NGFiM2JmZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JS
ZXNwb25zZS5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgOiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UK
KworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKmF0dGVzdGF0aW9uT2Jq
ZWN0OworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRp
Y2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NmY5MmE1YTBkMzZkNzI0
NmNjYTg1ODgyZDgwZDY2MDA2MjcwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2Uu
bW0KQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCIKKworI2ltcG9ydCAi
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oIgorI2ltcG9ydCAiX1dL
QXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNl
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihOU0RhdGEgKilyYXdJZCBleHRlbnNp
b25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4m
JilleHRlbnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0RhdGEgKilhdHRlc3RhdGlvbk9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhSYXdJZDpyYXdJZCBleHRlbnNp
b25zOldURk1vdmUoZXh0ZW5zaW9ucyldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9h
dHRlc3RhdGlvbk9iamVjdCA9IGF0dGVzdGF0aW9uT2JqZWN0OworICAgIHJldHVybiBzZWxmOwor
fQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlSW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTE4OTRhZGMyMjZmOGQ5OGE0OTc1YzAwOWI1OGRk
ZGM5ZWQ2YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwuaApAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIl9XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlICgpCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lkOihO
U0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50T3V0cHV0cz4mJilleHRlbnNpb25zIGF0dGVzdGF0aW9uT2JqZWN0OihOU0Rh
dGEgKilhdHRlc3RhdGlvbk9iamVjdDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
dXRoZW50aWNhdG9yUmVzcG9uc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGNkNzEyNmFmNGZlOGIzN2RjZjcz
N2QyMGZjZWIwN2M0YWQ1OTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KKworQGNsYXNzIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVu
dE91dHB1dHM7CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UgOiBOU09iamVj
dAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGF0YSAqcmF3SWQ7CitAcHJv
cGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHJlYWRvbmx5LCBzdHJvbmcpIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MzU4ODRiMjQ0OTc4MmJiNTdkMmVjZTNhZWQwMmFkMmJkMWVkOGIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNw
b25zZS5tbQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgiCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yUmVzcG9u
c2UgeworICAgIFJldGFpblB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRw
dXRzPiBfZXh0ZW5zaW9uczsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5T
RGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KFJldGFpblB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzPiYmKWV4dGVuc2lvbnMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9yYXdJZCA9IHJhd0lkOwor
ICAgIF9leHRlbnNpb25zID0gZXh0ZW5zaW9uczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyAqKWV4dGVuc2lvbnMKK3sK
KyAgICByZXR1cm4gX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJ
bnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRp
Y2F0b3JSZXNwb25zZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQzOTI2MzlhNzk2NGE1MmJiMjJi
ZWU1MDZmZDllNmQ5YTRjYjQyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiX1dLQXV0
aGVudGljYXRvclJlc3BvbnNlLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzOworCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZSAoKQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9u
czooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYp
ZXh0ZW5zaW9uczsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yU2VsZWN0
aW9uQ3JpdGVyaWEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGFhODNkNmQxY2RlZWFj
YjEyNDU5NGU0NjVhN2YyYjJmMDIyZDUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaD4KKwor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dL
QXV0aGVudGljYXRvckF0dGFjaG1lbnQpIHsKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVu
dEFsbCwKKyAgICBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtLAorICAgIF9XS0F1
dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQbGF0Zm9ybSwKK30gV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworV0tfQ0xBU1NfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhl
bnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSA6IE5TT2JqZWN0CisKKy8qIUBkaXNjdXNzaW9uIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50QWxsLiovCitAcHJv
cGVydHkgKG5vbmF0b21pYykgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnQgYXV0aGVudGljYXRv
ckF0dGFjaG1lbnQ7CisKKy8qIUBkaXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5PLiov
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCByZXF1aXJlUmVzaWRlbnRLZXk7CisKKy8qIUBk
aXNjdXNzaW9uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJl
bWVudFByZWZlcnJlZC4qLworQHByb3BlcnR5IChub25hdG9taWMpIF9XS1VzZXJWZXJpZmljYXRp
b25SZXF1aXJlbWVudCB1c2VyVmVyaWZpY2F0aW9uOworCitAZW5kCisKK05TX0FTU1VNRV9OT05O
VUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODhkMDQzZGU1MDc0NzZjMDQ3YmE4M2M4ODAyZmFkZDA3ZGM4NzgxYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNh
dG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0KQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRl
cmlhLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEKKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYXV0aGVudGljYXRvckF0dGFj
aG1lbnQgPSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbDsKKyAgICBzZWxmLnJlcXVpcmVS
ZXNpZGVudEtleSA9IE5POworICAgIHNlbGYudXNlclZlcmlmaWNhdGlvbiA9IF9XS1VzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGFlYjA4MDZmMWM1YzM3YTRjMWVkMDkzODQxNzU2MmFiYzA4ODk1NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgor
CitAY2xhc3MgX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzOworQGNsYXNz
IF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTsKK0BjbGFzcyBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvcjsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1l
dGVyczsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHk7CitAY2xhc3MgX1dL
UHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UpIHsKKyAgICBfV0tBdHRlc3Rh
dGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9uZSwKKyAgICBfV0tBdHRlc3RhdGlvbkNvbnZleWFu
Y2VQcmVmZXJlbmNlSW5kaXJlY3QsCisgICAgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVy
ZW5jZURpcmVjdCwKK30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMgOiBOU09iamVjdAorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOwor
LSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhScDooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICopcnAgdXNlcjooX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1c2VyIHB1YktleUNyZWRQYXJhbXM6KE5TQXJy
YXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJLZXlDcmVkUGFyYW1z
OworCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBfV0tQdWJsaWNLZXlDcmVkZW50aWFs
UnBFbnRpdHkgKnJwOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgX1dLUHVibGljS2V5
Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXI7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVk
UGFyYW1zOworCitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TTnVtYmVy
ICp0aW1lb3V0OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yICo+ICpleGNsdWRlQ3JlZGVudGlhbHM7
CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykgX1dLQXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhICphdXRoZW50aWNhdG9yU2VsZWN0aW9uOworCisvKiFAZGlzY3Vz
c2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZW5w
cmVuY2VOb25lLiovCitAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLQXR0ZXN0YXRpb25Db252ZXlh
bmNlUHJlZmVyZW5jZSBhdHRlc3RhdGlvbjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21p
Yywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVu
c2lvbnM7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0ZWVhNWE3ZTky
MTVkYWNkYjg2OTExMWZiMDJiMGUyMTY5Mjk1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucy5tbQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgiCisK
KyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oIgorI2ltcG9ydCAiX1dL
UHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUnA6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSAqKXJwIHVzZXI6KF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICopdXNlciBwdWJLZXlDcmVkUGFyYW1zOihOU0FycmF5
PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICopcHViS2V5Q3JlZFBhcmFtcwor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgc2VsZi5ycCA9IHJwOworICAgIHNlbGYudXNlciA9IHVzZXI7CisgICAgc2VsZi5wdWJL
ZXlDcmVkUGFyYW1zID0gcHViS2V5Q3JlZFBhcmFtczsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1
YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
YzI5MmMyNjdkYmJlZmM0ZDAxOTM5OGQzNGNjMDk2MmUyMjBhNWI1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2Ug
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgOiBOU09iamVjdAorCisrIChpbnN0YW5j
ZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJ
TEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU0RhdGEgKilpZGVu
dGlmaWVyOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNEYXRhICppZGVudGlmaWVy
OworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PE5TTnVtYmVy
ICo+ICp0cmFuc3BvcnRzOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRl
bnRpYWxEZXNjcmlwdG9yLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2MjMyZjJlODBm
YzhjMzA3YTkyZGY4ODYwOGI4NGRmYWJmYzBjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IubW0KQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIKKworQGltcGxlbWVu
dGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yCisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aElkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXIKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuaWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVk
ZW50aWFsRW50aXR5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVi
bGljS2V5Q3JlZGVudGlhbEVudGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1YzA1NmZiOGExYTRiZWNkNmI4
MDhiN2MxNjkzYzlkMjBkZjlkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5oCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxF
bnRpdHkgOiBOU09iamVjdAorCisrIChpbnN0YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOwor
LSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqbmFtZTsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmljb247CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbEVudGl0eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJs
aWNLZXlDcmVkZW50aWFsRW50aXR5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMGZmY2U1YzM5MWJiNTQ2YTA5
ZTc5NDhmZTBjYTRiMTFjOTczNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbQpAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRW50aXR5LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRW50aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3Ry
aW5nICopbmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgc2VsZi5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iODQ3OWRjMTE3MzhmNjYyZjMyOGQ2MDYwYjUzZGMxYTNiM2Q3M2QyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitXS19DTEFT
U19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZh
Y2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgOiBOU09iamVjdAorCisrIChpbnN0
YW5jZXR5cGUpbmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5B
VkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbGdvcml0aG06KE5TTnVtYmVyICop
YWxnb3JpdGhtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKmFsZ29y
aXRobTsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1l
dGVycy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGM5NmFlZGQzYmUwYWZlYzI4ZGQ2
MTc4MTliNzliMWNjNTViNTczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLm1tCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhB
bGdvcml0aG06KE5TTnVtYmVyICopYWxnb3JpdGhtCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmFsZ29yaXRobSA9IGFs
Z29yaXRobTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZDVhNjFiYzNiNzFjOGVi
NDI5YzhlODQzY2MwZmVlODc3NjI5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oPgor
CitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAY2xhc3MgX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yOworCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIDog
TlNPYmplY3QKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJl
ciAqdGltZW91dDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnJwSWQ7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8
X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmFsbG93Q3JlZGVudGlhbHM7Cisv
KiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnRQcmVmZXJyZWQuKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbjsKK0Bwcm9wZXJ0eSAobnVsbGFibGUs
IG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1
dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Mjhm
NWI4M2JhMWI0MjUyZjQ1ZTZmN2RjOGIxMWNkOTZlY2FkYzhmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5tbQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMu
aCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cworCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51c2VyVmVyaWZpY2F0aW9uID0g
X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOworICAgIHJldHVybiBzZWxm
OworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2U4NjdmYTllZDRjYzRhNzI5MWM1MjE1MTQ5NzkxM2YwNjY1YzE1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUnBFbnRpdHkuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbXBvcnQgPFdlYktpdC9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lmg+CisK
K05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUnBFbnRpdHkgOiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKysgKGluc3RhbmNl
dHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlM
QUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZTsKKwor
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmll
cjsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHku
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MWE3Njc5OGQ3ZjFhYTllZDY5NmY0OGUyMmM4
Y2Y2Y2VlMjEwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5Lm1tCkBAIC0wLDAgKzEsMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxScEVudGl0eS5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJwRW50aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5n
ICopbmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
UHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGU0ZTdiZWRiODBi
MWY5ODMxZWU5YzIxNzcyODE2Y2E3OTBlZDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5
LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
IDxXZWJLaXQvX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5oPgorCitOU19BU1NVTUVfTk9O
TlVMTF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkg
OiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBOU19VTkFWQUlMQUJMRTsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpZGVudGlmaWVy
OihOU0RhdGEgKilpZGVudGlmaWVyIGRpc3BsYXlOYW1lOihOU1N0cmluZyAqKWRpc3BsYXlOYW1l
OworCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNEYXRhICppZGVudGlmaWVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpkaXNwbGF5TmFtZTsKKworQGVuZAor
CitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVu
dGl0eS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZDhiYmJhMzc5ZWI5MjVmNWU0OTc0ZGZmZGZhYTc3YjhiNjc2
MmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lm1tCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5LmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsVXNlckVudGl0eQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAq
KW5hbWUgaWRlbnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllciBkaXNwbGF5TmFtZTooTlNTdHJp
bmcgKilkaXNwbGF5TmFtZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1l
Om5hbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuaWRlbnRpZmllciA9IGlk
ZW50aWZpZXI7CisgICAgc2VsZi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOworICAgIHJldHVy
biBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTFhYzZjODU4MjBmYjNjOGFmMTI1ZTgwNTZkOGZhNjFkY2I3MzU1YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyVmVy
aWZpY2F0aW9uUmVxdWlyZW1lbnQuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KSB7CisgICAg
X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQsCisgICAgX1dLVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkLAorICAgIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1
aXJlbWVudERpc2NvdXJhZ2VkLAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKaW5kZXggMTIxNDg5
YjBlZGY1MjNlYzI3ZjNjMDgyYTI1ZTc5YTE1MzJkMzJlMy4uNDVjZTI3MjY2NjE1NGEyYmY1YTEw
YmU4OTcyNjZjY2JjMWM4ZDhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCkBAIC0yOCw3
ICsyOCwxMCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCi1AY2xhc3MgTEFDb250ZXh0
OworQGNsYXNzIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlOworQGNsYXNzIF9X
S0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZTsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9uczsKIEBjbGFzcyBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNl
OwogQGNsYXNzIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWw7CiAKQEAgLTc1LDYgKzc4LDcgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2UpIHsK
ICAgICBfV0tXZWJBdXRoZW50aWNhdGlvblNvdXJjZUV4dGVybmFsLAogfSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5MTQxPiBPcHRpbWl6ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBBdXRo
ZW50aWNhdGlvblNlcnZpY2UuZnJhbWV3b3JrLgogQHByb3RvY29sIF9XS1dlYkF1dGhlbnRpY2F0
aW9uUGFuZWxEZWxlZ2F0ZSA8TlNPYmplY3Q+CiAKIEBvcHRpb25hbApAQCAtOTEsMTQgKzk1LDIz
IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQogQGludGVyZmFjZSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIDogTlNPYmplY3QKIAogQHBy
b3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbERlbGVnYXRlPiBkZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSwgY29weSkgTlNTdHJpbmcgKnJlbHlpbmdQYXJ0eUlEOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5LCBjb3B5KSBOU1NldCAqdHJhbnNwb3J0czsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgX1dLV2ViQXV0aGVudGljYXRpb25UeXBlIHR5cGU7CiAKICsgKHZvaWQpY2xl
YXJBbGxMb2NhbEF1dGhlbnRpY2F0b3JDcmVkZW50aWFsczsKKysgKEJPT0wpaXNVc2VyVmVyaWZ5
aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlOworCistIChpbnN0YW5jZXR5cGUpaW5p
dDsKIAorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTM5ND4gQWRkcyBDbGllbnREYXRh
SlNPTi4KKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk0ODU+IEFkZHMgZGV0YWlsZWQg
TlNFcnJvci4KKy0gKHZvaWQpbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDooTlNEYXRhICopaGFzaCBv
cHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucyBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVz
cG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWdldEFzc2VydGlvbldpdGhIYXNoOihO
U0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9u
cyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JB
c3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpY2FuY2VsOwogCisv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBEZXByZWNhdGUgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzLgorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0
cmluZyAqcmVseWluZ1BhcnR5SUQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TU2V0ICp0cmFuc3BvcnRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBf
V0tXZWJBdXRoZW50aWNhdGlvblR5cGUgdHlwZTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KaW5kZXggNGFlZTYyOWU4N2JkZTgxMzgy
N2M5Y2I0MmQ0ODJmNzdhMmFlZGUyMS4uNDg1NjNhNmU0OTM4MmI4MWQwNDRhOGQwNWRjOWNlNGNj
NzQ5NzdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTI2LDkgKzI2LDI4IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJ
bnRlcm5hbC5oIgogCisKICNpbXBvcnQgIkxvY2FsQXV0aGVudGljYXRvci5oIgorI2ltcG9ydCAi
TG9jYWxTZXJ2aWNlLmgiCisjaW1wb3J0ICJXS0Vycm9yLmgiCiAjaW1wb3J0ICJXZWJBdXRoZW50
aWNhdGlvblBhbmVsQ2xpZW50LmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudE91dHB1dHNJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvckFzc2VydGlv
blJlc3BvbnNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlv
blJlc3BvbnNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25D
cml0ZXJpYS5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCIKKyNpbXBv
cnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxScEVudGl0eS5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJF
bnRpdHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQXV0aGVudGljYXRpb25Db25zdGFudHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAaW1wbGVtZW50YXRpb24gX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbCB7CkBAIC0zOCw2ICs1NywxNyBAQCBAaW1wbGVtZW50YXRpb24gX1dLV2Vi
QXV0aGVudGljYXRpb25QYW5lbCB7CiAjZW5kaWYKIH0KIAorLSAoaW5zdGFuY2V0eXBlKWluaXQK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3Jh
cHBlcjxBUEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw+KHNlbGYpOworI2VuZGlmCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogCiAtICh2b2lkKWRlYWxsb2MK
QEAgLTEzNSw2ICsxNjUsMjQ4IEBAIC0gKHZvaWQpY2FuY2VsCiAjZW5kaWYKIH0KIAorI2lmIEVO
QUJMRShXRUJfQVVUSE4pCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvckZyb21OU0RhdGEo
TlNEYXRhKiBkYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0
LmFwcGVuZCgoY29uc3QgdWludDhfdCopZGF0YS5ieXRlcywgZGF0YS5sZW5ndGgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJwRW50aXR5ICpycEVudGl0eSkKK3sKKyAgICBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpScEVudGl0eSByZXN1bHQ7CisgICAgcmVz
dWx0Lm5hbWUgPSBycEVudGl0eS5uYW1lOworICAgIHJlc3VsdC5pY29uID0gcnBFbnRpdHkuaWNv
bjsKKyAgICByZXN1bHQuaWQgPSBycEVudGl0eS5pZGVudGlmaWVyOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM6OlVzZXJFbnRpdHkgcHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkoX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVzZXJFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6VXNlckVudGl0eSByZXN1bHQ7CisgICAg
cmVzdWx0Lm5hbWUgPSB1c2VyRW50aXR5Lm5hbWU7CisgICAgcmVzdWx0Lmljb24gPSB1c2VyRW50
aXR5Lmljb247CisgICAgcmVzdWx0LmlkVmVjdG9yID0gdmVjdG9yRnJvbU5TRGF0YSh1c2VyRW50
aXR5LmlkZW50aWZpZXIpOworICAgIHJlc3VsdC5kaXNwbGF5TmFtZSA9IHVzZXJFbnRpdHkuZGlz
cGxheU5hbWU7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHB1Ymxp
Y0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBh
cmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM+IHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwdWJLZXlDcmVkUGFyYW1zLmNvdW50KTsK
KworICAgIGZvciAoX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKnBhcmFtIDogcHVi
S2V5Q3JlZFBhcmFtcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXksIHBhcmFtLmFsZ29yaXRobS5sb25n
TG9uZ1ZhbHVlIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdlYkNvcmU6
OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQgYXV0aGVudGljYXRvclRyYW5zcG9ydChfV0tXZWJBdXRo
ZW50aWNhdGlvblRyYW5zcG9ydCB0cmFuc3BvcnQpCit7CisgICAgc3dpdGNoICh0cmFuc3BvcnQp
IHsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCOgorICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOworICAgIGNhc2UgX1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkM6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpB
dXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmM7CisgICAgY2FzZSBfV0tXZWJBdXRoZW50aWNhdGlv
blRyYW5zcG9ydEludGVybmFsOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRv
clRyYW5zcG9ydDo6SW50ZXJuYWw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0
OjpVc2I7CisgICAgfQorfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JU
cmFuc3BvcnQ+IGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRy
YW5zcG9ydHMpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+
IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0cmFuc3BvcnRzLmNv
dW50KTsKKworICAgIGZvciAoTlNOdW1iZXIgKnRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpCisgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoYXV0aGVudGljYXRvclRyYW5zcG9ydCgoX1dLV2Vi
QXV0aGVudGljYXRpb25UcmFuc3BvcnQpdHJhbnNwb3J0LmludFZhbHVlKSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yPiBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMoTlNBcnJheTxfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqY3JlZGVudGlhbHMpCit7CisgICAgVmVj
dG9yPFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yPiByZXN1bHQ7CisgICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY3JlZGVudGlhbHMuY291bnQpOworCisgICAg
Zm9yIChfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqY3JlZGVudGlhbCA6IGNyZWRl
bnRpYWxzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgV2ViQ29yZTo6UHVibGlj
S2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSwgeyB9LCB2ZWN0b3JGcm9tTlNEYXRhKGNyZWRl
bnRpYWwuaWRlbnRpZmllciksIGF1dGhlbnRpY2F0b3JUcmFuc3BvcnRzKGNyZWRlbnRpYWwudHJh
bnNwb3J0cykgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgT3B0aW9uYWw8
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRv
ckF0dGFjaG1lbnQ+IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KF9XS0F1dGhlbnRpY2F0b3JBdHRh
Y2htZW50IGF0dGFjaG1lbnQpCit7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2Fz
ZSBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbDoKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBjYXNlIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm06CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpB
dXRoZW50aWNhdG9yQXR0YWNobWVudDo6UGxhdGZvcm07CisgICAgY2FzZSBfV0tBdXRoZW50aWNh
dG9yQXR0YWNobWVudENyb3NzUGxhdGZvcm06CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6
Q3Jvc3NQbGF0Zm9ybTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJD
b3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbihfV0tVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXYpCit7CisgICAgc3dpdGNoICh1dikgeworICAgIGNh
c2UgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWlyZWQ6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkOworICAgIGNh
c2UgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVkOgorICAgICAgICByZXR1
cm4gV2ViQ29yZTo6VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7CisgICAg
Y2FzZSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZDoKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OlVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6RGlzY291cmFnZWQ7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZDsKKyAg
ICB9Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zOjpBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhKF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSAqYXV0aGVudGljYXRv
clNlbGVjdGlvbikKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOjpBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgcmVzdWx0OworICAgIHJlc3Vs
dC5hdXRoZW50aWNhdG9yQXR0YWNobWVudCA9IGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KGF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24uYXV0aGVudGljYXRvckF0dGFjaG1lbnQpOworICAgIHJlc3VsdC5y
ZXF1aXJlUmVzaWRlbnRLZXkgPSBhdXRoZW50aWNhdG9yU2VsZWN0aW9uLnJlcXVpcmVSZXNpZGVu
dEtleTsKKyAgICByZXN1bHQudXNlclZlcmlmaWNhdGlvbiA9IHVzZXJWZXJpZmljYXRpb24oYXV0
aGVudGljYXRvclNlbGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
IGF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UoX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZSBhdHRlc3RhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGF0dGVzdGF0aW9uKSB7Cisg
ICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlTm9uZToKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmU7Cisg
ICAgY2FzZSBfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlSW5kaXJlY3Q6CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpJbmRp
cmVjdDsKKyAgICBjYXNlIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VEaXJlY3Q6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNl
OjpEaXJlY3Q7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpO
b25lOworICAgIH0KK30KKworc3RhdGljIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudElucHV0cyBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMoX1dLQXV0
aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zKQoreworICAgIFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyByZXN1bHQ7CisgICAg
cmVzdWx0LmFwcGlkID0gZXh0ZW5zaW9ucy5hcHBpZDsKKyAgICByZXN1bHQuZ29vZ2xlTGVnYWN5
QXBwaWRTdXBwb3J0ID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK
KysgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRv
Q29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zICopb3B0aW9ucworeworICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBy
ZXN1bHQucnAgPSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkob3B0aW9ucy5ycCk7CisgICAg
cmVzdWx0LnVzZXIgPSBwdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eShvcHRpb25zLnVzZXIp
OworCisgICAgcmVzdWx0LnB1YktleUNyZWRQYXJhbXMgPSBwdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1ldGVycyhvcHRpb25zLnB1YktleUNyZWRQYXJhbXMpOworCisgICAgaWYgKG9wdGlvbnMudGlt
ZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5zaWduZWRJ
bnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAgICAgIHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcnMo
b3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpOworICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24pCisgICAgICAgIHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYXV0
aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlv
bik7CisgICAgcmVzdWx0LmF0dGVzdGF0aW9uID0gYXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVy
ZW5jZShvcHRpb25zLmF0dGVzdGF0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9IGF1dGhl
bnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRITikKK3N0
YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2U+IHdrQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRv
clJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHROUyhbW19XS0F1dGhlbnRp
Y2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0
YVdpdGhCeXRlczpkYXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5n
dGgoKV0gZXh0ZW5zaW9uczpuaWwgYXR0ZXN0YXRpb25PYmplY3Q6W05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmRhdGEuYXR0ZXN0YXRpb25PYmplY3QtPmRhdGEoKSBsZW5ndGg6ZGF0YS5hdHRlc3RhdGlv
bk9iamVjdC0+Ynl0ZUxlbmd0aCgpXV0pOworfQorI2VuZGlmCisKKy0gKHZvaWQpbWFrZUNyZWRl
bnRpYWxXaXRoSGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSloYW5kbGVy
Cit7CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBhdXRvIGNhbGxiYWNrID0gW2hhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIChWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNh
dG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgbXV0YWJsZSB7
CisgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OkF1
dGhlbnRpY2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBoYW5kbGVyKHdr
QXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSkuZ2V0KCks
IG5pbCk7CisgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNl
cHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAg
ICAgICB9KTsKKyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21O
U0RhdGEoaGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVh
dGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpXZWJBdXRo
ZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgV1RGOjpudWxsb3B0
LCB7IH0sIHRydWUsIFN0cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKKyNlbmRpZgorfQor
CisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29udmVydFRv
Q29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9ucyAqKW9wdGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBpZiAo
b3B0aW9ucy50aW1lb3V0KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMudGltZW91
dC51bnNpZ25lZEludFZhbHVlOworICAgIGlmIChvcHRpb25zLnJwSWQpCisgICAgICAgIHJlc3Vs
dC5ycElkID0gb3B0aW9ucy5ycElkOworICAgIGlmIChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMp
CisgICAgICAgIHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3JzKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisgICAgcmVzdWx0LnVzZXJWZXJp
ZmljYXRpb24gPSB1c2VyVmVyaWZpY2F0aW9uKG9wdGlvbnMudXNlclZlcmlmaWNhdGlvbik7Cisg
ICAgcmVzdWx0LmV4dGVuc2lvbnMgPSBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1
dHMob3B0aW9ucy5leHRlbnNpb25zKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworI2lmIEVOQUJMRShXRUJfQVVUSE4pCitzdGF0aWMgUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZT4gd2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBSZXRh
aW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4gZXh0ZW5zaW9u
czsKKyAgICBpZiAoZGF0YS5hcHBpZCkKKyAgICAgICAgZXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tf
V0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIGFsbG9jXSBpbml0V2l0aEFw
cGlkOmRhdGEuYXBwaWQudmFsdWUoKV0pOworCisgICAgTlNEYXRhICp1c2VySGFuZGxlID0gbmls
OworICAgIGlmIChkYXRhLnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJIYW5kbGUgPSBbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVuZ3RoOmRhdGEudXNlckhh
bmRsZS0+Ynl0ZUxlbmd0aCgpXTsKKworICAgIHJldHVybiBhZG9wdE5TKFtbX1dLQXV0aGVudGlj
YXRvckFzc2VydGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdp
dGhCeXRlczpkYXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgo
KV0gZXh0ZW5zaW9uczpXVEZNb3ZlKGV4dGVuc2lvbnMpIGF1dGhlbnRpY2F0b3JEYXRhOltOU0Rh
dGEgZGF0YVdpdGhCeXRlczpkYXRhLmF1dGhlbnRpY2F0b3JEYXRhLT5kYXRhKCkgbGVuZ3RoOmRh
dGEuYXV0aGVudGljYXRvckRhdGEtPmJ5dGVMZW5ndGgoKV0gc2lnbmF0dXJlOltOU0RhdGEgZGF0
YVdpdGhCeXRlczpkYXRhLnNpZ25hdHVyZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnNpZ25hdHVyZS0+
Ynl0ZUxlbmd0aCgpXSB1c2VySGFuZGxlOnVzZXJIYW5kbGVdKTsKK30KKyNlbmRpZgorCistICh2
b2lkKWdldEFzc2VydGlvbldpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICop
KWhhbmRsZXIKK3sKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBb
aGFuZGxlciA9IG1ha2VCbG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1
dGhlbnRpY2F0b3JSZXNwb25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBt
dXRhYmxlIHsKKyAgICAgICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2Vi
Q29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhh
bmRsZXIod2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSku
Z2V0KCksIG5pbCk7CisgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
JiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldp
dGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0p
OworICAgICAgICB9KTsKKyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3Rv
ckZyb21OU0RhdGEoaGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0Nv
cmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6Oldl
YkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51
bGxvcHQsIHsgfSwgdHJ1ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlm
Cit9CisKKysgKEJPT0wpaXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxh
YmxlCit7CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICByZXR1cm4gV2ViS2l0OjpMb2NhbFNl
cnZpY2U6OmlzQXZhaWxhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQor
CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBp
bXBsZW1lbnRhdGlvbgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGlu
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE5YjhiN2Y3MjI5NTZkMDVjMGEwMTIxMGE1Y2JkYWI2NGZmNjRlZWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaApAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnM7CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
OworfQorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSkKK0BpbnRlcmZhY2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tUZXN0aW5nKQor
CisvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5NzE0PiBJbnRyb2R1Y2VzIG1vY2sgdGVz
dGluZy4KKysgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29u
dmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zKWNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhl
bnRpY2F0aW9uUmVxdWVzdERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYx
MjVjNmUyMzYxYmQyN2RmYjU4MDIyYmRjMTcyNGQ5Li5kMzg2MzdlNjY4NzI3NDAzMjc4NTZlODky
OTI3ODIyMjRjZDEyY2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1
ZXN0RGF0YS5oCkBAIC00NSwxMSArNDUsMTQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0
IFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNo
OwogICAgIFZhcmlhbnQ8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9u
cywgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOwor
CisgICAgLy8gRklYTUU8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbGxv
d2luZyBkZXByZWNhdGVkIGZpZWxkcy4KICAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gcGFnZTsK
ICAgICBXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHBhbmVsUmVzdWx0IHsgV2ViQXV0aGVu
dGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUgfTsKICAgICBSZWZQdHI8QVBJOjpXZWJB
dXRoZW50aWNhdGlvblBhbmVsPiBwYW5lbDsKICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6Okds
b2JhbEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRDsKICAgICBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEg
ZnJhbWVJbmZvOworCiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAgICAgU3RyaW5n
IGNhY2hlZFBpbjsgLy8gT25seSB1c2VkIHRvIGltcHJvdmUgTkZDIENsaWVudCBQSU4gZXhwZXJp
ZW5jZS4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1OGQyNGE0YjgwNTkzMDliN2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVlLi5jMDk4
YzhjZGNiYWE1M2RiOTZkNTNmMTRiYzY1ZDY2ZmJmOGU1ZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjYsNiArMTEyNiwzOCBA
QAogCQk1NzdGRjc4MjIzNDZFODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5l
bENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc3RkY3ODEyMzQ2RTgxQzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGll
bnQuaCAqLzsgfTsKIAkJNTc3RkY3ODUyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3N0ZGNzgzMjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVs
Q2xpZW50LmggKi87IH07CiAJCTU3OERDMjk4MjE1NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhl
bnRpY2F0aW9uU29mdExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3OERDMjk3MjE1NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9u
U29mdExpbmsuaCAqLzsgfTsKKwkJNTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY1NjI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVi
bGljS2V5Q3JlZGVudGlhbEVudGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5MEE2NTQyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxFbnRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1NzkwQTY1NzI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVu
dGlhbEVudGl0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OTBBNjU1MjU2Nzk5REEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50
aXR5Lm1tICovOyB9OworCQk1NzkwQTY1QTI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbFJwRW50aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzkwQTY1ODI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTc5MEE2NUIyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OTBBNjU5MjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBF
bnRpdHkubW0gKi87IH07CisJCTU3OTBBNjVFMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVXNlckVudGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5MEE2NUMyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxVc2VyRW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NUYyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxVc2VyRW50aXR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc5MEE2NUQyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5Lm1tICovOyB9OworCQk1NzkwQTY2MjI1Njc5Qzg2MDA3N0M1QTcgLyog
X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjYwMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjYzMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjYxMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5tbSAqLzsgfTsKKwkJNTc5MEE2NjYyNTY3OUNFQTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NjQyNTY3OUNFQTAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjY3MjU2NzlDRUEwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2NTI1Njc5Q0VBMDA3N0M1
QTcgLyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tICovOyB9OworCQk1Nzkw
QTY2OTI1Njc5RTAwMDA3N0M1QTcgLyogX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2ODI1
Njc5RTAwMDA3N0M1QTcgLyogX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NkMyNTY3
OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2QTI1Njc5RUI3
MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY2RDI1Njc5RUI3
MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2QjI1Njc5RUI3MDA3
N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IubW0gKi87IH07CisJCTU3
OTBBNjcwMjU2NzlGMUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3OTBBNjZFMjU2NzlGMUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRJbnB1dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1NzkwQTY3MTI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc5MEE2NkYyNTY3OUYxQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbSAqLzsgfTsKKwkJNTc5MEE2NzQyNTY3OUY3NDAwNzdD
NUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjcyMjU2NzlGNzQwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NzUyNTY3OUY3
NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY3MzI1Njc5
Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5tbSAq
LzsgfTsKKwkJNTc5MEE2NzgyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc5MEE2NzYyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTU3OTBBNjc5MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzkwQTY3NzI1NjdBMENEMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLm1tICovOyB9OworCQk1NzkwQTY3QzI1NjdBMTNFMDA3N0M1
QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2N0EyNTY3QTEzRTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY3RDI1
NjdBMTNFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBB
NjdCMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRP
dXRwdXRzLm1tICovOyB9OworCQk1NzkwQTY4MDI1NjdBMUFDMDA3N0M1QTcgLyogX1dLQXV0aGVu
dGljYXRvclJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzkwQTY3RTI1NjdBMUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3Bv
bnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTc5MEE2ODEyNTY3QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjdGMjU2
N0ExQUMwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW0gKi87IH07CisJCTU3
OTBBNjg0MjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5
MEE2ODIyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NTc5MEE2ODUyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc5MEE2ODMyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLm1tICovOyB9OworCQk1NzkwQTY4ODI1NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0aGVu
dGljYXRvckFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY4NjI1NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0aGVudGlj
YXRvckFzc2VydGlvblJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2ODkyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRp
Y2F0b3JBc3NlcnRpb25SZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3OTBBNjg3MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNh
dG9yQXNzZXJ0aW9uUmVzcG9uc2UubW0gKi87IH07CisJCTU3OTBBNjhCMjU2N0E0Q0MwMDc3QzVB
NyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2OEEyNTY3QTRDQzAwNzdDNUE3IC8q
IF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZUludGVybmFsLmggKi87IH07CisJCTU3OTBBNjhEMjU2
N0I0NDkwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzkw
QTY4QzI1NjdCNDQ5MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9u
c2VJbnRlcm5hbC5oICovOyB9OworCQk1NzkwQTY4RjI1NjdCNENGMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjhFMjU2N0I0Q0YwMDc3QzVBNyAvKiBf
V0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovOyB9OworCQk1Nzkw
QTY5MTI1NjdCNUUwMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
T3V0cHV0c0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzkwQTY5MDI1NjdCNUUwMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmggKi87IH07CiAJCTU3OUYxQkY2MjNDODBEQjYw
MEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGNDIzQzgwREI2
MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3OUYxQkY5MjND
ODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
OUYxQkY4MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJl
c3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNTc5RjFCRkMyM0M4MTFDRjAwQzdENEI0IC8qIEFQ
SVdlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OUYxQkZBMjNDODExQ0YwMEM3RDRCNCAvKiBB
UElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi87IH07CkBAIC0zOTgwLDYg
KzQwMTIsMzggQEAKIAkJNTc3RkY3ODMyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXV0aGVudGljYXRpb25QYW5lbENs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzdGRjc4NDIzNDZFQ0FBMDA0
RURGQjkgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU3OERDMjk3MjE1NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0
aW9uU29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5r
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjUxMjU2NURFNkEwMDc3QzVB
NyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1NzkwQTY1NDI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbEVudGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50
aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjU1MjU2Nzk5REEwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTc5MEE2NTgyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxScEVudGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUnBF
bnRpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NTkyNTY3OUIyNjAw
NzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NUMyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxVc2VyRW50aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjVE
MjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY2MDI1Njc5Qzg2MDA3N0M1QTcg
LyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dL
UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTc5MEE2NjEyNTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjY0MjU2
NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjY1MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tB
dXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3OTBBNjY4MjU2NzlFMDAwMDc3QzVBNyAvKiBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjZBMjU2NzlFQjcwMDc3QzVB
NyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NzkwQTY2QjI1Njc5RUI3MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NkUy
NTY3OUYxQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NkYyNTY3OUYxQTAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NzIyNTY3OUY3NDAwNzdDNUE3
IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NzkwQTY3MzI1Njc5Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3OTBBNjc2MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjc3
MjU2N0EwQ0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjdBMjU2N0ExM0Uw
MDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2N0IyNTY3QTEzRTAwNzdDNUE3IC8q
IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3RTI1NjdBMUFDMDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvclJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0
b3JSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3RjI1NjdB
MUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1NzkwQTY4MjI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0
dGVzdGF0aW9uUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLQXV0aGVudGljYXRvckF0dGVz
dGF0aW9uUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2ODMy
NTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9u
c2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjg2MjU2N0EyOEEwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU3OTBBNjg3MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tBdXRoZW50aWNh
dG9yQXNzZXJ0aW9uUmVzcG9uc2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3
OTBBNjhBMjU2N0E0Q0MwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY4QzI1NjdCNDQ5MDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjhFMjU2N0I0Q0YwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NzkwQTY5MDI1NjdCNUUwMDA3N0M1QTcgLyogX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9X
S0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlGMUJGNDIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2Vi
QXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJB
dXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU3OUYxQkY1MjNDODBEQjYwMEM3RDRCNCAvKiBfV0tXZWJBdXRoZW50aWNhdGlvbkFz
c2VydGlvblJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLV2ViQXV0aGVudGlj
YXRpb25Bc3NlcnRpb25SZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTc5RjFCRjgyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9u
UmVzcG9uc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tXZWJBdXRoZW50aWNhdGlvbkFz
c2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTczMTYsNiArNzM4MCwyMiBAQAogCQkJCUY0NDI5MTkxMUZBNTkxMDcwMDJDQzkzRSAvKiBfV0tB
dHRhY2htZW50LmggKi8sCiAJCQkJRjQ0MjkxOTMxRkE1OTMxMTAwMkNDOTNFIC8qIF9XS0F0dGFj
aG1lbnQubW0gKi8sCiAJCQkJRjQ0MjkxOTUxRkE1OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFjaG1l
bnRJbnRlcm5hbC5oICovLAorCQkJCTU3OTBBNjZFMjU2NzlGMUEwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMuaCAqLywKKwkJCQk1NzkwQTY2RjI1Njc5
RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLm1t
ICovLAorCQkJCTU3OTBBNjdBMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4
dGVuc2lvbnNDbGllbnRPdXRwdXRzLmggKi8sCisJCQkJNTc5MEE2N0IyNTY3QTEzRTAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0gKi8sCisJCQkJ
NTc5MEE2OTAyNTY3QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudE91dHB1dHNJbnRlcm5hbC5oICovLAorCQkJCTU3OTBBNjg2MjU2N0EyOEEwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaCAqLywKKwkJCQk1NzkwQTY4NzI1
NjdBMjhBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tICov
LAorCQkJCTU3OTBBNjhFMjU2N0I0Q0YwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0
aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovLAorCQkJCTU3OTBBNjgyMjU2N0EyMUUwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICovLAorCQkJCTU3OTBBNjgz
MjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5t
bSAqLywKKwkJCQk1NzkwQTY4QzI1NjdCNDQ5MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0
dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oICovLAorCQkJCTU3OTBBNjdFMjU2N0ExQUMwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UuaCAqLywKKwkJCQk1NzkwQTY3RjI1NjdB
MUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlLm1tICovLAorCQkJCTU3OTBB
NjhBMjU2N0E0Q0MwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5o
ICovLAorCQkJCTU3OTBBNjY0MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uQ3JpdGVyaWEuaCAqLywKKwkJCQk1NzkwQTY2NTI1Njc5Q0VBMDA3N0M1QTcgLyogX1dL
QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tICovLAogCQkJCTk5RTcxNEMxMUMxMjQ5
RTYwMDY2NUIzQSAvKiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCAqLywKIAkJCQk5OTBEMjhBNzFD
NjQwNEIwMDA5ODY5NzcgLyogX1dLQXV0b21hdGlvblNlc3Npb24uaCAqLywKIAkJCQk5OTBEMjhB
RDFDNjUxOTA0MDA5ODY5NzcgLyogX1dLQXV0b21hdGlvblNlc3Npb24ubW0gKi8sCkBAIC03Mzg4
LDYgKzc0NjgsMjAgQEAKIAkJCQkxQTQzRTgyODE4OEYzQ0RDMDA5RTREMzAgLyogX1dLUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJMUE0M0U4MjcxODhGM0NEQzAwOUU0RDMwIC8q
IF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbSAqLywKIAkJCQk3Qzg5RDJENjFBNkM2QkU2
MDAzQTVGREUgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uSW50ZXJuYWwuaCAqLywKKwkJ
CQk1NzkwQTY3MjI1Njc5Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucy5oICovLAorCQkJCTU3OTBBNjczMjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLm1tICovLAorCQkJCTU3OTBBNjZBMjU2NzlF
QjcwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oICovLAorCQkJ
CTU3OTBBNjZCMjU2NzlFQjcwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvci5tbSAqLywKKwkJCQk1NzkwQTY1NDI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbEVudGl0eS5oICovLAorCQkJCTU3OTBBNjU1MjU2Nzk5REEwMDc3QzVBNyAvKiBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lm1tICovLAorCQkJCTU3OTBBNjYwMjU2NzlDODYw
MDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oICovLAorCQkJCTU3
OTBBNjYxMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cy5tbSAqLywKKwkJCQk1NzkwQTY3NjI1NjdBMENEMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlcXVlc3RPcHRpb25zLmggKi8sCisJCQkJNTc5MEE2NzcyNTY3QTBDRDAwNzdDNUE3
IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5tbSAqLywKKwkJCQk1Nzkw
QTY1ODI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5Lmgg
Ki8sCisJCQkJNTc5MEE2NTkyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxScEVudGl0eS5tbSAqLywKKwkJCQk1NzkwQTY1QzI1Njc5QzExMDA3N0M1QTcgLyogX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCAqLywKKwkJCQk1NzkwQTY1RDI1Njc5QzExMDA3
N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkubW0gKi8sCiAJCQkJQTU1
QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9s
bGVyLmggKi8sCiAJCQkJQTU1QkE4MEQxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYklu
c3BlY3RvclZpZXdDb250cm9sbGVyLm1tICovLAogCQkJCTk5MEUxRTA4MjM4NEE4OEIwMDQ2MDJE
RiAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlclByaXZhdGUuaCAqLywKQEAg
LTc0MzYsNiArNzUzMCw3IEBACiAJCQkJMkQ4Nzg2MUIxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1Vz
ZXJTdHlsZVNoZWV0LmggKi8sCiAJCQkJMkQ4Nzg2MUMxQkRCNTRCRjAwRDAyQUJCIC8qIF9XS1Vz
ZXJTdHlsZVNoZWV0Lm1tICovLAogCQkJCTJEODc4NjFGMUJEQjU3RjUwMEQwMkFCQiAvKiBfV0tV
c2VyU3R5bGVTaGVldEludGVybmFsLmggKi8sCisJCQkJNTc5MEE2NjgyNTY3OUUwMDAwNzdDNUE3
IC8qIF9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oICovLAogCQkJCTFBODFCMzdGMThC
RDY2QUQwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlLmggKi8sCiAJCQkJMUE4MUIzN0Ux
OEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUubW0gKi8sCiAJCQkJMUE4MUIz
ODQxOEJENjczQTAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oICovLApA
QCAtNzQ0NCw2ICs3NTM5LDcgQEAKIAkJCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dL
V2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8sCiAJCQkJNTc0
NzI4Q0YyMzQ1NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCAqLywK
IAkJCQk1NzQ3MjhEMDIzNDU2RTk4MDAxNzAwQUYgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbSAqLywKKwkJCQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbEZvclRlc3RpbmcuaCAqLywKIAkJCQk1NzQ3MjhEMzIzNDU3MEFFMDAxNzAwQUYg
LyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmggKi8sCiAJCQkJMUFFMjg2NzYx
QzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oICovLAogCQkJCTFBRTI4Njc1
MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemUubW0gKi8sCkBAIC0xMDc3NSw2
ICsxMDg3MSwxNiBAQAogCQkJCTYzMTA4Rjk5MUY5NjcxRjcwMEEwREI4NCAvKiBfV0tBcHBsaWNh
dGlvbk1hbmlmZXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NDI5MTkyMUZBNTkx
QzkwMDJDQzkzRSAvKiBfV0tBdHRhY2htZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDQyOTE5
NjFGQTU5NDJBMDAyQ0M5M0UgLyogX1dLQXR0YWNobWVudEludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzkwQTY3MDI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY3QzI1NjdBMTNF
MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2OTEyNTY3QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTc5MEE2ODgyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25S
ZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2OEYyNTY3QjRDRjAwNzdDNUE3IC8q
IF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzkwQTY4NDI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVz
dGF0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjhEMjU2N0I0NDkwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1NzkwQTY4MDI1NjdBMUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGlj
YXRvclJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY4QjI1NjdBNENDMDA3N0M1
QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTU3OTBBNjY2MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9u
Q3JpdGVyaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTcxNEM1MUMxMjRBMDQwMDY2NUIzQSAv
KiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MEQyOEFCMUM2
NDIwQzYwMDk4Njk3NyAvKiBfV0tBdXRvbWF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk3ODhBQ0IxRjQyMUREQTAwQzA4MDAwIC8qIF9XS0F1dG9tYXRpb25TZXNzaW9uQ29uZmln
dXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDgzMSw2ICsxMDkzNywxMyBAQAogCQkJCTkz
MjM2MTFFMUIwMTVEQTgwMEZBOTIzMiAvKiBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5bGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNDNFODJBMTg4RjNDREMwMDlFNEQzMCAvKiBfV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDODlEMkQ3MUE2QzZCRTYwMDNB
NUZERSAvKiBfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTc5MEE2NzQyNTY3OUY3NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjZDMjU2NzlFQjcw
MDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTc5MEE2NTYyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxFbnRpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjYyMjU2NzlDODYwMDc3QzVBNyAv
KiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTc5MEE2NzgyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2NUEyNTY3OUIyNjAwNzdDNUE3IC8q
IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5
MEE2NUUyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlFMzI4RDE4MjE2NUE5MDBGNUQwNEMgLyogX1dLUmVt
b3RlT2JqZWN0SW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFCRkUzQTE4MjlDMUVE
MDA1QjA3MEUgLyogX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBOUUzMjg5MTgyMTYzNjkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDg3MSwxMSArMTA5ODQsMTMgQEAKIAkJCQk3Q0Iz
NjVBRDFEMzFEQzEwMDA3MTU4Q0EgLyogX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDg3ODYxRDFCREI1NEJGMDBEMDJBQkIgLyogX1dLVXNlclN0
eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEODc4NjIwMUJEQjU3RjUwMEQwMkFCQiAv
KiBfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY2
OTI1Njc5RTAwMDA3N0M1QTcgLyogX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTgxQjM4MTE4QkQ2NkFEMDAwN0ZEQUMgLyogX1dLVmlzaXRlZExp
bmtTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4MUIzODUxOEJENjczQTAwMDdGREFDIC8q
IF9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc5RjFC
RjYyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9u
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3OUYxQkY5MjNDODBFQzYwMEM3RDRCNCAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3NDcyOEQxMjM0NTZFOTgwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY1MzI1NjVERUQzMDA3N0M1QTcgLyogX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3
NDcyOEQ0MjM0NTcwQUUwMDE3MDBBRiAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4Njc4MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tX
ZWJzaXRlRGF0YVNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4NjgwMUM3RjkyQzAwMDY5
QUM0RiAvKiBfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MzAwMCw3ICsxMzExNSwyMCBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTc5MEE2NzEy
NTY3OUYxQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBBNjdEMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTc5MEE2ODkyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25S
ZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBBNjg1MjU2N0EyMUUwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTU3OTBBNjgxMjU2N0ExQUMwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2Uu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY2NzI1Njc5Q0VBMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCRDU5
NUMyMjgwRURGNDAwMkIyMkFBIC8qIF9XS0N1c3RvbUhlYWRlckZpZWxkcy5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTU3OTBBNjc1MjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5MEE2NkQyNTY3OUVC
NzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTc5MEE2NTcyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxFbnRpdHkubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY2MzI1Njc5Qzg2MDA3N0M1
QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0gaW4gU291cmNlcyAqLywK
KwkJCQk1NzkwQTY3OTI1NjdBMENEMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5MEE2NUIyNTY3OUIyNjAwNzdD
NUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTU3OTBBNjVGMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkJFRkZEMjM5QjAxMUQwMEJEMDMyRiAv
KiBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTQ5RkJFRkZGMjM5QjAxMkYwMEJEMDMyRiAvKiBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGhpcmRQYXJ0eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5RTcxODlBMjFGNzlEOUUwMDU1RTk3
NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4YTE3Y2Iy
ZDFkYTVlMmRlYzMwYmZmZmRhOTcyM2IxNi4uNjExYWQ4MjQzYzYxY2Y2MTFlODJjYzllYTA1Yzg3
ZTYwYjFlNDJmZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2VuX3Rh
bkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBBdXRo
ZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM2
NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoKTogRGVsZXRl
ZC4KKwogMjAyMC0xMS0xMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTjogcjI2OTUxNCBSZXNldCBzZXJ2ZXIgcG9ydCBiZWZvcmUgcmVz
dGFydGluZyB3ZWJzZXJ2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQppbmRl
eCBhOTRhYjc4OGJmZDE0OTAyZDYzNzg1ZjIwM2Y2MWNlODlmYjYwZDA0Li41YjljNjkwOTQyMzI4
NmNmMzMwMWI5N2FmYWE0ODQwMjY2YzNjMmJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsLm1tCkBAIC0zMywxMSArMzMsMjUgQEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIK
ICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPExvY2Fs
QXV0aGVudGljYXRpb24vTG9jYWxBdXRoZW50aWNhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0
cy5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91
dHB1dHMuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9u
c2UuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25z
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KKyNpbXBvcnQgPFdl
YktpdC9fV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CisjaW1wb3J0IDxX
ZWJLaXQvX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IuaD4KKyNpbXBvcnQgPFdlYktp
dC9fV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0aGVu
dGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1dGhl
bnRpY2F0aW9uUGFuZWwuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYv
UmFuZG9tTnVtYmVyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CkBA
IC0yMzcsNiArMjUxLDcgQEAgLSAoX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAqKXBhbmVsCiBA
ZW5kCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgewogCkBAIC0xNDMyLDYgKzE0NDcsMzU4IEBAIFRFU1QoV2ViQXV0aGVu
dGljYXRpb25QYW5lbCwgTEFHZXRBc3NlcnRpb25NdWx0aXBsZU9yZGVyKQogCiAjZW5kaWYgLy8g
VVNFKEFQUExFX0lOVEVSTkFMX1NESykgfHwgUExBVEZPUk0oSU9TKQogCitURVNUKFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNaW5pbXVu
KQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0
IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRl
bnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRX
aXRoQWxnb3JpdGhtOkAtN10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl0p
OworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVu
dGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRlbnRp
Zmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBOU0Fy
cmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFyYW1z
ID0gQFsgcGFyYW1ldGVycy5nZXQoKSBdOworCisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUnA6
cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5Q3JlZFBhcmFt
c10pOworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVy
dFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBF
Q1RfVFJVRShyZXN1bHQucnAuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LnJwLmlkLmlzTnVsbCgpKTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5uYW1l
LCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC51c2Vy
Lmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXpl
KCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNl
ci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOwor
ICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVk
Iik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAxbHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnRpbWVvdXQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3Jl
ZGVudGlhbHMuc2l6ZSgpLCAwbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRv
clNlbGVjdGlvbiwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0
aW9uLCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQuZXh0ZW5zaW9ucy0+Z29vZ2xlTGVnYWN5QXBwaWRTdXBwb3J0LCBmYWxzZSk7Cit9CisK
K1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9uc01heGltdW1EZWZhdWx0KQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAw
eDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsK
KyAgICBhdXRvIHBhcmFtZXRlcnMxID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKyAgICBhdXRvIHBhcmFt
ZXRlcnMyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzIGFsbG9j
XSBpbml0V2l0aEFsZ29yaXRobTpALTI1N10pOworICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0
TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVu
dGlmaWVyOm5zSWRlbnRpZmllcl0pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUnBFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29t
Il0pOworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNl
ckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIgaWRl
bnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2VlZCJdKTsKKyAgICBO
U0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJLZXlDcmVkUGFy
YW1zID0gQFsgcGFyYW1ldGVyczEuZ2V0KCksIHBhcmFtZXRlcnMyLmdldCgpIF07CisgICAgYXV0
byBhdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0
TlMoW1tfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYWxsb2NdIGluaXRd
KTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQo
KSBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdKTsKKyAgICBbb3B0aW9ucyBzZXRU
aW1lb3V0OkAxMjBdOworICAgIFtvcHRpb25zIHNldEV4Y2x1ZGVDcmVkZW50aWFsczpAWyBkZXNj
cmlwdG9yLmdldCgpIF1dOworICAgIFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246
YXV0aGVudGljYXRvclNlbGVjdGlvbi5nZXQoKV07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5zaW9u
czpleHRlbnNpb25zLmdldCgpXTsKKworICAgIGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dpdGhPcHRpb25zOm9wdGlv
bnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBs
ZS5jb20iKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnAuaWNvbi5pc051bGwoKSk7CisgICAg
RVhQRUNUX1RSVUUocmVzdWx0LnJwLmlkLmlzTnVsbCgpKTsKKworICAgIEVYUEVDVF9XS19TVFJF
UShyZXN1bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIpOworICAgIEVYUEVD
VF9UUlVFKHJlc3VsdC51c2VyLmljb24uaXNOdWxsKCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQu
dXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VR
KG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihp
ZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5
TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQ
YXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFt
c1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1Ymxp
Y0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHVi
S2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1l
b3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNp
emUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50
eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNp
emVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNy
ZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZp
ZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24t
PmF1dGhlbnRpY2F0b3JBdHRhY2htZW50LCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+cmVxdWlyZVJlc2lkZW50S2V5LCBmYWxzZSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZp
Y2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlByZWZlcnJlZCk7CisKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9uLCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJl
bmNlOjpOb25lKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNO
dWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhpbXVtMSkKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJb
XSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVy
ID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlm
aWVyKV07CisgICAgYXV0byBwYXJhbWV0ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisgICAgYXV0
byBwYXJhbWV0ZXJzMiA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC0yNTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJleGFtcGxlLmNvbSJdKTsKKyAgICBbcnAgc2V0SWNvbjpAImh0dHBzLy93d3cuZXhhbXBsZS5j
b20vaWNvbi5qcGciXTsKKyAgICBbcnAgc2V0SWRlbnRpZmllcjpAImV4YW1wbGUuY29tIl07CisK
KyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRp
dHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZp
ZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQiXSk7CisgICAgW3VzZXIg
c2V0SWNvbjpAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciXTsKKworICAgIE5TQXJy
YXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMg
PSBAWyBwYXJhbWV0ZXJzMS5nZXQoKSwgcGFyYW1ldGVyczIuZ2V0KCkgXTsKKworICAgIGF1dG8g
b3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
IGFsbG9jXSBpbml0V2l0aFJwOnJwLmdldCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFy
YW1zOnB1YktleUNyZWRQYXJhbXNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOwor
CisgICAgYXV0byB1c2IgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1
dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXSk7CisgICAgYXV0byBuZmMgPSBhZG9wdE5TKFtOU051
bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDXSk7Cisg
ICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2Vi
QXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0pOworICAgIGF1dG8gY3JlZGVudGlhbCA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdp
dGhJZGVudGlmaWVyOm5zSWRlbnRpZmllcl0pOworICAgIFtjcmVkZW50aWFsIHNldFRyYW5zcG9y
dHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0KCksIGludGVybmFsLmdldCgpIF1dOworICAgIFtvcHRp
b25zIHNldEV4Y2x1ZGVDcmVkZW50aWFsczpAWyBjcmVkZW50aWFsLmdldCgpLCBjcmVkZW50aWFs
LmdldCgpIF1dOworCisgICAgYXV0byBhdXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYWRvcHROUyhb
W19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF0pOworICAgIFth
dXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldEF1dGhlbnRpY2F0b3JBdHRhY2htZW50Ol9XS0F1dGhl
bnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm1dOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9u
IHNldFJlcXVpcmVSZXNpZGVudEtleTpZRVNdOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9u
IHNldFVzZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UmVxdWly
ZWRdOworICAgIFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0aGVudGljYXRv
clNlbGVjdGlvbi5nZXQoKV07CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlvbjpfV0tBdHRl
c3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0XTsKKworICAgIGF1dG8gcmVzdWx0ID0g
W19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0aW9uc1dp
dGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5y
cC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLmlj
b24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29u
LmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCksIHNpemVv
ZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5pZFZlY3Rv
ci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVD
VF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7CisKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOworICAgIEVY
UEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1Yktl
eUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNL
ZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcsIC0yNTcp
OworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVk
ZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQ
RUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEo
KSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7CisgICAg
RVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0
aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVD
cmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0OjpOZmMp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
Ml0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1lbnQsIFB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50
OjpQbGF0Zm9ybSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
LT5yZXF1aXJlUmVzaWRlbnRLZXksIHRydWUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVu
dGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVp
cmVtZW50OjpSZXF1aXJlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9uLCBB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3QpOworfQorCitURVNUKFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNYXhp
bXVtMikKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywg
MHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVz
OmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0byBwYXJhbWV0
ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisgICAgYXV0byBwYXJhbWV0ZXJzMiA9IGFkb3B0TlMo
W1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhBbGdvcml0
aG06QC0yNTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFJwRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJleGFtcGxlLmNvbSJdKTsKKyAgICBb
cnAgc2V0SWNvbjpAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciXTsKKyAgICBbcnAg
c2V0SWRlbnRpZmllcjpAImV4YW1wbGUuY29tIl07CisKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5T
KFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpA
ImphcHBsZXNlZWRAZXhhbXBsZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlO
YW1lOkAiSiBBcHBsZXNlZWQiXSk7CisgICAgW3VzZXIgc2V0SWNvbjpAImh0dHBzLy93d3cuZXhh
bXBsZS5jb20vaWNvbi5qcGciXTsKKworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMgKj4gKnB1YktleUNyZWRQYXJhbXMgPSBAWyBwYXJhbWV0ZXJzMS5nZXQoKSwg
cGFyYW1ldGVyczIuZ2V0KCkgXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJwOnJwLmdl
dCgpIHVzZXI6dXNlci5nZXQoKSBwdWJLZXlDcmVkUGFyYW1zOnB1YktleUNyZWRQYXJhbXNdKTsK
KyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworCisgICAgYXV0byB1c2IgPSBhZG9wdE5T
KFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNC
XSk7CisgICAgYXV0byBuZmMgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dl
YkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0TkZDXSk7CisgICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0
TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJ
bnRlcm5hbF0pOworICAgIGF1dG8gY3JlZGVudGlhbCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmll
cl0pOworICAgIFtjcmVkZW50aWFsIHNldFRyYW5zcG9ydHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0
KCksIGludGVybmFsLmdldCgpIF1dOworICAgIFtvcHRpb25zIHNldEV4Y2x1ZGVDcmVkZW50aWFs
czpAWyBjcmVkZW50aWFsLmdldCgpLCBjcmVkZW50aWFsLmdldCgpIF1dOworCisgICAgYXV0byBh
dXRoZW50aWNhdG9yU2VsZWN0aW9uID0gYWRvcHROUyhbW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rp
b25Dcml0ZXJpYSBhbGxvY10gaW5pdF0pOworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNl
dEF1dGhlbnRpY2F0b3JBdHRhY2htZW50Ol9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50Q3Jvc3NQ
bGF0Zm9ybV07IC8vCisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0UmVxdWlyZVJlc2lk
ZW50S2V5OllFU107CisgICAgW2F1dGhlbnRpY2F0b3JTZWxlY3Rpb24gc2V0VXNlclZlcmlmaWNh
dGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnREaXNjb3VyYWdlZF07IC8vCisgICAg
W29wdGlvbnMgc2V0QXV0aGVudGljYXRvclNlbGVjdGlvbjphdXRoZW50aWNhdG9yU2VsZWN0aW9u
LmdldCgpXTsKKworICAgIFtvcHRpb25zIHNldEF0dGVzdGF0aW9uOl9XS0F0dGVzdGF0aW9uQ29u
dmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdF07IC8vCisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0
aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFt
ZSwgImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5ycC5pY29uLCBA
Imh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGciKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
cmVzdWx0LnJwLmlkLCAiZXhhbXBsZS5jb20iKTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1
bHQudXNlci5uYW1lLCAiamFwcGxlc2VlZEBleGFtcGxlLmNvbSIpOworICAgIEVYUEVDVF9XS19T
VFJFUShyZXN1bHQudXNlci5pY29uLCBAImh0dHBzLy93d3cuZXhhbXBsZS5jb20vaWNvbi5qcGci
KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRl
bnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0
YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEocmVzdWx0LnVzZXIuZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3Jl
ZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVk
UGFyYW1zWzBdLmFsZywgLTcpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFt
c1sxXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsK
KyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKwor
ICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNUX0VRKHJlc3Vs
dC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlh
bFR5cGU6OlB1YmxpY0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9F
UShtZW1jbXAocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlk
ZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9FUShyZXN1bHQu
ZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHMuc2l6ZSgpLCAzbHUpOworICAgIEVYUEVD
VF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMF0sIEF1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVu
dGlhbHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjKTsKKyAg
ICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzJdLCBB
dXRoZW50aWNhdG9yVHJhbnNwb3J0OjpJbnRlcm5hbCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPmF1dGhlbnRpY2F0b3JBdHRhY2htZW50LCBQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpBdXRoZW50aWNhdG9yQXR0YWNobWVudDo6Q3Jv
c3NQbGF0Zm9ybSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
LT5yZXF1aXJlUmVzaWRlbnRLZXksIHRydWUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVu
dGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVp
cmVtZW50OjpEaXNjb3VyYWdlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVzdGF0aW9u
LCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpJbmRpcmVjdCk7Cit9CisKK1RFU1Qo
V2ViQXV0aGVudGljYXRpb25QYW5lbCwgTWFrZUNyZWRlbnRpYWxTUElUaW1lb3V0KQoreworICAg
IHJlc2V0KCk7CisKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCB9OworICAgIHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0
LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAw
eDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAz
LCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRp
ZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBOU0RhdGEgKm5zSGFzaCA9IFtO
U0RhdGEgZGF0YVdpdGhCeXRlczpoYXNoIGxlbmd0aDpzaXplb2YoaGFzaCldOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBh
bGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhb
W19XS1B1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhh
bXBsZS5jb20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRl
bnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUu
Y29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0p
OworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKnB1Yktl
eUNyZWRQYXJhbXMgPSBAWyBwYXJhbWV0ZXJzLmdldCgpIF07CisgICAgYXV0byBvcHRpb25zID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgYWxsb2NdIGlu
aXRXaXRoUnA6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YktleUNyZWRQYXJhbXM6cHViS2V5
Q3JlZFBhcmFtc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRv
IHBhbmVsID0gYWRvcHROUyhbW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgYWxsb2NdIGluaXRd
KTsKKyAgICBbcGFuZWwgbWFrZUNyZWRlbnRpYWxXaXRoSGFzaDpuc0hhc2ggb3B0aW9uczpvcHRp
b25zLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9u
UmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3ZWJBdXRoZW50
aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChyZXNwb25zZSk7
CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4pOworICAgICAg
ICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1dOworICAgIFV0
aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKK1RFU1QoV2ViQXV0aGVu
dGljYXRpb25QYW5lbCwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zTWluaW11bikK
K3sKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0aW9uczpv
cHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgV1RGOjpudWxs
b3B0KTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQucnBJZC5pc051bGwoKSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSwgMGx1KTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJl
ZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShyZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxs
KCkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXh0ZW5zaW9ucy0+Z29vZ2xlTGVnYWN5QXBwaWRT
dXBwb3J0LCBmYWxzZSk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zTWF4aW11bURlZmF1bHQpCit7CisgICAgdWludDhf
dCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEg
Km5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpz
aXplb2YoaWRlbnRpZmllcildOworICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0TlMoW1tfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOm5z
SWRlbnRpZmllcl0pOworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tfV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYWxsb2NdIGluaXRdKTsKKworICAgIGF1dG8g
b3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMg
YWxsb2NdIGluaXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBdOworICAgIFtvcHRp
b25zIHNldEFsbG93Q3JlZGVudGlhbHM6QFsgZGVzY3JpcHRvci5nZXQoKSBdXTsKKyAgICBbb3B0
aW9ucyBzZXRFeHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQg
PSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNX
aXRoT3B0aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91
dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgp
LCAxbHUpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBX
ZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1Rf
RVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRl
bnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNb
MF0uaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsK
KworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlv
blJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5leHRlbnNp
b25zLT5hcHBpZC5pc051bGwoKSk7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwg
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zTWF4aW11bSkKK3sKKyAgICB1aW50OF90
IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAq
bnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNp
emVvZihpZGVudGlmaWVyKV07CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlv
bnMgc2V0VGltZW91dDpAMTIwXTsKKworICAgIGF1dG8gdXNiID0gYWRvcHROUyhbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQl0pOworICAgIGF1
dG8gbmZjID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNh
dGlvblRyYW5zcG9ydE5GQ10pOworICAgIGF1dG8gaW50ZXJuYWwgPSBhZG9wdE5TKFtOU051bWJl
ciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0SW50ZXJuYWxdKTsK
KyAgICBhdXRvIGNyZWRlbnRpYWwgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERl
c2NyaXB0b3IgYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBb
Y3JlZGVudGlhbCBzZXRUcmFuc3BvcnRzOkBbIHVzYi5nZXQoKSwgbmZjLmdldCgpLCBpbnRlcm5h
bC5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGNyZWRlbnRp
YWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisKKyAgICBbb3B0aW9ucyBzZXRVc2VyVmVy
aWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudFJlcXVpcmVkXTsKKworICAg
IGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRJbnB1dHMgYWxsb2NdIGluaXRdKTsKKyAgICBbZXh0ZW5zaW9ucyBzZXRBcHBpZDpAImh0
dHBzLy93d3cuZXhhbXBsZS5jb20vZmlkbyJdOworICAgIFtvcHRpb25zIHNldEV4dGVuc2lvbnM6
ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMu
Z2V0KCldOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVY
UEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDJsdSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNy
ZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVk
ZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQ
RUNUX0VRKG1lbWNtcChyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCks
IGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYWxsb3dDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzLnNpemUoKSwgM2x1KTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1swXSwgQXV0aGVudGlj
YXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlh
bHNbMF0udHJhbnNwb3J0c1sxXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6TmZjKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1syXSwgQXV0aGVu
dGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2Vy
VmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LmV4dGVuc2lvbnMtPmFwcGlkLCAiaHR0cHMvL3d3dy5l
eGFtcGxlLmNvbS9maWRvIik7Cit9CisKK1RFU1QoV2ViQXV0aGVudGljYXRpb25QYW5lbCwgR2V0
QXNzZXJ0aW9uU1BJVGltZW91dCkKK3sKKyAgICByZXNldCgpOworCisgICAgdWludDhfdCBoYXNo
W10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSGFzaCA9IFtOU0Rh
dGEgZGF0YVdpdGhCeXRlczpoYXNoIGxlbmd0aDpzaXplb2YoaGFzaCldOworCisgICAgYXV0byBv
cHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBh
bGxvY10gaW5pdF0pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRv
IHBhbmVsID0gYWRvcHROUyhbW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgYWxsb2NdIGluaXRd
KTsKKyAgICBbcGFuZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6bnNIYXNoIG9wdGlvbnM6b3B0aW9u
cy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNw
b25zZSAqcmVzcG9uc2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIHdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSYW4gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9OVUxMKHJlc3BvbnNlKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGVycm9yLmRvbWFpbiwgV0tFcnJvckRvbWFpbik7CisgICAgICAgIEVY
UEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yVW5rbm93bik7CisgICAgfV07CisgICAgVXRpbDo6
cnVuKCZ3ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikK
</data>
<flag name="review"
          id="431668"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="431684"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414757</attachid>
            <date>2020-11-20 23:36:40 -0800</date>
            <delta_ts>2020-11-21 00:11:58 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-218893-20201120233639.patch</filename>
            <type>text/plain</type>
            <size>150592</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmY0NjE3MGFhZWI1MmVi
NWM4YzRjYzBmY2NhMDgyOGY3MmI2YjUwMi4uNWYxMjczZWU2ODM4ZjgwMWNkYzNiYjRlY2Q5ZWQ2
ZTdiZmI0NjA1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTExLTE3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBs
ZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlz
dGVuc2VuLgorCisgICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICogTW9k
dWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMu
aDoKKyAgICAgICAgVHdlYWtzIHNvbWUgbWFjcm9zIHRvIGV4cG9zZSBhbiBlbXB0eSBzdHJ1Y3Qg
Zm9yIHBvcnRzIHRoYXQgaGF2ZSBXZWJBdXRobiBkaXNhYmxlZC4KKwogMjAyMC0xMS0xMyAgQ2xh
dWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5vbi11bmlm
aWVkIGJ1aWxkIGZpeGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZWM0OGM2YjFhMTY5NGQ0NWQ1YmU2YTc2NTUw
NWZjMTA3ODc1ZTQzLi5kMTA4OTM4MTI1NDMwNjc4YmIyM2JkMTUzZDZkMDBkNDk3MTYwNzg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2Vu
X3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBB
dXRoZW50aWNhdGlvblNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83
MTM2NDczMT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgU1BJIGZvciBBdXRoZW50aWNhdGlvblNlcnZp
Y2VzLkZyYW1ld29yaywgd2hpY2ggaXMgbW9yZSBvciBsZXNzIGEgZGlyZWN0CisgICAgICAgIHRy
YW5zbGF0aW9uIG9mIHRoZSBXZWJBdXRobiBXZWIgSURMcyBhbmQgYSB0aGluIHdyYXBwZXIgb24g
dG9wIG9mIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgV2ViQXV0aG4KKyAgICAgICAgcHJvY2Vzcy4K
KworICAgICAgICBJdCBkZXByZWNhdGVzIHRoZSBleGlzdGluZyBfV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsIFNQSSB3aGljaCBpcyBmb3IgU2FmYXJpIHRvIHNob3cgVUkgb25seS4gVGhpcworICAg
ICAgICBwYXRjaCBkb2VzIG5vdCBqdXN0IHJlcHVycG9zZSB0aGUgU1BJIGJ1dCBhbHNvIG1vZGlm
aWVzIHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucy4gVGhlIG1vc3Qgbm90aWNlYWJsZSBvbmUK
KyAgICAgICAgaXMgdGhlIGNoYW5nZSBvZiBvd25lcnNoaXBzLiBQcmlvciB0byB0aGlzIGNoYW5n
ZSwgQXV0aGVudGljYXRvck1hbmFnZXIgb3ducyB0aGUgQVBJV2ViQXV0aGVudGljYXRpb25QYW5l
bC4KKyAgICAgICAgTm93LCBpdCdzIHRoZSBvcHBvc2l0ZSB3YXkuCisKKyAgICAgICAgU2luY2Ug
dGhlcmUgd2lsbCBiZSBhIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhlIGRlcHJlY2F0ZWQgaW1wbGVt
ZW50YXRpb24gd2lsbCBjb2V4aXN0IHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiwKKyAgICAg
ICAgdGhpcyBwYXRoIGFsc28gbWFya3MgdGhpbmdzIHRoYXQgYXJlIG1lYW50IHRvIGRlcHJlY2F0
ZSBpbiB0aGUgZnV0dXJlIHRvIHJlZHVjZSBjb25mdXNpb25zLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcDoKKyAgICAgICAgKEFQSTo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChB
UEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpjYW5jZWwgY29uc3QpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oOgorICAgICAgICBJbXBsZW1lbnRz
IHRoZSBwbHVtYmluZyBmb3IgdGhlIG5ldyBTUEkgYW5kIG93bnMgdGhlIEF1dGhlbnRpY2F0b3JN
YW5hZ2VyIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbToKKyAgICAgICAgKC1bX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50T3V0cHV0cyBpbml0V2l0aEFwcGlkOl0pOgorICAgICAgICAoLVtfV0tBdXRoZW50
aWNhdG9yUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25zOl0pOgorICAgICAgICAoLVtf
V0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgaW5pdFdpdGhSYXdJZDpleHRlbnNpb25z
OmF1dGhlbnRpY2F0b3JEYXRhOnNpZ25hdHVyZTp1c2VySGFuZGxlOl0pOgorICAgICAgICAoLVtf
V0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSBpbml0V2l0aFJhd0lkOmV4dGVuc2lv
bnM6YXR0ZXN0YXRpb25PYmplY3Q6XSk6CisgICAgICAgICgtW19XS0F1dGhlbnRpY2F0b3JTZWxl
Y3Rpb25Dcml0ZXJpYSBpbml0XSk6CisgICAgICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxD
cmVhdGlvbk9wdGlvbnMgaW5pdFdpdGhScDp1c2VyOnB1YktleUNyZWRQYXJhbXM6XSk6CisgICAg
ICAgICgtW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGluaXRXaXRoVHlwZTppZGVu
dGlmaWVyOl0pOgorICAgICAgICAoLVtfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IGluaXRX
aXRoTmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
aW5pdFdpdGhUeXBlOmFsZzpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIGluaXRdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlhbFJw
RW50aXR5IGluaXRXaXRoTmFtZTpdKToKKyAgICAgICAgKC1bX1dLUHVibGljS2V5Q3JlZGVudGlh
bFVzZXJFbnRpdHkgaW5pdFdpdGhOYW1lOmlkZW50aWZpZXI6ZGlzcGxheU5hbWU6XSk6CisgICAg
ICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgaW5pdF0pOgorICAgICAgICAodmVjdG9y
RnJvbU5TRGF0YSk6CisgICAgICAgIChlbmNvZGVFbnRpdHkpOgorICAgICAgICAocHVibGljS2V5
Q3JlZGVudGlhbFJwRW50aXR5KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50
aXR5KToKKyAgICAgICAgKHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzKToKKyAgICAgICAg
KGF1dGhlbnRpY2F0b3JUcmFuc3BvcnQpOgorICAgICAgICAoYXV0aGVudGljYXRvclRyYW5zcG9y
dHMpOgorICAgICAgICAocHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKToKKyAgICAgICAg
KGF1dGhlbnRpY2F0b3JBdHRhY2htZW50KToKKyAgICAgICAgKHVzZXJWZXJpZmljYXRpb24pOgor
ICAgICAgICAoYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKToKKyAgICAgICAgKGF0dGVz
dGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UpOgorICAgICAgICAoYXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzKToKKyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bCBjb252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3
a0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKToKKyAgICAgICAgKC1bX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbCBtYWtlQ3JlZGVudGlhbFdpdGhIYXNoOm9wdGlvbnM6Y29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgrW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVy
dFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6XSk6CisgICAgICAgICh3a0F1dGhlbnRp
Y2F0b3JBc3NlcnRpb25SZXNwb25zZSk6CisgICAgICAgICgtW19XS1dlYkF1dGhlbnRpY2F0aW9u
UGFuZWwgZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6b3B0aW9uczpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKCtbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBpc1VzZXJWZXJpZnlpbmdQbGF0
Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGVdKToKKyAgICAgICAgSW1wbGVtZW50cyB0aGUgU1BJ
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0
aW9uUmVxdWVzdERhdGEuaDoKKyAgICAgICAgTWFya3MgdGhpbmdzIGFzIHRvIGRlcHJlY2F0ZS4K
KwogMjAyMC0xMS0xMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW21hY09TXSBJc3N1ZSBzYW5kYm94IGV4dGVuc2lvbiB0byB0aGUgV2ViQ29udGVudCBw
cm9jZXNzIGZvciBjb20uYXBwbGUubHNrZGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmgKaW5kZXggOGY5MzU2MWRlMDM2MzcxNTk1NzkxZGZiYTBjZWMyYmJjYjhhYTRiMi4u
YmMzMzExOGI1OGYzNWZhODAzOGQ3ZDNjMGUzMzc3YzE0OWU3OGY3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25j
ZQogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2luY2x1ZGUgIkF0dGVzdGF0aW9uQ29udmV5
YW5jZVByZWZlcmVuY2UuaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGll
bnRJbnB1dHMuaCIKICNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKQEAgLTM0LDEwICszMywxMiBA
QAogI2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlLmgiCiAjaW5jbHVkZSAiVXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHsKKyNpZiBFTkFCTEUoV0VCX0FVVEhO
KQogICAgIGVudW0gY2xhc3MgQXV0aGVudGljYXRvckF0dGFjaG1lbnQgewogICAgICAgICBQbGF0
Zm9ybSwKICAgICAgICAgQ3Jvc3NQbGF0Zm9ybQpAQCAtODksOCArOTAsMTAgQEAgc3RydWN0IFB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zPiBkZWNvZGUoRGVjb2RlciYpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCiB9Owog
CisjaWYgRU5BQkxFKFdFQl9BVVRITikKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlBhcmFtZXRlcnM6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewpAQCAtMTk2LDkgKzE5OSwxMSBAQCBPcHRpb25hbDxQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRp
b25PcHRpb25zOgogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVVEhOKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNpZiBFTkFCTEUoV0VCX0FVVEhO
KQogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ+IHsKQEAgLTIxMCw1ICsyMTUsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCi0KICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmgKaW5kZXggMjJkYTMyNTFhZDAxZmY1Y2M3
ODVhMWRhN2M4ZGYwZmZkM2Y3NzkzYS4uNzlhNWVjOWQwOTFkMGE0OTQ0NDJhMjVjMzE4MTRiMTQw
NDBkYWFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCkBAIC0yNiwx
NiArMjYsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLQogI2lu
Y2x1ZGUgIkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIgogI2luY2x1ZGUg
IkJ1ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgewor
I2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAgQnVmZmVyU291cmNlIGNoYWxsZW5nZTsKICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gdGltZW91dDsKICAgICBtdXRhYmxlIFN0cmluZyBycElkOwpAQCAt
NDUsOCArNDYsMTAgQEAgc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyB7
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVVEhOKQogfTsKIAorI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAvLyBOb3QgZXZl
cnkgbWVtYmVyIGlzIGVuY29kZWQuCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdApAQCAtODQsNyArODcsNiBAQCBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnM+IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uczo6ZAogCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwu
Y3BwCmluZGV4IGU1Y2I0NzM4NjliZjE3ZjQwMzBkODNmZWZkYjQ4ZGM0MmEyMzk2NzEuLmZmZjMz
MDE4YTIwYTFjODdlMGMwN2Q0ODk0OGM3NzczNGE2N2E1ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAK
QEAgLTQxLDEwICs0MSwxNiBAQCBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gV2ViQXV0aGVu
dGljYXRpb25QYW5lbDo6Y3JlYXRlKGNvbnN0IEF1dGhlbnRpY2F0b3JNYQogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwobWFuYWdlciwgcnBJZCwgdHJhbnNw
b3J0cywgdHlwZSkpOwogfQogCitXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNh
dGlvblBhbmVsKCkKKyAgICA6IG1fbWFuYWdlcihtYWtlVW5pcXVlPEF1dGhlbnRpY2F0b3JNYW5h
Z2VyPigpKQorICAgICwgbV9jbGllbnQobWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50PigpKQoreworfQorCiBXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50
aWNhdGlvblBhbmVsKGNvbnN0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyJiBtYW5hZ2VyLCBjb25zdCBX
VEY6OlN0cmluZyYgcnBJZCwgY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzLCBDbGllbnRE
YXRhVHlwZSB0eXBlKQotICAgIDogbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQorICAg
IDogbV9jbGllbnQobWFrZVVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Pigp
KQorICAgICwgbV93ZWFrTWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKICAgICAsIG1fcnBJ
ZChycElkKQotICAgICwgbV9jbGllbnQoV1RGOjptYWtlVW5pcXVlUmVmPFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxDbGllbnQ+KCkpCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5cGUpCiB7CiAgICAg
bV90cmFuc3BvcnRzID0gVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+KCk7CkBAIC01OSwx
MCArNjUsMTYgQEAgV2ViQXV0aGVudGljYXRpb25QYW5lbDo6V2ViQXV0aGVudGljYXRpb25QYW5l
bChjb25zdCBBdXRoZW50aWNhdG9yTWFuYWdlciYgbWFuYWcKIAogV2ViQXV0aGVudGljYXRpb25Q
YW5lbDo6fldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoKSA9IGRlZmF1bHQ7CiAKK3ZvaWQgV2ViQXV0
aGVudGljYXRpb25QYW5lbDo6aGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3RE
YXRhJiYgcmVxdWVzdCwgQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9tYW5h
Z2VyKTsKKyAgICBtX21hbmFnZXItPmhhbmRsZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwgV1RG
TW92ZShjYWxsYmFjaykpOworfQorCiB2b2lkIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OmNhbmNl
bCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5jYW5j
ZWxSZXF1ZXN0KCp0aGlzKTsKKyAgICBpZiAobV93ZWFrTWFuYWdlcikKKyAgICAgICAgbV93ZWFr
TWFuYWdlci0+Y2FuY2VsUmVxdWVzdCgqdGhpcyk7CiB9CiAKIHZvaWQgV2ViQXV0aGVudGljYXRp
b25QYW5lbDo6c2V0Q2xpZW50KFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50
PiYmIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
V2ViQXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IGNjNDJhNWY2YzU2MDk4NjhlYjM0MWQxYjMy
MTU0Mjg0NzgwODM2NjQuLjgzNjIwZGI0YjFlYzZmZTI3MzNjNjY5YWYyMTJlODk2M2RhNTFmMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNh
dGlvblBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwuaApAQCAtMzUsMTAgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGVudW0gY2xhc3MgQ2xpZW50RGF0YVR5cGUgOiBib29sOworCitjbGFzcyBBdXRoZW50aWNh
dG9yUmVzcG9uc2U7CisKK3N0cnVjdCBFeGNlcHRpb25EYXRhOwogfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOworCitzdHJ1Y3QgV2ViQXV0aGVudGlj
YXRpb25SZXF1ZXN0RGF0YTsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00NywyNSArNTMsMzUg
QEAgY2xhc3MgV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudDsKIAogY2xhc3MgV2ViQXV0aGVu
dGljYXRpb25QYW5lbCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6V2Vi
QXV0aGVudGljYXRpb25QYW5lbD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJBdXRoZW50aWNh
dGlvblBhbmVsPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFzaFNldDxX
ZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0LCBXVEY6OkludEhhc2g8V2ViQ29yZTo6QXV0
aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6
QXV0aGVudGljYXRvclRyYW5zcG9ydD4+OworICAgIHVzaW5nIFJlc3BvbnNlID0gVmFyaWFudDxS
ZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvclJlc3BvbnNlPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT47CisgICAgdXNpbmcgQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc3BvbnNl
JiYpPjsKIAotICAgIHN0YXRpYyBSZWY8V2ViQXV0aGVudGljYXRpb25QYW5lbD4gY3JlYXRlKGNv
bnN0IFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXImLCBjb25zdCBXVEY6OlN0cmluZyYgcnBJ
ZCwgY29uc3QgVHJhbnNwb3J0U2V0JiwgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUpOworICAgIFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwoKTsKICAgICB+V2ViQXV0aGVudGljYXRpb25QYW5lbCgpOwog
Ci0gICAgV1RGOjpTdHJpbmcgcnBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnBJZDsgfQotICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiYgdHJhbnNwb3J0cygp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNwb3J0czsgfQotICAgIFdlYkNvcmU6OkNsaWVudERhdGFU
eXBlIGNsaWVudERhdGFUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnREYXRhVHlwZTsgfQor
ICAgIHZvaWQgaGFuZGxlUmVxdWVzdChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERh
dGEmJiwgQ2FsbGJhY2smJik7CiAgICAgdm9pZCBjYW5jZWwoKSBjb25zdDsKIAogICAgIGNvbnN0
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQmIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50LmdldCgpOyB9CiAgICAgdm9pZCBzZXRDbGllbnQoVW5pcXVlUmVmPFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQ+JiYpOwogCisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS83
MTUwOTg0OD4gUmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGVwcmVjYXRlZCBtZXRob2RzLgorICAgIHVz
aW5nIFRyYW5zcG9ydFNldCA9IEhhc2hTZXQ8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9y
dCwgV1RGOjpJbnRIYXNoPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+LCBXVEY6OlN0
cm9uZ0VudW1IYXNoVHJhaXRzPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+PjsKKyAg
ICBzdGF0aWMgUmVmPFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw+IGNyZWF0ZShjb25zdCBXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRy
YW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKKyAgICBXVEY6OlN0cmluZyBy
cElkKCkgY29uc3QgeyByZXR1cm4gbV9ycElkOyB9CisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+JiB0cmFuc3BvcnRzKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc3BvcnRzOyB9CisgICAgV2ViQ29yZTo6Q2xpZW50RGF0YVR5cGUgY2xpZW50RGF0YVR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGFUeXBlOyB9CisKIHByaXZhdGU6CisgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS83MTUwOTg0OD4gUmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGVw
cmVjYXRlZCBtZXRob2QuCiAgICAgV2ViQXV0aGVudGljYXRpb25QYW5lbChjb25zdCBXZWJLaXQ6
OkF1dGhlbnRpY2F0b3JNYW5hZ2VyJiwgY29uc3QgV1RGOjpTdHJpbmcmIHJwSWQsIGNvbnN0IFRy
YW5zcG9ydFNldCYsIFdlYkNvcmU6OkNsaWVudERhdGFUeXBlKTsKIAotICAgIFdlYWtQdHI8V2Vi
S2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIFdURjo6U3RyaW5nIG1f
cnBJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcj4g
bV9tYW5hZ2VyOyAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcxNTA5ODQ4PiBDaGFuZ2UgdG8g
VW5pcXVlUmVmLgogICAgIFVuaXF1ZVJlZjxXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50PiBt
X2NsaWVudDsKKworICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+IFJlbW92
ZSB0aGUgZm9sbG93aW5nIGRlcHJlY2F0ZWQgZmllbGRzLgorICAgIFdlYWtQdHI8V2ViS2l0OjpB
dXRoZW50aWNhdG9yTWFuYWdlcj4gbV93ZWFrTWFuYWdlcjsKKyAgICBXVEY6OlN0cmluZyBtX3Jw
SWQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+IG1fdHJhbnNw
b3J0czsKICAgICBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSBtX2NsaWVudERhdGFUeXBlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50
aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMWRlMmNlNzY0MWU4OGM1OWEwYmFlMjBhMDQyZGE3YjRiNmE0MjA0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVH
SU4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyA6
IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKmFwcGlkOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudElucHV0cy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQz
NzVjNDg3NTUxMWQ4OGY5MzgyNjc1Yjk0Yzk2NjY0NjlmYTcwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRJbnB1dHMubW0KQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRJbnB1dHMKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50T3V0cHV0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4MjRiNzllOWQ4NTYwMGRhZWFkNDc4NmY1OGJm
ZjgwOGRiMGRhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0
L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
TlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS0F1dGhlbnRpY2F0aW9uRXh0
ZW5zaW9uc0NsaWVudE91dHB1dHMgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIEJPT0wgYXBwaWQ7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcwMTcxZmZiZjM1NDNjMDc3MDU5OWRhMTQzN2E3NTFlMThhNGFhMjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVu
dGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4
dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgiCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFw
cGlkOihCT09MKWFwcGlkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBfYXBwaWQgPSBhcHBpZDsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudE91dHB1dHNJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3NTVjNmIzMTg1NDQ2MmYyZmQ2
ZTZmNjgyNjdmNWUxYjA1Zjk3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0
c0ludGVybmFsLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzLmgiCisK
K05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50T3V0cHV0cyAoKQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBcHBp
ZDooQk9PTClhcHBpZDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tB
dXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYWVmNzA5MWI1MmEy
YzhjY2JhNzI1NzcxYmNjZjExOTE3ZWViNGMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25z
ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9y
dCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oPgorCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlIDog
X1dLQXV0aGVudGljYXRvclJlc3BvbnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgTlNEYXRhICphdXRoZW50aWNhdG9yRGF0YTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNEYXRhICpzaWduYXR1cmU7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMs
IHJlYWRvbmx5KSBOU0RhdGEgKnVzZXJIYW5kbGU7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5V
TExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZThjZmFlYWNiOTRiNWI2NTZhNGFjOWEzOTk4MGRhOGM1ZWM3NWU1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZS5tbQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9u
c2UuaCIKKworI2ltcG9ydCAiX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0
cy5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCIKKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVudGF0aW9uIF9XS0F1dGhlbnRpY2F0b3JB
c3NlcnRpb25SZXNwb25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRh
ICopcmF3SWQgZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudE91dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdXRoZW50aWNhdG9yRGF0YTooTlNEYXRhICop
YXV0aGVudGljYXRvckRhdGEgc2lnbmF0dXJlOihOU0RhdGEgKilzaWduYXR1cmUgdXNlckhhbmRs
ZTooTlNEYXRhICopdXNlckhhbmRsZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhSYXdJZDpyYXdJZCBleHRlbnNpb25zOldURk1vdmUoZXh0ZW5zaW9ucyldKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9hdXRoZW50aWNhdG9yRGF0YSA9IGF1dGhlbnRpY2F0b3JEYXRh
OworICAgIF9zaWduYXR1cmUgPSBzaWduYXR1cmU7CisgICAgX3VzZXJIYW5kbGUgPSB1c2VySGFu
ZGxlOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50
aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiODFlNTdlMzU4
MjU1YTY5MjA4MDI2MmJlMzAzYjY0NzUzMjNlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3Bv
bnNlSW50ZXJuYWwuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oIgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAY2xhc3Mg
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0czsKKworQGludGVyZmFjZSBf
V0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UgKCkKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVuc2lvbnM6KFJldGFpblB0cjxfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzPiYmKWV4dGVuc2lvbnMgYXV0aGVudGlj
YXRvckRhdGE6KE5TRGF0YSAqKWF1dGhlbnRpY2F0b3JEYXRhIHNpZ25hdHVyZTooTlNEYXRhICop
c2lnbmF0dXJlIHVzZXJIYW5kbGU6KE5TRGF0YSAqKXVzZXJIYW5kbGU7CisKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk1MGY3OWU2NTY1ZWQ2Yzc5ODQzZTc2ZWFiYjlhODYzNDRhYjNi
ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9fV0tBdXRoZW50aWNh
dG9yUmVzcG9uc2UuaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworV0tfQ0xBU1NfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9X
S0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIDogX1dLQXV0aGVudGljYXRvclJlc3Bv
bnNlCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNEYXRhICphdHRlc3RhdGlv
bk9iamVjdDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTZmOTJhNWEwZDM2
ZDcyNDZjY2E4NTg4MmQ4MGQ2NjAwNjI3MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlLm1tCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmgiCisKKyNpbXBv
cnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCIKKyNpbXBvcnQg
Il9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZUludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJZDooTlNEYXRhICopcmF3SWQgZXh0
ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHM+JiYpZXh0ZW5zaW9ucyBhdHRlc3RhdGlvbk9iamVjdDooTlNEYXRhICopYXR0ZXN0YXRpb25P
YmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoUmF3SWQ6cmF3SWQgZXh0
ZW5zaW9uczpXVEZNb3ZlKGV4dGVuc2lvbnMpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBfYXR0ZXN0YXRpb25PYmplY3QgPSBhdHRlc3RhdGlvbk9iamVjdDsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25S
ZXNwb25zZUludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWExODk0YWRjMjI2ZjhkOThhNDk3NWMwMDli
NThkZGRjOWVkNmI0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVybmFsLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0ICJf
V0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oIgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAY2xhc3MgX1dLQXV0aGVudGlj
YXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0czsKKworQGludGVyZmFjZSBfV0tBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZSAoKQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSYXdJ
ZDooTlNEYXRhICopcmF3SWQgZXh0ZW5zaW9uczooUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHM+JiYpZXh0ZW5zaW9ucyBhdHRlc3RhdGlvbk9iamVjdDoo
TlNEYXRhICopYXR0ZXN0YXRpb25PYmplY3Q7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0
aGVudGljYXRvclJlc3BvbnNlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLQXV0aGVudGljYXRvclJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRjZDcxMjZhZjRmZThiMzdk
Y2Y3MzdkMjBmY2ViMDdjNGFkNTk5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UuaApAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0Zv
dW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK0BjbGFzcyBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnND
bGllbnRPdXRwdXRzOworCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLQXV0aGVudGljYXRvclJlc3BvbnNlIDogTlNP
YmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0RhdGEgKnJhd0lkOwor
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCByZWFkb25seSwgc3Ryb25nKSBfV0tBdXRo
ZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzICpleHRlbnNpb25zOworCitAZW5kCisK
K05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzM1ODg0YjI0NDk3ODJiYjU3ZDJlY2UzYWVkMDJhZDJiZDFlZDhiMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9y
UmVzcG9uc2UubW0KQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5oIgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclJl
c3BvbnNlIHsKKyAgICBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
T3V0cHV0cz4gX2V4dGVuc2lvbnM7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJhd0lk
OihOU0RhdGEgKilyYXdJZCBleHRlbnNpb25zOihSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRpb25F
eHRlbnNpb25zQ2xpZW50T3V0cHV0cz4mJilleHRlbnNpb25zCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcmF3SWQgPSByYXdJ
ZDsKKyAgICBfZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgKilleHRlbnNpb25z
Cit7CisgICAgcmV0dXJuIF9leHRlbnNpb25zLmdldCgpOworfQorCitAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclJlc3Bv
bnNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRo
ZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0MzkyNjM5YTc5NjRhNTJi
YjIyYmVlNTA2ZmQ5ZTZkOWE0Y2I0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50ZXJuYWwuaApA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIl9X
S0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitO
U19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAY2xhc3MgX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50T3V0cHV0czsKKworQGludGVyZmFjZSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2Ug
KCkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmF3SWQ6KE5TRGF0YSAqKXJhd0lkIGV4dGVu
c2lvbnM6KFJldGFpblB0cjxfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRz
PiYmKWV4dGVuc2lvbnM7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclNl
bGVjdGlvbkNyaXRlcmlhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
QXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODBhYTgzZDZkMWNk
ZWVhY2IxMjQ1OTRlNDY1YTdmMmIyZjAyMmQ1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVy
aWEuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBv
cnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50Lmg+
CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50KSB7CisgICAgX1dLQXV0aGVudGljYXRvckF0dGFj
aG1lbnRBbGwsCisgICAgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRQbGF0Zm9ybSwKKyAgICBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudENyb3NzUGxhdGZvcm0sCit9IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK1dLX0NMQVNTX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tB
dXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgOiBOU09iamVjdAorCisvKiFAZGlzY3Vzc2lv
biBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudEFsbC4qLwor
QHByb3BlcnR5IChub25hdG9taWMpIF9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50IGF1dGhlbnRp
Y2F0b3JBdHRhY2htZW50OworCisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBO
Ty4qLworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgcmVxdWlyZVJlc2lkZW50S2V5OworCisv
KiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnRQcmVmZXJyZWQuKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbjsKKworQGVuZAorCitOU19BU1NVTUVf
Tk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg4ZDA0M2RlNTA3NDc2YzA0N2JhODNjODgwMmZhZGQwN2RjODc4MWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXV0aGVu
dGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLm1tCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25D
cml0ZXJpYS5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNy
aXRlcmlhCisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmF1dGhlbnRpY2F0b3JB
dHRhY2htZW50ID0gX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRBbGw7CisgICAgc2VsZi5yZXF1
aXJlUmVzaWRlbnRLZXkgPSBOTzsKKyAgICBzZWxmLnVzZXJWZXJpZmljYXRpb24gPSBfV0tVc2Vy
VmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
K0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM4ZTU1N2M3YzBiM2U5NzM2YjFiM2ExNWE0NjI2NzcyNjg3NjU5ZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVH
SU4KKworQGNsYXNzIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0czsKK0Bj
bGFzcyBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7CitAY2xhc3MgX1dLUHVibGlj
S2V5Q3JlZGVudGlhbERlc2NyaXB0b3I7CitAY2xhc3MgX1dLUHVibGljS2V5Q3JlZGVudGlhbFBh
cmFtZXRlcnM7CitAY2xhc3MgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0
eTsKK0BjbGFzcyBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTsKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSkgewor
ICAgIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VOb25lLAorICAgIF9XS0F0dGVz
dGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2VJbmRpcmVjdCwKKyAgICBfV0tBdHRlc3RhdGlvbkNv
bnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0LAorfSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9ucyA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFJlbHlpbmdQYXJ0eTooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
bHlpbmdQYXJ0eUVudGl0eSAqKXJlbHlpbmdQYXJ0eSB1c2VyOihfV0tQdWJsaWNLZXlDcmVkZW50
aWFsVXNlckVudGl0eSAqKXVzZXIgcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnM6KE5TQXJy
YXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgKj4gKilwdWJsaWNLZXlDcmVkZW50
aWFsUGFyYW1hdGVyczsKKworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSAqcmVseWluZ1BhcnR5OworQHByb3BlcnR5
IChub25hdG9taWMsIHN0cm9uZykgX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKnVz
ZXI7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5PF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1hdGVyczsKKwor
QHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqdGltZW91dDsK
K0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNBcnJheTxfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvciAqPiAqZXhjbHVkZUNyZWRlbnRpYWxzOworQHByb3BlcnR5
IChudWxsYWJsZSwgbm9uYXRvbWljLCBzdHJvbmcpIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25D
cml0ZXJpYSAqYXV0aGVudGljYXRvclNlbGVjdGlvbjsKKworLyohQGRpc2N1c3Npb24gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgX1dLQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVucHJlbmNlTm9uZS4q
LworQHByb3BlcnR5IChub25hdG9taWMpIF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVu
Y2UgYXR0ZXN0YXRpb247CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHN0cm9uZykg
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzICpleHRlbnNpb25zOworCitA
ZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9ucy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmQ1YjdiNGUzMWI0NzUzYzE0NTJm
MThlZjRjMWY1ZDRiYzIyMjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMubW0K
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oIgorCisjaW1wb3J0ICJf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5LmgiCisjaW1wb3J0ICJfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhSZWx5aW5nUGFydHk6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkg
KilyZWx5aW5nUGFydHkgdXNlcjooX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkgKil1
c2VyIHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWF0ZXJzOihOU0FycmF5PF9XS1B1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICopcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnMKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHNlbGYucmVseWluZ1BhcnR5ID0gcmVseWluZ1BhcnR5OworICAgIHNlbGYudXNlciA9IHVz
ZXI7CisgICAgc2VsZi5wdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1hdGVycyA9IHB1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWF0ZXJzOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMjkyYzI2N2RiYmVm
YzRkMDE5Mzk4ZDM0Y2MwOTYyZTIyMGE1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Iu
aApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQg
PFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvciA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZpZXI7CisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkg
KG51bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TQXJyYXk8TlNOdW1iZXIgKj4gKnRyYW5zcG9y
dHM7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0
b3IubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbERlc2NyaXB0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYyMzJmMmU4MGZjOGMzMDdhOTJkZjg4
NjA4Yjg0ZGZhYmZjMGMzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5tbQpAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIgorCitAaW1wbGVtZW50YXRpb24gX1dLUHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRl
bnRpZmllcjooTlNEYXRhICopaWRlbnRpZmllcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50
aWFsRW50aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVjMDU2ZmI4YTFhNGJlY2Q2YjgwOGI3YzE2OTNjOWQy
MGRmOWRhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5LmgKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitOU19BU1NVTUVfTk9OTlVM
TF9CRUdJTgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSA6IE5TT2Jq
ZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcgTlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5
cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5T
U3RyaW5nICopbmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpu
YW1lOworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWNv
bjsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRp
YWxFbnRpdHkubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MwZmZjZTVjMzkxYmI1NDZhMDllNzk0OGZlMGNhNGIx
MWM5NzM3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lm1tCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRl
bnRpYWxFbnRpdHkuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxF
bnRpdHkKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLm5hbWUgPSBuYW1lOworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4NDc5ZGMxMTcz
OGY2NjJmMzI4ZDYwNjBiNTNkYzFhM2IzZDczZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRl
cnMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBv
cnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUGFyYW1ldGVycyA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSluZXcg
TlNfVU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEFsZ29yaXRobTooTlNOdW1iZXIgKilhbGdvcml0aG07CisK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqYWxnb3JpdGhtOworCitAZW5k
CisKK05TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWV0ZXJzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4Yzk2YWVkZDNiZTBhZmVjMjhkZDYxNzgxOWI3OWIxY2M1
NWI1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0KQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxQYXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFsZ29yaXRobTooTlNO
dW1iZXIgKilhbGdvcml0aG0KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYWxnb3JpdGhtID0gYWxnb3JpdGhtOworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZWx5aW5nUGFydHlFbnRpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTZlYTQ0ODUzNTk1ZDAyNjczZTA4
MjQ3N2FhYzMyOTE2YTg5NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHku
aApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQg
PFdlYktpdC9fV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lmg+CisKK05TX0FTU1VNRV9OT05O
VUxMX0JFR0lOCisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5
RW50aXR5IDogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eQorCisrIChpbnN0YW5jZXR5cGUp
bmV3IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWU7CisKK0Bwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisK
K0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVu
dGl0eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlD
cmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NzQyMDQ3NWI2ZWEz
MjMwMzhmNTdlYTdjMWE4MDYzMTEwOGMyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0
eUVudGl0eS5tbQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5Lmgi
CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50
aXR5CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhOYW1lOm5hbWVdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliODdiYWZkYjA1NmU1ZTVh
ODRjZmQzZTZiMTljNDk3MDBiMWMxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oPgor
CitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAY2xhc3MgX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50SW5wdXRzOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlw
dG9yOworCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSkKK0BpbnRlcmZhY2UgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIDog
TlNPYmplY3QKKworQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJl
ciAqdGltZW91dDsKK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnJlbHlpbmdQYXJ0eUlkZW50aWZpZXI7CitAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9t
aWMsIGNvcHkpIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgKj4gKmFs
bG93Q3JlZGVudGlhbHM7CisvKiFAZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfV0tV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQcmVmZXJyZWQuKi8KK0Bwcm9wZXJ0eSAobm9uYXRv
bWljKSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQgdXNlclZlcmlmaWNhdGlvbjsKK0Bw
cm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgc3Ryb25nKSBfV0tBdXRoZW50aWNhdGlvbkV4
dGVuc2lvbnNDbGllbnRJbnB1dHMgKmV4dGVuc2lvbnM7CisKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MjhmNWI4M2JhMWI0MjUyZjQ1ZTZmN2RjOGIxMWNkOTZlY2FkYzhmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5tbQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnMuaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucworCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi51
c2VyVmVyaWZpY2F0aW9uID0gX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50UHJlZmVycmVk
OworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQdWJsaWNLZXlDcmVkZW50aWFs
VXNlckVudGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwZTRlN2JlZGI4MGIxZjk4MzFlZTljMjE3NzI4MTZj
YTc5MGVkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaApAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9fV0tQdWJsaWNL
ZXlDcmVkZW50aWFsRW50aXR5Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK1dLX0NM
QVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVy
ZmFjZSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eSA6IF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxFbnRpdHkKKworKyAoaW5zdGFuY2V0eXBlKW5ldyBOU19VTkFWQUlMQUJMRTsKKy0gKGlu
c3RhbmNldHlwZSlpbml0IE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TmFtZTooTlNTdHJpbmcgKiluYW1lIE5TX1VOQVZBSUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGlkZW50aWZpZXI6KE5TRGF0YSAqKWlkZW50aWZp
ZXIgZGlzcGxheU5hbWU6KE5TU3RyaW5nICopZGlzcGxheU5hbWU7CisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0RhdGEgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKmRpc3BsYXlOYW1lOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxM
X0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJkOGJiYmEzNzllYjkyNWY1ZTQ5NzRkZmZkZmFhNzdiOGI2NzYyYmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFVzZXJFbnRpdHkubW0KQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCIK
KworQGltcGxlbWVudGF0aW9uIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpZGVudGlmaWVyOihO
U0RhdGEgKilpZGVudGlmaWVyIGRpc3BsYXlOYW1lOihOU1N0cmluZyAqKWRpc3BsYXlOYW1lCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aE5hbWU6bmFtZV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxm
LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyVmVy
aWZpY2F0aW9uUmVxdWlyZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMWFjNmM4NTgy
MGZiM2M4YWYxMjVlODA1NmQ4ZmE2MWRjYjczNTVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVu
dC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9y
dCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBf
V0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQpIHsKKyAgICBfV0tVc2VyVmVyaWZpY2F0aW9u
UmVxdWlyZW1lbnRSZXF1aXJlZCwKKyAgICBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRQ
cmVmZXJyZWQsCisgICAgX1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFnZWQs
Cit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCAxMjE0ODliMGVkZjUyM2VjMjdmM2MwODJh
MjVlNzlhMTUzMmQzMmUzLi40NWNlMjcyNjY2MTU0YTJiZjVhMTBiZTg5NzI2NmNjYmMxYzhkOGQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTI4LDcgKzI4LDEwIEBACiAKIE5TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCiAKLUBjbGFzcyBMQUNvbnRleHQ7CitAY2xhc3MgX1dLQXV0aGVu
dGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2U7CitAY2xhc3MgX1dLQXV0aGVudGljYXRvckFzc2Vy
dGlvblJlc3BvbnNlOworQGNsYXNzIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bnM7CitAY2xhc3MgX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOwogQGNsYXNz
IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2U7CiBAY2xhc3MgX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbDsKIApAQCAtNzUsNiArNzgsNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBfV0tXZWJBdXRoZW50aWNhdGlvblNvdXJjZSkgewogICAgIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uU291cmNlRXh0ZXJuYWwsCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNzE1MDkx
NDE+IE9wdGltaXplIHRoZSBkZWxlZ2F0ZSBmb3IgdGhlIEF1dGhlbnRpY2F0aW9uU2VydmljZS5m
cmFtZXdvcmsuCiBAcHJvdG9jb2wgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbERlbGVnYXRlIDxO
U09iamVjdD4KIAogQG9wdGlvbmFsCkBAIC05MSwxNCArOTUsMjMgQEAgV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCiBAaW50ZXJmYWNlIF9XS1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWwgOiBOU09iamVjdAogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBu
b25hdG9taWMsIHdlYWspIGlkIDxfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGU+IGRl
bGVnYXRlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAq
cmVseWluZ1BhcnR5SUQ7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5T
U2V0ICp0cmFuc3BvcnRzOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJB
dXRoZW50aWNhdGlvblR5cGUgdHlwZTsKIAogKyAodm9pZCljbGVhckFsbExvY2FsQXV0aGVudGlj
YXRvckNyZWRlbnRpYWxzOworKyAoQk9PTClpc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRp
Y2F0b3JBdmFpbGFibGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0OwogCisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5Mzk0PiBBZGRzIENsaWVudERhdGFKU09OLgorLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS83MTUwOTQ4NT4gQWRkcyBkZXRhaWxlZCBOU0Vycm9yLgorLSAodm9pZClt
YWtlQ3JlZGVudGlhbFdpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZSAqLCBOU0Vycm9yICop
KWhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKy0gKHZvaWQpZ2V0QXNzZXJ0aW9uV2l0aEhhc2g6KE5TRGF0YSAqKWhhc2ggb3B0aW9u
czooX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zICopb3B0aW9ucyBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlICos
IE5TRXJyb3IgKikpaGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZCljYW5jZWw7CiAKKy8vIEZJWE1FOiA8cmRhcjovL3By
b2JsZW0vNzE1MDk4NDg+IERlcHJlY2F0ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMuCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJ
RDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTZXQgKnRyYW5zcG9y
dHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1dlYkF1dGhlbnRpY2F0aW9u
VHlwZSB0eXBlOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWwubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5tbQppbmRleCA0YWVlNjI5ZTg3YmRlODEzODI3YzljYjQyZDQ4MmY3N2EyYWVk
ZTIxLi4zMmYxMGUyMzg0Mjg3ZGQwYWRmYmYzNmQ1ZjRmYmFjYTg3MmJiYmQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tbQpAQCAtMjYsOSArMjYsMjggQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEludGVybmFsLmgiCiAKKwogI2lt
cG9ydCAiTG9jYWxBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0ICJMb2NhbFNlcnZpY2UuaCIKKyNp
bXBvcnQgIldLRXJyb3IuaCIKICNpbXBvcnQgIldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
aCIKKyNpbXBvcnQgIl9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIgor
I2ltcG9ydCAiX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFs
LmgiCisjaW1wb3J0ICJfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5o
IgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5o
IgorI2ltcG9ydCAiX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmgiCisjaW1wb3J0
ICJfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgiCisjaW1wb3J0ICJfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIl9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1
ZXN0T3B0aW9ucy5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0
eUVudGl0eS5oIgorI2ltcG9ydCAiX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCIK
KyNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRvclJlc3BvbnNlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0F1dGhlbnRpY2F0b3JSZXNwb25zZURhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQXV0aGVu
dGljYXRpb25Db25zdGFudHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogCiBAaW1wbGVtZW50YXRpb24gX1dLV2ViQXV0aGVudGljYXRpb25Q
YW5lbCB7CkBAIC0zOCw2ICs1NywxNyBAQCBAaW1wbGVtZW50YXRpb24gX1dLV2ViQXV0aGVudGlj
YXRpb25QYW5lbCB7CiAjZW5kaWYKIH0KIAorLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworI2lmIEVO
QUJMRShXRUJfQVVUSE4pCisgICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6
OldlYkF1dGhlbnRpY2F0aW9uUGFuZWw+KHNlbGYpOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKICNpZiBFTkFCTEUoV0VCX0FVVEhOKQogCiAtICh2b2lkKWRlYWxsb2MKQEAgLTEzNSw2
ICsxNjUsMjQ4IEBAIC0gKHZvaWQpY2FuY2VsCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShXRUJf
QVVUSE4pCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvckZyb21OU0RhdGEoTlNEYXRhKiBk
YXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgo
Y29uc3QgdWludDhfdCopZGF0YS5ieXRlcywgZGF0YS5sZW5ndGgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zOjpScEVudGl0eSBwdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHkoX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSAqcnBFbnRpdHkpCit7CisgICAgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UnBFbnRpdHkgcmVzdWx0OworICAgIHJl
c3VsdC5uYW1lID0gcnBFbnRpdHkubmFtZTsKKyAgICByZXN1bHQuaWNvbiA9IHJwRW50aXR5Lmlj
b247CisgICAgcmVzdWx0LmlkID0gcnBFbnRpdHkuaWRlbnRpZmllcjsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zOjpVc2VyRW50aXR5IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KF9XS1B1Ymxp
Y0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ICp1c2VyRW50aXR5KQoreworICAgIFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OlVzZXJFbnRpdHkgcmVzdWx0OworICAg
IHJlc3VsdC5uYW1lID0gdXNlckVudGl0eS5uYW1lOworICAgIHJlc3VsdC5pY29uID0gdXNlckVu
dGl0eS5pY29uOworICAgIHJlc3VsdC5pZFZlY3RvciA9IHZlY3RvckZyb21OU0RhdGEodXNlckVu
dGl0eS5pZGVudGlmaWVyKTsKKyAgICByZXN1bHQuZGlzcGxheU5hbWUgPSB1c2VyRW50aXR5LmRp
c3BsYXlOYW1lOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFZlY3RvcjxXZWJD
b3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJzPiBwdWJs
aWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyhOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzICo+ICpwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1hdGVycykKK3sKKyAgICBWZWN0
b3I8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6UGFyYW1ldGVy
cz4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHB1YmxpY0tleUNy
ZWRlbnRpYWxQYXJhbWF0ZXJzLmNvdW50KTsKKworICAgIGZvciAoX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgKnBhcmFtIDogcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnMpCisg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoeyBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50
aWFsVHlwZTo6UHVibGljS2V5LCBwYXJhbS5hbGdvcml0aG0ubG9uZ0xvbmdWYWx1ZSB9KTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJh
bnNwb3J0IGF1dGhlbnRpY2F0b3JUcmFuc3BvcnQoX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3Bv
cnQgdHJhbnNwb3J0KQoreworICAgIHN3aXRjaCAodHJhbnNwb3J0KSB7CisgICAgY2FzZSBfV0tX
ZWJBdXRoZW50aWNhdGlvblRyYW5zcG9ydFVTQjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1
dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYjsKKyAgICBjYXNlIF9XS1dlYkF1dGhlbnRpY2F0aW9u
VHJhbnNwb3J0TkZDOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5z
cG9ydDo6TmZjOworICAgIGNhc2UgX1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5h
bDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVy
bmFsOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiOworICAgIH0KK30K
Kworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiBhdXRoZW50
aWNhdG9yVHJhbnNwb3J0cyhOU0FycmF5PE5TTnVtYmVyICo+ICp0cmFuc3BvcnRzKQoreworICAg
IFZlY3RvcjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNwb3J0PiByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHJhbnNwb3J0cy5jb3VudCk7CisKKyAgICBmb3Ig
KE5TTnVtYmVyICp0cmFuc3BvcnQgOiB0cmFuc3BvcnRzKQorICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGF1dGhlbnRpY2F0b3JUcmFuc3BvcnQoKF9XS1dlYkF1dGhlbnRpY2F0aW9uVHJh
bnNwb3J0KXRyYW5zcG9ydC5pbnRWYWx1ZSkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIFZlY3RvcjxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gcHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlh
bERlc2NyaXB0b3IgKj4gKmNyZWRlbnRpYWxzKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcj4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNyZWRlbnRpYWxzLmNvdW50KTsKKworICAgIGZvciAoX1dLUHVibGljS2V5
Q3JlZGVudGlhbERlc2NyaXB0b3IgKmNyZWRlbnRpYWwgOiBjcmVkZW50aWFscykKKyAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXksIHsgfSwgdmVjdG9yRnJvbU5TRGF0YShjcmVkZW50aWFsLmlkZW50aWZpZXIp
LCBhdXRoZW50aWNhdG9yVHJhbnNwb3J0cyhjcmVkZW50aWFsLnRyYW5zcG9ydHMpIH0pOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRhY2htZW50PiBhdXRo
ZW50aWNhdG9yQXR0YWNobWVudChfV0tBdXRoZW50aWNhdG9yQXR0YWNobWVudCBhdHRhY2htZW50
KQoreworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgX1dLQXV0aGVudGljYXRv
ckF0dGFjaG1lbnRBbGw6CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgY2FzZSBf
V0tBdXRoZW50aWNhdG9yQXR0YWNobWVudFBsYXRmb3JtOgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFj
aG1lbnQ6OlBsYXRmb3JtOworICAgIGNhc2UgX1dLQXV0aGVudGljYXRvckF0dGFjaG1lbnRDcm9z
c1BsYXRmb3JtOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6OkNyb3NzUGxhdGZvcm07Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorfQorCitzdGF0aWMgV2ViQ29yZTo6VXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50IHVzZXJWZXJpZmljYXRpb24oX1dLVXNlclZlcmlmaWNhdGlvblJlcXVp
cmVtZW50IHV2KQoreworICAgIHN3aXRjaCAodXYpIHsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudFJlcXVpcmVkOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlclZl
cmlmaWNhdGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZDsKKyAgICBjYXNlIF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudFByZWZlcnJlZDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOworICAgIGNhc2UgX1dLVXNlclZlcmlm
aWNhdGlvblJlcXVpcmVtZW50RGlzY291cmFnZWQ6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpV
c2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNl
clZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQ7CisgICAgfQorfQorCitzdGF0aWMg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGljYXRv
clNlbGVjdGlvbkNyaXRlcmlhIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYShfV0tBdXRo
ZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgKmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pCit7Cisg
ICAgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uczo6QXV0aGVudGlj
YXRvclNlbGVjdGlvbkNyaXRlcmlhIHJlc3VsdDsKKyAgICByZXN1bHQuYXV0aGVudGljYXRvckF0
dGFjaG1lbnQgPSBhdXRoZW50aWNhdG9yQXR0YWNobWVudChhdXRoZW50aWNhdG9yU2VsZWN0aW9u
LmF1dGhlbnRpY2F0b3JBdHRhY2htZW50KTsKKyAgICByZXN1bHQucmVxdWlyZVJlc2lkZW50S2V5
ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbi5yZXF1aXJlUmVzaWRlbnRLZXk7CisgICAgcmVzdWx0
LnVzZXJWZXJpZmljYXRpb24gPSB1c2VyVmVyaWZpY2F0aW9uKGF1dGhlbnRpY2F0b3JTZWxlY3Rp
b24udXNlclZlcmlmaWNhdGlvbik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
V2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZSBhdHRlc3RhdGlvbkNvbnZl
eWFuY2VQcmVmZXJlbmNlKF9XS0F0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2UgYXR0ZXN0
YXRpb24pCit7CisgICAgc3dpdGNoIChhdHRlc3RhdGlvbikgeworICAgIGNhc2UgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZU5vbmU6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpB
dHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpOb25lOworICAgIGNhc2UgX1dLQXR0ZXN0
YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0OgorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6SW5kaXJlY3Q7CisgICAgY2FzZSBf
V0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0OgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6RGlyZWN0OworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6QXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTo6Tm9uZTsKKyAgICB9Cit9CisK
K3N0YXRpYyBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgYXV0
aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzKF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudElucHV0cyAqZXh0ZW5zaW9ucykKK3sKKyAgICBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMgcmVzdWx0OworICAgIHJlc3VsdC5hcHBpZCA9IGV4
dGVuc2lvbnMuYXBwaWQ7CisgICAgcmVzdWx0Lmdvb2dsZUxlZ2FjeUFwcGlkU3VwcG9ydCA9IGZh
bHNlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisrIChXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKWNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlv
bnNXaXRoT3B0aW9uczooX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyAqKW9w
dGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
IHJlc3VsdDsKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisgICAgcmVzdWx0LnJwID0gcHVibGlj
S2V5Q3JlZGVudGlhbFJwRW50aXR5KG9wdGlvbnMucmVseWluZ1BhcnR5KTsKKyAgICByZXN1bHQu
dXNlciA9IHB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5KG9wdGlvbnMudXNlcik7CisKKyAg
ICByZXN1bHQucHViS2V5Q3JlZFBhcmFtcyA9IHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
KG9wdGlvbnMucHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnMpOworCisgICAgaWYgKG9wdGlv
bnMudGltZW91dCkKKyAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQudW5z
aWduZWRJbnRWYWx1ZTsKKyAgICBpZiAob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpCisgICAg
ICAgIHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHMgPSBwdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvcnMob3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMpOworICAgIGlmIChvcHRpb25zLmF1dGhl
bnRpY2F0b3JTZWxlY3Rpb24pCisgICAgICAgIHJlc3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9u
ID0gYXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhKG9wdGlvbnMuYXV0aGVudGljYXRvclNl
bGVjdGlvbik7CisgICAgcmVzdWx0LmF0dGVzdGF0aW9uID0gYXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZShvcHRpb25zLmF0dGVzdGF0aW9uKTsKKyAgICByZXN1bHQuZXh0ZW5zaW9ucyA9
IGF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cyhvcHRpb25zLmV4dGVuc2lvbnMp
OworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKFdFQl9BVVRI
TikKK3N0YXRpYyBSZXRhaW5QdHI8X1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2U+
IHdrQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHROUyhbW19XS0F1
dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0Rh
dGEgZGF0YVdpdGhCeXRlczpkYXRhLnJhd0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5
dGVMZW5ndGgoKV0gZXh0ZW5zaW9uczpuaWwgYXR0ZXN0YXRpb25PYmplY3Q6W05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmRhdGEuYXR0ZXN0YXRpb25PYmplY3QtPmRhdGEoKSBsZW5ndGg6ZGF0YS5hdHRl
c3RhdGlvbk9iamVjdC0+Ynl0ZUxlbmd0aCgpXV0pOworfQorI2VuZGlmCisKKy0gKHZvaWQpbWFr
ZUNyZWRlbnRpYWxXaXRoSGFzaDooTlNEYXRhICopaGFzaCBvcHRpb25zOihfV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UgKiwgTlNFcnJvciAqKSlo
YW5kbGVyCit7CisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBhdXRvIGNhbGxiYWNrID0gW2hh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoaGFuZGxlcildIChWYXJpYW50PFJlZjxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yUmVzcG9uc2U+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgbXV0
YWJsZSB7CisgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgUmVmPFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JSZXNwb25zZT4mIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBoYW5k
bGVyKHdrQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSku
Z2V0KCksIG5pbCk7CisgICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
JiBleGNlcHRpb24pIHsKKyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldp
dGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0p
OworICAgICAgICB9KTsKKyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3Rv
ckZyb21OU0RhdGEoaGFzaCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0Nv
cmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9uczpvcHRpb25zXSwgbnVsbHB0ciwgV2ViS2l0OjpX
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSwgbnVsbHB0ciwgV1RGOjpu
dWxsb3B0LCB7IH0sIHRydWUsIFN0cmluZygpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKKyNlbmRp
ZgorfQorCisrIChXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMpY29u
dmVydFRvQ29yZVJlcXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMKK3sKKyAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMgcmVzdWx0OworCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAg
ICBpZiAob3B0aW9ucy50aW1lb3V0KQorICAgICAgICByZXN1bHQudGltZW91dCA9IG9wdGlvbnMu
dGltZW91dC51bnNpZ25lZEludFZhbHVlOworICAgIGlmIChvcHRpb25zLnJlbHlpbmdQYXJ0eUlk
ZW50aWZpZXIpCisgICAgICAgIHJlc3VsdC5ycElkID0gb3B0aW9ucy5yZWx5aW5nUGFydHlJZGVu
dGlmaWVyOworICAgIGlmIChvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpCisgICAgICAgIHJlc3Vs
dC5hbGxvd0NyZWRlbnRpYWxzID0gcHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JzKG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyk7CisgICAgcmVzdWx0LnVzZXJWZXJpZmljYXRpb24gPSB1c2Vy
VmVyaWZpY2F0aW9uKG9wdGlvbnMudXNlclZlcmlmaWNhdGlvbik7CisgICAgcmVzdWx0LmV4dGVu
c2lvbnMgPSBhdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMob3B0aW9ucy5leHRl
bnNpb25zKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShX
RUJfQVVUSE4pCitzdGF0aWMgUmV0YWluUHRyPF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNw
b25zZT4gd2tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRvclJlc3BvbnNlRGF0YSYgZGF0YSkKK3sKKyAgICBSZXRhaW5QdHI8X1dLQXV0aGVu
dGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cz4gZXh0ZW5zaW9uczsKKyAgICBpZiAoZGF0
YS5hcHBpZCkKKyAgICAgICAgZXh0ZW5zaW9ucyA9IGFkb3B0TlMoW1tfV0tBdXRoZW50aWNhdGlv
bkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIGFsbG9jXSBpbml0V2l0aEFwcGlkOmRhdGEuYXBwaWQu
dmFsdWUoKV0pOworCisgICAgTlNEYXRhICp1c2VySGFuZGxlID0gbmlsOworICAgIGlmIChkYXRh
LnVzZXJIYW5kbGUpCisgICAgICAgIHVzZXJIYW5kbGUgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
ZGF0YS51c2VySGFuZGxlLT5kYXRhKCkgbGVuZ3RoOmRhdGEudXNlckhhbmRsZS0+Ynl0ZUxlbmd0
aCgpXTsKKworICAgIHJldHVybiBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFJhd0lkOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRhLnJh
d0lkLT5kYXRhKCkgbGVuZ3RoOmRhdGEucmF3SWQtPmJ5dGVMZW5ndGgoKV0gZXh0ZW5zaW9uczpX
VEZNb3ZlKGV4dGVuc2lvbnMpIGF1dGhlbnRpY2F0b3JEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRl
czpkYXRhLmF1dGhlbnRpY2F0b3JEYXRhLT5kYXRhKCkgbGVuZ3RoOmRhdGEuYXV0aGVudGljYXRv
ckRhdGEtPmJ5dGVMZW5ndGgoKV0gc2lnbmF0dXJlOltOU0RhdGEgZGF0YVdpdGhCeXRlczpkYXRh
LnNpZ25hdHVyZS0+ZGF0YSgpIGxlbmd0aDpkYXRhLnNpZ25hdHVyZS0+Ynl0ZUxlbmd0aCgpXSB1
c2VySGFuZGxlOnVzZXJIYW5kbGVdKTsKK30KKyNlbmRpZgorCistICh2b2lkKWdldEFzc2VydGlv
bldpdGhIYXNoOihOU0RhdGEgKiloYXNoIG9wdGlvbnM6KF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSAqLCBOU0Vycm9yICopKWhhbmRsZXIKK3sKKyNp
ZiBFTkFCTEUoV0VCX0FVVEhOKQorICAgIGF1dG8gY2FsbGJhY2sgPSBbaGFuZGxlciA9IG1ha2VC
bG9ja1B0cihoYW5kbGVyKV0gKFZhcmlhbnQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JSZXNw
b25zZT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAg
ICAgV1RGOjpzd2l0Y2hPbihyZXN1bHQsIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6QXV0aGVudGlj
YXRvclJlc3BvbnNlPiYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGhhbmRsZXIod2tBdXRoZW50
aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UocmVzcG9uc2UtPmRhdGEoKSkuZ2V0KCksIG5pbCk7Cisg
ICAgICAgIH0sIFsmXShjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiBleGNlcHRpb24pIHsK
KyAgICAgICAgICAgIGhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJv
ckRvbWFpbiBjb2RlOldLRXJyb3JVbmtub3duIHVzZXJJbmZvOm5pbF0pOworICAgICAgICB9KTsK
KyAgICB9OworICAgIF9wYW5lbC0+aGFuZGxlUmVxdWVzdCh7IHZlY3RvckZyb21OU0RhdGEoaGFz
aCksIFtfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9u
c1dpdGhPcHRpb25zOm9wdGlvbnNdLCBudWxscHRyLCBXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlLCBudWxscHRyLCBXVEY6Om51bGxvcHQsIHsgfSwgdHJ1
ZSwgU3RyaW5nKCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOworI2VuZGlmCit9CisKKysgKEJPT0wp
aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlCit7CisjaWYgRU5B
QkxFKFdFQl9BVVRITikKKyAgICByZXR1cm4gV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZhaWxh
YmxlKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgorfQorCiAjaWYgRU5BQkxFKFdF
Ql9BVVRITikKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0
aGVudGljYXRpb25QYW5lbEZvclRlc3RpbmcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsRm9yVGVzdGluZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE5YjhiN2Y3MjI5NTZkMDVjMGEwMTIxMGE1Y2JkYWI2NGZmNjRlZWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2ViQXV0aGVudGljYXRp
b25QYW5lbEZvclRlc3RpbmcuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbXBvcnQgIl9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworc3RydWN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM7
CitzdHJ1Y3QgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zOworfQorCitXS19DTEFT
U19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZh
Y2UgX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAoV0tUZXN0aW5nKQorCisvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzcxNTA5NzE0PiBJbnRyb2R1Y2VzIG1vY2sgdGVzdGluZy4KKysgKFdlYkNv
cmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMpY29udmVydFRvQ29yZUNyZWF0
aW9uT3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zICopb3B0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworKyAoV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25z
KWNvbnZlcnRUb0NvcmVSZXF1ZXN0T3B0aW9uc1dpdGhPcHRpb25zOihfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnMgKilvcHRpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVz
dERhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1
dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAppbmRleCA2ZTQwMmZjZGYxMjVjNmUyMzYxYmQyN2Rm
YjU4MDIyYmRjMTcyNGQ5Li5kMzg2MzdlNjY4NzI3NDAzMjc4NTZlODkyOTI3ODIyMjRjZDEyY2I2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9X
ZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCkBAIC00
NSwxMSArNDUsMTQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFdlYkF1dGhlbnRpY2F0
aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90PiBoYXNoOwogICAgIFZhcmlhbnQ8
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgV2ViQ29yZTo6UHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiBvcHRpb25zOworCisgICAgLy8gRklYTUU8
cmRhcjovL3Byb2JsZW0vNzE1MDk4NDg+OiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZXByZWNhdGVk
IGZpZWxkcy4KICAgICBXZWFrUHRyPFdlYlBhZ2VQcm94eT4gcGFnZTsKICAgICBXZWJBdXRoZW50
aWNhdGlvblBhbmVsUmVzdWx0IHBhbmVsUmVzdWx0IHsgV2ViQXV0aGVudGljYXRpb25QYW5lbFJl
c3VsdDo6VW5hdmFpbGFibGUgfTsKICAgICBSZWZQdHI8QVBJOjpXZWJBdXRoZW50aWNhdGlvblBh
bmVsPiBwYW5lbDsKICAgICBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6Okdsb2JhbEZyYW1lSWRlbnRp
Zmllcj4gZnJhbWVJRDsKICAgICBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEgZnJhbWVJbmZvOworCiAg
ICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAgICAgU3RyaW5nIGNhY2hlZFBpbjsgLy8g
T25seSB1c2VkIHRvIGltcHJvdmUgTkZDIENsaWVudCBQSU4gZXhwZXJpZW5jZS4KIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1OGQy
NGE0YjgwNTkzMDliN2Y4ZmI3YjQ5NjljZjdkNjQ5ZGJhYzVlLi5kNzljZDZiNWI1ZDhkNGQyMTdm
YjI2NmRmNGNjNzMwY2FjMjdmODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjYsNiArMTEyNiwzOCBAQAogCQk1NzdGRjc4MjIz
NDZFODFDMDA0RURGQjkgLyogQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3RkY3ODEyMzQ2RTgx
QzAwNEVERkI5IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaCAqLzsgfTsKIAkJ
NTc3RkY3ODUyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3N0ZGNzgz
MjM0NkVDQUEwMDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi87IH07
CiAJCTU3OERDMjk4MjE1NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExp
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OERD
Mjk3MjE1NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLzsg
fTsKKwkJNTc5MEE2NTMyNTY1REVEMzAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5l
bEZvclRlc3RpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1NzkwQTY1NjI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlh
bEVudGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTc5MEE2NTQyNTY3OTlEQTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1Nzkw
QTY1NzI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjU1MjU2
Nzk5REEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5Lm1tICovOyB9Owor
CQk1NzkwQTY1QTI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlp
bmdQYXJ0eUVudGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTc5MEE2NTgyNTY3OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZWx5aW5nUGFydHlFbnRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1NzkwQTY1QjI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjU5MjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5Lm1tICovOyB9OworCQk1NzkwQTY1RTI1Njc5
QzExMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjVDMjU2NzlDMTEw
MDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjVGMjU2NzlDMTEw
MDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjVEMjU2NzlDMTEwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5tbSAqLzsgfTsKKwkJNTc5
MEE2NjIyNTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2
MDI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY2
MzI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2MTI1
Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMubW0gKi87
IH07CisJCTU3OTBBNjY2MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0
aW9uQ3JpdGVyaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3OTBBNjY0MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9u
Q3JpdGVyaWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1NzkwQTY2NzI1Njc5Q0VBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlv
bkNyaXRlcmlhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTc5MEE2NjUyNTY3OUNFQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25D
cml0ZXJpYS5tbSAqLzsgfTsKKwkJNTc5MEE2NjkyNTY3OUUwMDAwNzdDNUE3IC8qIF9XS1VzZXJW
ZXJpZmljYXRpb25SZXF1aXJlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTc5MEE2NjgyNTY3OUUwMDAwNzdDNUE3IC8qIF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTU3OTBBNjZDMjU2NzlFQjcwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVk
ZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc5MEE2NkEyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTc5MEE2NkQyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTc5MEE2NkIyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxE
ZXNjcmlwdG9yLm1tICovOyB9OworCQk1NzkwQTY3MDI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY2RTI1Njc5RjFBMDA3N0M1QTcgLyogX1dL
QXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTc5MEE2NzEyNTY3OUYxQTAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjZGMjU2NzlGMUEwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJbnB1dHMubW0gKi87IH07
CisJCTU3OTBBNjc0MjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzkwQTY3MjI1Njc5Rjc0MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTU3OTBBNjc1MjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc5MEE2NzMyNTY3OUY3NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnMubW0gKi87IH07CisJCTU3OTBBNjc4MjU2N0EwQ0QwMDc3QzVB
NyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjc2MjU2N0EwQ0QwMDc3QzVB
NyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzkwQTY3OTI1NjdBMENEMDA3
N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2NzcyNTY3QTBDRDAw
NzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5tbSAqLzsgfTsK
KwkJNTc5MEE2N0MyNTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9u
c0NsaWVudE91dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3OTBBNjdBMjU2N0ExM0UwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVu
c2lvbnNDbGllbnRPdXRwdXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTc5MEE2N0QyNTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0
aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY3QjI1NjdBMTNFMDA3N0M1QTcgLyogX1dLQXV0aGVu
dGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbSAqLzsgfTsKKwkJNTc5MEE2ODAyNTY3
QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2N0UyNTY3QTFBQzAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjgxMjU2N0ExQUMwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdG9yUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzkwQTY3RjI1NjdBMUFDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRv
clJlc3BvbnNlLm1tICovOyB9OworCQk1NzkwQTY4NDI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0
aGVudGljYXRvckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjgyMjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRo
ZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjg1MjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OTBBNjgzMjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5tbSAqLzsgfTsKKwkJNTc5MEE2ODgyNTY3
QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2ODYyNTY3QTI4
QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3OTBBNjg5MjU2N0Ey
OEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzkwQTY4NzI1NjdBMjhB
MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tICovOyB9Owor
CQk1NzkwQTY4QjI1NjdBNENDMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvclJlc3BvbnNlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
OTBBNjhBMjU2N0E0Q0MwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2VJbnRlcm5h
bC5oICovOyB9OworCQk1NzkwQTY4RDI1NjdCNDQ5MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2OEMyNTY3QjQ0OTAwNzdDNUE3IC8qIF9XS0F1dGhl
bnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwuaCAqLzsgfTsKKwkJNTc5MEE2OEYy
NTY3QjRDRjAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Nzkw
QTY4RTI1NjdCNENGMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNl
SW50ZXJuYWwuaCAqLzsgfTsKKwkJNTc5MEE2OTEyNTY3QjVFMDAwNzdDNUE3IC8qIF9XS0F1dGhl
bnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc5MEE2OTAyNTY3QjVFMDAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHNJbnRlcm5hbC5oICov
OyB9OwogCQk1NzlGMUJGNjIzQzgwREI2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25B
c3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc5RjFCRjQyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9u
QXNzZXJ0aW9uUmVzcG9uc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NzlGMUJGOTIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGlj
YXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2Vi
QXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi87IH07CiAJCTU3OUYx
QkZDMjNDODExQ0YwMEM3RDRCNCAvKiBBUElXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3Bv
bnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzlG
MUJGQTIzQzgxMUNGMDBDN0Q0QjQgLyogQVBJV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNw
b25zZS5oICovOyB9OwpAQCAtMzk4MCw2ICs0MDEyLDM4IEBACiAJCTU3N0ZGNzgzMjM0NkVDQUEw
MDRFREZCOSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTc3RkY3ODQyMzQ2RUNBQTAwNEVERkI5IC8qIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xp
ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzhEQzI5NzIxNTVBMDAxMDA3
NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExv
Y2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NzkwQTY1MTI1NjVERTZBMDA3N0M1QTcgLyogX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZv
clRlc3RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbEZvclRl
c3RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NTQyNTY3OTlEQTAw
NzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1NzkwQTY1NTI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVu
dGl0eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRp
dHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjU4MjU2NzlCMjYwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NTkyNTY3OUIyNjAwNzdDNUE3IC8qIF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY1QzI1Njc5QzExMDA3N0M1QTcgLyogX1dL
UHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTc5MEE2NUQyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50
aXR5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJF
bnRpdHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjYwMjU2NzlDODYw
MDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1NzkwQTY2MTI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFBhcmFtZXRlcnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5
MEE2NjQyNTY3OUNFQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJp
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NjUyNTY3OUNFQTAwNzdDNUE3IC8q
IF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IF9XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NjgyNTY3OUUwMDAwNzdDNUE3IC8qIF9XS1VzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NkEyNTY3OUVC
NzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU3OTBBNjZCMjU2NzlFQjcwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsRGVzY3JpcHRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NzkwQTY2RTI1Njc5RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xp
ZW50SW5wdXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0Ns
aWVudElucHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY2RjI1Njc5
RjFBMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50
SW5wdXRzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3MjI1Njc5Rjc0
MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjczMjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2NzYyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTc5MEE2NzcyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0
T3B0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2N0Ey
NTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0
cHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzkwQTY3QjI1NjdBMTNFMDA3
N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1
dHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjdFMjU2N0ExQUMwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLQXV0
aGVudGljYXRvclJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBB
NjdGMjU2N0ExQUMwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjgyMjU2N0EyMUUwMDc3QzVBNyAvKiBfV0tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NzkwQTY4MzI1NjdBMjFFMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVzdGF0aW9uUmVz
cG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRp
b25SZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2ODYyNTY3
QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2ODcyNTY3QTI4QTAwNzdDNUE3IC8qIF9XS0F1dGhl
bnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS0F1
dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTc5MEE2OEEyNTY3QTRDQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25z
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZUludGVy
bmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjhDMjU2N0I0NDkwMDc3
QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc5MEE2OEUyNTY3QjRDRjAwNzdDNUE3
IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3OTBBNjkwMjU2N0I1RTAwMDc3QzVBNyAvKiBfV0tB
dXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzSW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUYxQkY0MjNDODBEQjYwMEM3RDRCNCAv
KiBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc5RjFCRjUyM0M4MERCNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tXZWJB
dXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NzlGMUJGODIzQzgwRUM2MDBDN0Q0QjQgLyogX1dLV2ViQXV0aGVudGljYXRpb25B
c3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1dlYkF1dGhlbnRp
Y2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzMxNiw2ICs3MzgwLDIyIEBACiAJCQkJRjQ0MjkxOTExRkE1OTEwNzAwMkNDOTNF
IC8qIF9XS0F0dGFjaG1lbnQuaCAqLywKIAkJCQlGNDQyOTE5MzFGQTU5MzExMDAyQ0M5M0UgLyog
X1dLQXR0YWNobWVudC5tbSAqLywKIAkJCQlGNDQyOTE5NTFGQTU5NDJBMDAyQ0M5M0UgLyogX1dL
QXR0YWNobWVudEludGVybmFsLmggKi8sCisJCQkJNTc5MEE2NkUyNTY3OUYxQTAwNzdDNUE3IC8q
IF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oICovLAorCQkJCTU3OTBB
NjZGMjU2NzlGMUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRJ
bnB1dHMubW0gKi8sCisJCQkJNTc5MEE2N0EyNTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRp
Y2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCAqLywKKwkJCQk1NzkwQTY3QjI1NjdBMTNF
MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5tbSAq
LywKKwkJCQk1NzkwQTY5MDI1NjdCNUUwMDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRpb25FeHRl
bnNpb25zQ2xpZW50T3V0cHV0c0ludGVybmFsLmggKi8sCisJCQkJNTc5MEE2ODYyNTY3QTI4QTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oICovLAorCQkJCTU3
OTBBNjg3MjU2N0EyOEEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9u
c2UubW0gKi8sCisJCQkJNTc5MEE2OEUyNTY3QjRDRjAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZUludGVybmFsLmggKi8sCisJCQkJNTc5MEE2ODIyNTY3QTIxRTAw
NzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmggKi8sCisJCQkJ
NTc5MEE2ODMyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJl
c3BvbnNlLm1tICovLAorCQkJCTU3OTBBNjhDMjU2N0I0NDkwMDc3QzVBNyAvKiBfV0tBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZUludGVybmFsLmggKi8sCisJCQkJNTc5MEE2N0UyNTY3
QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oICovLAorCQkJCTU3OTBB
NjdGMjU2N0ExQUMwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yUmVzcG9uc2UubW0gKi8sCisJ
CQkJNTc5MEE2OEEyNTY3QTRDQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZUlu
dGVybmFsLmggKi8sCisJCQkJNTc5MEE2NjQyNTY3OUNFQTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRp
Y2F0b3JTZWxlY3Rpb25Dcml0ZXJpYS5oICovLAorCQkJCTU3OTBBNjY1MjU2NzlDRUEwMDc3QzVB
NyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEubW0gKi8sCiAJCQkJOTlFNzE0
QzExQzEyNDlFNjAwNjY1QjNBIC8qIF9XS0F1dG9tYXRpb25EZWxlZ2F0ZS5oICovLAogCQkJCTk5
MEQyOEE3MUM2NDA0QjAwMDk4Njk3NyAvKiBfV0tBdXRvbWF0aW9uU2Vzc2lvbi5oICovLAogCQkJ
CTk5MEQyOEFEMUM2NTE5MDQwMDk4Njk3NyAvKiBfV0tBdXRvbWF0aW9uU2Vzc2lvbi5tbSAqLywK
QEAgLTczODgsNiArNzQ2OCwyMCBAQAogCQkJCTFBNDNFODI4MTg4RjNDREMwMDlFNEQzMCAvKiBf
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCAqLywKIAkJCQkxQTQzRTgyNzE4OEYzQ0RDMDA5
RTREMzAgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tICovLAogCQkJCTdDODlEMkQ2
MUE2QzZCRTYwMDNBNUZERSAvKiBfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5o
ICovLAorCQkJCTU3OTBBNjcyMjU2NzlGNzQwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmggKi8sCisJCQkJNTc5MEE2NzMyNTY3OUY3NDAwNzdDNUE3IC8q
IF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMubW0gKi8sCisJCQkJNTc5MEE2
NkEyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmgg
Ki8sCisJCQkJNTc5MEE2NkIyNTY3OUVCNzAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxEZXNjcmlwdG9yLm1tICovLAorCQkJCTU3OTBBNjU0MjU2Nzk5REEwMDc3QzVBNyAvKiBfV0tQ
dWJsaWNLZXlDcmVkZW50aWFsRW50aXR5LmggKi8sCisJCQkJNTc5MEE2NTUyNTY3OTlEQTAwNzdD
NUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkubW0gKi8sCisJCQkJNTc5MEE2NjAy
NTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmggKi8s
CisJCQkJNTc5MEE2NjEyNTY3OUM4NjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzLm1tICovLAorCQkJCTU3OTBBNjU4MjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5LmggKi8sCisJCQkJNTc5MEE2NTkyNTY3
OUIyNjAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHku
bW0gKi8sCisJCQkJNTc5MEE2NzYyNTY3QTBDRDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucy5oICovLAorCQkJCTU3OTBBNjc3MjU2N0EwQ0QwMDc3QzVBNyAv
KiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMubW0gKi8sCisJCQkJNTc5MEE2
NUMyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lmgg
Ki8sCisJCQkJNTc5MEE2NUQyNTY3OUMxMTAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRp
YWxVc2VyRW50aXR5Lm1tICovLAogCQkJCUE1NUJBODBDMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tS
ZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovLAogCQkJCUE1NUJBODBEMUJBMTJC
RTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLywK
IAkJCQk5OTBFMUUwODIzODRBODhCMDA0NjAyREYgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJQcml2YXRlLmggKi8sCkBAIC03NDM2LDYgKzc1MzAsNyBAQAogCQkJCTJEODc4
NjFCMUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5oICovLAogCQkJCTJEODc4
NjFDMUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5tbSAqLywKIAkJCQkyRDg3
ODYxRjFCREI1N0Y1MDBEMDJBQkIgLyogX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oICovLAor
CQkJCTU3OTBBNjY4MjU2NzlFMDAwMDc3QzVBNyAvKiBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWly
ZW1lbnQuaCAqLywKIAkJCQkxQTgxQjM3RjE4QkQ2NkFEMDAwN0ZEQUMgLyogX1dLVmlzaXRlZExp
bmtTdG9yZS5oICovLAogCQkJCTFBODFCMzdFMThCRDY2QUQwMDA3RkRBQyAvKiBfV0tWaXNpdGVk
TGlua1N0b3JlLm1tICovLAogCQkJCTFBODFCMzg0MThCRDY3M0EwMDA3RkRBQyAvKiBfV0tWaXNp
dGVkTGlua1N0b3JlSW50ZXJuYWwuaCAqLywKQEAgLTc0NDQsNiArNzUzOSw3IEBACiAJCQkJNTc5
RjFCRjgyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVz
cG9uc2VJbnRlcm5hbC5oICovLAogCQkJCTU3NDcyOENGMjM0NTZFOTgwMDE3MDBBRiAvKiBfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmggKi8sCiAJCQkJNTc0NzI4RDAyMzQ1NkU5ODAwMTcwMEFG
IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0gKi8sCisJCQkJNTc5MEE2NTEyNTY1REU2
QTAwNzdDNUE3IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxGb3JUZXN0aW5nLmggKi8sCiAJ
CQkJNTc0NzI4RDMyMzQ1NzBBRTAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJ
bnRlcm5hbC5oICovLAogCQkJCTFBRTI4Njc2MUM3RTc2NTEwMDY5QUM0RiAvKiBfV0tXZWJzaXRl
RGF0YVNpemUuaCAqLywKIAkJCQkxQUUyODY3NTFDN0U3NjUxMDA2OUFDNEYgLyogX1dLV2Vic2l0
ZURhdGFTaXplLm1tICovLApAQCAtMTA3NzUsNiArMTA4NzEsMTYgQEAKIAkJCQk2MzEwOEY5OTFG
OTY3MUY3MDBBMERCODQgLyogX1dLQXBwbGljYXRpb25NYW5pZmVzdEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGNDQyOTE5MjFGQTU5MUM5MDAyQ0M5M0UgLyogX1dLQXR0YWNobWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ0MjkxOTYxRkE1OTQyQTAwMkNDOTNFIC8qIF9XS0F0dGFj
aG1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2NzAyNTY3OUYxQTAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTc5MEE2N0MyNTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9u
RXh0ZW5zaW9uc0NsaWVudE91dHB1dHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjkxMjU2
N0I1RTAwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdGlvbkV4dGVuc2lvbnNDbGllbnRPdXRwdXRz
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjg4MjU2N0EyOEEwMDc3QzVBNyAv
KiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3OTBBNjhGMjU2N0I0Q0YwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2ODQyNTY3QTIxRTAwNzdD
NUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzkwQTY4RDI1NjdCNDQ5MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckF0dGVz
dGF0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTc5MEE2ODAyNTY3
QTFBQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTc5MEE2OEIyNTY3QTRDQzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25z
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY2NjI1Njc5Q0VBMDA3N0M1QTcg
LyogX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRlbGVnYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5OTBEMjhBQjFDNjQyMEM2MDA5ODY5NzcgLyogX1dLQXV0b21hdGlv
blNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Nzg4QUNCMUY0MjFEREEwMEMwODAwMCAv
KiBfV0tBdXRvbWF0aW9uU2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTA4MzEsNiArMTA5MzcsMTMgQEAKIAkJCQk5MzIzNjExRTFCMDE1REE4MDBGQTkyMzIgLyogX1dL
T3ZlcmxheVNjcm9sbGJhclN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQzRTgyQTE4OEYz
Q0RDMDA5RTREMzAgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Qzg5RDJENzFBNkM2QkU2MDAzQTVGREUgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjc0MjU2NzlGNzQwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NzkwQTY2QzI1Njc5RUI3MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVu
dGlhbERlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjU2MjU2Nzk5REEwMDc3
QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1NzkwQTY2MjI1Njc5Qzg2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjc4MjU2N0EwQ0QwMDc3QzVBNyAvKiBf
V0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3OTBBNjVBMjU2NzlCMjYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVseWlu
Z1BhcnR5RW50aXR5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzkwQTY1RTI1Njc5QzExMDA3N0M1
QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBOUUzMjhEMTgyMTY1QTkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUJGRTNBMTgyOUMxRUQwMDVCMDcwRSAvKiBfV0tSZW1v
dGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5RTMyODkx
ODIxNjM2OTAwRjVEMDRDIC8qIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKQEAgLTEwODcxLDExICsxMDk4NCwxMyBAQAogCQkJCTdDQjM2NUFEMUQzMURDMTAwMDcxNThD
QSAvKiBfV0tVc2VySW5pdGlhdGVkQWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEODc4NjFEMUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkQ4Nzg2MjAxQkRCNTdGNTAwRDAyQUJCIC8qIF9XS1VzZXJTdHlsZVNoZWV0
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3OTBBNjY5MjU2NzlFMDAwMDc3QzVBNyAv
KiBfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
ODFCMzgxMThCRDY2QUQwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTgxQjM4NTE4QkQ2NzNBMDAwN0ZEQUMgLyogX1dLVmlzaXRlZExpbmtTdG9y
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzlGMUJGNjIzQzgwREI2MDBDN0Q0QjQg
LyogX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTc5RjFCRjkyM0M4MEVDNjAwQzdENEI0IC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNz
ZXJ0aW9uUmVzcG9uc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0NzI4RDEyMzQ1
NkU5ODAwMTcwMEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU3OTBBNjUzMjU2NURFRDMwMDc3QzVBNyAvKiBfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc0NzI4RDQyMzQ1NzBBRTAwMTcw
MEFGIC8qIF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFFMjg2NzgxQzdFNzY1MTAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFFMjg2ODAxQzdGOTJDMDAwNjlBQzRGIC8qIF9XS1dlYnNpdGVE
YXRhU2l6ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMDAwLDcgKzEzMTE1LDIwIEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1NzkwQTY3MTI1Njc5RjFBMDA3N0M1QTcgLyog
X1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNTc5MEE2N0QyNTY3QTEzRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0aW9uRXh0ZW5z
aW9uc0NsaWVudE91dHB1dHMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY4OTI1NjdBMjhB
MDA3N0M1QTcgLyogX1dLQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTc5MEE2ODUyNTY3QTIxRTAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JB
dHRlc3RhdGlvblJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5MEE2ODEyNTY3QTFB
QzAwNzdDNUE3IC8qIF9XS0F1dGhlbnRpY2F0b3JSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTU3OTBBNjY3MjU2NzlDRUEwMDc3QzVBNyAvKiBfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9u
Q3JpdGVyaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0JENTk1QzIyODBFREY0MDAyQjIyQUEg
LyogX1dLQ3VzdG9tSGVhZGVyRmllbGRzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTc5MEE2NzUy
NTY3OUY3NDAwNzdDNUE3IC8qIF9XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY2RDI1Njc5RUI3MDA3N0M1QTcgLyogX1dLUHVi
bGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NzkwQTY1
NzI1Njc5OURBMDA3N0M1QTcgLyogX1dLUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTU3OTBBNjYzMjU2NzlDODYwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlD
cmVkZW50aWFsUGFyYW1ldGVycy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBBNjc5MjU2N0Ew
Q0QwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1NzkwQTY1QjI1Njc5QjI2MDA3N0M1QTcgLyogX1dLUHVibGljS2V5
Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU3OTBB
NjVGMjU2NzlDMTEwMDc3QzVBNyAvKiBfV0tQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkJFRkZEMjM5QjAxMUQwMEJEMDMyRiAvKiBfV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkJF
RkZGMjM5QjAxMkYwMEJEMDMyRiAvKiBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5RTcxODlBMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tU
b3VjaEV2ZW50R2VuZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllZDY4NjU4YTE3Y2IyZDFkYTVlMmRl
YzMwYmZmZmRhOTcyM2IxNi4uZTY0NWU4ZjEwNTM3ZjllOWUwYmQzYTVkYjNmOTI2OTdiM2NlYzE5
YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIwLTExLTE3ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJIGZvciBBdXRoZW50aWNhdGlv
blNlcnZpY2VzLkZyYW1ld29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE4ODkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM2NDczMT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICgpOiBEZWxldGVkLgorCiAy
MDIwLTExLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OOiByMjY5NTE0IFJlc2V0IHNlcnZlciBwb3J0IGJlZm9yZSByZXN0YXJ0aW5n
IHdlYnNlcnZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IGE5NGFi
Nzg4YmZkMTQ5MDJkNjM3ODVmMjAzZjYxY2U4OWZiNjBkMDQuLjA4MTkxN2QzMTA4MzQyYWU0Yzhh
ZWJmNTc4Mzk0NzU2NzUzYThjZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwu
bW0KQEAgLTMzLDExICszMywyNSBAQAogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9y
dCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCA8TG9jYWxBdXRoZW50
aWNhdGlvbi9Mb2NhbEF1dGhlbnRpY2F0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXQvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cy5o
PgorI2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oPgor
I2ltcG9ydCA8V2ViS2l0L19XS0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVudGFsRmVhdHVyZS5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KKyNpbXBvcnQgPFdlYktpdC9f
V0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1B1
YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1B1
YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5Lmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2ViQXV0
aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1dlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tXZWJBdXRoZW50aWNhdGlv
blBhbmVsRm9yVGVzdGluZy5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3
dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+
CkBAIC0yMzcsNiArMjUxLDcgQEAgLSAoX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCAqKXBhbmVs
CiBAZW5kCiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgewogCkBAIC0xNDMyLDYgKzE0NDcsMzU4IEBAIFRFU1QoV2ViQXV0
aGVudGljYXRpb25QYW5lbCwgTEFHZXRBc3NlcnRpb25NdWx0aXBsZU9yZGVyKQogCiAjZW5kaWYg
Ly8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykgfHwgUExBVEZPUk0oSU9TKQogCitURVNUKFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNNaW5p
bXVuKQoreworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAw
eDA0IH07CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
aWRlbnRpZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGlu
aXRXaXRoQWxnb3JpdGhtOkAtN10pOworCisgICAgYXV0byBycCA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsUmVseWluZ1BhcnR5RW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJl
eGFtcGxlLmNvbSJdKTsKKyAgICBhdXRvIHVzZXIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3Jl
ZGVudGlhbFVzZXJFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFtZTpAImphcHBsZXNlZWRAZXhhbXBs
ZS5jb20iIGlkZW50aWZpZXI6bnNJZGVudGlmaWVyIGRpc3BsYXlOYW1lOkAiSiBBcHBsZXNlZWQi
XSk7CisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAqcHVi
bGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnMgPSBAWyBwYXJhbWV0ZXJzLmdldCgpIF07CisKKyAg
ICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucyBhbGxvY10gaW5pdFdpdGhSZWx5aW5nUGFydHk6cnAuZ2V0KCkgdXNlcjp1c2VyLmdl
dCgpIHB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWF0ZXJzOnB1YmxpY0tleUNyZWRlbnRpYWxQYXJh
bWF0ZXJzXSk7CisgICAgYXV0byByZXN1bHQgPSBbX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbCBj
b252ZXJ0VG9Db3JlQ3JlYXRpb25PcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnJwLm5hbWUsICJleGFtcGxlLmNvbSIpOworICAg
IEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQucnAuaWQuaXNOdWxsKCkpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2Vy
Lm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0
LnVzZXIuaWNvbi5pc051bGwoKSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyLmlkVmVjdG9y
LnNpemUoKSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3Vs
dC51c2VyLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwg
MCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmRpc3BsYXlOYW1lLCAiSiBBcHBs
ZXNlZWQiKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtcy5zaXplKCks
IDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLnR5cGUsIFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9F
UShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS5hbGcsIC03KTsKKworICAgIEVYUEVDVF9FUShy
ZXN1bHQudGltZW91dCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFscy5zaXplKCksIDBsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50
aWNhdG9yU2VsZWN0aW9uLCBXVEY6Om51bGxvcHQpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXR0
ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6Ok5vbmUpOworICAgIEVY
UEVDVF9UUlVFKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5leHRlbnNpb25zLT5nb29nbGVMZWdhY3lBcHBpZFN1cHBvcnQsIGZhbHNlKTsK
K30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zTWF4aW11bURlZmF1bHQpCit7CisgICAgdWludDhfdCBpZGVudGlmaWVyW10g
PSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9
IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmll
cildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVu
dGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOworICAgIGF1dG8g
cGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisgICAgYXV0byBkZXNjcmlwdG9yID0g
YWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6bnNJZGVudGlmaWVyXSk7CisKKyAgICBhdXRvIHJwID0gYWRvcHROUyhbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkgYWxsb2NdIGluaXRXaXRoTmFt
ZTpAImV4YW1wbGUuY29tIl0pOworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNL
ZXlDcmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBl
eGFtcGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxl
c2VlZCJdKTsKKyAgICBOU0FycmF5PF9XS1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+
ICpwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1hdGVycyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBw
YXJhbWV0ZXJzMi5nZXQoKSBdOworICAgIGF1dG8gYXV0aGVudGljYXRvclNlbGVjdGlvbiA9IGFk
b3B0TlMoW1tfV0tBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEgYWxsb2NdIGluaXRdKTsK
KyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNp
b25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9w
dE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyBhbGxvY10gaW5pdFdp
dGhSZWx5aW5nUGFydHk6cnAuZ2V0KCkgdXNlcjp1c2VyLmdldCgpIHB1YmxpY0tleUNyZWRlbnRp
YWxQYXJhbWF0ZXJzOnB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWF0ZXJzXSk7CisgICAgW29wdGlv
bnMgc2V0VGltZW91dDpAMTIwXTsKKyAgICBbb3B0aW9ucyBzZXRFeGNsdWRlQ3JlZGVudGlhbHM6
QFsgZGVzY3JpcHRvci5nZXQoKSBdXTsKKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uOmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24uZ2V0KCldOworICAgIFtvcHRpb25zIHNldEV4
dGVuc2lvbnM6ZXh0ZW5zaW9ucy5nZXQoKV07CisKKyAgICBhdXRvIHJlc3VsdCA9IFtfV0tXZWJB
dXRoZW50aWNhdGlvblBhbmVsIGNvbnZlcnRUb0NvcmVDcmVhdGlvbk9wdGlvbnNXaXRoT3B0aW9u
czpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQucnAubmFtZSwg
ImV4YW1wbGUuY29tIik7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwLmljb24uaXNOdWxsKCkp
OworICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5ycC5pZC5pc051bGwoKSk7CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEocmVzdWx0LnVzZXIubmFtZSwgImphcHBsZXNlZWRAZXhhbXBsZS5jb20iKTsKKyAg
ICBFWFBFQ1RfVFJVRShyZXN1bHQudXNlci5pY29uLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnVzZXIuaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVY
UEVDVF9FUShtZW1jbXAocmVzdWx0LnVzZXIuaWRWZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBz
aXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0LnVzZXIu
ZGlzcGxheU5hbWUsICJKIEFwcGxlc2VlZCIpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJL
ZXlDcmVkUGFyYW1zLnNpemUoKSwgMmx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNy
ZWRQYXJhbXNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1Ymxp
Y0tleSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJLZXlDcmVkUGFyYW1zWzBdLmFsZywgLTcp
OworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LnB1YktleUNyZWRQYXJhbXNbMV0uYWxnLCAtMjU3KTsKKworICAgIEVYUEVDVF9FUShyZXN1
bHQudGltZW91dCwgMTIwdSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50
aWFscy5zaXplKCksIDFsdSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlh
bHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6
ZSgpLCBzaXplb2YoaWRlbnRpZmllcikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihp
ZGVudGlmaWVyKSksIDApOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uLT5hdXRoZW50aWNhdG9yQXR0YWNobWVudCwgV1RGOjpudWxsb3B0KTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwg
ZmFsc2UpOworICAgIEVYUEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNl
clZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpQcmVmZXJyZWQpOwor
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdHRlc3RhdGlvbiwgQXR0ZXN0YXRpb25Db252ZXlhbmNl
UHJlZmVyZW5jZTo6Tm9uZSk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMtPmFw
cGlkLmlzTnVsbCgpKTsKK30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zTWF4aW11bTEpCit7CisgICAgdWludDhfdCBpZGVu
dGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRl
bnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2Yo
aWRlbnRpZmllcildOworICAgIGF1dG8gcGFyYW1ldGVyczEgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtN10pOwor
ICAgIGF1dG8gcGFyYW1ldGVyczIgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFBh
cmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoQWxnb3JpdGhtOkAtMjU3XSk7CisKKyAgICBhdXRvIHJw
ID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHkgYWxs
b2NdIGluaXRXaXRoTmFtZTpAImV4YW1wbGUuY29tIl0pOworICAgIFtycCBzZXRJY29uOkAiaHR0
cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyJdOworICAgIFtycCBzZXRJZGVudGlmaWVyOkAi
ZXhhbXBsZS5jb20iXTsKKworICAgIGF1dG8gdXNlciA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsVXNlckVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiamFwcGxlc2VlZEBleGFt
cGxlLmNvbSIgaWRlbnRpZmllcjpuc0lkZW50aWZpZXIgZGlzcGxheU5hbWU6QCJKIEFwcGxlc2Vl
ZCJdKTsKKyAgICBbdXNlciBzZXRJY29uOkAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpw
ZyJdOworCisgICAgTlNBcnJheTxfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyAqPiAq
cHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnMgPSBAWyBwYXJhbWV0ZXJzMS5nZXQoKSwgcGFy
YW1ldGVyczIuZ2V0KCkgXTsKKworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJlbHlpbmdQYXJ0
eTpycC5nZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnM6
cHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0
OkAxMjBdOworCisgICAgYXV0byB1c2IgPSBhZG9wdE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50
Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0VVNCXSk7CisgICAgYXV0byBuZmMgPSBhZG9w
dE5TKFtOU051bWJlciBudW1iZXJXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0
TkZDXSk7CisgICAgYXV0byBpbnRlcm5hbCA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0pOworICAgIGF1dG8gY3Jl
ZGVudGlhbCA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvciBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOm5zSWRlbnRpZmllcl0pOworICAgIFtjcmVkZW50aWFsIHNl
dFRyYW5zcG9ydHM6QFsgdXNiLmdldCgpLCBuZmMuZ2V0KCksIGludGVybmFsLmdldCgpIF1dOwor
ICAgIFtvcHRpb25zIHNldEV4Y2x1ZGVDcmVkZW50aWFsczpAWyBjcmVkZW50aWFsLmdldCgpLCBj
cmVkZW50aWFsLmdldCgpIF1dOworCisgICAgYXV0byBhdXRoZW50aWNhdG9yU2VsZWN0aW9uID0g
YWRvcHROUyhbW19XS0F1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYSBhbGxvY10gaW5pdF0p
OworICAgIFthdXRoZW50aWNhdG9yU2VsZWN0aW9uIHNldEF1dGhlbnRpY2F0b3JBdHRhY2htZW50
Ol9XS0F1dGhlbnRpY2F0b3JBdHRhY2htZW50UGxhdGZvcm1dOworICAgIFthdXRoZW50aWNhdG9y
U2VsZWN0aW9uIHNldFJlcXVpcmVSZXNpZGVudEtleTpZRVNdOworICAgIFthdXRoZW50aWNhdG9y
U2VsZWN0aW9uIHNldFVzZXJWZXJpZmljYXRpb246X1dLVXNlclZlcmlmaWNhdGlvblJlcXVpcmVt
ZW50UmVxdWlyZWRdOworICAgIFtvcHRpb25zIHNldEF1dGhlbnRpY2F0b3JTZWxlY3Rpb246YXV0
aGVudGljYXRvclNlbGVjdGlvbi5nZXQoKV07CisKKyAgICBbb3B0aW9ucyBzZXRBdHRlc3RhdGlv
bjpfV0tBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlRGlyZWN0XTsKKworICAgIGF1dG8g
cmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9u
T3B0aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVR
KHJlc3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVz
dWx0LnJwLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVY
UEVDVF9XS19TVFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNU
X1dLX1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxl
LmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXpl
KCksIHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNl
ci5pZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOwor
ICAgIEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVk
Iik7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5w
dWJLZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBl
OjpQdWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5h
bGcsIC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAg
IEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJs
aWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7
CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVj
dG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQ
RUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNs
dSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0
c1swXSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNw
b3J0OjpOZmMpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRy
YW5zcG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVY
UEVDVF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFj
aG1lbnQsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JB
dHRhY2htZW50OjpQbGF0Zm9ybSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hdXRoZW50aWNhdG9y
U2VsZWN0aW9uLT5yZXF1aXJlUmVzaWRlbnRLZXksIHRydWUpOworICAgIEVYUEVDVF9FUShyZXN1
bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNh
dGlvblJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF0dGVz
dGF0aW9uLCBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlOjpEaXJlY3QpOworfQorCitU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnNNYXhpbXVtMikKK3sKKyAgICB1aW50OF90IGlkZW50aWZpZXJbXSA9IHsgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNCB9OworICAgIE5TRGF0YSAqbnNJZGVudGlmaWVyID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmlkZW50aWZpZXIgbGVuZ3RoOnNpemVvZihpZGVudGlmaWVyKV07CisgICAgYXV0
byBwYXJhbWV0ZXJzMSA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVy
cyBhbGxvY10gaW5pdFdpdGhBbGdvcml0aG06QC03XSk7CisgICAgYXV0byBwYXJhbWV0ZXJzMiA9
IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyBhbGxvY10gaW5pdFdp
dGhBbGdvcml0aG06QC0yNTddKTsKKworICAgIGF1dG8gcnAgPSBhZG9wdE5TKFtbX1dLUHVibGlj
S2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBhbGxvY10gaW5pdFdpdGhOYW1lOkAiZXhh
bXBsZS5jb20iXSk7CisgICAgW3JwIHNldEljb246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2lj
b24uanBnIl07CisgICAgW3JwIHNldElkZW50aWZpZXI6QCJleGFtcGxlLmNvbSJdOworCisgICAg
YXV0byB1c2VyID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFs
bG9jXSBpbml0V2l0aE5hbWU6QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5z
SWRlbnRpZmllciBkaXNwbGF5TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIFt1c2VyIHNldElj
b246QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ljb24uanBnIl07CisKKyAgICBOU0FycmF5PF9X
S1B1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzICo+ICpwdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1hdGVycyA9IEBbIHBhcmFtZXRlcnMxLmdldCgpLCBwYXJhbWV0ZXJzMi5nZXQoKSBdOworCisg
ICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgYWxsb2NdIGluaXRXaXRoUmVseWluZ1BhcnR5OnJwLmdldCgpIHVzZXI6dXNlci5n
ZXQoKSBwdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1hdGVyczpwdWJsaWNLZXlDcmVkZW50aWFsUGFy
YW1hdGVyc10pOworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVz
YiA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25U
cmFuc3BvcnRVU0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVy
bmFsID0gYWRvcHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlv
blRyYW5zcG9ydEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19X
S1B1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6
bnNJZGVudGlmaWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0
KCksIG5mYy5nZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0RXhjbHVk
ZUNyZWRlbnRpYWxzOkBbIGNyZWRlbnRpYWwuZ2V0KCksIGNyZWRlbnRpYWwuZ2V0KCkgXV07CisK
KyAgICBhdXRvIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBhZG9wdE5TKFtbX1dLQXV0aGVudGlj
YXRvclNlbGVjdGlvbkNyaXRlcmlhIGFsbG9jXSBpbml0XSk7CisgICAgW2F1dGhlbnRpY2F0b3JT
ZWxlY3Rpb24gc2V0QXV0aGVudGljYXRvckF0dGFjaG1lbnQ6X1dLQXV0aGVudGljYXRvckF0dGFj
aG1lbnRDcm9zc1BsYXRmb3JtXTsgLy8KKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRS
ZXF1aXJlUmVzaWRlbnRLZXk6WUVTXTsKKyAgICBbYXV0aGVudGljYXRvclNlbGVjdGlvbiBzZXRV
c2VyVmVyaWZpY2F0aW9uOl9XS1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudERpc2NvdXJhZ2Vk
XTsgLy8KKyAgICBbb3B0aW9ucyBzZXRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOmF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24uZ2V0KCldOworCisgICAgW29wdGlvbnMgc2V0QXR0ZXN0YXRpb246X1dLQXR0
ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZUluZGlyZWN0XTsgLy8KKworICAgIGF1dG8gcmVz
dWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZUNyZWF0aW9uT3B0
aW9uc1dpdGhPcHRpb25zOm9wdGlvbnMuZ2V0KCldOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHJl
c3VsdC5ycC5uYW1lLCAiZXhhbXBsZS5jb20iKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVzdWx0
LnJwLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNvbS9pY29uLmpwZyIpOworICAgIEVYUEVD
VF9XS19TVFJFUShyZXN1bHQucnAuaWQsICJleGFtcGxlLmNvbSIpOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKHJlc3VsdC51c2VyLm5hbWUsICJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIik7CisgICAg
RVhQRUNUX1dLX1NUUkVRKHJlc3VsdC51c2VyLmljb24sIEAiaHR0cHMvL3d3dy5leGFtcGxlLmNv
bS9pY29uLmpwZyIpOworICAgIEVYUEVDVF9FUShyZXN1bHQudXNlci5pZFZlY3Rvci5zaXplKCks
IHNpemVvZihpZGVudGlmaWVyKSk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQudXNlci5p
ZFZlY3Rvci5kYXRhKCksIGlkZW50aWZpZXIsIHNpemVvZihpZGVudGlmaWVyKSksIDApOworICAg
IEVYUEVDVF9XS19TVFJFUShyZXN1bHQudXNlci5kaXNwbGF5TmFtZSwgIkogQXBwbGVzZWVkIik7
CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnB1YktleUNyZWRQYXJhbXMuc2l6ZSgpLCAybHUpOwor
ICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1swXS50eXBlLCBXZWJDb3JlOjpQ
dWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0
LnB1YktleUNyZWRQYXJhbXNbMF0uYWxnLCAtNyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5wdWJL
ZXlDcmVkUGFyYW1zWzFdLnR5cGUsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxUeXBlOjpQ
dWJsaWNLZXkpOworICAgIEVYUEVDVF9FUShyZXN1bHQucHViS2V5Q3JlZFBhcmFtc1sxXS5hbGcs
IC0yNTcpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC50aW1lb3V0LCAxMjB1KTsKKworICAgIEVY
UEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSwgMmx1KTsKKyAgICBFWFBF
Q1RfRVEocmVzdWx0LmV4Y2x1ZGVDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3JlOjpQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4Y2x1
ZGVDcmVkZW50aWFsc1swXS5pZFZlY3Rvci5zaXplKCksIHNpemVvZihpZGVudGlmaWVyKSk7Cisg
ICAgRVhQRUNUX0VRKG1lbWNtcChyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLmlkVmVjdG9y
LmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50aWZpZXIpKSwgMCk7CisgICAgRVhQRUNU
X0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNsdSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbMF0udHJhbnNwb3J0c1sw
XSwgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4
Y2x1ZGVDcmVkZW50aWFsc1swXS50cmFuc3BvcnRzWzFdLCBBdXRoZW50aWNhdG9yVHJhbnNwb3J0
OjpOZmMpOworICAgIEVYUEVDVF9FUShyZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzWzBdLnRyYW5z
cG9ydHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVD
VF9FUShyZXN1bHQuYXV0aGVudGljYXRvclNlbGVjdGlvbi0+YXV0aGVudGljYXRvckF0dGFjaG1l
bnQsIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM6OkF1dGhlbnRpY2F0b3JBdHRh
Y2htZW50OjpDcm9zc1BsYXRmb3JtKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmF1dGhlbnRpY2F0
b3JTZWxlY3Rpb24tPnJlcXVpcmVSZXNpZGVudEtleSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKHJl
c3VsdC5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLT51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZp
Y2F0aW9uUmVxdWlyZW1lbnQ6OkRpc2NvdXJhZ2VkKTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQu
YXR0ZXN0YXRpb24sIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U6OkluZGlyZWN0KTsK
K30KKworVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBNYWtlQ3JlZGVudGlhbFNQSVRpbWVv
dXQpCit7CisgICAgcmVzZXQoKTsKKworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAx
LCAweDAyLCAweDAzLCAweDA0IH07CisgICAgdWludDhfdCBoYXNoW10gPSB7IDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDIsIDB4
MDMsIDB4MDQgfTsKKyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhC
eXRlczppZGVudGlmaWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworICAgIE5TRGF0YSAq
bnNIYXNoID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmhhc2ggbGVuZ3RoOnNpemVvZihoYXNoKV07
CisgICAgYXV0byBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxQ
YXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aEFsZ29yaXRobTpALTddKTsKKworICAgIGF1dG8gcnAg
PSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBhbGxv
Y10gaW5pdFdpdGhOYW1lOkAiZXhhbXBsZS5jb20iXSk7CisgICAgYXV0byB1c2VyID0gYWRvcHRO
UyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJqYXBwbGVzZWVkQGV4YW1wbGUuY29tIiBpZGVudGlmaWVyOm5zSWRlbnRpZmllciBkaXNwbGF5
TmFtZTpAIkogQXBwbGVzZWVkIl0pOworICAgIE5TQXJyYXk8X1dLUHVibGljS2V5Q3JlZGVudGlh
bFBhcmFtZXRlcnMgKj4gKnB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWF0ZXJzID0gQFsgcGFyYW1l
dGVycy5nZXQoKSBdOworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGFsbG9jXSBpbml0V2l0aFJlbHlpbmdQYXJ0eTpycC5n
ZXQoKSB1c2VyOnVzZXIuZ2V0KCkgcHVibGljS2V5Q3JlZGVudGlhbFBhcmFtYXRlcnM6cHVibGlj
S2V5Q3JlZGVudGlhbFBhcmFtYXRlcnNdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIG1ha2VDcmVkZW50aWFsV2l0aEhhc2g6bnNIYXNo
IG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS0F1dGhlbnRpY2F0
b3JBdHRlc3RhdGlvblJlc3BvbnNlICpyZXNwb25zZSwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbiA9IHRydWU7CisKKyAgICAgICAgRVhQRUNUX05V
TEwocmVzcG9uc2UpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuZG9tYWluLCBXS0Vycm9yRG9t
YWluKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JVbmtub3duKTsKKyAg
ICB9XTsKKyAgICBVdGlsOjpydW4oJndlYkF1dGhlbnRpY2F0aW9uUGFuZWxSYW4pOworfQorCitU
RVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9uc01pbmltdW4pCit7CisgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gcmVzdWx0
ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJlcXVlc3RPcHRpb25z
V2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnRpbWVv
dXQsIFdURjo6bnVsbG9wdCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LnJwSWQuaXNOdWxsKCkp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFscy5zaXplKCksIDBsdSk7Cisg
ICAgRVhQRUNUX0VRKHJlc3VsdC51c2VyVmVyaWZpY2F0aW9uLCBVc2VyVmVyaWZpY2F0aW9uUmVx
dWlyZW1lbnQ6OlByZWZlcnJlZCk7CisgICAgRVhQRUNUX1RSVUUocmVzdWx0LmV4dGVuc2lvbnMt
PmFwcGlkLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmV4dGVuc2lvbnMtPmdvb2ds
ZUxlZ2FjeUFwcGlkU3VwcG9ydCwgZmFsc2UpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW1EZWZhdWx0KQor
eworICAgIHVpbnQ4X3QgaWRlbnRpZmllcltdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07
CisgICAgTlNEYXRhICpuc0lkZW50aWZpZXIgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aWRlbnRp
ZmllciBsZW5ndGg6c2l6ZW9mKGlkZW50aWZpZXIpXTsKKyAgICBhdXRvIGRlc2NyaXB0b3IgPSBh
ZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgYWxsb2NdIGluaXRXaXRo
SWRlbnRpZmllcjpuc0lkZW50aWZpZXJdKTsKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5T
KFtbX1dLQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7
CisKKyAgICBhdXRvIG9wdGlvbnMgPSBhZG9wdE5TKFtbX1dLUHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zIGFsbG9jXSBpbml0XSk7CisgICAgW29wdGlvbnMgc2V0VGltZW91dDpAMTIw
XTsKKyAgICBbb3B0aW9ucyBzZXRBbGxvd0NyZWRlbnRpYWxzOkBbIGRlc2NyaXB0b3IuZ2V0KCkg
XV07CisgICAgW29wdGlvbnMgc2V0RXh0ZW5zaW9uczpleHRlbnNpb25zLmdldCgpXTsKKworICAg
IGF1dG8gcmVzdWx0ID0gW19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwgY29udmVydFRvQ29yZVJl
cXVlc3RPcHRpb25zV2l0aE9wdGlvbnM6b3B0aW9ucy5nZXQoKV07CisKKyAgICBFWFBFQ1RfRVEo
cmVzdWx0LnRpbWVvdXQsIDEyMHUpOworCisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRl
bnRpYWxzLnNpemUoKSwgMWx1KTsKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlh
bHNbMF0udHlwZSwgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFR5cGU6OlB1YmxpY0tleSk7
CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLnNpemUo
KSwgc2l6ZW9mKGlkZW50aWZpZXIpKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKHJlc3VsdC5hbGxv
d0NyZWRlbnRpYWxzWzBdLmlkVmVjdG9yLmRhdGEoKSwgaWRlbnRpZmllciwgc2l6ZW9mKGlkZW50
aWZpZXIpKSwgMCk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LnVzZXJWZXJpZmljYXRpb24sIFVz
ZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworfQorCitURVNUKFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwsIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc01heGltdW0pCit7
CisgICAgdWludDhfdCBpZGVudGlmaWVyW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsK
KyAgICBOU0RhdGEgKm5zSWRlbnRpZmllciA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczppZGVudGlm
aWVyIGxlbmd0aDpzaXplb2YoaWRlbnRpZmllcildOworCisgICAgYXV0byBvcHRpb25zID0gYWRv
cHROUyhbW19XS1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyBhbGxvY10gaW5pdF0p
OworICAgIFtvcHRpb25zIHNldFRpbWVvdXQ6QDEyMF07CisKKyAgICBhdXRvIHVzYiA9IGFkb3B0
TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRV
U0JdKTsKKyAgICBhdXRvIG5mYyA9IGFkb3B0TlMoW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6X1dL
V2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRORkNdKTsKKyAgICBhdXRvIGludGVybmFsID0gYWRv
cHROUyhbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpfV0tXZWJBdXRoZW50aWNhdGlvblRyYW5zcG9y
dEludGVybmFsXSk7CisgICAgYXV0byBjcmVkZW50aWFsID0gYWRvcHROUyhbW19XS1B1YmxpY0tl
eUNyZWRlbnRpYWxEZXNjcmlwdG9yIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bnNJZGVudGlm
aWVyXSk7CisgICAgW2NyZWRlbnRpYWwgc2V0VHJhbnNwb3J0czpAWyB1c2IuZ2V0KCksIG5mYy5n
ZXQoKSwgaW50ZXJuYWwuZ2V0KCkgXV07CisgICAgW29wdGlvbnMgc2V0QWxsb3dDcmVkZW50aWFs
czpAWyBjcmVkZW50aWFsLmdldCgpLCBjcmVkZW50aWFsLmdldCgpIF1dOworCisgICAgW29wdGlv
bnMgc2V0VXNlclZlcmlmaWNhdGlvbjpfV0tVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnRSZXF1
aXJlZF07CisKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdE5TKFtbX1dLQXV0aGVudGljYXRp
b25FeHRlbnNpb25zQ2xpZW50SW5wdXRzIGFsbG9jXSBpbml0XSk7CisgICAgW2V4dGVuc2lvbnMg
c2V0QXBwaWQ6QCJodHRwcy8vd3d3LmV4YW1wbGUuY29tL2ZpZG8iXTsKKyAgICBbb3B0aW9ucyBz
ZXRFeHRlbnNpb25zOmV4dGVuc2lvbnMuZ2V0KCldOworCisgICAgYXV0byByZXN1bHQgPSBbX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbCBjb252ZXJ0VG9Db3JlUmVxdWVzdE9wdGlvbnNXaXRoT3B0
aW9uczpvcHRpb25zLmdldCgpXTsKKworICAgIEVYUEVDVF9FUShyZXN1bHQudGltZW91dCwgMTIw
dSk7CisKKyAgICBFWFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpLCAybHUp
OworICAgIEVYUEVDVF9FUShyZXN1bHQuYWxsb3dDcmVkZW50aWFsc1swXS50eXBlLCBXZWJDb3Jl
OjpQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVibGljS2V5KTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRWZWN0b3Iuc2l6ZSgpLCBzaXplb2YoaWRlbnRpZmll
cikpOworICAgIEVYUEVDVF9FUShtZW1jbXAocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0uaWRW
ZWN0b3IuZGF0YSgpLCBpZGVudGlmaWVyLCBzaXplb2YoaWRlbnRpZmllcikpLCAwKTsKKyAgICBF
WFBFQ1RfRVEocmVzdWx0LmFsbG93Q3JlZGVudGlhbHNbMF0udHJhbnNwb3J0cy5zaXplKCksIDNs
dSk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNb
MF0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYik7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5h
bGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9ydHNbMV0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6
Ok5mYyk7CisgICAgRVhQRUNUX0VRKHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzWzBdLnRyYW5zcG9y
dHNbMl0sIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OkludGVybmFsKTsKKworICAgIEVYUEVDVF9F
UShyZXN1bHQudXNlclZlcmlmaWNhdGlvbiwgVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKHJlc3VsdC5leHRlbnNpb25zLT5hcHBpZCwg
Imh0dHBzLy93d3cuZXhhbXBsZS5jb20vZmlkbyIpOworfQorCitURVNUKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwsIEdldEFzc2VydGlvblNQSVRpbWVvdXQpCit7CisgICAgcmVzZXQoKTsKKworICAg
IHVpbnQ4X3QgaGFzaFtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAw
eDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0
LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAxLCAw
eDAyLCAweDAzLCAweDA0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgTlNEYXRhICpu
c0hhc2ggPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6aGFzaCBsZW5ndGg6c2l6ZW9mKGhhc2gpXTsK
KworICAgIGF1dG8gb3B0aW9ucyA9IGFkb3B0TlMoW1tfV0tQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnMgYWxsb2NdIGluaXRdKTsKKyAgICBbb3B0aW9ucyBzZXRUaW1lb3V0OkAxMjBd
OworCisgICAgYXV0byBwYW5lbCA9IGFkb3B0TlMoW1tfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVs
IGFsbG9jXSBpbml0XSk7CisgICAgW3BhbmVsIGdldEFzc2VydGlvbldpdGhIYXNoOm5zSGFzaCBv
cHRpb25zOm9wdGlvbnMuZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihfV0tBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICB3
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmFuID0gdHJ1ZTsKKworICAgICAgICBFWFBFQ1RfTlVMTChy
ZXNwb25zZSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5kb21haW4sIFdLRXJyb3JEb21haW4p
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvclVua25vd24pOworICAgIH1d
OworICAgIFV0aWw6OnJ1bigmd2ViQXV0aGVudGljYXRpb25QYW5lbFJhbik7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>