<?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>176280</bug_id>
          
          <creation_ts>2017-09-02 12:38:06 -0700</creation_ts>
          <short_desc>[Cocoa] Tidy a few things in legacy WebHTMLView</short_desc>
          <delta_ts>2017-09-27 12:46:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344845</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-02 12:38:06 -0700</bug_when>
    <thetext>Tidy a few things in legacy WebHTMLView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344846</commentid>
    <comment_count>1</comment_count>
      <attachid>319731</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-02 12:51:47 -0700</bug_when>
    <thetext>Created attachment 319731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344849</commentid>
    <comment_count>2</comment_count>
      <attachid>319731</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-02 13:08:27 -0700</bug_when>
    <thetext>Comment on attachment 319731
Patch

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

&gt; Source/WebKitLegacy/mac/ChangeLog:15
&gt; +        (-[WebHTMLView _web_makePluginSubviewsPerformSelector:withObject:]): Moved up in the
&gt; +        file so it can be shared by two plug-in methods below.

I thought modern Objective-C compilers didn’t care about the order methods were defined in the file!

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1622
&gt; +    [subviews release];

Use RetainPtr instead?

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2593
&gt; +        NSArray *localSubresources;

You seem to have left the definition of s on line 2587. Is it still used?

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:4180
&gt; +        // Don&apos;t send didDrawRect on iOS, it is not used by anyone and it is causing thread synchronization problems.

This comment is now more confusing than before.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:4396
&gt;  - (BOOL)_isSelectionEvent:(NSEvent *)event

Did you mean to keep the WebEvent version instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344850</commentid>
    <comment_count>3</comment_count>
      <attachid>319731</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-02 13:08:58 -0700</bug_when>
    <thetext>Comment on attachment 319731
Patch

r+ for a version that builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344887</commentid>
    <comment_count>4</comment_count>
      <attachid>319731</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-02 17:13:08 -0700</bug_when>
    <thetext>Comment on attachment 319731
Patch

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

&gt;&gt; Source/WebKitLegacy/mac/ChangeLog:15
&gt;&gt; +        file so it can be shared by two plug-in methods below.
&gt; 
&gt; I thought modern Objective-C compilers didn’t care about the order methods were defined in the file!

I think this was really about moving it into the appropriate category? Let me check.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1622
&gt;&gt; +    [subviews release];
&gt; 
&gt; Use RetainPtr instead?

Yes. Turns out really nice. Can just adoptNS/get inside the for loop instead of using local variable.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2593
&gt;&gt; +        NSArray *localSubresources;
&gt; 
&gt; You seem to have left the definition of s on line 2587. Is it still used?

It’s not. Merge mistake. Guess I did not recompile after merging!

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:4180
&gt;&gt; +        // Don&apos;t send didDrawRect on iOS, it is not used by anyone and it is causing thread synchronization problems.
&gt; 
&gt; This comment is now more confusing than before.

I could delete the comment, or I could use this new one I wrote:

        // Note that the didDrawRect implemention here is entirely in Mac-specific code. That&apos;s OK because we
        // don&apos;t need support for didDrawRect on iOS; not required and a long while back it caused a threading problem.

I think I will include that new comment, but then some day someone will probably delete it without it ever doing anyone any good!

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:4396
&gt;&gt;  - (BOOL)_isSelectionEvent:(NSEvent *)event
&gt; 
&gt; Did you mean to keep the WebEvent version instead?

I did. But, strangely, this incorrect code compiled fine on in the iOS EWS server. Makes me wonder what is going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345030</commentid>
    <comment_count>5</comment_count>
      <attachid>319795</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 12:36:40 -0700</bug_when>
    <thetext>Created attachment 319795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345031</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 12:37:17 -0700</bug_when>
    <thetext>New patch has more changes in it, so needs review again, but I am guessing/hoping it will be Dan again.

Also not yet compiled on iOS so needs EWS love.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345044</commentid>
    <comment_count>7</comment_count>
      <attachid>319795</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-03 13:50:28 -0700</bug_when>
    <thetext>Comment on attachment 319795
Patch

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

&gt; Source/WebKitLegacy/mac/ChangeLog:36
&gt; +        (-[WebHTMLView _shouldDeleteRange:]): Deleted.

Why? Presumably because it’s unused.

&gt; Source/WebKitLegacy/mac/ChangeLog:40
&gt; +        (-[WebHTMLView _web_setPrintingModeRecursive:adjustViewSize:]): Added. Helper method so

I’m not sure you need “web_” in these internal methods in a private class. Maybe worth doing because it’s an NSView subclass.

&gt; Source/WebKitLegacy/mac/WebCoreSupport/WebChromeClient.mm:909
&gt; +#if !PLATFORM(MAC)

Should this say #if PLATFORM(IOS)? Or perhaps start with the #if PLATFORM(MAC) case?

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:777
&gt; +#define AUTOSCROLL_INTERVAL 0.1

Could turn this into a static const NSTimeInterval, or just inline it in the one place it’s used.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1008
&gt; +static NSString *createUUIDString()
&gt; +{
&gt; +    return (NSString *)adoptCF(CFUUIDCreateString(kCFAllocatorDefault, adoptCF(CFUUIDCreate(kCFAllocatorDefault)).get())).autorelease();
&gt; +}

Simpler to use all-Objective-C API these days: [NSUUID UUID].UUIDString, and probably not worth wrapping in a static function.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1406
&gt; +        const unichar nonBreakingSpaceCharacter = 0xA0;
&gt; +        NSString *nonBreakingSpaceString = [NSString stringWithCharacters:&amp;nonBreakingSpaceCharacter length:1];

This is so awkward, and using the Objective-C string literal @&quot;\u00A0&quot; would also streamline the code.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2050
&gt; +    } else if ([type isEqual:NSTIFFPboardType] &amp;&amp; _private-&gt;promisedDragTIFFDataSource) {

Can use -isEqualToString:

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:3926
&gt; +        static bool version3OrLaterClient = WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_QUICKBOOKS_QUIRK);

The variable type perfectly matched the return type in the declaration of WebKitLinkedOnOrAfter!

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:6427
&gt; +    if (!_private-&gt;autoscrollTimer) {

Can reverse the condition and return early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345045</commentid>
    <comment_count>8</comment_count>
      <attachid>319802</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 13:56:21 -0700</bug_when>
    <thetext>Created attachment 319802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345053</commentid>
    <comment_count>9</comment_count>
      <attachid>319795</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 14:37:50 -0700</bug_when>
    <thetext>Comment on attachment 319795
Patch

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

&gt;&gt; Source/WebKitLegacy/mac/ChangeLog:36
&gt;&gt; +        (-[WebHTMLView _shouldDeleteRange:]): Deleted.
&gt; 
&gt; Why? Presumably because it’s unused.

Yes, correct. I will specify.

&gt;&gt; Source/WebKitLegacy/mac/ChangeLog:40
&gt;&gt; +        (-[WebHTMLView _web_setPrintingModeRecursive:adjustViewSize:]): Added. Helper method so
&gt; 
&gt; I’m not sure you need “web_” in these internal methods in a private class. Maybe worth doing because it’s an NSView subclass.

I am also not sure. We certainly aren’t consistent about this nor is there a clear guideline that keeps us out of the way of engineering teams at Apple. I agree that when it’s a private class there is no concern about colliding with developers using WebKit.

I used the prefix here primarily because I was factoring code out of methods with names that were already using that prefix.

&gt;&gt; Source/WebKitLegacy/mac/WebCoreSupport/WebChromeClient.mm:909
&gt;&gt; +#if !PLATFORM(MAC)
&gt; 
&gt; Should this say #if PLATFORM(IOS)? Or perhaps start with the #if PLATFORM(MAC) case?

I suppose I could just take advantage of the fact that unused parameter warnings are off in this project and use #if PLATFORM(MAC) and not bother with UNUSED_PARAM.

But if not, then I like start with the “empty” case first because it’s so much smaller. When it’s #if/#else I really don’t know which is better. Here I think of it as “we have here code needed only on Mac, and not on not-Mac”, which is why I wrote it this way. I prefer not to change this one but I am slightly torn because you didn’t immediately understand/agree.

At various other call sites I prefer not to use #else, when it’s just two pieces of code that aren’t truly mutually exclusive. But for a function that just has two different implementations it’s tricky.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:777
&gt;&gt; +#define AUTOSCROLL_INTERVAL 0.1
&gt; 
&gt; Could turn this into a static const NSTimeInterval, or just inline it in the one place it’s used.

I chose to inline it where used since the constant name adds no clarity and there is no comment either.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1008
&gt;&gt; +}
&gt; 
&gt; Simpler to use all-Objective-C API these days: [NSUUID UUID].UUIDString, and probably not worth wrapping in a static function.

Thanks. That is better. And I checked and discovered that the UUID will stringify if we pass it as the value for &quot;%@&quot;, obviating the need to invoke UUIDString explicitly.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:1406
&gt;&gt; +        NSString *nonBreakingSpaceString = [NSString stringWithCharacters:&amp;nonBreakingSpaceCharacter length:1];
&gt; 
&gt; This is so awkward, and using the Objective-C string literal @&quot;\u00A0&quot; would also streamline the code.

Yes, much better.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:2050
&gt;&gt; +    } else if ([type isEqual:NSTIFFPboardType] &amp;&amp; _private-&gt;promisedDragTIFFDataSource) {
&gt; 
&gt; Can use -isEqualToString:

Yes, fixed.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:3926
&gt;&gt; +        static bool version3OrLaterClient = WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_QUICKBOOKS_QUIRK);
&gt; 
&gt; The variable type perfectly matched the return type in the declaration of WebKitLinkedOnOrAfter!

OK, undid this change.

&gt;&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:6427
&gt;&gt; +    if (!_private-&gt;autoscrollTimer) {
&gt; 
&gt; Can reverse the condition and return early.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345059</commentid>
    <comment_count>10</comment_count>
      <attachid>319807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 14:53:14 -0700</bug_when>
    <thetext>Created attachment 319807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345066</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 15:28:11 -0700</bug_when>
    <thetext>Committed r221559: &lt;http://trac.webkit.org/changeset/221559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353644</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:46:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693921&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319731</attachid>
            <date>2017-09-02 12:51:47 -0700</date>
            <delta_ts>2017-09-03 12:36:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176280-20170902125146.patch</filename>
            <type>text/plain</type>
            <size>72653</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggMzMyZDk5OTI1YTg3Zjk3MWY4NTE5NTIxNmVkMWU3ZWE1OWVkMTYyNy4uOTRhNWEyMzkyODEz
MjNkMjQ0ZGRhYWQ2ZDljZmI5ODVkMjY2YTMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA5LTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBbQ29jb2FdIFRpZHkgYSBmZXcgdGhpbmdzIGluIGxlZ2FjeSBXZWJI
VE1MVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc2MjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOiBEZWZpbmUgV2ViRXZlbnQgb24gYm90aCBpT1MgYW5k
IE1hYyBzbyBtb3JlIGV2ZW50IGhhbmRsaW5nCisgICAgICAgIGNvZGUgY2FuIGJlIHNoYXJlZCB3
aXRob3V0ICNpZiBiZWxvdy4gVXNlICNpZiBQTEFURk9STShNQUMpIGluc3RlYWQgb2YgI2lmICFQ
TEFURk9STShJT1MpCisgICAgICAgIGluIGEgbG90IG1vcmUgcGxhY2VzLgorICAgICAgICAocHJv
bWlzZWREYXRhQ2xpZW50KTogVXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YganVzdCBkb2lu
ZyBhICJuZXciIG9uIHRoZSBoZWFwLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaW1hZ2VFeGlz
dHNBdFBhdGhzOl0pOiBVc2UgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOndpdGhPYmplY3Q6
XSk6IE1vdmVkIHVwIGluIHRoZQorICAgICAgICBmaWxlIHNvIGl0IGNhbiBiZSBzaGFyZWQgYnkg
dHdvIHBsdWctaW4gbWV0aG9kcyBiZWxvdy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hhc0hU
TUxEb2N1bWVudF0pOiBEZWxldGVkLiBUaGUgb25lIGNhbGxlciB3YXMgcmVtb3ZlZCBhIGxvbmcg
dGltZSBhZ28uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6Zm9yVHlwZTppbkNvbnRleHQ6c3VicmVzb3VyY2VzOl0pOgorICAgICAgICBDb21w
YXJlZCBwYXN0ZWJvYXJkIHR5cGUgc3RyaW5ncyB1c2luZyBpc0VxdWFsVG9TdHJpbmc6IHJhdGhl
ciB0aGFuIHVzaW5nID09IHNpbmNlCisgICAgICAgIHdlIHdhbnQgdG8gYWN0dWFsbHkgY29tcGFy
ZSB0aGUgc3RyaW5nIGNvbnRlbnRzLiBBbHNvIHVwZGF0ZWQgdG8gdXNlIG1vZGVybiBmb3IgbG9v
cAorICAgICAgICBhbmQgcmVuYW1lZCBhIGxvY2FsIHZhcmlhYmxlIGZyb20gInMiIHRvICJsb2Nh
bFN1YnJlc291cmNlcyIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9wYXVzZU51bGxFdmVudHNG
b3JBbGxOZXRzY2FwZVBsdWdpbnNdKTogUmV3cml0ZSB1c2luZyB0aGUKKyAgICAgICAgX3dlYl9t
YWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDogbWV0aG9kLgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lu
c10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZHJhd1NpbmdsZVJlY3Q6XSk6IFJl
YXJyYW5nZWQgdGhpcyBmdW5jdGlvbiB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCBtb3N0CisgICAg
ICAgIG9mIGl0IGlzIE1hYy1vbmx5LgorCiAyMDE3LTA5LTAxICBBbmR5IEVzdGVzICA8YWVzdGVz
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ0ddIFVwc3RyZWFtIENvcmVHcmFwaGljcy1yZWxhdGVk
IFdlYktpdFN5c3RlbUludGVyZmFjZSBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDhkMGQ0ZDkyNTQ4MGNiODNjMjBhZTgx
NDU1NDU0MjMwMDc0YTY4ZGIuLjZiYTU4NDlkZTQ4NWE3YzliY2VjMjU2ZGU1ZDk5N2U1NjI3YmU2
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYs
IDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC03Miw2ICs3Miw3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAj
aW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFs
LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgpAQCAtMTQxLDcgKzE0Miw3
IEBACiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcu
aD4KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCAiV2Vi
TlNFdmVudEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1w
b3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CkBAIC0xNTAsOCArMTUxLDYgQEAKICNpbXBv
cnQgPHBhbC9zcGkvbWFjL05TTWVudVNQSS5oPgogI2VuZGlmCiAKLSNpbXBvcnQgPFF1YXJ0ekNv
cmUvUXVhcnR6Q29yZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiV2ViVUlLaXRE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9LZXlFdmVudENvZGVzSU9TLmg+CkBAIC0xNjgs
MTMgKzE2NywxOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIAogI2lmIFBMQVRGT1JNKElPUykKKwogQGludGVyZmFjZSBOU09iamVjdCAoQWNjZXNz
aWJpbGl0eSkKIC0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50OwogLSAo
aWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7CiBAZW5kCisKICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKK3VzaW5nIFdlYkV2ZW50ID0gTlNF
dmVudDsKKwogQGludGVyZmFjZSBXZWJNZW51VGFyZ2V0IDogTlNPYmplY3QgewogICAgIFdlYkNv
cmU6OkNvbnRleHRNZW51Q29udHJvbGxlciogX21lbnVDb250cm9sbGVyOwogfQpAQCAtNjM2LDEx
ICs2NDAsMTIgQEAgLSAoQk9PTClpc1NwZWFraW5nOwogLSAodm9pZClzdG9wU3BlYWtpbmc6KGlk
KXNlbmRlcjsKIEBlbmQKIAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQogCiBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3OwogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBib29sIG5lZWRzQ3Vyc29y
UmVjdHNTdXBwb3J0QXRQb2ludChOU1dpbmRvdyogd2luZG93LCBOU1BvaW50IHBvaW50KQogewog
ICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IFlFUzsKQEAgLTY2MSw3ICs2NjYsNiBAQCBzdGF0aWMg
Ym9vbCBuZWVkc0N1cnNvclJlY3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cqIHdpbmRvdywgTlNQ
b2ludCBwb2ludCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiBzdGF0aWMgSU1QIG9sZFNldEN1
cnNvckZvck1vdXNlTG9jYXRpb25JTVA7CiAKIC8vIE92ZXJyaWRpbmcgYW4gaW50ZXJuYWwgbWV0
aG9kIGlzIGEgaGFjazsgPHJkYXI6Ly9wcm9ibGVtLzc2NjI5ODc+IHRyYWNrcyBmaW5kaW5nIGEg
YmV0dGVyIHNvbHV0aW9uLgpAQCAtNzA1LDcgKzcwOSw3IEBAIC0gKHZvaWQpY2VudGVyU2VsZWN0
aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyOwogI2VuZGlmCiBAZW5kCiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKIAogQGludGVyZmFjZSBOU1ZpZXcgKFdlYlNldE5l
ZWRzRGlzcGxheUluUmVjdCkKIC0gKHZvaWQpX3dlYl9zZXROZWVkc0Rpc3BsYXlJblJlY3Q6KE5T
UmVjdClpbnZhbGlkUmVjdDsKQEAgLTc2NSw3ICs3NjksOCBAQCBAZW5kCiBAaW50ZXJmYWNlIE5T
U3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCiAtICh2b2lkKWxlYXJuV29y
ZDooTlNTdHJpbmcgKil3b3JkOwogQGVuZAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCiAKIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5n
TWluaW11bVNocmlua0ZhY3RvciA9IFByaW50Q29udGV4dDo6bWluaW11bVNocmlua0ZhY3Rvcigp
OwogY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yID0g
UHJpbnRDb250ZXh0OjptYXhpbXVtU2hyaW5rRmFjdG9yKCk7CkBAIC03OTcsOSArODAyLDEwIEBA
IEBlbmQKIC8vIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxlIHRvIHNhZmVseSByZWZlcmVuY2UgdGhl
IENhY2hlZEltYWdlIGZvciB0aGUgcHJvbWlzZWQgZHJhZyBkYXRhCiBzdGF0aWMgQ2FjaGVkSW1h
Z2VDbGllbnQmIHByb21pc2VkRGF0YUNsaWVudCgpCiB7Ci0gICAgc3RhdGljIENhY2hlZEltYWdl
Q2xpZW50KiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9IG5ldyBDYWNoZWRJbWFnZUNsaWVu
dDsKLSAgICByZXR1cm4gKnN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50OworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDYWNoZWRJbWFnZUNsaWVudD4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7CisgICAgcmV0dXJuICZzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudC5nZXQoKTsKIH0KKwog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC04MDcsNyArODEzLDcgQEAgc3RhdGljIE5T
U3RyaW5nICogY29uc3QgV2ViTWFya2VkVGV4dFVwZGF0ZWROb3RpZmljYXRpb24gPSBAIldlYk1h
cmtlZFRleHRVcGRhdGUKICNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1M
Vmlld0ZpbGVJbnRlcm5hbCkKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
IC0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzOwogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQgYWxsb3dQbGFp
blRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CiAtIChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9t
UGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKQEAgLTgyMiwyNSArODI4LDI2
IEBAIC0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnCiAtIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilhY3Rpb247CiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlOwogLSAoQk9PTClfc2hv
dWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCiAtIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICop
ZXZlbnQ7CiAtICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJy
YXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVk
QXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZzsK
ICNlbmRpZgogLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZTsKLSNpZiAhUExBVEZPUk0oSU9T
KQotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLSNlbHNlCiAt
ICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooV2ViRXZlbnQgKilldmVudDsKLSNlbmRpZgogLSAo
V2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7CiAtIChCT09MKV9pc1RvcEhUTUxWaWV3OwotI2lm
ICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogLSAodm9pZClfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZTsKIC0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVB
bmRBZGp1c3RWaWV3U2l6ZTsKIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2
ZTsKICNlbmRpZgorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorLSAodm9pZClfd2Vi
X21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmpl
Y3Q6KGlkKW9iamVjdDsKKyNlbmRpZgogQGVuZAogCisjaWYgUExBVEZPUk0oTUFDKQorCiBAaW50
ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld1RleHRDaGVja2luZ0ludGVybmFsKQogLSAo
dm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOihpZClzZW5kZXI7CiAtIChCT09MKXNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKQEAgLTg2MywxNSArODcwLDE5IEBAIC0gKHZvaWQpc2V0
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOwogLSAodm9pZCl0
b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcjsKIEBlbmQKIAorI2Vu
ZGlmCisKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8g
RklYTUU6IFB1dCB0aGlzIGluIGEgbm9ybWFsIGNhdGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBm
b3J3YXJkIGRlY2xhcmF0aW9uIHRyaWNrLgogLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJp
bnRpbmcgbWluaW11bVBhZ2VMb2dpY2FsV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBsb2dpY2Fs
SGVpZ2h0OihmbG9hdCltaW5QYWdlSGVpZ2h0IG9yaWdpbmFsUGFnZVdpZHRoOihmbG9hdClwYWdl
TG9naWNhbFdpZHRoIG9yaWdpbmFsUGFnZUhlaWdodDooZmxvYXQpcGFnZUxvZ2ljYWxIZWlnaHQg
bWF4aW11bVNocmlua1JhdGlvOihmbG9hdCltYXhpbXVtU2hyaW5rUmF0aW8gYWRqdXN0Vmlld1Np
emU6KEJPT0wpYWRqdXN0Vmlld1NpemUgcGFnaW5hdGVTY3JlZW5Db250ZW50OihCT09MKXBhZ2lu
YXRlU2NyZWVuQ29udGVudDsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
IC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CiAjZW5kaWYKIEBlbmQKIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBAY2xhc3MgTlNUZXh0SW5wdXRDb250
ZXh0OworCiBAaW50ZXJmYWNlIE5TUmVzcG9uZGVyIChBcHBLaXREZXRhaWxzKQogLSAoTlNUZXh0
SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0OwogQGVuZApAQCAtODgwLDkgKzg5MSwxMCBAQCBA
aW50ZXJmYWNlIE5TT2JqZWN0IChOU1RleHRJbnB1dENvbnRleHREZXRhaWxzKQogLSAoQk9PTCl3
YW50c1RvSGFuZGxlTW91c2VFdmVudHM7CiAtIChCT09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZl
bnQgKilldmVudDsKIEBlbmQKKwogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBM
QVRGT1JNKE1BQykKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9y
dCkgPE5TVGV4dElucHV0PgogI2Vsc2UKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYk5TVGV4
dElucHV0U3VwcG9ydCkKQEAgLTg5NSw3ICs5MDcsNyBAQCBAZW5kCiAKIEBpbnRlcmZhY2UgV2Vi
SFRNTFZpZXcgKFdlYkVkaXRpbmdTdHlsZVN1cHBvcnQpCiAtIChET01DU1NTdHlsZURlY2xhcmF0
aW9uICopX2VtcHR5U3R5bGU7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CiAtIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3I7CiAjZW5kaWYK
IEBlbmQKQEAgLTkyMiw3ICs5MzQsNyBAQCBAcHVibGljCiAgICAgQk9PTCBpZ25vcmluZ01vdXNl
RHJhZ2dlZEV2ZW50czsKICAgICBCT09MIHByaW50aW5nOwogICAgIEJPT0wgcGFnaW5hdGVTY3Jl
ZW5Db250ZW50OwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEJP
T0wgb2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9uczsKICAgICBCT09MIG9ic2VydmluZ1dp
bmRvd05vdGlmaWNhdGlvbnM7CiAgICAgCkBAIC05MzQsMjMgKzk0NiwxNSBAQCBAcHVibGljCiAg
ICAgQk9PTCBkcmF3aW5nSW50b0xheWVyOwogICAgIEJPT0wgZHJhd2luZ0ludG9BY2NlbGVyYXRl
ZExheWVyOwogCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVu
dDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0jZWxzZQogICAgIFdlYkV2ZW50
ICptb3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0jZW5k
aWYKICAgICBCT09MIGhhbmRsaW5nTW91c2VEb3duRXZlbnQ7Ci0jaWYgIVBMQVRGT1JNKElPUykg
ICAgCi0gICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRo
ZSBldmVudC4KLSNlbHNlCiAgICAgV2ViRXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRl
ciBoYW5kbGluZyB0aGUgZXZlbnQuCi0jZW5kaWYKIAogICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFz
IGEgc2luZ2xlIGlucHV0IGNvbnRleHQsIGJ1dCB3ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVk
aXRhYmxlIGNvbnRlbnQgdG8gYXZvaWQgbWFraW5nIGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29y
ay4KICAgICAvLyBUaGlzIHN0YXRlIGlzIHNhdmVkIGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdl
cywgYmVjYXVzZSBjb21wdXRpbmcgaXQgY2F1c2VzIHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90
IGFsd2F5cyBzYWZlIHRvIGRvLgogICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0OwogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVHJhY2sgd2hldGhlciB0
aGUgdmlldyBoYXMgc2V0IGEgc2VjdXJlIGlucHV0IHN0YXRlLgogICAgIEJPT0wgaXNJblNlY3Vy
ZUlucHV0U3RhdGU7CiAKQEAgLTk2MywyMiArOTY3LDE4IEBAIEBwdWJsaWMKICAgICBXZWJQbHVn
aW5Db250cm9sbGVyICpwbHVnaW5Db250cm9sbGVyOwogICAgIAogICAgIE5TU3RyaW5nICp0b29s
VGlwOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TVG9vbFRp
cFRhZyBsYXN0VG9vbFRpcFRhZzsKICNlbmRpZgogICAgIGlkIHRyYWNraW5nUmVjdE93bmVyOwog
ICAgIHZvaWQgKnRyYWNraW5nUmVjdFVzZXJEYXRhOwogICAgIAogICAgIE5TVGltZXIgKmF1dG9z
Y3JvbGxUaW1lcjsKLSNpZiAhUExBVEZPUk0oSU9TKSAgICAKLSAgICBOU0V2ZW50ICphdXRvc2Ny
b2xsVHJpZ2dlckV2ZW50OwotI2Vsc2UKICAgICBXZWJFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJF
dmVudDsKLSNlbmRpZgotICAgIAorCiAgICAgTlNBcnJheSAqcGFnZVJlY3RzOwogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyICpjb21wbGV0aW9uQ29udHJvbGxlcjsKICNlbmRpZgogICAgIApAQCAtOTg3LDEzICs5
ODcsMTMgQEAgQHB1YmxpYwogICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyogaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKICAgICAKICAgICBXZWJEYXRhU291
cmNlICpkYXRhU291cmNlOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKICNl
bmRpZgogCiAgICAgU0VMIHNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvcjsKIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEJPT0wgaW5zdGFsbGVkVHJhY2tp
bmdBcmVhOwogICAgIGlkIGZsYWdzQ2hhbmdlZEV2ZW50TW9uaXRvcjsKICAgICBOU1JhbmdlIHNv
ZnRTcGFjZVJhbmdlOwpAQCAtMTAxMCw3ICsxMDEwLDggQEAgQHB1YmxpYwogLSAodm9pZCljbGVh
cjsKIEBlbmQKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0
aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChz
dGF0ZSkgewpAQCAtMTAyNCwxOSArMTAyNSwxOCBAQCBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBr
aXQoVHJpU3RhdGUgc3RhdGUpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IE5TT2ZmU3RhdGU7CiB9CisKICNlbmRpZgogCiBAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQ
cml2YXRlCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6
aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAg
ICAgaWYgKCFvbGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QKSB7CiAgICAgICAgIE1ldGhv
ZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cgY2xh
c3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7CiAgICAgICAgIEFT
U0VSVChzZXRDdXJzb3JNZXRob2QpOwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAgLSAodm9pZClkZWFs
bG9jCiAgICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOwogICAgIEFTU0VSVCghYXV0b3Njcm9s
bFRyaWdnZXJFdmVudCk7CiAgICAgCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwogICAgIFtrZXlEb3duRXZlbnQgcmVs
ZWFzZV07CiAjZWxzZQpAQCAtMTA2NywxMSArMTA2NywxMSBAQCAtICh2b2lkKWRlYWxsb2MKICNl
bmRpZgogICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwogICAgIFt0b29sVGlwIHJlbGVh
c2VdOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIFtjb21wbGV0
aW9uQ29udHJvbGxlciByZWxlYXNlXTsKICNlbmRpZgogICAgIFtkYXRhU291cmNlIHJlbGVhc2Vd
OwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZSkKICAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2Ut
PnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CiAKQEAgLTEwODYsNyArMTA4Niw3
IEBAIC0gKHZvaWQpZGVhbGxvYwogCiAtICh2b2lkKWNsZWFyCiB7Ci0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwogICAg
IFtrZXlEb3duRXZlbnQgcmVsZWFzZV07CiAjZWxzZQpAQCAtMTA5NywxMSArMTA5NywxMSBAQCAt
ICh2b2lkKWNsZWFyCiAjZW5kaWYKICAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKICAg
ICBbdG9vbFRpcCByZWxlYXNlXTsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAjZW5kaWYKICAgICBbZGF0
YVNvdXJjZSByZWxlYXNlXTsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCiAgICAgICAgIHByb21pc2VkRHJh
Z1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwogI2Vu
ZGlmCkBAIC0xMTEwLDEyICsxMTEwLDEyIEBAIC0gKHZvaWQpY2xlYXIKICAgICBrZXlEb3duRXZl
bnQgPSBuaWw7CiAgICAgcGx1Z2luQ29udHJvbGxlciA9IG5pbDsKICAgICB0b29sVGlwID0gbmls
OwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGNvbXBsZXRpb25D
b250cm9sbGVyID0gbmlsOwogI2VuZGlmCiAgICAgZGF0YVNvdXJjZSA9IG5pbDsKLSNpZiAhUExB
VEZPUk0oSU9TKQotICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gMDsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSBudWxscHRyOwogI2Vu
ZGlmCiAKICAgICBsYXllckhvc3RpbmdWaWV3ID0gbmlsOwpAQCAtMTEzMCwyMCArMTEzMCwxOCBA
QCAtIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlCiAgICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1l
XSBET01Eb2N1bWVudF0gX2RvY3VtZW50UmFuZ2VdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykK
KyNpZiBQTEFURk9STShNQUMpCisKIC0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJh
eSAqKXBhdGhzCiB7Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVj
dEVudW1lcmF0b3JdOwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAotICAgIHdoaWxlICgocGF0
aCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICBmb3IgKE5TU3RyaW5n
ICpwYXRoIGluIHBhdGhzKSB7CiAgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFtbTlNVUkxG
aWxlVHlwZU1hcHBpbmdzIHNoYXJlZE1hcHBpbmdzXSBNSU1FVHlwZUZvckV4dGVuc2lvbjpbcGF0
aCBwYXRoRXh0ZW5zaW9uXV07CiAgICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShNSU1FVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4g
WUVTOwogICAgIH0KLSAgICAKICAgICByZXR1cm4gTk87CiB9CisKICNlbmRpZgogCiAtIChXZWJE
YXRhU291cmNlICopX2RhdGFTb3VyY2UKQEAgLTExNjEsMjUgKzExNTksMjMgQEAgLSAoV2ViRnJh
bWVWaWV3ICopX2ZyYW1lVmlldwogICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdl
YkZyYW1lXSBmcmFtZVZpZXddOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCisKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhQ
YXRoczooTlNBcnJheSAqKXBhdGhzCiB7Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21l
bnQ7Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0
b3JdOwogICAgIE5TTXV0YWJsZUFycmF5ICpkb21Ob2RlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAotICAgIHdoaWxlICgocGF0aCA9
IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKworICAgIGZvciAoTlNTdHJpbmcg
KiBwYXRoIGluIHBhdGhzKSB7CiAgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2Vi
X3VzZXJWaXNpYmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwK
ICAgICAgICAgLy8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KICAgICAgICAgTlNTdHJpbmcg
KnVybCA9IFtbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nhbm9uaWNhbGl6
ZV0gX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CiAgICAgICAgIFtkb21Ob2RlcyBhZGRPYmplY3Q6
W1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJsXV07CiAgICAg
fQotICAgIAotICAgIGZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRX
aXRoTm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKLSAgICAKKworICAgIERPTURvY3VtZW50
RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRo
Tm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOworCiAgICAgW2RvbU5vZGVzIHJlbGVhc2VdOwot
ICAgIAorCiAgICAgcmV0dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAhPSBuaWwgPyBmcmFnbWVu
dCA6IG5pbDsKIH0KIApAQCAtMTM2OSw3ICsxMzY1LDcgQEAgLSAodm9pZClfcG9zdEZha2VNb3Vz
ZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2
ZW4KICAgICBbc2VsZiBtb3VzZU1vdmVkOmZha2VFdmVudF07CiB9CiAKLS8vIFRoaXMgbWV0aG9k
IGlzIG5lZWRlZCB0byBzdXBwb3J0IE1hYyBPUyBYIHNlcnZpY2VzLgorLy8gVGhpcyBtZXRob2Qg
aXMgbmVlZGVkIHRvIHN1cHBvcnQgbWFjT1Mgc2VydmljZXMuCiAtIChCT09MKXJlYWRTZWxlY3Rp
b25Gcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCAKIHsgCiAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7IApAQCAtMTQxNiw3ICsxNDEyLDgg
QEAgLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCiAgICAgCiAgICAgX3ByaXZhdGUtPm9i
c2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKIH0KLSNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChCT09MKV9zaG91bGRJbnNl
cnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJh
bmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFj
dGlvbgogewpAQCAtMTQ1MCw3ICsxNDQ3LDggQEAgLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRp
dG9yKCkuc2hvdWxkRGVsZXRlUmFuZ2UoY29yZShyYW5nZSkpOwogfQogCi0jaWYgIVBMQVRGT1JN
KElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6
KE5TRXZlbnQgKilldmVudAogewogICAgIC8vIFVzdWFsbHksIHdlIGhhY2sgQUsncyBoaXRUZXN0
IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0b3Btb3N0IFdlYkhUTUxWaWV3LiAg
CkBAIC0xNDYwLDkgKzE0NTgsNyBAQCAtIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2
ZW50ICopZXZlbnQKICAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBOTzsgICAgCiAgICAgcmV0dXJu
IGhpdFZpZXc7CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKV93cml0
ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9h
cmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNB
dHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwogewogICAgIC8vIFB1dCBIVE1MIG9u
IHRoZSBwYXN0ZWJvYXJkLgpAQCAtMTUwNiwxNSArMTUwMiwxMiBAQCAtICh2b2lkKV93cml0ZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6
KE5TUGFzdAogICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOm5pbCBmb3JUeXBlOldlYlNtYXJ0
UGFzdGVQYm9hcmRUeXBlXTsKICAgICB9CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAot
I2lmICFQTEFURk9STShJT1MpCi0tICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAq
KWV2ZW50Ci0jZWxzZQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClfc2V0TW91
c2VEb3duRXZlbnQ6KFdlYkV2ZW50ICopZXZlbnQKLSNlbmRpZgogewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFTU0VSVCghZXZlbnQgfHwgW2V2ZW50IHR5cGVd
ID09IE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNFdmVudFR5
cGVSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNFdmVudFR5cGVPdGhlck1vdXNl
RG93bik7CiAjZWxzZQogICAgIEFTU0VSVCghZXZlbnQgfHwgZXZlbnQudHlwZSA9PSBXZWJFdmVu
dE1vdXNlRG93bik7CkBAIC0xNTQyLDcgKzE1MzUsOCBAQCAtIChCT09MKV9pc1RvcEhUTUxWaWV3
CiAgICAgcmV0dXJuIHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKIH0KIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdN
b2RlUmVjdXJzaXZlCiB7CiAgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZUxv
Z2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFs
UGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2lu
YXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07CkBAIC0x
NjExLDcgKzE2MDUsMjQgQEAgLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFu
ZEFkanVzdFZpZXdTaXplCiAgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsK
ICNlbmRpZgogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKworLSAodm9pZClfd2Vi
X21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmpl
Y3Q6KGlkKW9iamVjdAoreworICAgIC8vIENvcHkgc3Vidmlld3MgYmVjYXVzZSBbc2VsZiBzdWJ2
aWV3c10gcmV0dXJucyB0aGUgdmlldydzIG11dGFibGUgaW50ZXJuYWwgYXJyYXksCisgICAgLy8g
YW5kIHdlIG11c3QgYXZvaWQgbXV0YXRpbmcgdGhlIGFycmF5IHdoaWxlIGVudW1lcmF0aW5nIGl0
LgorICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW1tzZWxmIHN1YnZpZXdzXSBjb3B5XTsKKyAgICBm
b3IgKE5TVmlldyAqdmlldyBpbiBzdWJ2aWV3cykgeworICAgICAgICBpZiAoW3ZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQorICAgICAgICAgICAg
W3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsKKyAgICB9
CisgICAgW3N1YnZpZXdzIHJlbGVhc2VdOworfQorCisjZW5kaWYKIAogQGVuZAogCkBAIC0xNjQz
LDE1ICsxNjU0LDE4IEBAICsgKE5TQXJyYXkgKil1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXMKIH0K
IAogI2lmIFBMQVRGT1JNKElPUykKKwogLSAodm9pZCltb3VzZU1vdmVkOihXZWJFdmVudCAqKWV2
ZW50CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAo
ZnJhbWUpCiAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZU1vdmVkKGV2ZW50KTsK
IH0KKwogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
KyAodm9pZClfcG9zdEZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZl
bnQKIHsKICAgICAvLyBUaGlzIGlzIG9ic29sZXRlIFNQSSBuZWVkZWQgb25seSBmb3Igb2xkZXIg
dmVyc2lvbnMgb2YgU2FmYXJpCkBAIC0xNjgxLDcgKzE2OTUsOCBAQCAtICh2b2lkKV91cGRhdGVN
b3VzZW92ZXJXaXRoRmFrZUV2ZW50CiAKICAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2
ZW50OmZha2VFdmVudF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKIAogLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKIHsKQEAgLTE2
OTgsNyArMTcxMyw3IEBAIC0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdD
aGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogI2VuZGlmCiAgICAgICAgIApAQCAtMTcwOSw3ICsxNzI0
LDcgQEAgLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKIAogLSAodm9pZClfc2V0QXNpZGVT
dWJ2aWV3cwogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFT
U0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwogICAgIEFTU0VSVChfcHJpdmF0ZS0+
c2F2ZWRTdWJ2aWV3cyA9PSBuaWwpOwogICAgIF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID0gX3N1
YnZpZXdzOwpAQCAtMTcyNSw3ICsxNzQwLDcgQEAgLSAodm9pZClfc2V0QXNpZGVTdWJ2aWV3cwog
IAogIC0gKHZvaWQpX3Jlc3RvcmVTdWJ2aWV3cwogIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKICAgICBBU1NFUlQoX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwog
ICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewogICAgICAgICBbX3N1YnZpZXdz
IHJlbGVhc2VdOwpAQCAtMTc2Miw4ICsxNzc3LDggQEAgLSAodm9pZCl2aWV3V2lsbERyYXcKICAg
ICBbc3VwZXIgdmlld1dpbGxEcmF3XTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKIAotI2lmICFQ
TEFURk9STShJT1MpCiAvLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2Ug
dGFrZSBjYXJlIG9mIHRoYXQuCiAtICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVk
SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlzVmlzaWJs
ZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmlldyB0b3BW
aWV3OihCT09MKXRvcFZpZXcKIHsKQEAgLTE4ODEsMTkgKzE4OTYsMjIgQEAgLSAodm9pZClfcmVj
dXJzaXZlOihCT09MKXJlY3Vyc2VYIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3Qp
ZGlzcGxheVJlY3QKICAgICBpZiAoZGlkU2V0QXNpZGVTdWJ2aWV3cykKICAgICAgICAgW3NlbGYg
X3Jlc3RvcmVTdWJ2aWV3c107CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKIAogLSAoQk9PTClfaW5zaWRlQW5vdGhlckhUTUxWaWV3CiB7CiAg
ICAgcmV0dXJuIHNlbGYgIT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgQk9PTCBpc1F1aWNrTG9va0V2ZW50
KE5TRXZlbnQgKmV2ZW50KQogewogICAgIGNvbnN0IGludCBrQ0dTRXZlbnRTeXN0ZW1TdWJ0eXBl
SG90S2V5Q29tYmluYXRpb25SZWxlYXNlZCA9IDk7CiAgICAgcmV0dXJuIFtldmVudCB0eXBlXSA9
PSBOU0V2ZW50VHlwZVN5c3RlbURlZmluZWQgJiYgW2V2ZW50IHN1YnR5cGVdID09IGtDR1NFdmVu
dFN5c3RlbVN1YnR5cGVIb3RLZXlDb21iaW5hdGlvblJlbGVhc2VkICYmIFtldmVudCBkYXRhMV0g
PT0gJ2xrdXAnOwogfQorCiAjZW5kaWYKIAogLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClw
b2ludApAQCAtMTk2MCw3ICsxOTc4LDggQEAgLSAodm9pZClfY2xlYXJMYXN0SGl0Vmlld0lmU2Vs
ZgogICAgICAgICBsYXN0SGl0VmlldyA9IG5pbDsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQorCiAtIChOU1RyYWNraW5nUmVjdFRhZylhZGRUcmFja2luZ1JlY3Q6
KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1l
SW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQogewogICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tp
bmdSZWN0T3duZXIgPT0gbmlsKTsKQEAgLTIwNTIsMTEgKzIwNzEsMTIgQEAgLSAodm9pZClfc2Vu
ZFRvb2xUaXBNb3VzZUVudGVyZWQKICAgICAgICAgdXNlckRhdGE6X3ByaXZhdGUtPnRyYWNraW5n
UmVjdFVzZXJEYXRhXTsKICAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyIG1vdXNlRW50
ZXJlZDpmYWtlRXZlbnRdOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5n
CiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgTlNTdHJpbmcg
KnRvb2xUaXAgPSBbc3RyaW5nIGxlbmd0aF0gPT0gMCA/IG5pbCA6IHN0cmluZzsKICAgICBOU1N0
cmluZyAqb2xkVG9vbFRpcCA9IF9wcml2YXRlLT50b29sVGlwOwogICAgIGlmICgodG9vbFRpcCA9
PSBuaWwgfHwgb2xkVG9vbFRpcCA9PSBuaWwpID8gdG9vbFRpcCA9PSBvbGRUb29sVGlwIDogW3Rv
b2xUaXAgaXNFcXVhbFRvU3RyaW5nOm9sZFRvb2xUaXBdKSB7CkBAIC0yMDc3LDcgKzIwOTcsOCBA
QCAtICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZwogI2VuZGlmCiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNTdHJpbmcgKil2aWV3
OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5TVG9vbFRpcFRhZyl0YWcgcG9pbnQ6
KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRhCiB7CiAgICAgcmV0dXJuIFtbX3By
aXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3JlbGVhc2VdOwpAQCAtMjIxMSw4ICsyMjMyLDkgQEAg
LSAodm9pZClfaGFuZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
CiB7IAogICAgIFtzZWxmIGF1dG9zY3JvbGw6ZXZlbnRdOyAKICAgICBbc2VsZiBfc3RhcnRBdXRv
c2Nyb2xsVGltZXI6ZXZlbnRdOyAKLX0gCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKK30KKwor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVn
aW5Db250cm9sbGVyCiB7CkBAIC0yMjIwLDYgKzIyNDIsNyBAQCAtIChXZWJQbHVnaW5Db250cm9s
bGVyICopX3BsdWdpbkNvbnRyb2xsZXIKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKKwogLy8gV0FL
VmlldyBvdmVycmlkZS4KIC0gKHZvaWQpbGF5b3V0SWZOZWVkZWQKIHsKQEAgLTIyNDIsNyArMjI2
NSw4IEBAIC0gKHZvaWQpc2V0U2NhbGU6KGZsb2F0KXNjYWxlCiAKICNlbmRpZgogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX2xheW91dEZvclByaW50
aW5nCiB7CiAgICAgLy8gU2V0IHByaW50aW5nIG1vZGUgdGVtcG9yYXJpbHkgc28gd2UgY2FuIGFk
anVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3aWxsIGFsbG93CkBAIC0yMjUyLDkgKzIy
NzYsNyBAQCAtICh2b2lkKV9sYXlvdXRGb3JQcmludGluZwogICAgIFtzZWxmIF93ZWJfc2V0UHJp
bnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemVdOwogICAgIFtzZWxmIF93ZWJfY2xl
YXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9T
KQogLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcg
cmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopcmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihO
U1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3Ry
aW5nCiB7CiAgICAgaWYgKCFwYXN0ZVN0cmluZyB8fCAhcmFuZ2VUb1JlcGxhY2UgfHwgIVtbc2Vs
ZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkgewpAQCAtMjI3MywxMCArMjI5
NSw5IEBAIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkCiAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYlNt
YXJ0UGFzdGVQYm9hcmRUeXBlXTsKIH0KIAotLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6
KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKLSNlbHNlCi0tICh2b2lkKV9zdGFydEF1dG9zY3JvbGxU
aW1lcjogKFdlYkV2ZW50ICopdHJpZ2dlckV2ZW50CiAjZW5kaWYKKworLSAodm9pZClfc3RhcnRB
dXRvc2Nyb2xsVGltZXI6KFdlYkV2ZW50ICopdHJpZ2dlckV2ZW50CiB7CiAgICAgaWYgKF9wcml2
YXRlLT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7CiAgICAgICAgIF9wcml2YXRlLT5hdXRvc2Ny
b2xsVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOkFVVE9T
Q1JPTExfSU5URVJWQUwKQEAgLTIyOTYsNyArMjMxNyw3IEBAIC0gKHZvaWQpX3N0b3BBdXRvc2Ny
b2xsVGltZXIKIHsKICAgICBOU1RpbWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRvc2Nyb2xsVGlt
ZXI7CiAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5pbDsKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2Vy
RXZlbnQgcmVsZWFzZV07CiAjZWxzZQogICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdn
ZXJFdmVudCkKQEAgLTIzMTEsNyArMjMzMiw3IEBAIC0gKHZvaWQpX2F1dG9zY3JvbGwKIHsKICAg
ICAvLyBHdWFyYW50ZWUgdGhhdCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpcyBpbnZhbGlkYXRlZCwg
ZXZlbiBpZiB3ZSBkb24ndCByZWNlaXZlCiAgICAgLy8gYSBtb3VzZSB1cCBldmVudC4KLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBCT09MIGlzU3RpbGxEb3duID0g
Q0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNlc3Np
b25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsgICAKICNlbHNlCiAgICAgQk9PTCBpc1N0aWxs
RG93biA9IE5POwpAQCAtMjMyMSw3ICsyMzQyLDcgQEAgLSAodm9pZClfYXV0b3Njcm9sbAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBl
Ok5TRXZlbnRUeXBlTGVmdE1vdXNlRHJhZ2dlZAogICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2lu
ZG93XQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKQEAgLTIzODksNyArMjQxMCw4IEBA
IC0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClmCiAgICAgX3ByaXZhdGUt
PnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKKwogLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCiB7
CiAgICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKQEAgLTI0MTEsNiArMjQzMyw3IEBAIC0g
KE5TUmVjdClfc2VsZWN0aW9uRHJhZ2dpbmdSZWN0CiAgICAgLy8gTWFpbCBjdXJyZW50bHkgY2Fs
bHMgdGhpcyBtZXRob2QuIFdlIGNhbiBlbGltaW5hdGUgaXQgd2hlbiBNYWlsIG5vIGxvbmdlciBj
YWxscyBpdC4KICAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07CiB9CisKICNlbmRpZgog
CiAtIChET01Ob2RlICopX2luc2VydE9yZGVyZWRMaXN0CkBAIC0yNDYyLDcgKzI0ODUsOCBAQCAt
ICh2b2lkKV9kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAogICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKIHsKICAgICBBU1NFUlQoW3NlbGYgX2hh
c1NlbGVjdGlvbl0pOwpAQCAtMjQ4MSw2ICsyNTA1LDcgQEAgLSAodm9pZClfd3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKICAgICBbc2VsZiBfd3Jp
dGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJv
YXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107CiAgICAgW211dGFi
bGVUeXBlcyByZWxlYXNlXTsKIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQpY2xvc2UKQEAgLTI0OTMs
MTMgKzI1MTgsMTYgQEAgLSAodm9pZCljbG9zZQogICAgIF9wcml2YXRlLT5jbG9zZWQgPSBZRVM7
CiAKICAgICBbc2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZl07Ci0jaWYgIVBMQVRGT1JNKElP
UykKKworI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJz
XTsKICAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKICNlbmRpZgorCiAgICAg
W19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lBbGxQbHVnaW5zXTsKICAgICBbX3By
aXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpuaWxdOwotI2lmICFQTEFURk9S
TShJT1MpCisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gcmVtb3ZlIHRvb2x0aXBzIGJlZm9y
ZSBjbGVhcmluZyBfcHJpdmF0ZSBzbyByZW1vdmVUcmFja2luZ1JlY3Q6IHdpbGwgd29yayBjb3Jy
ZWN0bHkKICAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107CiAKQEAgLTI1MTIsMjIgKzI1NDAs
MTQgQEAgLSAodm9pZCljbG9zZQogICAgIFtfcHJpdmF0ZSBjbGVhcl07CiB9CiAKLS0gKEJPT0wp
X2hhc0hUTUxEb2N1bWVudAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIHJldHVybiBkb2N1
bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKTsKLX0KKyNpZiBQTEFURk9STShNQUMp
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0
cmluZyAqKXBib2FyZFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJl
c291cmNlcwogewotICAgIGlmIChwYm9hcmRUeXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7
CisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV0pIHsKICAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10g
aW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBl
XV07CiAgICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCiAgICAgICAgICAgICAqc3VicmVzb3VyY2Vz
ID0gW2FyY2hpdmUgc3VicmVzb3VyY2VzXTsKQEAgLTI1MzUsMTAgKzI1NTUsMTEgQEAgLSAoRE9N
RG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm8KICAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07CiAgICAgICAgIHJl
dHVybiBmcmFnbWVudDsKICAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlKQorCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRX
aXRoUGF0aHM6W3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2Fy
ZFR5cGVdXTsKLSAgICAgICAgCi0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNIVE1MUGJvYXJkVHlw
ZSkgeworCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU0hUTUxQYm9hcmRU
eXBlXSkgewogICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJkIHN0cmlu
Z0ZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZV07CiAgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRv
IG1ha2UgTWljcm9zb2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3Nzg3ODUu
CiAgICAgICAgIGlmIChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7CkBAIC0y
NTQ4LDE5ICsyNTY5LDE4IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gPT0gMCkKICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJh
Z21lbnRXaXRoTWFya3VwU3RyaW5nOkhUTUxTdHJpbmcgYmFzZVVSTFN0cmluZzpuaWxdOwogICAg
IH0KIAotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGUGJvYXJkVHlwZSB8fCBwYm9hcmRUeXBl
ID09IE5TUlRGRFBib2FyZFR5cGUpIHsKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3Ry
aW5nOk5TUlRGUGJvYXJkVHlwZV0gfHwgW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUlRG
RFBib2FyZFR5cGVdKSB7CiAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gbmls
OwotICAgICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKQorICAgICAgICBp
ZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUlRGRFBib2FyZFR5cGVdKQogICAgICAg
ICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpb
cGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0
ZXM6TlVMTF07CiAgICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQogICAgICAgICAgICAgc3RyaW5n
ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRh
dGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwogICAg
ICAgICBpZiAoc3RyaW5nID09IG5pbCkKICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0cmlidXRlcyA9IFtbTlNE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICAgICAgW1tz
ZWxmIGNsYXNzXSBfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9u
XSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUsCiAgICAgICAgICAgICBuaWxd
OwpAQCAtMjU2OSwyNyArMjU4OSwyNiBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVibwogICAgICAg
ICBCT09MIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9IFtbc2VsZiBfd2ViVmlld10gZGVmZXJzQ2Fs
bGJhY2tzXTsKICAgICAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCiAgICAgICAgICAg
ICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpZRVNdOwotICAgICAgICAgICAg
Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1l
bnRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDpb
W3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJyZXNvdXJjZXM6JnNdOworCisgICAgICAgIE5TQXJyYXkgKmxvY2FsU3VicmVzb3VyY2VzOwor
ICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzdHJpbmcgX2RvY3VtZW50
RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnQ6W1tzZWxm
IF9mcmFtZV0gRE9NRG9jdW1lbnRdCisgICAgICAgICAgICBkb2N1bWVudEF0dHJpYnV0ZXM6ZG9j
dW1lbnRBdHRyaWJ1dGVzIHN1YnJlc291cmNlczombG9jYWxTdWJyZXNvdXJjZXNdOworCisgICAg
ICAgIFtkb2N1bWVudEF0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVsZWFz
ZV07CisKICAgICAgICAgaWYgKHN1YnJlc291cmNlcykKLSAgICAgICAgICAgICpzdWJyZXNvdXJj
ZXMgPSBzOwotICAgICAgICAKLSAgICAgICAgTlNFbnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51
bWVyYXRvcl07Ci0gICAgICAgIFdlYlJlc291cmNlICpyOwotICAgICAgICB3aGlsZSAoKHIgPSBb
ZSBuZXh0T2JqZWN0XSkpCi0gICAgICAgICAgICBbW3NlbGYgX2RhdGFTb3VyY2VdIGFkZFN1YnJl
c291cmNlOnJdOwotICAgICAgICAKKyAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBsb2NhbFN1
YnJlc291cmNlczsKKworICAgICAgICBmb3IgKFdlYlJlc291cmNlICpyZXNvdXJjZSBpbiBsb2Nh
bFN1YnJlc291cmNlcykKKyAgICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRkU3VicmVz
b3VyY2U6cmVzb3VyY2VdOworCiAgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQog
ICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOwotICAg
ICAgICAKLSAgICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsKLSAgICAgICAgW3N0
cmluZyByZWxlYXNlXTsKKwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlm
IChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5cGUpIHsKKyAgICBpZiAoW3Bib2FyZFR5cGUg
aXNFcXVhbFRvU3RyaW5nOk5TVElGRlBib2FyZFR5cGVdKSB7CiAgICAgICAgIFdlYlJlc291cmNl
ICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJl
bGF0aXZlUGFydChAImltYWdlLnRpZmYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKQEAgLTI1
OTksNyArMjYxOCw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvCiAgICAgICAgIFtyZXNvdXJj
ZSByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0KLSAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU1BERlBib2FyZFR5cGUpIHsKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVh
bFRvU3RyaW5nOk5TUERGUGJvYXJkVHlwZV0pIHsKICAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291
cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFG
b3JUeXBlOk5TUERGUGJvYXJkVHlwZV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBh
cnQoQCJhcHBsaWNhdGlvbi5wZGYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIApAQCAt
MjYxMCw3ICsyNjI5LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm8KICAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwogICAgIH0KIAotICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6
KE5TU3RyaW5nKilrVVRUeXBlUE5HXSkgeworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9T
dHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVBOR10pIHsKICAgICAgICAgV2ViUmVzb3VyY2UgKnJl
c291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRh
dGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhS
ZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9wbmciIApAQCAtMjYy
MCw3ICsyNjM5LDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm8KICAgICAgICAgW3Jlc291cmNl
IHJlbGVhc2VdOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9h
cmRUeXBlID09IE5TVVJMUGJvYXJkVHlwZSkgeworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFs
VG9TdHJpbmc6TlNVUkxQYm9hcmRUeXBlXSkgewogICAgICAgICBOU1VSTCAqVVJMID0gW05TVVJM
IFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwogICAgICAgICBET01Eb2N1bWVudCogZG9j
dW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07CiAgICAgICAgIEFTU0VSVChkb2N1
bWVudCk7CkBAIC0yNjM4LDQzICsyNjU3LDI4IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvCiAg
ICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3JdOwogICAgICAgICByZXR1cm4gZnJh
Z21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TU3RyaW5nUGJvYXJkVHlwZSkg
eworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBl
XSkgewogICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAg
ICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvcmUoY29udGV4dCksIFtb
cGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRT
dHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLnB0cigpKTsKICAgICB9CiAgICAgcmV0dXJuIG5p
bDsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAorCiAtICh2b2lkKV9wYXVzZU51
bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdz
ID0gW3NlbGYgc3Vidmlld3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1
YnZpZXdzIGNvdW50XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0g
ICAgZm9yIChzdWJ2aWV3SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1
YnZpZXdJbmRleCsrKSB7IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2Jq
ZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBb
KFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilzdWJ2aWV3IHN0b3BUaW1lcnNdOwotICAgIH0g
Ci19IAotI2VuZGlmIAoreworICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3RvcihzdG9wVGltZXJzKSB3aXRoT2JqZWN0Om5pbF07Cit9CisKKy0g
KHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMKK3sKKyAgICBbc2Vs
ZiBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzdGFy
dFRpbWVycykgd2l0aE9iamVjdDpuaWxdOworfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpIAotLSAodm9pZClfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAK
LXsgCi0gICAgTlNBcnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2ln
bmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBp
bnQgc3Vidmlld0luZGV4OyAKLSAgICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZp
ZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmll
dyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAg
ICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmll
dyBjbGFzc11dKSAKLSAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1
YnZpZXcgcmVzdGFydFRpbWVyc107IAotICAgIH0gCi19IAogI2VuZGlmIAogCiAtIChCT09MKV9p
c1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZwpAQCAtMjg0NSw5ICsyODQ5LDggQEAgQGltcGxl
bWVudGF0aW9uIFdlYkhUTUxWaWV3CiAKICsgKHZvaWQpaW5pdGlhbGl6ZQogewotI2lmICFQTEFU
Rk9STShJT1MpCi0gICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2Vs
ZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJk
VHlwZXNdXTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNN
ZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gcmV0
dXJuVHlwZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc11dOwogICAg
IEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJl
YWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5M
b29wKCk7CkBAIC0yODYwLDcgKzI4NjMsNyBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3Qp
ZnJhbWUKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgW3NlbGYgc2V0Rm9jdXNSaW5nVHlw
ZTpOU0ZvY3VzUmluZ1R5cGVOb25lXTsKICNlbmRpZgogICAgIApAQCAtMzA5MSw3ICszMDk0LDgg
QEAgV0VCQ09SRV9DT01NQU5EKHRvZ2dsZVVuZGVybGluZSkKIAogI2RlZmluZSBDT01NQU5EX1BS
T0xPR1VFIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6
X2NtZF0pIHJldHVybjsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQor
CiAtIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgogewog
ICAgIENPTU1BTkRfUFJPTE9HVUUKQEAgLTMxMDQsNyArMzEwOCw3IEBAIC0gKElCQWN0aW9uKXRh
a2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCiAgICAgW05TUGFzdGVib2FyZCBf
d2ViX3NldEZpbmRQYXN0ZWJvYXJkU3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSB3aXRoT3du
ZXI6c2VsZl07CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBzdXBwb3J0IE1hYyBP
UyBYIHNlcnZpY2VzLgorLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbWFjT1Mg
c2VydmljZXMuCiAtIChCT09MKXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5ICopdHlwZXMKIHsKICAgICBbcGFzdGVib2Fy
ZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07CkBAIC0zMTI2
LDYgKzMxMzAsNyBAQCAtIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmluZyAq
KXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dQogICAgICAgICByZXR1cm4gc2Vs
ZjsKICAgICByZXR1cm4gW1tzZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2Vu
ZFR5cGU6c2VuZFR5cGUgcmV0dXJuVHlwZTpyZXR1cm5UeXBlXTsKIH0KKwogI2VuZGlmCiAKIC8v
IGp1bXBUb1NlbGVjdGlvbiBpcyB0aGUgb2xkIG5hbWUgZm9yIHdoYXQgQXBwS2l0IG5vdyBjYWxs
cyBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBTYWZhcmkKQEAgLTMxNDEsNyArMzE0Niw4
IEBAIC0gKHZvaWQpanVtcFRvU2VsZWN0aW9uOihpZClzZW5kZXIKICAgICAgICAgY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFs
LCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFj
ZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilp
dGVtCiB7CiAgICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlvbl07CkBAIC0zMTQ5LDcgKzMxNTUs
NyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlk
IDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIE5POwotICAgIAorCiAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkgewogICAgICAgICBpZiAoZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gTk87CkBAIC0zMTY4LDcgKzMxNzQsNiBAQCAtIChCT09MKXZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJ
dAogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogCiAgICAgaWYgKGFjdGlvbiA9PSBA
c2VsZWN0b3Ioc2hvd0d1ZXNzUGFuZWw6KSkgewotICAgICAgICAvLyBNYXRjaCBPUyBYIEFwcEtp
dCBiZWhhdmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hhbmdlIFRpZ2VyIGJlaGF2aW9yLgog
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKICAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKICAg
ICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwpAQCAtMzIxOSwxMiArMzIyNCwx
MiBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlk
IDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBb
c2VsZiBfY2FuRWRpdF07CiAgICAgfSAKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKGNoYW5nZUF0dHJpYnV0ZXM6KQogICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rv
cihjaGFuZ2VDb2xvcjopICAgICAgICAKICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IoY2hhbmdlRm9udDopKQogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRSaWNobHldOwot
ICAgIAorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2FwaXRhbGl6ZVdvcmQ6KQogICAg
ICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihsb3dlcmNhc2VXb3JkOikKICAgICAg
ICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodXBwZXJjYXNlV29yZDopKQpAQCAtMzIz
NCwyNSArMzIzOSwyNSBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0
RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAgICAgICAgICAg
fHwgYWN0aW9uID09IEBzZWxlY3RvcihqdW1wVG9TZWxlY3Rpb246KQogICAgICAgICAgICAgICAg
fHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5Rm9udDopKQogICAgICAgICByZXR1cm4gW3NlbGYg
X2hhc1NlbGVjdGlvbl0gfHwgKFtzZWxmIF9pc0VkaXRhYmxlXSAmJiBbc2VsZiBfaGFzSW5zZXJ0
aW9uUG9pbnRdKTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZURv
Y3VtZW50QmFja2dyb3VuZENvbG9yOikpCiAgICAgICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXdd
IGlzRWRpdGFibGVdICYmIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKKwogICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKF9pZ25vcmVTcGVsbGluZ0Zyb21NZW51OikKICAgICAgICAgICAg
IHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xlYXJuU3BlbGxpbmdGcm9tTWVudTopCiAgICAgICAg
ICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjop
KQogICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCisKICAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVB
c1BsYWluVGV4dDopKQogICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS5j
YW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLmNhblBhc3RlKCkpOwotICAgIAorCiAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJl
dHVybiBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKQogICAgICAgICAg
ICAgfHwgKGZyYW1lLT5lZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7Ci0gICAgCisKICAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0aW9uOikpCiAgICAgICAgIHJl
dHVybiBOTzsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9sb29rVXBJbkRp
Y3Rpb25hcnlGcm9tTWVudTopKQogICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07
CiAKQEAgLTMyNzksNiArMzI4NCw3IEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRl
bVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICAvLyBGSVhN
RSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQg
d2UgbXVzdCB2YWxpZGF0ZSAKICAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGlt
cGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRo
ZSBBcHBLaXQgCiAgICAgLy8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KQEAgLTMy
ODgsMzAgKzMyOTQsMzUgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91
dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXQKICAgICAgICAgICAgIFtt
ZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdID8gTlNPblN0
YXRlIDogTlNPZmZTdGF0ZV07CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAg
fQorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVt
ICopaXRlbTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVt
IGNsYXNzXV0pCiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0
aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CiAg
ICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjopKSB7CiAgICAgICAgIE5T
TWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21l
bnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKICAgICAgICAgICAgIFtt
ZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01l
bnVJdGVtICopaXRlbTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01l
bnVJdGVtIGNsYXNzXV0pCiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNB
dXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRl
XTsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KSkgewogICAg
ICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKICAgICAgICAg
aWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCiAgICAgICAg
ICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYg
X2NhbkVkaXRdOwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjopKSB7CiAgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJ
dGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9m
Q2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKQEAgLTMzMTksNyArMzMzMCw3IEBAIC0gKEJPT0wp
dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVk
VXNlckludGVyZmFjZUl0CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQog
Ci0gICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0
b3I6YWN0aW9uXTsKKyAgICBhdXRvIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0
b3I6YWN0aW9uXTsKICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKSB7CiAgICAgICAgIE5T
TWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21l
bnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKQEAgLTMzMzksNyArMzM1
MCw4IEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVk
VXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHZhbGlkYXRl
VXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6aXRlbV07CiAgICAgcmV0dXJuIENhbGxV
SURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihyZXN1bHQsIFtzZWxmIF93ZWJWaWV3XSwgQHNlbGVj
dG9yKHdlYlZpZXc6dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpkZWZhdWx0VmFsaWRhdGlvbjop
LCBpdGVtLCByZXN1bHQpOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAKIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiB7CkBAIC0z
MzQ3LDcgKzMzNTksNyBAQCAtIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogICAgIC8vIFdl
IGhhdmUgdG8gcGFzcyB0aGUgZXZlbnQgZG93biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8gYmUg
c3VyZSB3ZSBkb24ndCBoaXQgYSBzdWJ2aWV3LgogICAgIC8vIERvIGFjY2VwdCBmaXJzdCByZXNw
b25kZXIgYXQgYW55IG90aGVyIHRpbWUsIGZvciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZlbnRz
LAogICAgIC8vIG9yIGZyb20gY2FsbHMgYmFjayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdpbiBt
b3VzZS1kb3duIGV2ZW50IGhhbmRsaW5nLgotI2lmICFQTEFURk9STShJT1MpICAgICAgICAgICAg
CisjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRF
dmVudF07CiAgICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUxlZnRNb3VzZURvd24K
ICAgICAgICAgICAgICYmICFfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudApAQCAtMzQx
NCw3ICszNDI2LDggQEAgLSAoQk9PTCltYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgogI2VuZGlm
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClh
ZGRTdXBlcnZpZXdPYnNlcnZlcnMKIHsKICAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVy
dmlld05vdGlmaWNhdGlvbnMpCkBAIC0zNDczLDcgKzM0ODYsOCBAQCAtICh2b2lkKXZpZXdEaWRN
b3ZlVG9TdXBlcnZpZXcKICAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6X1dlYlZpZXdEaWRTdGFydEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdOb3RpZmljYXRpb24gb2JqZWN0OndlYlZpZXcgdXNlckluZm86bmlsXTsKICAg
ICB9CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAogLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKIHsK
QEAgLTM0ODQsNyArMzQ5OCw3IEBAIC0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2lu
ZG93ICopd2luZG93CiAgICAgaWYgKCFfcHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gRklYTUU6IFNvbWUgb2Yg
dGhlc2UgY2FsbHMgbWF5IG5vdCB3b3JrIGJlY2F1c2UgdGhpcyB2aWV3IG1heSBiZSBhbHJlYWR5
IHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldy4KICAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2Jz
ZXJ2ZXJzXTsKICAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKQEAgLTM1MDcs
NyArMzUyMSw3IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwogICAgIFtzZWxmIF9zdG9w
QXV0b3Njcm9sbFRpbWVyXTsKICAgICBpZiAoW3NlbGYgd2luZG93XSkgewogICAgICAgICBfcHJp
dmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmln
aW47Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFtzZWxm
IGFkZFdpbmRvd09ic2VydmVyc107CiAgICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2VydmVy
c107CiAjZW5kaWYKQEAgLTM1MTgsNyArMzUzMiw3IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dp
bmRvdwogCiAgICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBOU1plcm9Qb2lu
dDsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAo
IV9wcml2YXRlLT5mbGFnc0NoYW5nZWRFdmVudE1vbml0b3IpIHsKICAgICAgICAgICAgIF9fYmxv
Y2sgV2ViSFRNTFZpZXcgKndlYWtTZWxmID0gc2VsZjsKICAgICAgICAgICAgIF9wcml2YXRlLT5m
bGFnc0NoYW5nZWRFdmVudE1vbml0b3IgPSBbTlNFdmVudCBhZGRMb2NhbE1vbml0b3JGb3JFdmVu
dHNNYXRjaGluZ01hc2s6TlNFdmVudE1hc2tGbGFnc0NoYW5nZWQgaGFuZGxlcjpeKE5TRXZlbnQg
KmZsYWdzQ2hhbmdlZEV2ZW50KSB7CkBAIC0zNTMzLDM4ICszNTQ3LDIwIEBAIC0gKHZvaWQpdmll
d0RpZE1vdmVUb1dpbmRvdwogICAgIH0KIH0KIAotLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2
aWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdAot
ewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIENvcHkgc3Vidmlld3Mg
YmVjYXVzZSBbc2VsZiBzdWJ2aWV3c10gcmV0dXJucyB0aGUgdmlldydzIG11dGFibGUgaW50ZXJu
YWwgYXJyYXksCi0gICAgLy8gYW5kIHdlIG11c3QgYXZvaWQgbXV0YXRpbmcgdGhlIGFycmF5IHdo
aWxlIGVudW1lcmF0aW5nIGl0LgotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW1tzZWxmIHN1YnZp
ZXdzXSBjb3B5XTsKLSAgICAKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbc3Vidmll
d3Mgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICp2aWV3Owot
ICAgIHdoaWxlICgodmlldyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpCi0gICAg
ICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNs
YXNzXV0pCi0gICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9i
amVjdDpvYmplY3RdOwotICAgIAotICAgIFtzdWJ2aWV3cyByZWxlYXNlXTsKLSNlbmRpZgotfQot
CiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93
CiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICBbc2VsZiBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3Iodmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Oikgd2l0aE9iamVjdDpob3N0V2luZG93XTsKICNl
bmRpZgogfQogCiAtICh2b2lkKXZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93CiB7Ci0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBbc2VsZiBfd2Vi
X21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld0RpZE1vdmVU
b0hvc3RXaW5kb3cpIHdpdGhPYmplY3Q6bmlsXTsKICNlbmRpZgogfQogCi0KIC0gKHZvaWQpYWRk
U3VidmlldzooTlNWaWV3ICopdmlldwogewogICAgIFtzdXBlciBhZGRTdWJ2aWV3OnZpZXddOwpA
QCAtMzY2MSw3ICszNjU3LDggQEAgLSAodm9pZClsYXlvdXQKICAgICBbc2VsZiBsYXlvdXRUb01p
bmltdW1QYWdlV2lkdGg6MCBoZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFn
ZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdGluZ1ZpZXdTaXplOk5PXTsKIH0K
IAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAvLyBEZWxpdmVyIG1v
dXNldXAgZXZlbnRzIHRvIHRoZSBET00gZm9yIGJ1dHRvbiAyLgogLSAodm9pZClyaWdodE1vdXNl
VXA6KE5TRXZlbnQgKilldmVudAogewpAQCAtNDA1Niw3ICs0MDUzLDggQEAgLSAoTlNNZW51ICop
bWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKICAgICAKICAgICByZXR1cm4gbWVudS5hdXRv
cmVsZWFzZSgpOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCiAKIC0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rp
b246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wp
d3JhcEZsYWcKIHsKQEAgLTQwODAsNyArNDA3OCw4IEBAIC0gKEJPT0wpaXNPcGFxdWUKICAgICBy
ZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdOwogfQogCi0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpc2V0TGF5ZXI6KENBTGF5ZXIg
KilsYXllcgogewogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7
CkBAIC00MDkwLDYgKzQwODksNyBAQCAtICh2b2lkKXNldExheWVyOihDQUxheWVyICopbGF5ZXIK
IAogICAgIFtzdXBlciBzZXRMYXllcjpsYXllcl07CiB9CisKICNlbmRpZgogCiAjaWYgIUxPR19E
SVNBQkxFRApAQCAtNDE1MSwxNyArNDE1MSwxNSBAQCAtICh2b2lkKXNldE5lZWRzVG9BcHBseVN0
eWxlczogKEJPT0wpZmxhZwogCiAtICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAog
ewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIFtOU0dyYXBoaWNz
Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CiAgICAgTlNSZWN0Q2xpcChyZWN0KTsKICAgICAg
ICAgCiAgICAgQVNTRVJUKFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBW
aWV3IGNsYXNzXV0pOwogCiAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gc2V0
QWRkaXRpb25hbENsaXA6cmVjdF07Ci0jZW5kaWYKIAogICAgIEB0cnkgewotI2lmICFQTEFURk9S
TShJT1MpCiAgICAgICAgIGlmIChbc2VsZiBfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kXSkgewogICAg
ICAgICAgICAgW1tOU0NvbG9yIGNsZWFyQ29sb3JdIHNldF07CiAgICAgICAgICAgICBOU1JlY3RG
aWxsIChyZWN0KTsKQEAgLTQxNzAsNyArNDE2OCw3IEBAIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6
KE5TUmVjdClyZWN0CiAKICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2RyYXdSZWN0OnJlY3QgY29u
dGVudHNPbmx5OllFU107CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKIAogICAgICAgICAv
LyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8cmRhcjovL3Byb2JsZW0vNTAyMzU0NT4uIFdlIGNh
biBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBkcmF3UmVjdCB3aWxsIGJlCkBAIC00MTc5LDI2
ICs0MTc3LDIxIEBAIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0CiAgICAgICAg
IHN0YXRpYyBCT09MIHZlcnNpb24zT3JMYXRlckNsaWVudCA9IFdlYktpdExpbmtlZE9uT3JBZnRl
cihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX1FVSUNLQk9PS1NfUVVJUkspOwogICAgICAg
ICBpZiAodmVyc2lvbjNPckxhdGVyQ2xpZW50KQogICAgICAgICAgICAgW1t3ZWJWaWV3IF9VSURl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29u
dmVydFJlY3Q6cmVjdCBmcm9tVmlldzpzZWxmXV07CisgICAgICAgIC8vIERvbid0IHNlbmQgZGlk
RHJhd1JlY3Qgb24gaU9TLCBpdCBpcyBub3QgdXNlZCBieSBhbnlvbmUgYW5kIGl0IGlzIGNhdXNp
bmcgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcy4KIAogICAgICAgICBpZiAoV2ViTm9k
ZUhpZ2hsaWdodCAqY3VycmVudEhpZ2hsaWdodCA9IFt3ZWJWaWV3IGN1cnJlbnROb2RlSGlnaGxp
Z2h0XSkKICAgICAgICAgICAgIFtjdXJyZW50SGlnaGxpZ2h0IHNldE5lZWRzVXBkYXRlSW5UYXJn
ZXRWaWV3UmVjdDpbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpbY3VycmVudEhpZ2hsaWdo
dCB0YXJnZXRWaWV3XV1dOwotI2Vsc2UKLSAgICAgICAgLy8gRG9uJ3Qgc2VuZCBkaWREcmF3UmVj
dCwgaXQgaXMgbm90IHVzZWQgYnkgYW55b25lIGFuZCBpdCBpcyBjYXVzaW5nIHRocmVhZCBzeW5j
aHJvbml6YXRpb24gcHJvYmxlbXMuCi0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25hbENsaXBd
OwogCiAgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07Ci0j
ZW5kaWYKICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7Ci0jaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10g
cmVzZXRBZGRpdGlvbmFsQ2xpcF07CiAgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3Jl
R3JhcGhpY3NTdGF0ZV07Ci0jZW5kaWYKICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gY2F1
Z2h0IHdoaWxlIGRyYXdpbmc6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwogICAgICAgICBbbG9jYWxF
eGNlcHRpb24gcmFpc2VdOwogICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKWRyYXdSZWN0OihO
U1JlY3QpcmVjdApAQCAtNDIwNyw3ICs0MjAwLDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNSZWN0
KXJlY3QKICAgICAKICAgICBUcmFjZVNjb3BlIHNjb3BlKFdlYkhUTUxWaWV3UGFpbnRTdGFydCwg
V2ViSFRNTFZpZXdQYWludEVuZCk7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKICAgICBjb25zdCBOU1JlY3QgKnJlY3RzOwogICAgIE5TSW50ZWdlciBjb3VudDsKICAg
ICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJhd246JnJlY3RzIGNvdW50OiZjb3VudF07CkBAIC00MjIx
LDcgKzQyMTQsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgIGRvdWJsZSBz
dGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBJZiBjb3VudCA9PSAwIGhlcmUsIHVz
ZSB0aGUgcmVjdCBwYXNzZWQgaW4gZm9yIGRyYXdpbmcuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
cjogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5MDgyODI+IFJFR1JFU1NJT04gKE1haWwpOiBO
byBkcmFnIGltYWdlIGRyYWdnaW5nIHNlbGVjdGVkIHRleHQgaW4gQmxvdCBhbmQgTWFpbCAKICAg
ICAvLyBUaGUgcmVhc29uIGZvciB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBleHBsaWNpdGx5IGZyb20gdGhlIGNvZGUgCkBAIC00MjU3LDE0ICs0MjUwLDE0IEBA
IC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAgICAgTE9HKFRpbWluZywgIiVzIGRyYXcg
c2Vjb25kcyA9ICVmIiwgd2lkZ2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEoKSwg
dGhpc1RpbWUpOwogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCiAgICAgICAgIFtzZWxmIF9zZXRBc2lk
ZVN1YnZpZXdzXTsKICNlbmRpZgogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJW
aWV3XTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIE9u
bHkgZG8gdGhlIHN5bmNocm9uaXphdGlvbiBkYW5jZSBpZiB3ZSdyZSBkcmF3aW5nIGludG8gdGhl
IHdpbmRvdywgb3RoZXJ3aXNlCiAgICAgLy8gd2UgcmlzayBkaXNhYmxpbmcgc2NyZWVuIHVwZGF0
ZXMgd2hlbiBubyBmbHVzaCBpcyBwZW5kaW5nLgogICAgIGlmIChbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdID09IFtbc2VsZiB3aW5kb3ddIGdyYXBoaWNzQ29udGV4dF0gJiYgW3dl
YlZpZXcgX25lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7CkBAIC00MjgzLDcg
KzQyNzYsOCBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgICAgICBDYWxsVUlE
ZWxlZ2F0ZSh3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWREcmF3RnJhbWU6KSwgW3NlbGYg
X2ZyYW1lXSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
Ly8gVHVybiBvZmYgdGhlIGFkZGl0aW9uYWwgY2xpcCB3aGlsZSBjb21wdXRpbmcgb3VyIHZpc2li
bGVSZWN0LgogLSAoTlNSZWN0KXZpc2libGVSZWN0CiB7CkBAIC00MzczLDE1ICs0MzY3LDEyIEBA
IC0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgog
ICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5P
IG1vdmVMZWZ0Ok5PXTsKICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQ
bHVnaW5zXTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi0jaWYgIVBMQVRGT1JNKElP
UykKLS0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAotI2Vsc2UKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KFdlYkV2ZW50ICopZXZlbnQK
LSNlbmRpZgogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
ICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KQEAgLTQzODksMTAgKzQzODAsOSBA
QCAtICh2b2lkKXNjcm9sbFdoZWVsOihXZWJFdmVudCAqKWV2ZW50CiAjZW5kaWYKIAogICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigp
LndoZWVsRXZlbnQoZXZlbnQpKQogICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZlbnRdOwot
CiAjZWxzZQogICAgIGlmIChmcmFtZSkKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLndo
ZWVsRXZlbnQoZXZlbnQpOwpAQCAtNDQwMywyMSArNDM5MywxOCBAQCAtICh2b2lkKXNjcm9sbFdo
ZWVsOihXZWJFdmVudCAqKWV2ZW50CiAjZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJT1MpCiAt
IChCT09MKV9pc1NlbGVjdGlvbkV2ZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBOU1BvaW50
IHBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9t
VmlldzpuaWxdOworI2lmIFBMQVRGT1JNKE1BQykKICAgICByZXR1cm4gW1tbc2VsZiBlbGVtZW50
QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6V2ViRWxl
bWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Ci19CiAjZWxzZQotLSAoQk9PTClfaXNTZWxl
Y3Rpb25FdmVudDooV2ViRXZlbnQgKilldmVudAotewotICAgIE5TUG9pbnQgcG9pbnQgPSBbc2Vs
ZiBjb252ZXJ0UG9pbnQ6ZXZlbnQubG9jYXRpb25JbldpbmRvdyBmcm9tVmlldzpuaWxdOwogICAg
IHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50XSBvYmplY3RGb3JLZXk6V2ViRWxl
bWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Ci19CiAjZW5kaWYKK30KKworI2lmIFBMQVRG
T1JNKE1BQykKIAotI2lmICFQTEFURk9STShJT1MpCiAtIChCT09MKV9pc1Njcm9sbEJhckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBv
aW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwpAQCAtNDQ4MywxNyAr
NDQ3MCwxNCBAQCAtIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDooTlNF
dmVudCAqKWV2ZW50CiAgICAgfQogICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRv
d09yZGVyaW5nRm9yRXZlbnQ6ZXZlbnRdOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAK
LSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAot
I2Vsc2UKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpbW91c2VEb3duOihXZWJF
dmVudCAqKWV2ZW50Ci0jZW5kaWYKIHsKICAgICBbW3NlbGYgX3dlYlZpZXddIHByZXBhcmVGb3JN
b3VzZURvd25dOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1
biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBt
aWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2lu
ZwogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEg
cHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgpAQCAtNDUwMSw3ICs0NDg1LDgg
QEAgLSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZlbnQKICNlbmRpZgogCiAgICAgUmV0
YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxmOwotI2lmICFQTEFURk9STShJT1Mp
CisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdhbnRz
VG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91c2VF
dmVudDpldmVudF0pCiAgICAgICAgIHJldHVybjsKICNlbmRpZgpAQCAtNDU0OSw2ICs0NTM0LDcg
QEAgLSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZlbnQKIH0KIAogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisKIC0gKHZvaWQpdG91Y2g6KFdlYkV2ZW50ICopZXZlbnQKIHsKICAgICBS
ZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHByb3RlY3RvciA9IHNlbGY7CkBAIC00NTU4LDYgKzQ1NDQs
NyBAQCAtICh2b2lkKXRvdWNoOihXZWJFdmVudCAqKWV2ZW50CiAgICAgaWYgKEZyYW1lKiBjb3Jl
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQogICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLnRvdWNoRXZlbnQoZXZlbnQpOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpICYmIFBMQVRGT1JNKE1BQykKQEAgLTQ3NDIsMTUgKzQ3MjksMTEgQEAgLSAodm9p
ZClkcmFnZ2luZ1Nlc3Npb246KE5TRHJhZ2dpbmdTZXNzaW9uICopc2Vzc2lvbiBlbmRlZEF0UG9p
bnQ6KE5TUG9pbnQpc2NyZWUKIAogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBM
QVRGT1JNKE1BQykKIAotI2lmICFQTEFURk9STShJT1MpCi0tICh2b2lkKW1vdXNlVXA6KE5TRXZl
bnQgKilldmVudAotI2Vsc2UKIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAotI2Vu
ZGlmCiB7CiAgICAgW1tzZWxmIF93ZWJWaWV3XSBwcmVwYXJlRm9yTW91c2VVcF07CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNl
IHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxv
b3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9s
ZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1cnJl
bnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJL
aXQgb3IgQXBwS2l0IGNvZGUuCkBAIC00NzU5LDcgKzQ3NDIsNyBAQCAtICh2b2lkKW1vdXNlVXA6
KFdlYkV2ZW50ICopZXZlbnQKIAogICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwog
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFn
ZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CkBAIC00NzY3LDYgKzQ3
NTAsNyBAQCAtICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKICAgICAgICAgcmV0dXJu
OwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCisKICAgICBbc2VsZiByZXRh
aW5dOwogCiAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwpAQCAtNDc3OSwxOCArNDc2
MywyMSBAQCAtICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKICNlbmRpZgogICAgICAg
ICB9CiAgICAgfQotI2lmICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwogI2VuZGlmCiAKICAgICBbc2Vs
ZiByZWxlYXNlXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQor
CiAtICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogewogICAgIFtzZWxmIF91cGRh
dGVNb3VzZW92ZXJXaXRoRXZlbnQ6ZXZlbnRdOwogfQorCiAjZW5kaWYKIAogLSAodm9pZClwcmVz
c3VyZUNoYW5nZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CkBAIC00ODA5LDEzICs0Nzk2LDE1
IEBAIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAogI2Vu
ZGlmCiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLy8gcmV0
dXJuaW5nIFlFUyBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQgdGhh
dCBpdCBpcyBvayBmb3IgdGhpcyB2aWV3CiAvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZlbiB3
aGVuICJ0YWIgdG8gYWxsIGNvbnRyb2xzIiBpcyBub3Qgb24uCiAtIChCT09MKW5lZWRzUGFuZWxU
b0JlY29tZUtleQogewogICAgIHJldHVybiBZRVM7CiB9CisKICNlbmRpZgogCiAvLyBVdGlsaXR5
IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55dGhpbmcgdGhyb3VnaCB0
aGUgTlNUZXh0SW5wdXQKQEAgLTQ4MjgsMTYgKzQ4MTcsMTggQEAgc3RhdGljIEJPT0wgaXNUZXh0
SW5wdXQoRnJhbWUqIGNvcmVGcmFtZSkKICAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAm
JiBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAotI2lmICFQTEFURk9STShJT1Mp
CisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFt
ZSogY29yZUZyYW1lKQogewogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQorCiAjZW5kaWYKIAog
c3RhdGljIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBjdXJyZW50S2V5Ym9hcmRFdmVudChGcmFtZSog
Y29yZUZyYW1lKQogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAg
IE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CiAgICAgaWYgKCFldmVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00ODcyLDcgKzQ4NjMsNyBAQCAtIChCT09MKWJl
Y29tZUZpcnN0UmVzcG9uZGVyCiAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1p
bmdQcm9ncmFtbWF0aWNGb2N1c10pCiAgICAgICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3aW5kb3dd
IGtleVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25dOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CiAjZW5kaWYKICAgICAK
QEAgLTQ4ODAsNyArNDg3MSw3IEBAIC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gWUVTOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJbnB1
dChmcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsKICAgICBpZiAoZXhwb3NlSW5w
dXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKICAgICAgICAgX3By
aXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKQEAgLTQ5MTgs
NyArNDkwOSw3IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKIHsKICAgICBCT09MIHJl
c2lnbiA9IFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07CiAgICAgaWYgKHJlc2lnbikgewot
I2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoX3ByaXZh
dGUtPmlzSW5TZWN1cmVJbnB1dFN0YXRlKSB7CiAgICAgICAgICAgICBEaXNhYmxlU2VjdXJlRXZl
bnRJbnB1dCgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmlzSW5TZWN1cmVJbnB1dFN0YXRlID0g
Tk87CkBAIC00OTQ1LDcgKzQ5MzYsNyBAQCAtIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCiAg
ICAgICAgICAgICAgICAgW3NlbGYgY2xlYXJGb2N1c107CiAgICAgICAgIH0KICAgICAgICAgCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlkIG5leHRSZXNw
b25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZ107
CiAgICAgICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3ID0gW25leHRSZXNwb25kZXIg
aXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KICAgICAgICAgICAgICYmIFtuZXh0UmVzcG9u
ZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3
XV07CkBAIC00OTczLDcgKzQ5NjQsNyBAQCAtICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFT
b3VyY2UgKilkYXRhU291cmNlCiAgICAgX3ByaXZhdGUtPmRhdGFTb3VyY2UgPSBkYXRhU291cmNl
OwogICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOmRhdGFTb3Vy
Y2VdOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFf
cHJpdmF0ZS0+aW5zdGFsbGVkVHJhY2tpbmdBcmVhKSB7CiAgICAgICAgIE5TVHJhY2tpbmdBcmVh
T3B0aW9ucyBvcHRpb25zID0gTlNUcmFja2luZ01vdXNlTW92ZWQgfCBOU1RyYWNraW5nTW91c2VF
bnRlcmVkQW5kRXhpdGVkIHwgTlNUcmFja2luZ0luVmlzaWJsZVJlY3QgfCBOU1RyYWNraW5nQ3Vy
c29yVXBkYXRlOwogICAgICAgICBpZiAoV0tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9PSBO
U1Njcm9sbGVyU3R5bGVMZWdhY3kKQEAgLTQ5OTgsMTMgKzQ5ODksMTUgQEAgLSAodm9pZClkYXRh
U291cmNlVXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCi0vLyBUaGlzIGlzIGFuIG92ZXJyaWRlIG9mIGFuIE5TQ29udHJvbCBtZXRo
b2QgdGhhdCB3YW50cyB0byByZXBhaW50IHRoZSBlbnRpcmUgdmlldyB3aGVuIHRoZSB3aW5kb3cg
cmVzaWducy9iZWNvbWVzCi0vLyBrZXkuICBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25s
eSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3Mg
QXF1YSB0aGVtZQorI2lmIFBMQVRGT1JNKE1BQykKKworLy8gVGhpcyBpcyBhbiBvdmVycmlkZSBv
ZiBhbiBOU0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUgZW50aXJlIHZp
ZXcgd2hlbiB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcyBrZXkuCisvLyBXZWJIVE1MVmlldyBp
cyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUgcGFp
bnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQogLy8gcmVuZGVyZXIgKGFuZCB0aG9zZSBjZWxs
cyBtdXN0IGJlIGhvc3RlZCBieSBhbiBlbmNsb3NpbmcgTlNDb250cm9sIGluIG9yZGVyIHRvIHBh
aW50IHByb3Blcmx5KS4KLS0gKHZvaWQpdXBkYXRlQ2VsbDooTlNDZWxsKiljZWxsCistICh2b2lk
KXVwZGF0ZUNlbGw6KE5TQ2VsbCAqKWNlbGwKIHsKIH0KKwogI2VuZGlmCiAKIC8vIERvZXMgc2V0
TmVlZHNEaXNwbGF5Ok5PIGFzIGEgc2lkZSBlZmZlY3Qgd2hlbiBwcmludGluZyBpcyBlbmRpbmcu
CkBAIC01MDU0LDcgKzUwNDcsOCBAQCAtICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGlu
ZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZUxvZ2ljYQogICAgIH0KIH0K
IAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKWNhblBy
aW50SGVhZGVyc0FuZEZvb3RlcnMKIHsKICAgICByZXR1cm4gWUVTOwpAQCAtNTIzNCwxNSArNTIy
OCwxMiBAQCAtICh2b2lkKWVuZERvY3VtZW50CiAgICAgLy8gTm90ZSBzYWRseSBhdCB0aGlzIHBv
aW50IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0gaXMg
c3RpbGwgTk8gCiAgICAgW3NlbGYgX2VuZFByaW50TW9kZUFuZFJlc3RvcmVXaW5kb3dBdXRvZGlz
cGxheV07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotI2lmICFQTEFURk9STShJT1Mp
Ci0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAotI2Vsc2UKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisKIC0gKHZvaWQpa2V5RG93bjooV2ViRXZlbnQgKilldmVudAotI2VuZGlmCiB7
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVGhlcmUncyBh
IGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBl
dmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNl
IHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8vIHRo
ZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNp
ZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgpAQCAtNTI1Nyw3ICs1MjQ4LDcgQEAgLSAodm9pZClr
ZXlEb3duOihXZWJFdmVudCAqKWV2ZW50CiAgICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVs
ZWFzZV07CiAgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOwogCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBjb21wbGV0aW9u
UG9wdXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyICYmIFtfcHJpdmF0
ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOwogICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghZXZlbnRXYXNTZW50VG9X
ZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmtleUV2ZW50
KGV2ZW50KSkgewpAQCAtNTI4MSwxMyArNTI3Miw5IEBAIC0gKHZvaWQpa2V5RG93bjooV2ViRXZl
bnQgKilldmVudAogICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllF
U107CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9pZClrZXlVcDooTlNFdmVudCAqKWV2
ZW50Ci0jZWxzZQogLSAodm9pZClrZXlVcDooV2ViRXZlbnQgKilldmVudAotI2VuZGlmCiB7Ci0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVGhlcmUncyBhIGNo
YW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVu
dCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRo
ZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8vIHRoZSBj
dXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUg
V2ViS2l0IG9yIEFwcEtpdCBjb2RlLgpAQCAtNTMwNCw3ICs1MjkxLDggQEAgLSAodm9pZClrZXlV
cDooV2ViRXZlbnQgKilldmVudAogICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOwogfQogCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpZmxhZ3NDaGFu
Z2VkOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVz
cG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZApA
QCAtNTMzNiw2ICs1MzI0LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihO
U1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgIH0KICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGVOYW1lXTsKIH0KKwogI2VuZGlmCiAKIC0gKGlk
KWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CkBAIC01MzgyLDcgKzUzNzEsOCBAQCAtICh2
b2lkKWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcgogICAgICAgICBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlOjpS
ZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOwogfQogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TRGF0YSAqKV9zZWxlY3Rpb25T
dGFydEZvbnRBdHRyaWJ1dGVzQXNSVEYKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKQEAgLTU0MTAsNiArNTQwMCw3IEBAIC0gKE5TRGljdGlvbmFyeSAqKV9m
b250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZAogICAgICAgICByZXR1cm4gbmlsOwogICAg
IHJldHVybiBbc3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCAxKV07
CiB9CisKICNlbmRpZgogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUK
QEAgLTU0MTcsNyArNTQwOCw4IEBAIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlT
dHlsZQogICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZUNTU1N0
eWxlRGVjbGFyYXRpb25dOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCisKIC0gKE5TU3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcgogewog
ICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpO
U0RldmljZVJHQkNvbG9yU3BhY2VdOwpAQCAtNTUxNSw3ICs1NTA3LDggQEAgLSAoRE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Gb250QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICop
ZGljdGlvbmFyeQogCiAgICAgcmV0dXJuIHN0eWxlOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQpX2FwcGx5U3R5bGVUb1Nl
bGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihF
ZGl0QWN0aW9uKXVuZG9BY3Rpb24KIHsKQEAgLTU1MzIsNyArNTUyNSw4IEBAIC0gKHZvaWQpX2Fw
cGx5RWRpdGluZ1N0eWxlVG9TZWxlY3Rpb246KFJlZjxFZGl0aW5nU3R5bGU+JiYpZWRpdGluZ1N0
eWxlIHdpdGhVbmRvCiAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKFdURk1vdmUoZWRpdGluZ1N0eWxlKSwgdW5kb0FjdGlvbik7CiB9CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfaGFuZGxlU3R5bGVLZXlF
cXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3Nl
bGYgX3dlYlZpZXddOwpAQCAtNTg3Myw3ICs1ODY3LDggQEAgLSAodm9pZCljaGFuZ2VDb2xvcjoo
aWQpc2VuZGVyCiAgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVG
cm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29sb3I6KV0gCiAgICAgICAg
ICAgICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0Q29sb3JdOwogfQotI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQp
X2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsKQEAgLTU5MDksNyAr
NTkwNCw4IEBAIC0gKHZvaWQpY2FwaXRhbGl6ZVdvcmQ6KGlkKXNlbmRlcgogICAgIFtzZWxmIF9j
aGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2FwaXRhbGl6ZWRTdHJpbmcpXTsK
IH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKWNv
bXBsZXRlOihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xPR1VFCkBAIC02MDY0LDcgKzYw
NjAsOCBAQCAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OihpZClz
ZW5kZXIKIAogICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGlu
Z0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlv
bk5hdHVyYWw6KGlkKXNlbmRlcgogewpAQCAtNjA5NCw3ICs2MDkxLDYgQEAgLSAodm9pZCl0cmFu
c3Bvc2VXb3JkczooaWQpc2VuZGVyOwogCiAjZW5kaWYKIAotCiAvLyBPdmVycmlkZSB0aGlzIHNv
IHRoYXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFzIGtleSBkb3duIGV2ZW50cyBz
byB3ZSBjYW4KIC8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5kaW5ncyBtZWNoYW5pc20u
CiAtIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CkBAIC02MTA4
LDcgKzYxMDQsOCBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2
ZW50CiAgICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfYXV0b21hdGljRm9jdXNSaW5nRGlzYWJs
ZWQKIHsKICAgICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgX2F1dG9tYXRpY0ZvY3VzUmluZ0Rp
c2FibGVkIGlzIE5PLCB3aGljaCBwcmV2ZW50cyBmb2N1cyByaW5ncwpAQCAtNjExNiw2ICs2MTEz
LDcgQEAgLSAoQk9PTClfYXV0b21hdGljRm9jdXNSaW5nRGlzYWJsZWQKICAgICAvLyBvZiBjaGFu
Z2luZyB0aGlzIHRvIFlFUywgc28ganVzdCByZXR1cm4gWUVTIGFsbCB0aGUgdGltZS4gPHJkYXI6
Ly9wcm9ibGVtLzEzNzgwMTIyPiwKICAgICByZXR1cm4gWUVTOwogfQorCiAjZW5kaWYKIAogLSAo
dm9pZClfdXBkYXRlQ29udHJvbFRpbnRzCkBAIC02MTM1LDcgKzYxMzMsNyBAQCAtICh2b2lkKV91
cGRhdGVDb250cm9sVGludHMKIC8vIHRvIGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8vcHJvYmxl
bS81MTM2NzYwPgogLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlCiB7Ci0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQog
ICAgICAgICBbc2VsZiBfdXBkYXRlQ29udHJvbFRpbnRzXTsKICAgICBlbHNlCkBAIC02MTQ3LDcg
KzYxNDUsOCBAQCAtICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGUKICAgICBbc3VwZXIgX3dp
bmRvd0NoYW5nZWRLZXlTdGF0ZV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRG
T1JNKE1BQykKKwogLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CiAg
ICAgaWYgKGV2ZW50LmJ1dHRvbk51bWJlciAhPSAyIHx8IFtOU01lbnUgbWVudVR5cGVGb3JFdmVu
dDpldmVudF0gPT0gTlNNZW51VHlwZUNvbnRleHRNZW51KSB7CkBAIC02MTczLDYgKzYxNzIsNyBA
QCAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiAgICAgZWxzZQogICAgICAg
ICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKIH0KKwogI2VuZGlmCiAKIEBlbmQKQEAgLTYx
ODIsNyArNjE4Miw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwp
CiAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCiB7CiAgICAgW3NlbGYgX3VwZGF0ZVNlbGVjdGlv
bkZvcklucHV0TWFuYWdlcl07Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CiAgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CiAgICAgICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3Io
KS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUoKSkKQEAgLTYxOTEsNyArNjE5MSw4IEBAIC0g
KHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKICNlbmRpZgogfQogCi0jaWYgIVBMQVRGT1JNKElPUykK
KyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAogewogICAgIC8v
IEZJWE1FOiBOU1RleHRWaWV3IGJhaWxzIG91dCBpZiBiZWNvbWluZyBvciByZXNpZ25pbmcgZmly
c3QgcmVzcG9uZGVyLCBmb3Igd2hpY2ggaXQgaGFzIGl2YXIgZmxhZ3MuIE5vdApAQCAtNjIyOSw3
ICs2MjMwLDggQEAgLSAodm9pZClfc2V0U29mdFNwYWNlUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsK
ICAgICBfcHJpdmF0ZS0+c29mdFNwYWNlUmFuZ2UgPSByYW5nZTsKIH0KLSNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChCT09MKV9jYW5TbWFy
dENvcHlPckRlbGV0ZQogewpAQCAtNjIzOSwxMSArNjI0MSwxMyBAQCAtIChCT09MKV9jYW5TbWFy
dENvcHlPckRlbGV0ZQogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU0V2ZW50ICopX21vdXNlRG93bkV2ZW50
CiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5tb3VzZURvd25FdmVudDsKIH0KKwogI2VuZGlmCiAK
IC0gKFdlYkZyYW1lICopX2ZyYW1lCkBAIC02MjU3LDcgKzYyNjEsOCBAQCAtICh2b2lkKWNsb3Nl
SWZOb3RDdXJyZW50VmlldwogICAgICAgICBbc2VsZiBjbG9zZV07CiB9CiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCopX2Rv
Y3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAog
ewogICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWluVGV4dDpOT107CkBAIC02NDE0LDcgKzY0MTks
MTAgQEAgLSAodm9pZClxdWlja0xvb2tXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIFtb
c2VsZiBfd2ViVmlld10gX2NsZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb246VGV4dEluZGlj
YXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbjo6RmFkZU91dF07CiAgICAgW3N1cGVyIHF1aWNr
TG9va1dpdGhFdmVudDpldmVudF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI3VuZGVmIENPTU1BTkRfUFJPTE9HVUUKIAogLSAodm9p
ZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcwogewpAQCAtNjQ1MCw3ICs2NDU4LDggQEAg
LSAodm9pZClfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kcwogICAgIHBhcmFtZXRlcnMtPmV4
ZWN1dGluZ1NhdmVkS2V5cHJlc3NDb21tYW5kcyA9IGZhbHNlOwogfQogCi0jaWYgIVBMQVRGT1JN
KElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihL
ZXlib2FyZEV2ZW50KilldmVudCBzYXZpbmdDb21tYW5kczooQk9PTClzYXZpbmdDb21tYW5kcwog
ewogICAgIEFTU0VSVChjb3JlKFtzZWxmIF9mcmFtZV0pID09IGV2ZW50LT50YXJnZXQoKS0+dG9O
b2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSk7CkBAIC02NTIxLDggKzY1MzAsOSBAQCAtIChCT09M
KV9pbnRlcnByZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2F2aW5nQ29tbWFuZHM6
KEJPT0wpc2F2aW5nQ29tbQogICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBleGVjdXRlZCBhbGwg
Y29tbWFuZHMsIGRvbid0IGRvIGl0IGFnYWluLgogICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50
SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0czsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQotICAgIAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIAogI2RlZmluZSBrV2ViRW50ZXJLZXkgICAgICAgICAweDAwMDMKQEAgLTY1NzYsNyArNjU4
Niw4IEBAIC0gKEJPT0wpX2hhbmRsZUVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCAqKXdj
RXZlbnQKIH0KICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKKwogLSAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJh
Z1RJRkZEYXRhU291cmNlCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZTsKQEAgLTY1OTEsMTMgKzY2MDIsMTIgQEAgLSAodm9pZClzZXRQcm9taXNlZERy
YWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNvdXJjZQogICAgICAgICBf
cHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNl
ZERhdGFDbGllbnQoKSk7CiAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNl
ID0gc291cmNlOwogfQotI2VuZGlmCiAKLSN1bmRlZiBDT01NQU5EX1BST0xPR1VFCisjZW5kaWYK
IAogLSAodm9pZClfbGF5b3V0SWZOZWVkZWQKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBM
QVRGT1JNKE1BQykKICAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKICNl
bmRpZgogCkBAIC02NjI1LDcgKzY2MzUsNyBAQCAtIChCT09MKV9uZWVkc0xheW91dAogCiAtICh2
b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIKIHsKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIV9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3
KSB7CiAgICAgICAgIE5TVmlldyogaG9zdGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ0ZsaXBw
ZWRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11dOwogICAgICAgICBbaG9z
dGluZ1ZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3
SGVpZ2h0U2l6YWJsZSldOwpAQCAtNjY2MCwxMiArNjY3MCwxMiBAQCAtICh2b2lkKWF0dGFjaFJv
b3RMYXllcjooQ0FMYXllciopbGF5ZXIKIAogICAgIGlmIChXS0V4ZWN1dGFibGVXYXNMaW5rZWRP
bk9yQmVmb3JlTGlvbigpKQogICAgICAgICBbdmlld0xheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZ
RVNdOwotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
fQogCiAtICh2b2lkKWRldGFjaFJvb3RMYXllcgogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewogICAg
ICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6bmlsXTsKICAgICAgICAg
W19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6Tk9dOwpAQCAtNjczMSw3
ICs2NzQxLDggQEAgQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYk5TVGV4
dElucHV0U3VwcG9ydCkKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQor
CiAtIChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAogewogICAgIHN0YXRp
YyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXM7CkBAIC02Nzc4LDcgKzY3ODksOCBAQCAtIChOU0F0
dHJpYnV0ZWRTdHJpbmcgKil0ZXh0U3RvcmFnZQogICAgIC8vIFdlIGhhdmUgdG8gcmV0dXJuIGFu
IGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiBudWxsIHRvIHByZXZlbnQgVFNNIGZyb20gY2FsbGlu
ZyAtc3RyaW5nCiAgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFtbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CiB9Ci0jZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAoTlNVSW50
ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50CiB7CkBAIC02ODY0
LDcgKzY4NzYsOCBAQCAtIChOU1JhbmdlKW1hcmtlZFJhbmdlCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOihOU1JhbmdlKW5zUmFu
Z2UKIHsKICAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CkBAIC02ODk0
LDYgKzY5MDcsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlOihOU1JhbmdlKW5zUmFuZ2UKICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1JhbmdlLmxvY2F0aW9u
LCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmddKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQorCiAjZW5kaWYKIAogLSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKQEAgLTY5
MzQsNyArNjk0OCw4IEBAIC0gKHZvaWQpdW5tYXJrVGV4dAogICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1bHQp
CiB7CiAgICAgaW50IGxlbmd0aCA9IFtbc3RyaW5nIHN0cmluZ10gbGVuZ3RoXTsKQEAgLTY5NTcs
MTMgKzY5NzIsMTQgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICAgICAgaSA9IHJhbmdl
LmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOwogICAgIH0KIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQp
c2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFu
Z2UKIHsKICAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBCT09MIGlzQXR0cmlidXRlZFN0
cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07
CiAgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pOwogCkBAIC02OTg5LDcgKzcwMDUsNyBAQCAtICh2b2lkKXNldE1h
cmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCiAg
ICAgTlNTdHJpbmcgKnRleHQ7CiAgICAgTlNSYW5nZSByZXBsYWNlbWVudFJhbmdlID0geyBOU05v
dEZvdW5kLCAwIH07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBpZ25vcmUg
bW9zdCBhdHRyaWJ1dGVzIGZyb20gdGhlIHN0cmluZywgc28gYW4gaW5wdXQgbWV0aG9kIGNhbm5v
dCBzcGVjaWZ5IGUuZy4gYSBmb250IG9yIGEgZ2x5cGggdmFyaWF0aW9uLgogICAgICAgICB0ZXh0
ID0gW3N0cmluZyBzdHJpbmddOwpAQCAtNzA1Niw3ICs3MDcyLDcgQEAgLSAodm9pZClkb0NvbW1h
bmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKICAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKICAgICAgICAg
ICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCiAgICAgICAgICAgICAgICAgZXZlbnRXYXNI
YW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIElm
IFdlYktpdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29tbWFuZCwgd2UgbmVlZCB0byBwYXNzIHRo
ZSBzZWxlY3RvciB0byBzdXBlci4KICAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JG
b3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7CkBAIC03MDgzLDcgKzcwOTksNyBAQCAt
ICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgogCiAtICh2b2lkKWluc2Vy
dFRleHQ6KGlkKXN0cmluZwogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltO
U0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKICAgICBBU1NFUlQoaXNBdHRyaWJ1dGVkU3RyaW5n
IHx8IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CiAKQEAgLTcxMDMs
NyArNzExOSw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiAjZW5kaWYKIAogICAg
IFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlv
bnM7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKGlzQXR0
cmlidXRlZFN0cmluZykgewogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiB0ZXh0QWx0ZXJuYXRp
dmVzOwpAQCAtNzE1MSw3ICs3MTY3LDcgQEAgLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcK
ICAgICAgICAgbmVlZFRvUmVtb3ZlU29mdFNwYWNlID0gWUVTOwogICAgIH0KICNlbmRpZgotI2lm
ICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIF9wcml2YXRlLT5zb2Z0U3Bh
Y2VSYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogI2VuZGlmCiAKQEAgLTcxODks
NyArNzIwNSw4IEBAIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiAgICAgICAgIHBhcmFt
ZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyB8PSBldmVudEhhbmRsZWQ7
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClf
dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogewogICAgIGlmICghW1tzZWxmIHdpbmRvd10gaXNLZXlX
aW5kb3ddIHx8IChbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0gIT0gc2VsZiAmJiAhX3By
aXZhdGUtPl9mb3JjZVVwZGF0ZVNlY3VyZUlucHV0U3RhdGUpKSB7CkBAIC03MjIwLDExICs3MjM3
LDEyIEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKICAgICAgICAgVFNNUmVtb3Zl
RG9jdW1lbnRQcm9wZXJ0eSgwLCBrVFNNRG9jdW1lbnRFbmFibGVkSW5wdXRTb3VyY2VzUHJvcGVy
dHlUYWcpOwogICAgIH0KIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZv
cklucHV0TWFuYWdlcgogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29y
ZUZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC03Mzg3LDcgKzc0MDUsNyBAQCBzdGF0aWMgQ0dJ
bWFnZVJlZiBzZWxlY3Rpb25JbWFnZShGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFja1RleHQp
CiB9CiAjZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogLSAo
TlNJbWFnZSAqKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNr
VGV4dAogI2Vsc2UKIC0gKENHSW1hZ2VSZWYpc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxhY2tUZXh0
OihCT09MKWZvcmNlQmxhY2tUZXh0CkBAIC03NDE1LDcgKzc0MzMsOCBAQCAtIChOU1JlY3Qpc2Vs
ZWN0aW9uSW1hZ2VSZWN0CiAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlv
bigpLnNlbGVjdGlvbkJvdW5kcygpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCisKIC0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KIHsK
ICAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSkgewpAQCAtNzQzMSw2ICs3NDUw
LDcgQEAgLSAodm9pZCl3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkg
Kil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGUKIHsKICAgICBbc2VsZiBfd3JpdGVTZWxlY3Rp
b25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hl
ZEF0dHJpYnV0ZWRTdHJpbmc6bmlsXTsKIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQpc2VsZWN0QWxs
CkBAIC03NDUzLDcgKzc0NzMsOCBAQCAtIChOU1N0cmluZyAqKXN0cmluZwogICAgIHJldHVybiBb
W3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKIH0K
IAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQogewogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKQEAgLTc0OTYs
NiArNzUxNyw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0
cmluZwogICAgIH0KICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKIH0KKwogI2VuZGlmCiAK
IC0gKE5TU3RyaW5nICopc2VsZWN0ZWRTdHJpbmcKQEAgLTc2MDgsNyArNzYzMCw4IEBAICsgKE5T
VVJMICopX3dlYl91bmlxdWVXZWJEYXRhVVJMCiAKIEBlbmQKIAotI2lmICFQTEFURk9STShJT1Mp
CisjaWYgUExBVEZPUk0oTUFDKQorCiBAaW1wbGVtZW50YXRpb24gV2ViUmVzcG9uZGVyQ2hhaW5T
aW5rCiAKIC0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hhaW4K
QEAgLTc2NDksNCArNzY3Miw1IEBAIC0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdp
dGg6KGlkKW9iamVjdAogfQogCiBAZW5kCisKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319795</attachid>
            <date>2017-09-03 12:36:40 -0700</date>
            <delta_ts>2017-09-03 13:56:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176280-20170903123639.patch</filename>
            <type>text/plain</type>
            <size>138357</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggZWFjMmMxZGQzMzk5ZGQ1ZTcyMWI0YzIzOGFmZDFkMmYyZWE0NmVlNi4uMWRmZWZiYzU2MDZi
ZmJhYWIwODJjNDI1ZGYxZTJkZjMwMjRkNmMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxNy0wOS0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBUaWR5IGEgZmV3IHRoaW5ncyBpbiBsZWdhY3kgV2Vi
SFRNTFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NjI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVD
bGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKTogTWFkZSB0aGlzIGZ1bmN0aW9uIE1hYy1v
bmx5LCBiZWNhdXNlIHRoZQorICAgICAgICBtZXRob2RzIGl0IGNhbGxzIG9uIFdlYkhUTUxWaWV3
IHdlcmUgZG9pbmcgbm90aGluZyBvbiBpT1MuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29u
dGV4dDpdKTogQ2hhbmdlZCBpT1MgY29kZSBzbyB0aGF0IGl0IG5vIGxvbmdlcgorICAgICAgICBk
ZXBlbmRzIG9uIC1bV2ViSFRNTFZpZXcgX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXJdLCB3aGljaCBh
bHdheXMgcmV0dXJuZWQgWUVTIG9uIGlPUy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZp
ZXcubW06IERlZmluZSBXZWJFdmVudCBvbiBib3RoIGlPUyBhbmQgTWFjIHNvIG1vcmUgZXZlbnQg
aGFuZGxpbmcKKyAgICAgICAgY29kZSBjYW4gYmUgc2hhcmVkIHdpdGhvdXQgI2lmIGJlbG93LiBV
c2UgI2lmIFBMQVRGT1JNKE1BQykgaW5zdGVhZCBvZiAjaWYgIVBMQVRGT1JNKElPUykKKyAgICAg
ICAgaW4gYSBsb3QgbW9yZSBwbGFjZXMuIE1vdmUgbWFueSBvZiB0aGUgU1BJIGRlY2xhcmF0aW9u
cyB1cCB0byB0aGUgdG9wIGluIGFscGhhYmV0aWNhbAorICAgICAgICBvcmRlci4gUmVtb3ZlZCBh
bGwgc29ydHMgb2YgdW51c2VkIHRoaW5ncy4gTWFkZSBtb3JlIGNvZGUgYW5kIGZpZWxkcyBNYWMt
b25seSB3aGVyZQorICAgICAgICB3aGF0IHdhcyBjb21waWxlZCB3YXMgZG9pbmcgbm90aGluZyBv
biBpT1MgYW5kIGl0IG1ha2VzIHRoZSByZXN1bHRpbmcgY29kZSBzaW1wbGVyLgorICAgICAgICBV
c2UgUmV0YWluUHRyIGluc3RlYWQgb2Ygd3JpdGluZyByZXRhaW4vcmVsZWFzZSB3aGVyZXZlciBw
b3NzaWJsZS4KKyAgICAgICAgKCtbV2ViTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XSk6IE1v
dmVkIGdsb2JhbCBpbnNpZGUgdGhpcyBtZXRob2QgYW5kIHVzZWQgQysrCisgICAgICAgIGluaXRp
YWxpemF0aW9uIGZvciBpdC4gUmVtb3ZlZCB2YXJpb3VzIHVudXNlZCBtZXRob2RzIGFuZCBkZWNs
YXJhdGlvbnMgb2YgbWV0aG9kcy4KKyAgICAgICAgKHByb21pc2VkRGF0YUNsaWVudCk6IFVzZSBO
ZXZlckRlc3Ryb3llZCBpbnN0ZWFkIG9mIGp1c3QgZG9pbmcgYSAibmV3IiBvbiB0aGUgaGVhcC4K
KyAgICAgICAgKGNyZWF0ZVVVSURTdHJpbmcpOiBBZGRlZC4gU2ltcGxpZmllcyBVVUlEIG1ldGhv
ZHMgYmVsb3cuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbWFnZUV4aXN0c0F0UGF0aHM6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVudEZyYWdtZW50V2l0aFBh
dGhzOl0pOiBVc2UgUmV0YWluUHRyIGFuZCBtb2Rlcm4gZm9yIGxvb3AuCisgICAgICAgICgrW1dl
YkhUTUxWaWV3IF9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb25d
KTogVXNlIEMrKyBpbml0aWFsaXphdGlvbiwKKyAgICAgICAgYW5kIHJlbW92ZSBDRlJldGFpbiBu
byBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9u
IGFueSBtb3JlLgorICAgICAgICAodW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydCk6IFNpbXBsaWZp
ZWQgdXNpbmcgY3JlYXRlVVVJRFN0cmluZyBmdW5jdGlvbi4KKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOl0pOiBTaW1wbGlmaWVkIHdpdGggUmV0YWluUHRy
LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGFzdGVXaXRoUGFzdGVib2FyZDphbGxvd1BsYWlu
VGV4dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9wYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcmVtb3Zl
V2luZG93T2JzZXJ2ZXJzXSk6IFJlbW92ZWQgY29kZSBkZWFsaW5nIHdpdGggZW1wdHkKKyAgICAg
ICAgbWV0aG9kcyB3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjogYW5kIHdpbmRvd1dpbGxPcmRlck9m
ZlNjcmVlbjouCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zaG91bGREZWxldGVSYW5nZTpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3Rl
Ym9hcmRUeXBlczp0b1Bhc3RlYm9hcmQ6Y2FjaGVkQXR0cmlidXRlZFN0cmluZzpdKToKKyAgICAg
ICAgU2ltcGxpZmllZCB3aXRoIFJldGFpblB0ci4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3Nl
dE1vdXNlRG93bkV2ZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9z
ZXRQcmludGluZ01vZGVSZWN1cnNpdmU6YWRqdXN0Vmlld1NpemU6XSk6IEFkZGVkLiBIZWxwZXIg
bWV0aG9kIHNvCisgICAgICAgIHRoZSBuZXh0IHRocmVlIG1ldGhob2RzIGNhbiBiZSBzdXBlci1z
aW1wbGUuIFVzZWQgUmV0YWluUHRyIGFuZCBhIG1vZGVybiBmb3IgbG9vcCB0byBtYWtlCisgICAg
ICAgIHRoaXMgbWV0aG9kIHNpbXBsZXIgdGhhbiB0aGUgZnVuY3Rpb25zIGl0IHJlcGxhY2VkLiBB
bHNvIGdvdCByaWQgb2YgdGhlIGVudW1lcmF0aW5nU3Vidmlld3MKKyAgICAgICAgZGVidWcgZmxh
Zzsgd2UgaGF2ZW4ndCB1c2VkIGl0IGZvciB5ZWFycyBhbmQgaXQncyBub3QgY2xlYXJseSBoZWxw
ZnVsLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2
ZV0pOiBUdXJuZWQgaW50byBhIG9uZS1saW5lciB3aXRoIHRoZSBhYm92ZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1
c3RWaWV3U2l6ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9tYWtlUGx1
Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDpdKTogTW92ZWQgZnJvbSB0aGUK
KyAgICAgICAgV2ViSW50ZXJuYWwgY2F0ZWdvcnkgdG8gdGhlIFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsIGNhdGVnb3J5IHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkKKyAgICAgICAgdHdvIGFkZGl0aW9u
YWwgbWV0aG9kcyBpbiB0aGUgV2ViUHJpdmF0ZSBjYXRlZ29yeSBhbmQgc3RpbGwgYmUgY2FsbGVk
IGJ5IHRoZSB0d28KKyAgICAgICAgbWV0aG9kcyBpbiB0aGUgV2ViSW50ZXJuYWwgY2F0ZWdvcnkg
dGhhdCB3ZXJlIGFscmVhZHkgdXNpbmcgaXQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGRpZEFk
ZFN1YnZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbnNpZGVBbm90
aGVySFRNTFZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3NldFRvb2xU
aXA6XSk6IFNpbXBsaWZpZWQgYnkgbWFraW5nIHRoaXMgTWFjLW9ubHkgYW5kIHdpdGggUmV0YWlu
UHRyLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwYXN0ZWJvYXJkOnByb3ZpZGVEYXRhRm9yVHlw
ZTpdKTogU2ltcGxpZmllZCB3aXRoIFJldGFpblB0ci4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X2F1dG9zY3JvbGxdKTogU2ltcGxpZmllZCBieSBtYWtpbmcgdGhpcyBNYWMtb25seS4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgX2hhc0hUTUxEb2N1bWVudF0pOiBEZWxldGVkLiBUaGUgb25lIGNh
bGxlciB3YXMgcmVtb3ZlZCBhIGxvbmcgdGltZSBhZ28uCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRUeXBlOmltYWdl
TUlNRVR5cGU6XSk6CisgICAgICAgIEFkZGVkIGhlbHBlciBtZXRob2QgdG8gbWFrZSB0aGUgb25l
IGJlbG93IHNpbXBsZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6Zm9yVHlwZTppbkNvbnRleHQ6c3VicmVzb3VyY2VzOl0pOgorICAgICAg
ICBDb21wYXJlZCBwYXN0ZWJvYXJkIHR5cGUgc3RyaW5ncyB1c2luZyBpc0VxdWFsVG9TdHJpbmc6
IHJhdGhlciB0aGFuIHVzaW5nID09IHNpbmNlCisgICAgICAgIHdlIHdhbnQgdG8gYWN0dWFsbHkg
Y29tcGFyZSB0aGUgc3RyaW5nIGNvbnRlbnRzLiBBbHNvIHVwZGF0ZWQgdG8gdXNlIG1vZGVybiBm
b3IgbG9vcCwKKyAgICAgICAgcmVuYW1lZCBhIGxvY2FsIHZhcmlhYmxlIGZyb20gInMiIHRvICJs
b2NhbFN1YnJlc291cmNlcyIsIGFuZCBmYWN0b3JlZCBvdXQgdGhlIGhhbmRsaW5nCisgICAgICAg
IG9mIHRocmVlIGltYWdlIHR5cGVzIHRvIHVzZSB0aGUgaGVscGVyIG1ldGhvZCBhYm92ZS4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lu
c10pOiBSZXdyaXRlIHVzaW5nIHRoZQorICAgICAgICBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1Bl
cmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OiBtZXRob2QuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zXSk6IERpdHRvLgorICAgICAg
ICAoLVtOU1ZpZXcgX3dlYl9hZGREZXNjZW5kZW50V2ViSFRNTFZpZXdzVG9BcnJheTpdKTogRml4
ZWQgc3BlbGxpbmcgdG8gdXNlIHRoZSBhZGplY3RpdmUKKyAgICAgICAgImRlc2NlbmRlbnQiIHJh
dGhlciB0aGFuIHRoZSBub3VuICJkZXNjZW5kYW50Ii4gQWxzbyByZW1vdmVkIE1hYy1vbmx5IG9w
dGltaXphdGlvbiB0bworICAgICAgICBub3QgY2FsbCB0aGUgLVtOU1ZpZXcgc3Vidmlld3NdIG1l
dGhvZCB0byBtYWtlIHRoaXMgaWRlbnRpY2FsIG9uIGJvdGggcGxhdGZvcm1zIGFuZCB1c2VkCisg
ICAgICAgIGEgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoLVtOU011dGFibGVEaWN0aW9uYXJ5
IF93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6Zm9yS2V5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKTogUmVkdWNlZCBhbW91bnQgb2YgcGxh
dGZvcm0tc3BlY2lmaWMgY29kZSBieQorICAgICAgICBkZWZpbmluZyBXZWJFdmVudE1vdXNlRG93
biBhcyBhIHN5bm9ueW0gZm9yIE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93biBvbiBNYWMuCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IGFkZFdpbmRvd09ic2VydmVyc10pOiBSZW1vdmVkIGNvZGUgZGVh
bGluZyB3aXRoIGVtcHR5CisgICAgICAgIG1ldGhvZHMgd2luZG93V2lsbE9yZGVyT25TY3JlZW46
IGFuZCB3aW5kb3dXaWxsT3JkZXJPZmZTY3JlZW46LgorICAgICAgICAoLVtXZWJIVE1MVmlldyB3
aWxsUmVtb3ZlU3VidmlldzpdKTogUmVtb3ZlZCB0aGUgZW51bWVyYXRpbmdTdWJ2aWV3cyBjaGVj
ay4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZHJhd1NpbmdsZVJlY3Q6XSk6IFJlYXJyYW5nZWQg
dGhpcyBtZXRob2QgdG8gbWFrZSBpdCBjbGVhcmVyIHRoYXQgbW9zdAorICAgICAgICBvZiBpdCBp
cyBNYWMtb25seS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgd2luZG93V2lsbE9yZGVyT25TY3Jl
ZW46XSk6IERlbGV0ZWQuIEFsbCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAg
bWV0aG9kIGRpZCB3YXMgY2FsbCBpdHNlbGYgb24gdGhlIG1haW4gdGhyZWFkLCBhbmQgZG8gbm90
aGluZyBpZiBjYWxsZWQgb24gbWFpbiB0aHJlYWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdp
bmRvd1dpbGxPcmRlck9mZlNjcmVlbjpdKTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50Ol0pOiBNZXJnZWQgbWFjT1MgYW5kIGlPUyB2ZXJz
aW9ucy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdKTogUmVt
b3ZlZCBpT1Mtc3BlY2lmaWMgY29kZSBpbiB0aGUgbWFjT1Mtc3BlY2lmaWMKKyAgICAgICAgaGFs
ZiBvZiB0aGlzIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0RGF0YVNvdXJjZTpd
KTogU2ltcGxpZmllZCB1c2luZyBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9z
ZXRQcmludGluZzptaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDpsb2dpY2FsSGVpZ2h0Om9yaWdpbmFs
UGFnZVdpZHRoOm9yaWdpbmFsUGFnZUhlaWdodDptYXhpbXVtU2hyaW5rUmF0aW86YWRqdXN0Vmll
d1NpemU6cGFnaW5hdGVTY3JlZW5Db250ZW50Ol0pOgorICAgICAgICBTaW1wbGlmaWVkIHVzaW5n
IGEgbW9kZXJuIGZvciBsb29wIGFuZCBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IGtub3dzUGFnZVJhbmdlOl0pOiBTaW1wbGlmaWVkIHVzaW5nIFJldGFpblB0ci4KKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcga2V5RG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEZdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkhUTUxWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgY29tcGxldGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfd2luZG93Q2hhbmdlZEtleVN0YXRlXSk6IFJlbW92ZWQgaU9TLXNwZWNpZmljIGNvZGUgc2lu
Y2UgdGhpcyBtZXRob2QgaXMKKyAgICAgICAgbm93IG1hY09TLW9ubHkuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXSk6IFJlbW92ZWQgY2FsbCB0byBfdXBkYXRlU2Vs
ZWN0aW9uRm9ySW5wdXRNYW5hZ2VyIG9uCisgICAgICAgIGlPUyBzaW5jZSB0aGF0IGlzIG5vdyBt
YWNPUy1vbmx5LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc3RhcnRBdXRvc2Nyb2xs
VGltZXI6XSk6IE1vdmVkIHRoaXMgaW50byBhbiBpbnRlcm5hbCBjYXRlZ29yeSBpbnN0ZWFkIG9m
CisgICAgICAgIGEgcHJpdmF0ZSBvbmUgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCBvciBuZWVkZWQg
b3V0c2lkZSBXZWJLaXQuIEFsc28gbWFkZSBpdCBtYWNPUy1vbmx5LgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfc3RvcEF1dG9zY3JvbGxUaW1lcl0pOiBNb3ZlZCBpbnRvIGludGVybmFsIGNhdGVn
b3J5LiBJdCByZW1haW5zIGEgbm8tb3AKKyAgICAgICAgb24gaU9TLCBidXQga2VwdCB0aGVyZSBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvICNpZiBhdCBldmVyeSBjYWxsIHNpdGUuCisgICAgICAgICgt
W1dlYkhUTUxWaWV3IF9wbHVnaW5Db250cm9sbGVyXSk6IE1vdmVkIGludG8gaW50ZXJuYWwgY2F0
ZWdvcnkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHRdKTogU2ltcGxpZmllZCBieSByZW1vdmluZyBDRlJldGFpbiB0aGF0IHdhcworICAgICAgICB0
aGVyZSBvbmx5IGZvciBHQywgdXNpbmcgQysrIGluaXRpYWxpemF0aW9uLCByZW1vdmluZyBvYnNv
bGV0ZSBjb21tZW50LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlU2VsZWN0aW9uRm9y
SW5wdXRNYW5hZ2VyXSk6IE1hZGUgdGhpcyBtYWNPUy1vbmx5IGFuZCByZW1vdmVkCisgICAgICAg
IHBlY3VsaWFyIGlPUy1vbmx5IGNvbW1lbnQuCisgICAgICAgICgrW05TVVJMIF93ZWJfdW5pcXVl
V2ViRGF0YVVSTF0pOiBTaW1wbGlmaWVkIHVzaW5nIGNyZWF0ZVVVSURTdHJpbmcgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaDogUmVtb3ZlZCB1bnVz
ZWQgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgbWV0aG9kLgorICAgICAgICBNYWRlIGF0dGFj
aFJvb3RMYXllcjosIGRldGFjaFJvb3RMYXllciwgX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXIsCisg
ICAgICAgIF93ZWJfaXNEcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIgYWxsIG1hY09TLW9ubHku
IE1vdmVkIF9zdGFydEF1dG9zY3JvbGxUaW1lcjosCisgICAgICAgIF9zdG9wQXV0b3Njcm9sbFRp
bWVyLCBhbmQgX3BsdWdpbkNvbnRyb2xsZXIgaGVyZSBmcm9tIFNQSSBoZWFkZXIgc2luY2UgdGhl
eSBhcmVuJ3QKKyAgICAgICAgbmVlZGVkIG9yIHVzZWQgYXMgU1BJLiBBbmQgbWFkZSB0aGUgdHdv
IGF1dG9zY3JvbGwgb25lcyBtYWNPUy1vbmx5LgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1M
Vmlld1ByaXZhdGUuaDogUmVtb3ZlZCB1bm5lZWRlZCBhbmQgdW51c2VkIFNQSTogX2luc2lkZUFu
b3RoZXJIVE1MVmlldywKKyAgICAgICAgX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYsIF9wbHVnaW5D
b250cm9sbGVyLCBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6LCBhbmQgX3N0b3BBdXRvc2Nyb2xsVGlt
ZXIuCisgICAgICAgIE1hZGUgX3RyYW5zcGFyZW50QmFja2dyb3VuZCwgX3NldFRyYW5zcGFyZW50
QmFja2dyb3VuZDosIGFuZCBfc2V0VG9vbFRpcDogbWFjT1Mtb25seS4KKyAgICAgICAgTm9uZSBv
ZiB0aGVtIGFyZSB1c2VkIG9yIG5lZWRlZCBvbiBpT1MuIEluIGZhY3QsIHRoZSB0cmFuc3BhcmVu
dCBiYWNrZ3JvdW5kIG9uZXMgcHJvYmFibHkKKyAgICAgICAgYXJlIG5vdCBuZWVkZWQgb24gbWFj
T1MgZWl0aGVyLCBidXQgSSB3YXNuJ3QgYWJsZSB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGNv
dWxkIHJlbW92ZQorICAgICAgICB0aGVtIGF0IHRoaXMgdGltZS4gQ291bGQgcmV0dXJuIGFuZCBy
ZW1vdmUgdGhlbS4KKwogMjAxNy0wOS0wMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSBDYW52YXNQcm94eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IGIxNzBh
YjkzNDUxOGFiOGFhNmEwOWUwODUwYjc5OWJhMDhjY2UzYTcuLjFjYjI0ODA4ZmI1OWE0MmJlMWY4
YTk0ZjMxZjFkOWNjMzQzMTljMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTkwNiw2ICs5MDYs
MTAgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBj
b25zdAogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJh
bWUmIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogeworI2lmICFQTEFURk9S
TShNQUMpCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhcGhp
Y3NMYXllcik7CisjZWxzZQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAg
IE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1traXQoJmZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50
Vmlld107CkBAIC05MjEsNiArOTI1LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lJiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICBl
bHNlCiAgICAgICAgIFt3ZWJIVE1MVmlldyBkZXRhY2hSb290TGF5ZXJdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0
dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZTdmZjRkMGM3
ZWExNTQ1NzA2NGEzMzgxMjk2NWE5ZDUyYmUwMDJlMC4uOGQ3ZmNlYjEwOTFmOTNlMzM4MjI1MzZm
Y2YxMTBkYjRmNmZhNjg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCkBAIC01NTksNiArNTU5LDcgQEAgLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291
cmNlCiB9CiAKICNpZiBQTEFURk9STShJT1MpCisKIC0gKEJPT0wpX2lzQ29tbWl0dGluZwogewog
ICAgIHJldHVybiBfcHJpdmF0ZS0+aXNDb21taXR0aW5nOwpAQCAtNTY4LDYgKzU2OSw3IEBAIC0g
KHZvaWQpX3NldElzQ29tbWl0dGluZzooQk9PTCl2YWx1ZQogewogICAgIF9wcml2YXRlLT5pc0Nv
bW1pdHRpbmcgPSB2YWx1ZTsKIH0KKwogI2VuZGlmCiAKIC0gKE5TQXJyYXkgKilfbm9kZXNGcm9t
TGlzdDooVmVjdG9yPE5vZGUqPiAqKW5vZGVzVmVjdG9yCkBAIC01OTEsNyArNTkzLDcgQEAgLSAo
TlNTdHJpbmcgKilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoUGFpbnRC
ZWhhdmlvcilfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAv
LyAtY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW4gcmV0dXJucyBZRVMgZm9yIGJpdG1hcCBj
b250ZXh0cy4KICAgICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJl
bnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXTsKICAgICBpZiAoaXNQcmludGluZykKQEAgLTYwMSwx
NCArNjAzLDE1IEBAIC0gKFBhaW50QmVoYXZpb3IpX3BhaW50QmVoYXZpb3JGb3JEZXN0aW5hdGlv
bkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiAgICAgaWYgKENHQ29udGV4dEdldFR5cGUo
Y29udGV4dCkgIT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCiAgICAgICAgIHJldHVybiBQYWludEJl
aGF2aW9yTm9ybWFsOwogCi0gICAgLy8gSWYgd2UncmUgZHJhd2luZyBpbnRvIGEgYml0bWFwLCB3
ZSBtaWdodCBiZSBzbmFwc2hvdHRpbmcsIG9yIGRyYXdpbmcgaW50byBhIGxheWVyLWJhY2tlZCB2
aWV3LgotICAgIGlmIChXZWJIVE1MVmlldyAqaHRtbERvY3VtZW50VmlldyA9IFtzZWxmIF93ZWJI
VE1MRG9jdW1lbnRWaWV3XSkgeworICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgaW50byBhIGJpdG1h
cCwgd2UgY291bGQgYmUgc25hcHNob3R0aW5nIG9yIGRyYXdpbmcgaW50byBhIGxheWVyLWJhY2tl
ZCB2aWV3LgorICAgIGlmIChXZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gW3NlbGYgX3dlYkhU
TUxEb2N1bWVudFZpZXddKSB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBpZiAoW1todG1s
RG9jdW1lbnRWaWV3IHdpbmRvd10gaXNJblNuYXBzaG90dGluZ1BhaW50XSkKLSAgICAgICAgICAg
IHJldHVybiBQYWludEJlaGF2aW9yU25hcHNob3R0aW5nOworICAgICAgICByZXR1cm4gW1tkb2N1
bWVudFZpZXcgd2luZG93XSBpc0luU25hcHNob3R0aW5nUGFpbnRdID8gUGFpbnRCZWhhdmlvclNu
YXBzaG90dGluZyA6IFBhaW50QmVoYXZpb3JOb3JtYWw7CiAjZW5kaWYKLSAgICAgICAgaWYgKFto
dG1sRG9jdW1lbnRWaWV3IF93ZWJfaXNEcmF3aW5nSW50b0xheWVyXSkKKyNpZiBQTEFURk9STShN
QUMpCisgICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IF93ZWJfaXNEcmF3aW5nSW50b0xheWVyXSkK
ICAgICAgICAgICAgIHJldHVybiBQYWludEJlaGF2aW9yTm9ybWFsOworI2VuZGlmCiAgICAgfQog
ICAgIAogICAgIHJldHVybiBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzIHwg
UGFpbnRCZWhhdmlvclNuYXBzaG90dGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDhkMGQ0ZDkyNTQ4MGNiODNjMjBhZTgxNDU1NDU0
MjMwMDc0YTY4ZGIuLjNlMmUyNzk1NzFmNWFhMzk3ZjBkMmMzYzcwNDZkMzhkNWQwZDA5ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYsIDIwMDcg
R3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC03Miw2ICs3Miw3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0
ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisj
aW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgpAQCAtMTQxLDcgKzE0Miw3IEBACiAj
aW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIAot
I2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCAiV2ViTlNFdmVu
dEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1wb3J0IDxB
cHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CkBAIC0xNTAsOCArMTUxLDYgQEAKICNpbXBvcnQgPHBh
bC9zcGkvbWFjL05TTWVudVNQSS5oPgogI2VuZGlmCiAKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0
ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9LZXlFdmVudENvZGVzSU9TLmg+CkBAIC0xNjgsMTMgKzE2
Nyw1NCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsK
IAogI2lmIFBMQVRGT1JNKElPUykKKwogQGludGVyZmFjZSBOU09iamVjdCAoQWNjZXNzaWJpbGl0
eSkKIC0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50OwogLSAoaWQpYWNj
ZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7CiBAZW5kCisKICNlbmRpZgogCi0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKK0BjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7
CisKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoKQorLSAoQk9PTClpc1NwZWFraW5nOworLSAo
dm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lkKXN0b3BTcGVha2lu
ZzooaWQpc2VuZGVyOworQGVuZAorCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQor
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5n
ZSBkb2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5T
RGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsK
K0BlbmQKKworQGludGVyZmFjZSBOU09iamVjdCAoKQorLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50
OihOU0V2ZW50ICopZXZlbnQ7CistIChCT09MKXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKK0Bl
bmQKKworQGludGVyZmFjZSBOU1Jlc3BvbmRlciAoKQorLSAoTlNUZXh0SW5wdXRDb250ZXh0ICop
aW5wdXRDb250ZXh0OworQGVuZAorCitAaW50ZXJmYWNlIE5TVmlldyAoKQorLSAoQk9PTClfZHJh
d25CeUFuY2VzdG9yOworLSAodm9pZClfaW52YWxpZGF0ZUdTdGF0ZXNGb3JUcmVlOworLSAodm9p
ZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93ICgp
CistIChpZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKK0BlbmQKKworQGludGVy
ZmFjZSBOU1dpbmRvdyAoV2ViQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyAqKV93ZWJfYm9y
ZGVyVmlldzsKK0BlbmQKKwordXNpbmcgV2ViRXZlbnQgPSBOU0V2ZW50OworY29uc3QgYXV0byBX
ZWJFdmVudE1vdXNlRG93biA9IE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93bjsKKwogQGludGVyZmFj
ZSBXZWJNZW51VGFyZ2V0IDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlciogX21lbnVDb250cm9sbGVyOwogfQpAQCAtNTUyLDE0ICs1OTIsMTEgQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TlNJbnRlZ2VyPiB0b1RhZyhDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24p
CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIFdlYk1lbnVUYXJnZXQqIHRh
cmdldDsKLQogQGltcGxlbWVudGF0aW9uIFdlYk1lbnVUYXJnZXQKIAotKyAoV2ViTWVudVRhcmdl
dCopc2hhcmVkTWVudVRhcmdldAorKyAoV2ViTWVudVRhcmdldCAqKXNoYXJlZE1lbnVUYXJnZXQK
IHsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gW1tXZWJNZW51VGFyZ2V0IGFs
bG9jXSBpbml0XTsKKyAgICBzdGF0aWMgV2ViTWVudVRhcmdldCAqdGFyZ2V0ID0gW1tXZWJNZW51
VGFyZ2V0IGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gdGFyZ2V0OwogfQogCkBAIC01ODEsMTUg
KzYxOCwxMyBAQCAtICh2b2lkKWZvcndhcmRDb250ZXh0TWVudUFjdGlvbjooaWQpc2VuZGVyCiAK
IEBlbmQKIAotQGludGVyZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKLS0gKE5TVmll
dyopX3dlYl9ib3JkZXJWaWV3OwotQGVuZAorQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChXZWJC
b3JkZXJWaWV3QWNjZXNzKQogCi1AaW1wbGVtZW50YXRpb24gTlNXaW5kb3cgKEJvcmRlclZpZXdB
Y2Nlc3MpCi0tIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldworLSAoTlNWaWV3ICopX3dlYl9ib3Jk
ZXJWaWV3CiB7CiAgICAgcmV0dXJuIF9ib3JkZXJWaWV3OwogfQorCiBAZW5kCiAKIEBpbnRlcmZh
Y2UgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25kZXIgewpAQCAtNjA1LDE3ICs2NDAs
MjAgQEAgQGludGVyZmFjZSBXZWJMYXllckhvc3RpbmdGbGlwcGVkVmlldyA6IE5TVmlldwogQGVu
ZAogCiBAaW1wbGVtZW50YXRpb24gV2ViTGF5ZXJIb3N0aW5nRmxpcHBlZFZpZXcKKwogLSAoQk9P
TClpc0ZsaXBwZWQKIHsKICAgICByZXR1cm4gWUVTOwogfQorCiBAZW5kCiAKIEBpbnRlcmZhY2Ug
V2ViUm9vdExheWVyIDogQ0FMYXllcgogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViUm9vdExh
eWVyCi0tICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAorCistICh2b2lk
KXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWdyYXBoaWNzQ29udGV4dAogewogICAgIC8v
IEFwcEtpdCBjYWxscyAtW0NBTGF5ZXIgcmVuZGVySW5Db250ZXh0Ol0gdG8gcmVuZGVyIGxheWVy
LWJhY2tlZCB2aWV3cwogICAgIC8vIGludG8gYml0bWFwIGNvbnRleHRzLCBidXQgcmVuZGVySW5D
b250ZXh0OiBkb2Vzbid0IGNhcHR1cmUgbWFzayBsYXllcnMKQEAgLTYyMyw2ICs2NjEsNyBAQCAt
ICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAogICAgIC8vIGNvbnRlbnRz
IHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gcmVuZGVyZWQgYnkgZHJhd1JlY3Q6LCB3ZSBjYW4gc2Fm
ZWx5IG1ha2UKICAgICAvLyB0aGlzIGEgTk9PUC4KIH0KKwogQGVuZAogCiAvLyBpZiBZRVMsIGRv
IHRoZSBzdGFuZGFyZCBOU1ZpZXcgaGl0IHRlc3QgKHdoaWNoIGNhbid0IGdpdmUgdGhlIHJpZ2h0
IHJlc3VsdCB3aGVuIEhUTUwgb3ZlcmxhcHMgYSB2aWV3KQpAQCAtNjMxLDE2ICs2NzAsOCBAQCBz
dGF0aWMgQk9PTCBmb3JjZU5TVmlld0hpdFRlc3Q7CiAvLyBpZiBZRVMsIGRvIHRoZSAidG9wIFdl
YkhUTUxWaWV3IiBoaXQgdGVzdCAod2hpY2ggd2UnZCBsaWtlIHRvIGRvIGFsbCB0aGUgdGltZSBi
dXQgY2FuJ3QgYmVjYXVzZSBvZiBKYXZhIHJlcXVpcmVtZW50cyBbc2VlIGJ1ZyA0MzQ5NzIxXSkK
IHN0YXRpYyBCT09MIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0OwogCi1AaW50ZXJmYWNlIE5TQXBw
bGljYXRpb24gKCkKLS0gKEJPT0wpaXNTcGVha2luZzsKLS0gKHZvaWQpc3RvcFNwZWFraW5nOihp
ZClzZW5kZXI7Ci1AZW5kCi0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCiBzdGF0aWMgV2Vi
SFRNTFZpZXcgKmxhc3RIaXRWaWV3OwogCi0jaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29s
IG5lZWRzQ3Vyc29yUmVjdHNTdXBwb3J0QXRQb2ludChOU1dpbmRvdyogd2luZG93LCBOU1BvaW50
IHBvaW50KQogewogICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IFlFUzsKQEAgLTY2MSw3ICs2OTIs
NiBAQCBzdGF0aWMgYm9vbCBuZWVkc0N1cnNvclJlY3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cq
IHdpbmRvdywgTlNQb2ludCBwb2ludCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiBzdGF0aWMg
SU1QIG9sZFNldEN1cnNvckZvck1vdXNlTG9jYXRpb25JTVA7CiAKIC8vIE92ZXJyaWRpbmcgYW4g
aW50ZXJuYWwgbWV0aG9kIGlzIGEgaGFjazsgPHJkYXI6Ly9wcm9ibGVtLzc2NjI5ODc+IHRyYWNr
cyBmaW5kaW5nIGEgYmV0dGVyIHNvbHV0aW9uLgpAQCAtNjcxLDE4ICs3MDEsMTIgQEAgc3RhdGlj
IHZvaWQgc2V0Q3Vyc29yKE5TV2luZG93ICpzZWxmLCBTRUwgY21kLCBOU1BvaW50IHBvaW50KQog
ICAgICAgICB3dGZDYWxsSU1QPGlkPihvbGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QLCBz
ZWxmLCBjbWQsIHBvaW50KTsKIH0KIAotI2VuZGlmCi0KLWV4dGVybiAiQyIgeworLy8gRklYTUU6
IEdldCB0aGlzIGZyb20gPEFwcEtpdC9OU1RleHRJbnB1dENvbnRleHRfUHJpdmF0ZS5oPiB1c2lu
ZyBhIE5TVGV4dElucHV0Q29udGV4dFNQSS5oIGhlYWRlciBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0
IGhlcmUuCitleHRlcm4gIkMiIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VB
dHRyaWJ1dGVOYW1lOwogCi0vLyBOZWVkIHRvIGRlY2xhcmUgdGhlc2UgYXR0cmlidXRlIG5hbWVz
IGJlY2F1c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBidXQgZG9lcyBub3QgbWFrZSB0aGVtIGF2YWls
YWJsZSBpbiBBUEkgb3IgU1BJIGhlYWRlcnMuCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi1l
eHRlcm4gTlNTdHJpbmcgKk5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWU7Ci1leHRl
cm4gTlNTdHJpbmcgKk5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7Ci0K
LX0KLQotQGludGVyZmFjZSBOU1ZpZXcgKFdlYk5TVmlld0RldGFpbHMpCitAaW50ZXJmYWNlIE5T
VmlldyAoKQogLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3Bh
Y2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJ
c1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0
b3BWaWV3OwogLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czoo
Qk9PTCluZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdDsKICNpZiBQTEFURk9S
TShNQUMpCkBAIC02OTQsMTggKzcxOCwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVj
dXJzZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0CiAtICh2
b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZVggZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6
KE5TUmVjdClkaXNwbGF5UmVjdCBpbkdyYXBoaWNzQ29udGV4dDooTlNHcmFwaGljc0NvbnRleHQg
KilncmFwaGljc0NvbnRleHQgQ0dDb250ZXh0OihDR0NvbnRleHRSZWYpY3R4IHRvcFZpZXc6KEJP
T0wpaXNUb3BWaWV3IHNob3VsZENoYW5nZUZvbnRSZWZlcmVuY2VDb2xvcjooQk9PTClzaG91bGRD
aGFuZ2VGb250UmVmZXJlbmNlQ29sb3I7CiAjZW5kaWYKICNlbmRpZgotLSAoTlNSZWN0KV9kaXJ0
eVJlY3Q7CiAtICh2b2lkKV9zZXREcmF3c093bkRlc2NlbmRhbnRzOihCT09MKWRyYXdzT3duRGVz
Y2VuZGFudHM7Ci0tIChCT09MKV9kcmF3bkJ5QW5jZXN0b3I7Ci0tICh2b2lkKV9pbnZhbGlkYXRl
R1N0YXRlc0ZvclRyZWU7Ci0tICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNl
c3RvcnM7Ci0tICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGU7CiAjaWYgUExBVEZPUk0oSU9T
KQogLSAodm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOihpZClzZW5kZXI7CiAjZW5k
aWYKIEBlbmQKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogCiBAaW50
ZXJmYWNlIE5TVmlldyAoV2ViU2V0TmVlZHNEaXNwbGF5SW5SZWN0KQogLSAodm9pZClfd2ViX3Nl
dE5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KWludmFsaWRSZWN0OwpAQCAtNzUwLDMyICs3Njks
MTcgQEAgLSAodm9pZClfd2ViX3NldE5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KWludmFsaWRS
ZWN0CiAKIEBlbmQKIAotQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9u
RGV0YWlscykKLS0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCi0tIChpZClfbmV3Rmly
c3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKLUBlbmQKLQotQGludGVyZmFjZSBOU0F0dHJpYnV0
ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCi0tIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01E
b2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGlj
dCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwotQGVuZAotCi1AaW50ZXJm
YWNlIE5TU3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCi0tICh2b2lkKWxl
YXJuV29yZDooTlNTdHJpbmcgKil3b3JkOwotQGVuZAotI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IgPSBQcmludENvbnRleHQ6Om1pbmltdW1TaHJpbmtGYWN0
b3IoKTsKIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3Rv
ciA9IFByaW50Q29udGV4dDo6bWF4aW11bVNocmlua0ZhY3RvcigpOwogCi0jZGVmaW5lIEFVVE9T
Q1JPTExfSU5URVJWQUwgICAgICAgICAgICAgMC4xZgorI2RlZmluZSBBVVRPU0NST0xMX0lOVEVS
VkFMIDAuMQogCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0
aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUg
VFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCiAKLS8vIEZJWE1FOiBUaGlzIGNvbnN0YW50IGlz
IGNvcGllZCBmcm9tIEFwcEtpdCdzIF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQuCisvLyBGSVhNRTog
RnJvbSBBcHBLaXQncyBfTlhTbWFydFBhc3RlIGNvbnN0YW50LiBHZXQgd2l0aCBhbiBTUEkgaGVh
ZGVyIGluc3RlYWQ/CiAjZGVmaW5lIFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlIEAiTmVYVCBzbWFy
dCBwYXN0ZSBwYXN0ZWJvYXJkIHR5cGUiCiAKICNkZWZpbmUgU1RBTkRBUkRfV0VJR0hUIDUKQEAg
LTc4NSw3ICs3ODksOCBAQCBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1T
aHJpbmtGYWN0b3IgPSBQcmludENvbnRleHQ6Om1heGltdW1TaHJpbgogLy8gRmFrZSBVUkwgc2No
ZW1lLgogI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCiAK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLy8gPHJkYXI6Ly9wcm9i
bGVtLzQ5ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcgYXMgYSBzdWJ2aWV3
IG9mIGEgV2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKIC8vIGluIHNvbWUgTklCIGZpbGVzLCBz
byBOU1VuYXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAgdGhpcyBub3ctdW51
c2VkIGNsYXNzLgogQGludGVyZmFjZSBXZWJDb3JlU2Nyb2xsVmlldyA6IE5TU2Nyb2xsVmlldwpA
QCAtNzk3LDkgKzgwMiwxMCBAQCBAZW5kCiAvLyBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0byBz
YWZlbHkgcmVmZXJlbmNlIHRoZSBDYWNoZWRJbWFnZSBmb3IgdGhlIHByb21pc2VkIGRyYWcgZGF0
YQogc3RhdGljIENhY2hlZEltYWdlQ2xpZW50JiBwcm9taXNlZERhdGFDbGllbnQoKQogewotICAg
IHN0YXRpYyBDYWNoZWRJbWFnZUNsaWVudCogc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQgPSBu
ZXcgQ2FjaGVkSW1hZ2VDbGllbnQ7Ci0gICAgcmV0dXJuICpzdGF0aWNDYWNoZWRSZXNvdXJjZUNs
aWVudDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FjaGVkSW1hZ2VDbGllbnQ+IHN0YXRp
Y0NhY2hlZFJlc291cmNlQ2xpZW50OworICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNs
aWVudC5nZXQoKTsKIH0KKwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC04MDcsOCAr
ODEzLDcgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViTWFya2VkVGV4dFVwZGF0ZWROb3Rp
ZmljYXRpb24gPSBAIldlYk1hcmtlZFRleHRVcGRhdGUKICNlbmRpZgogCiBAaW50ZXJmYWNlIFdl
YkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLSNpZiAhUExBVEZPUk0oSU9TKQot
LSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHM7CisjaWYgUExBVEZP
Uk0oTUFDKQogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihET01SYW5nZSAq
KWNvbnRleHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CiAtIChOU1N0cmlu
ZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsK
IC0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQg
YWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CkBAIC04MjEsMjYgKzgyNiwyNiBA
QCAtIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZy
YWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOgogLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNT
dHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0
aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
ZXJ0QWN0aW9uKWFjdGlvbjsKIC0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7Ci0tIChCT09M
KV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKIC0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZl
bnQgKilldmVudDsKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczoo
TlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBj
YWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Ry
aW5nOwogI2VuZGlmCiAtIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlOwotI2lmICFQTEFURk9S
TShJT1MpCi0tICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50OwotI2Vs
c2UKIC0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJFdmVudCAqKWV2ZW50OwotI2VuZGlm
CiAtIChXZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldzsKIC0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV93ZWJfc2V0
UHJpbnRpbmdNb2RlUmVjdXJzaXZlOwogLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZUFuZEFkanVzdFZpZXdTaXplOwogLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVj
dXJzaXZlOwogI2VuZGlmCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCistICh2b2lk
KV93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0
aE9iamVjdDooaWQpb2JqZWN0OworI2VuZGlmCiBAZW5kCiAKKyNpZiBQTEFURk9STShNQUMpCisK
IEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3VGV4dENoZWNraW5nSW50ZXJuYWwp
CiAtICh2b2lkKW9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcjsKIC0gKEJP
T0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkOwpAQCAtODYzLDQ5ICs4NjgsMjggQEAgLSAodm9p
ZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CiAtICh2
b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyOwogQGVuZAog
Ci1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1F
OiBQdXQgdGhpcyBpbiBhIG5vcm1hbCBjYXRlZ29yeSBhbmQgc3RvcCBkb2luZyB0aGUgZm9yd2Fy
ZCBkZWNsYXJhdGlvbiB0cmljay4KLS0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5n
IG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbG9naWNhbEhlaWdo
dDooZmxvYXQpbWluUGFnZUhlaWdodCBvcmlnaW5hbFBhZ2VXaWR0aDooZmxvYXQpcGFnZUxvZ2lj
YWxXaWR0aCBvcmlnaW5hbFBhZ2VIZWlnaHQ6KGZsb2F0KXBhZ2VMb2dpY2FsSGVpZ2h0IG1heGlt
dW1TaHJpbmtSYXRpbzooZmxvYXQpbWF4aW11bVNocmlua1JhdGlvIGFkanVzdFZpZXdTaXplOihC
T09MKWFkanVzdFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDooQk9PTClwYWdpbmF0ZVNj
cmVlbkNvbnRlbnQ7Ci0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlu
cHV0U3RhdGU7CiAjZW5kaWYKLUBlbmQKLQotI2lmICFQTEFURk9STShJT1MpCi1AY2xhc3MgTlNU
ZXh0SW5wdXRDb250ZXh0OwotQGludGVyZmFjZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykK
LS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKLUBlbmQKIAotQGludGVyZmFj
ZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykKLS0gKEJPT0wpd2FudHNUb0hh
bmRsZU1vdXNlRXZlbnRzOwotLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50OihOU0V2ZW50ICopZXZl
bnQ7CitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJ
WE1FOiBQdXQgdGhpcyBpbiB0aGUgV2ViRmlsZUludGVybmFsIGNhdGVnb3J5IGluc3RlYWQgb2Yg
ZG9pbmcgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCistICh2b2lkKV9zZXRQcmludGlu
ZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZVdp
ZHRoIGxvZ2ljYWxIZWlnaHQ6KGZsb2F0KW1pblBhZ2VIZWlnaHQgb3JpZ2luYWxQYWdlV2lkdGg6
KGZsb2F0KXBhZ2VMb2dpY2FsV2lkdGggb3JpZ2luYWxQYWdlSGVpZ2h0OihmbG9hdClwYWdlTG9n
aWNhbEhlaWdodCBtYXhpbXVtU2hyaW5rUmF0aW86KGZsb2F0KW1heGltdW1TaHJpbmtSYXRpbyBh
ZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZSBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6
KEJPT0wpcGFnaW5hdGVTY3JlZW5Db250ZW50OwogQGVuZAotI2VuZGlmCiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYk5T
VGV4dElucHV0U3VwcG9ydCkgPE5TVGV4dElucHV0PgogI2Vsc2UKIEBpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkKICNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykK
Ky0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CiAtICh2b2lkKV91cGRhdGVTZWxlY3Rp
b25Gb3JJbnB1dE1hbmFnZXI7CisjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAtICh2b2lkKWRv
Q29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcjsKICNlbmRpZgogQGVuZAogCi1AaW50ZXJm
YWNlIFdlYkhUTUxWaWV3IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQotLSAoRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlOwotI2lmICFQTEFURk9STShJT1MpCi0tIChOU1N0cmlu
ZyAqKV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3I7Ci0jZW5kaWYKLUBlbmQKLQogQGlu
dGVyZmFjZSBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9pZClfd2ViX2Fk
ZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAqKSBhcnJheTsK
LUBlbmQKLQotQGludGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJ
bnRlcm5hbCkKLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktl
eTooaWQpa2V5OworLSAodm9pZClfd2ViX2FkZERlc2NlbmRlbnRXZWJIVE1MVmlld3NUb0FycmF5
OihOU011dGFibGVBcnJheSAqKSBhcnJheTsKIEBlbmQKIAogc3RydWN0IFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CkBAIC05MjIsMzUgKzkwNiwzMSBAQCBAcHVibGlj
CiAgICAgQk9PTCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKICAgICBCT09MIHByaW50aW5n
OwogICAgIEJPT0wgcGFnaW5hdGVTY3JlZW5Db250ZW50OwotI2lmICFQTEFURk9STShJT1MpCisK
KyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBvYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRp
b25zOwogICAgIEJPT0wgb2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9uczsKLSAgICAKKwogICAg
IGlkIHNhdmVkU3Vidmlld3M7CiAgICAgQk9PTCBzdWJ2aWV3c1NldEFzaWRlOwogI2VuZGlmCiAK
ICAgICBOU1ZpZXcgKmxheWVySG9zdGluZ1ZpZXc7CisKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
Qk9PTCBkcmF3aW5nSW50b0xheWVyOwogICAgIEJPT0wgZHJhd2luZ0ludG9BY2NlbGVyYXRlZExh
eWVyOwotCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsg
Ly8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0jZWxzZQotICAgIFdlYkV2ZW50ICpt
b3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCiAjZW5kaWYK
KworICAgIFJldGFpblB0cjxXZWJFdmVudD4gbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIg
aGFuZGxpbmcgdGhlIGV2ZW50LgogICAgIEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKLSNp
ZiAhUExBVEZPUk0oSU9TKSAgICAKLSAgICBOU0V2ZW50ICprZXlEb3duRXZlbnQ7IC8vIEtlcHQg
YWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgotI2Vsc2UKLSAgICBXZWJFdmVudCAqa2V5RG93bkV2
ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLSNlbmRpZgorICAgIFJldGFp
blB0cjxXZWJFdmVudD4ga2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBl
dmVudC4KIAogICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFzIGEgc2luZ2xlIGlucHV0IGNvbnRleHQs
IGJ1dCB3ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgdG8gYXZvaWQg
bWFraW5nIGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29yay4KICAgICAvLyBUaGlzIHN0YXRlIGlz
IHNhdmVkIGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdlcywgYmVjYXVzZSBjb21wdXRpbmcgaXQg
Y2F1c2VzIHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90IGFsd2F5cyBzYWZlIHRvIGRvLgogICAg
IEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0OwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLy8gVHJhY2sgd2hldGhlciB0aGUgdmlldyBoYXMgc2V0IGEgc2VjdXJl
IGlucHV0IHN0YXRlLgogICAgIEJPT0wgaXNJblNlY3VyZUlucHV0U3RhdGU7CiAKQEAgLTk2MCw0
OSArOTQwLDQzIEBAIEBwdWJsaWMKICAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKICAg
ICBCT09MIGluU2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwogCi0gICAgV2ViUGx1Z2luQ29udHJvbGxl
ciAqcGx1Z2luQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V2ViUGx1Z2luQ29udHJvbGxlcj4g
cGx1Z2luQ29udHJvbGxlcjsKICAgICAKLSAgICBOU1N0cmluZyAqdG9vbFRpcDsKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHRv
b2xUaXA7CiAgICAgTlNUb29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOwotI2VuZGlmCisKICAgICBp
ZCB0cmFja2luZ1JlY3RPd25lcjsKLSAgICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0YTsKKyAg
ICB2b2lkKiB0cmFja2luZ1JlY3RVc2VyRGF0YTsKICAgICAKLSAgICBOU1RpbWVyICphdXRvc2Ny
b2xsVGltZXI7Ci0jaWYgIVBMQVRGT1JNKElPUykgICAgCi0gICAgTlNFdmVudCAqYXV0b3Njcm9s
bFRyaWdnZXJFdmVudDsKLSNlbHNlCi0gICAgV2ViRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQ7CisgICAgUmV0YWluUHRyPE5TVGltZXI+IGF1dG9zY3JvbGxUaW1lcjsKKyAgICBSZXRhaW5Q
dHI8TlNFdmVudD4gYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKICNlbmRpZgotICAgIAotICAgIE5T
QXJyYXkgKnBhZ2VSZWN0czsKIAotI2lmICFQTEFURk9STShJT1MpCi0gICAgV2ViVGV4dENvbXBs
ZXRpb25Db250cm9sbGVyICpjb21wbGV0aW9uQ29udHJvbGxlcjsKLSNlbmRpZgotICAgIAorICAg
IFJldGFpblB0cjxOU0FycmF5PiBwYWdlUmVjdHM7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
UmV0YWluUHRyPFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlcj4gY29tcGxldGlvbkNvbnRyb2xs
ZXI7CisKICAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKKyNlbmRpZgogCiAgICAgV2Vi
SFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBpbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzOwogICAgIAotICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2U7Ci0jaWYgIVBM
QVRGT1JNKElPUykKKyAgICBSZXRhaW5QdHI8V2ViRGF0YVNvdXJjZT4gZGF0YVNvdXJjZTsKKwor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogcHJvbWlzZWREcmFn
VElGRkRhdGFTb3VyY2U7CiAjZW5kaWYKIAogICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5
U2VsZWN0b3I7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBC
T09MIGluc3RhbGxlZFRyYWNraW5nQXJlYTsKICAgICBpZCBmbGFnc0NoYW5nZWRFdmVudE1vbml0
b3I7CiAgICAgTlNSYW5nZSBzb2Z0U3BhY2VSYW5nZTsKICNlbmRpZgogCi0jaWZuZGVmIE5ERUJV
RwotICAgIEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpCiAgICAgUmV0YWluUHRyPFdlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29u
dHJvbGxlcj4gY3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlcjsKICNlbmRpZgpA
QCAtMTAxMCw3ICs5ODQsOCBAQCBAcHVibGljCiAtICh2b2lkKWNsZWFyOwogQGVuZAogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBOU0NlbGxTdGF0ZVZh
bHVlIGtpdChUcmlTdGF0ZSBzdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHN0YXRlKSB7CkBAIC0xMDI0
LDE5ICs5OTksMjcgQEAgc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YXRl
KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBOU09mZlN0YXRlOwogfQor
CiAjZW5kaWYKIAorc3RhdGljIE5TU3RyaW5nICpjcmVhdGVVVUlEU3RyaW5nKCkKK3sKKyAgICBy
ZXR1cm4gKE5TU3RyaW5nICopYWRvcHRDRihDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgYWRvcHRDRihDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCkpLmdldCgp
KSkuYXV0b3JlbGVhc2UoKTsKK30KKwogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3UHJpdmF0
ZQogCisjaWYgUExBVEZPUk0oTUFDKQorCiArICh2b2lkKWluaXRpYWxpemUKIHsKLSNpZiAhUExB
VEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgYWxsIG9mIHRoaXMgbW92ZSBpbnRv
ICtbV2ViSFRNTFZpZXcgaW5pdGlhbGl6ZV0/CisgICAgLy8gQW5kIHNvbWUgb2YgdGhpcyB3b3Jr
IGlzIGxpa2VseSByZWR1bmRhbnQgc2luY2UgK1tXZWJIVE1MVmlldyBpbml0aWFsaXplXSBpcyBn
dWFyYW50ZWVkIHRvIHJ1biBmaXJzdC4KKwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAg
ICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0jZW5kaWYKIAotI2lmICFQTEFU
Rk9STShJT1MpCiAgICAgaWYgKCFvbGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QKSB7CiAg
ICAgICAgIE1ldGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChb
TlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7
CiAgICAgICAgIEFTU0VSVChzZXRDdXJzb3JNZXRob2QpOwpAQCAtMTA0NSwzMyArMTAyOCwyMSBA
QCArICh2b2lkKWluaXRpYWxpemUKICAgICB9CiAKICAgICBtZXRob2RfZXhjaGFuZ2VJbXBsZW1l
bnRhdGlvbnMoY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TVmlldyBjbGFzc10sIEBzZWxlY3Rv
cihzZXROZWVkc0Rpc3BsYXlJblJlY3Q6KSksIGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1Zp
ZXcgY2xhc3NdLCBAc2VsZWN0b3IoX3dlYl9zZXROZWVkc0Rpc3BsYXlJblJlY3Q6KSkpOwotI2Vu
ZGlmCiB9CiAKKyNlbmRpZgorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAoV2ViQ29yZU9i
akNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3UHJpdmF0ZSBjbGFz
c10sIHNlbGYpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQVNT
RVJUKCFhdXRvc2Nyb2xsVGltZXIpOwogICAgIEFTU0VSVCghYXV0b3Njcm9sbFRyaWdnZXJFdmVu
dCk7Ci0gICAgCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFz
ZV07Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSNlbHNlCi0gICAgaWYgKG1vdXNlRG93
bkV2ZW50KQotICAgICAgICBDRlJlbGVhc2UgKG1vdXNlRG93bkV2ZW50KTsKLSAgICBpZiAoa2V5
RG93bkV2ZW50KQotICAgICAgICBDRlJlbGVhc2Uoa2V5RG93bkV2ZW50KTsKICNlbmRpZgotICAg
IFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29sVGlwIHJlbGVhc2VdOwotI2lm
ICFQTEFURk9STShJT1MpCi0gICAgW2NvbXBsZXRpb25Db250cm9sbGVyIHJlbGVhc2VdOwotI2Vu
ZGlmCi0gICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0jaWYgIVBMQVRGT1JNKElPUykKKworI2lm
IFBMQVRGT1JNKE1BQykKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCiAgICAg
ICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRh
Q2xpZW50KCkpOwogCkBAIC0xMDg2LDIyICsxMDU3LDcgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0g
KHZvaWQpY2xlYXIKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFttb3VzZURvd25FdmVudCBy
ZWxlYXNlXTsKLSAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOwotI2Vsc2UKLSAgICBpZiAobW91
c2VEb3duRXZlbnQpCi0gICAgICAgIENGUmVsZWFzZShtb3VzZURvd25FdmVudCk7Ci0gICAgaWYg
KGtleURvd25FdmVudCkKLSAgICAgICAgQ0ZSZWxlYXNlKGtleURvd25FdmVudCk7Ci0jZW5kaWYK
LSAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsK
LSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFtjb21wbGV0aW9uQ29udHJvbGxlciByZWxlYXNlXTsK
LSNlbmRpZgotICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKICAg
ICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERh
dGFDbGllbnQoKSk7CiAjZW5kaWYKQEAgLTExMDksMTMgKzEwNjUsMTMgQEAgLSAodm9pZCljbGVh
cgogICAgIG1vdXNlRG93bkV2ZW50ID0gbmlsOwogICAgIGtleURvd25FdmVudCA9IG5pbDsKICAg
ICBwbHVnaW5Db250cm9sbGVyID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykKICAgICB0b29sVGlw
ID0gbmlsOwotI2lmICFQTEFURk9STShJT1MpCiAgICAgY29tcGxldGlvbkNvbnRyb2xsZXIgPSBu
aWw7CiAjZW5kaWYKICAgICBkYXRhU291cmNlID0gbmlsOwotI2lmICFQTEFURk9STShJT1MpCi0g
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IG51bGxwdHI7CiAjZW5kaWYKIAogICAgIGxh
eWVySG9zdGluZ1ZpZXcgPSBuaWw7CkBAIC0xMTMwLDI1ICsxMDg2LDkgQEAgLSAoRE9NUmFuZ2Ug
KilfZG9jdW1lbnRSYW5nZQogICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRd
IF9kb2N1bWVudFJhbmdlXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi0tIChCT09MKV9pbWFn
ZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRocwotewotICAgIE5TRW51bWVyYXRvciAqZW51
bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU1N0cmluZyAqcGF0aDsK
LSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmls
KSB7Ci0gICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFtbTlNVUkxGaWxlVHlwZU1hcHBpbmdz
IHNoYXJlZE1hcHBpbmdzXSBNSU1FVHlwZUZvckV4dGVuc2lvbjpbcGF0aCBwYXRoRXh0ZW5zaW9u
XV07Ci0gICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3Vy
Y2VNSU1FVHlwZShNSU1FVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gTk87Ci19Ci0jZW5kaWYKLQogLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRh
U291cmNlCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNlOworICAgIHJldHVybiBf
cHJpdmF0ZS0+ZGF0YVNvdXJjZS5nZXQoKTsKIH0KIAogLSAoV2ViVmlldyAqKV93ZWJWaWV3CkBA
IC0xMTYxLDU3ICsxMTAxLDQyIEBAIC0gKFdlYkZyYW1lVmlldyAqKV9mcmFtZVZpZXcKICAgICBy
ZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XTsKIH0KIAot
I2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5TQXJyYXkgKilwYXRocwogewot
ICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50OwotICAgIE5TRW51bWVyYXRvciAqZW51
bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU011dGFibGVBcnJheSAq
ZG9tTm9kZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU1N0cmluZyAq
cGF0aDsKLSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkg
IT0gbmlsKSB7CisgICAgYXV0byB0ZXh0Tm9kZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdKTsKKworICAgIGZvciAoTlNTdHJpbmcgKnBhdGggaW4gcGF0aHMpIHsKICAg
ICAgICAgLy8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93ZWJfdXNlclZpc2libGVTdHJpbmcgaXMg
YXBwcm9wcmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2lsbAogICAgICAgICAvLyBiZSBwYXN0ZWQg
YXMgdmlzaWJsZSB0ZXh0LgogICAgICAgICBOU1N0cmluZyAqdXJsID0gW1tbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOnBhdGhdIF93ZWJraXRfY2Fub25pY2FsaXplXSBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKLSAgICAgICAgW2RvbU5vZGVzIGFkZE9iamVjdDpbW1tzZWxmIF9mcmFtZV0gRE9NRG9j
dW1lbnRdIGNyZWF0ZVRleHROb2RlOiB1cmxdXTsKKyAgICAgICAgW3RleHROb2RlcyBhZGRPYmpl
Y3Q6W1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTp1cmxdXTsKICAg
ICB9Ci0gICAgCi0gICAgZnJhZ21lbnQgPSBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVu
dFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpkb21Ob2Rlc107IAotICAgIAotICAgIFtkb21Ob2RlcyBy
ZWxlYXNlXTsKLSAgICAKKworICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tz
ZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6dGV4dE5v
ZGVzLmdldCgpXTsKICAgICByZXR1cm4gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdICE9IG5pbCA/IGZy
YWdtZW50IDogbmlsOwogfQogCiArIChOU0FycmF5ICopX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRy
aWJ1dGVkU3RyaW5nQ29udmVyc2lvbgogewotICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9
IG5pbDsKLSAgICBpZiAoZWxlbWVudHMgPT0gbmlsKSB7Ci0gICAgICAgIGVsZW1lbnRzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAvLyBPbWl0IHN0eWxl
IHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUg
ZWFzaWx5IGluc2VydGVkLgotICAgICAgICAgICAgQCJzdHlsZSIsCi0gICAgICAgICAgICAvLyBP
bWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KLSAgICAgICAgICAgIEAieG1sIiwg
Ci0gICAgICAgICAgICAvLyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNv
bnZlcnRlZCB0byBhIGZyYWdtZW50IGFueXdheS4KLSAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAi
aHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCi0gICAgICAgICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQg
dGFncy4KLSAgICAgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJk
aXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlrZSIsIEAidSIsCi0gICAgICAgICAg
ICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBm
cmFnbWVudC4KLSAgICAgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKLSAgICAgICAgQ0ZSZXRhaW4o
ZWxlbWVudHMpOwotICAgIH0KKyAgICBzdGF0aWMgTlNBcnJheSAqZWxlbWVudHMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgLy8gT21pdCBzdHlsZSBzaW5jZSB3
ZSB3YW50IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQgY2FuIGJlIGVhc2lseSBp
bnNlcnRlZC4KKyAgICAgICAgQCJzdHlsZSIsCisgICAgICAgIC8vIE9taXQgeG1sIHNvIHRoZSBy
ZXN1bHQgaXMgbm90IFhIVE1MLgorICAgICAgICBAInhtbCIsCisgICAgICAgIC8vIE9taXQgdGFn
cyB0aGF0IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21lbnQgYW55
d2F5LgorICAgICAgICBAImRvY3R5cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJvZHkiLAorICAg
ICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4KKyAgICAgICAgQCJhcHBsZXQiLCBAImJhc2Vm
b250IiwgQCJjZW50ZXIiLCBAImRpciIsIEAiZm9udCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtl
IiwgQCJ1IiwKKyAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50cyBh
cmUgcGFydCBvZiB0aGUgZnJhZ21lbnQuCisgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKICAgICBy
ZXR1cm4gZWxlbWVudHM7CiB9CiAKLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZl
UGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQorc3RhdGljIE5TVVJMICp1bmlxdWVVUkxXaXRo
UmVsYXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCiB7Ci0gICAgQ0ZVVUlEUmVmIFVV
SURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcg
KlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVA
Oi8vJUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFy
dF1dOwotICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKLQotICAgIHJldHVybiBVUkw7CisgICAg
cmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgY3JlYXRlVVVJRFN0cmluZygpLCBy
ZWxhdGl2ZVBhcnRdXTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKQEAgLTEzMDEs
NDAgKzEyMjYsMzIgQEAgLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKICAgICAKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCiAgICAgICAgIHJldHVybiBbW3Bhc3RlYm9hcmQgc3Ry
aW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9u
aWNhbE1hcHBpbmddOwotICAgIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZyA9IG5pbDsKLSAgICBOU1N0cmluZyAqc3RyaW5nOwogCisgICAgUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZzsKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKQotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAgICAg
IGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9j
dW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKICAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwg
JiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJp
YnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bh
c3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6
TlVMTF07Ci0gICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgIT0gbmlsKSB7Ci0gICAgICAgIHN0cmlu
ZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNvcHldOwotICAgICAgICBbYXR0cmlidXRl
ZFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIFtzdHJpbmcgYXV0b3JlbGVhc2VdOwot
ICAgIH0KLSAgICAKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5T
UlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAgICBpZiAoYXR0cmli
dXRlZFN0cmluZykKKyAgICAgICAgcmV0dXJuIFtbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBj
b3B5XSBhdXRvcmVsZWFzZV07CisKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmls
ZW5hbWVzUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgc3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3Bl
cnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSBjb21wb25lbnRzSm9pbmVkQnlT
dHJpbmc6QCJcbiJdOwotICAgICAgICBpZiAoc3RyaW5nICE9IG5pbCkKKyAgICAgICAgaWYgKE5T
U3RyaW5nICpzdHJpbmcgPSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl0pCiAgICAgICAg
ICAgICByZXR1cm4gc3RyaW5nOwogICAgIH0KLSAgICAKLSAgICBOU1VSTCAqVVJMOwotICAgIAot
ICAgIGlmICgoVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSkgewot
ICAgICAgICBzdHJpbmcgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgICAgICBp
ZiAoW3N0cmluZyBsZW5ndGhdID4gMCkKKworICAgIGlmIChOU1VSTCAqVVJMID0gW05TVVJMIFVS
TEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSB7CisgICAgICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgICAgICBpZiAoW3N0cmluZyBsZW5n
dGhdKQogICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICB9Ci0gICAgCisKICAgICByZXR1
cm4gbmlsOwogfQogCiAtICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0CiB7Ci0gICAg
V2ViVmlldyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKKyAgICBhdXRvIHdl
YlZpZXcgPSByZXRhaW5QdHIoW3NlbGYgX3dlYlZpZXddKTsKICAgICBbd2ViVmlldyBfc2V0SW5z
ZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKIAogICAgIERPTVJhbmdlICpyYW5nZSA9IFtz
ZWxmIF9zZWxlY3RlZFJhbmdlXTsKQEAgLTEzNDUsMjAgKzEyNjIsMTggQEAgLSAodm9pZClfcGFz
dGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4
dDooQk9PTClhbGwKICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5wYXN0ZUFzRnJhZ21lbnQo
KmNvcmUoZnJhZ21lbnQpLCBbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFz
dGVib2FyZF0sIGZhbHNlKTsKIAogICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJk
Om5pbF07Ci0gICAgW3dlYlZpZXcgcmVsZWFzZV07CiB9CiAKIC0gKHZvaWQpX3Bhc3RlQXNQbGFp
blRleHRXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCAKIHsgCi0gICAg
V2ViVmlldyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsgCi0gICAgW3dlYlZp
ZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07IAorICAgIGF1dG8gd2ViVmll
dyA9IHJldGFpblB0cihbc2VsZiBfd2ViVmlld10pOworICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRp
b25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwogCiAgICAgTlNTdHJpbmcgKnRleHQgPSBbc2VsZiBf
cGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07IAogICAgIGlmIChbc2VsZiBfc2hv
dWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2Vy
dEFjdGlvblBhc3RlZF0pIAogICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9j
YW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXV07IAogCiAgICAgW3dlYlZp
ZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsgCi0gICAgW3dlYlZpZXcgcmVsZWFzZV07
CiB9CiAKIC0gKHZvaWQpX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZl
bnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudApAQCAtMTM2OSw3ICsxMjg0LDcgQEAgLSAo
dm9pZClfcG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVu
dCAqKWZsYWdzQ2hhbmdlZEV2ZW4KICAgICBbc2VsZiBtb3VzZU1vdmVkOmZha2VFdmVudF07CiB9
CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBzdXBwb3J0IE1hYyBPUyBYIHNlcnZpY2Vz
LgorLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbWFjT1Mgc2VydmljZXMuCiAt
IChCT09MKXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCAKIHsgCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7IApA
QCAtMTM4NiwxNSArMTMwMSwxNSBAQCAtICh2b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnMK
IHsKICAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90
aWZpY2F0aW9ucykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgTlNWaWV3ICpzdXBlcnZp
ZXcgPSBbc2VsZiBzdXBlcnZpZXddOwogICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5k
b3ddKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAq
bm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
OwogICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmll
d0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwogICAgIFtub3Rp
ZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0RpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKKwogICAgIF9wcml2YXRl
LT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gZmFsc2U7CiB9CiAKQEAgLTE0MDIs
MjEgKzEzMTcsMjAgQEAgLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCiB7CiAgICAgaWYg
KCFfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAgICAgaWYg
KCF3aW5kb3cpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07CiAgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAgICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25L
ZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlv
biBvYmplY3Q6d2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxPcmRlck9mZlNjcmVlbk5vdGlmaWNhdGlvbiBvYmplY3Q6
d2luZG93XTsKICAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICAKKwog
ICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFsc2U7CiB9Ci0j
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAo
Qk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVu
dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmll
d0luc2VydEFjdGlvbilhY3Rpb24KIHsKQEAgLTE0NDQsMTMgKzEzNTgsOCBAQCAtIChET01SYW5n
ZSAqKV9zZWxlY3RlZFJhbmdlCiAgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOwogfQogCi0tIChC
T09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5lZGl0b3IoKS5zaG91bGREZWxldGVSYW5nZShjb3JlKHJhbmdlKSk7Ci19Cisj
aWYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TVmlldyAqKV9oaXRW
aWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIC8vIFVzdWFsbHksIHdlIGhhY2sg
QUsncyBoaXRUZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0b3Btb3N0IFdl
YkhUTUxWaWV3LiAgCkBAIC0xNDYwLDkgKzEzNjksNyBAQCAtIChOU1ZpZXcgKilfaGl0Vmlld0Zv
ckV2ZW50OihOU0V2ZW50ICopZXZlbnQKICAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBOTzsgICAg
CiAgICAgcmV0dXJuIGhpdFZpZXc7CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAt
ICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBl
cyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwogewogICAgIC8v
IFB1dCBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgpAQCAtMTQ3Miw3ICsxMzc5LDcgQEAgLSAodm9p
ZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9Q
YXN0ZWJvYXJkOihOU1Bhc3QKICAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihO
U0RhdGEgKilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwogICAgICAg
ICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0
aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4KICAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5n
ID09IG5pbCkgewpAQCAtMTQ4OSw0MiArMTM5NiwzMiBAQCAtICh2b2lkKV93cml0ZVNlbGVjdGlv
bldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFz
dAogICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRy
aWJ1dGVzOkB7IH1dOwogICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9yVHlw
ZTpOU1JURlBib2FyZFR5cGVdOwogICAgIH0KLSAgICAKKwogICAgIC8vIFB1dCBwbGFpbiBzdHJp
bmcgb24gdGhlIHBhc3RlYm9hcmQuCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0
cmluZ1Bib2FyZFR5cGVdKSB7CiAgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQg
c3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dz
ZXJzIGRvIGl0LAogICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8g
dGhpcyBhbnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93LgotICAgICAgICBOU011
dGFibGVTdHJpbmcgKnMgPSBbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIG11dGFibGVDb3B5XTsKLSAg
ICAgICAgY29uc3QgdW5pY2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKLSAg
ICAgICAgTlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aENoYXJhY3RlcnM6Jk5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgbGVuZ3RoOjFdOwotICAg
ICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpOb25CcmVha2luZ1NwYWNlU3RyaW5n
IHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3Ro
XSldOwotICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6cyBmb3JUeXBlOk5TU3RyaW5nUGJv
YXJkVHlwZV07Ci0gICAgICAgIFtzIHJlbGVhc2VdOworICAgICAgICBhdXRvIHN0cmluZyA9IGFk
b3B0TlMoW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBtdXRhYmxlQ29weV0pOworICAgICAgICBjb25z
dCB1bmljaGFyIG5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAgICAgICBOU1N0
cmluZyAqbm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFj
dGVyczombm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07CisgICAgICAgIFtzdHJp
bmcgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6bm9uQnJlYWtpbmdTcGFjZVN0cmluZyB3aXRo
U3RyaW5nOkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3Ro
XSldOworICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6c3RyaW5nLmdldCgpIGZvclR5cGU6
TlNTdHJpbmdQYm9hcmRUeXBlXTsKICAgICB9Ci0gICAgCi0gICAgaWYgKFtzZWxmIF9jYW5TbWFy
dENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9h
cmRUeXBlXSkgeworCisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5
cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXSkKICAgICAgICAgW3Bh
c3RlYm9hcmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Ci0g
ICAgfQogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQot
LSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAotI2Vsc2UKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJFdmVu
dCAqKWV2ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUxlZnRN
b3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlUmlnaHRNb3VzZURvd24gfHwg
W2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlT3RoZXJNb3VzZURvd24pOwogI2Vsc2UKICAgICBB
U1NFUlQoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRNb3VzZURvd24pOwogI2VuZGlm
CiAKLSAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBbZXZlbnQgcmV0YWluXTsKLSAgICBbX3ByaXZhdGUtPm1vdXNlRG93bkV2
ZW50IHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9IGV2ZW50OwogfQog
CkBAIC0xNTQyLDc2ICsxNDM5LDQ2IEBAIC0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKICAgICByZXR1
cm4gc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykK
LS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0
UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9y
aWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlv
OjAgYWRqdXN0Vmlld1NpemU6Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2Ny
ZWVuUGFnaW5hdGlvbk1vZGVdXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRl
c2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQot
ICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFu
dFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRN
TFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFBy
aW50aW5nOllFUyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmln
aW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzow
IGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVl
blBhZ2luYXRpb25Nb2RlXV07CisjaWYgUExBVEZPUk0oTUFDKQogCi0gICAgW2Rlc2NlbmRhbnRX
ZWJIVE1MVmlld3MgcmVsZWFzZV07CistICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJz
aXZlOihCT09MKXByaW50aW5nIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7
CisgICAgYXV0byBhcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOnNlbGYsIG5pbF0pOworICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGVudFdlYkhU
TUxWaWV3c1RvQXJyYXk6YXJyYXkuZ2V0KCldOworICAgIGZvciAoV2ViSFRNTFZpZXcgKnZpZXcg
aW4gYXJyYXkuZ2V0KCkpCisgICAgICAgIFt2aWV3IF9zZXRQcmludGluZzpwcmludGluZyBtaW5p
bXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDow
IG9yaWdpbmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXpl
OmFkanVzdFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBh
Z2luYXRpb25Nb2RlXV07Cit9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1l
cmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgorLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9k
ZVJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOllF
UyBhZGp1c3RWaWV3U2l6ZTpOT107CiB9CiAKIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9k
ZVJlY3Vyc2l2ZQogewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2lj
YWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFn
ZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRl
U2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5k
aWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRX
ZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWdu
ZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxW
aWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxX
aWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhl
aWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2Ny
ZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSAgICBbZGVz
Y2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJp
dmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCisgICAgW3NlbGYgX3dlYl9z
ZXRQcmludGluZ01vZGVSZWN1cnNpdmU6Tk8gYWRqdXN0Vmlld1NpemU6Tk9dOwogfQogCiAtICh2
b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKIHsKLSAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNh
bEhlaWdodDowIG9yaWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11
bVNocmlua1JhdGlvOjAgYWRqdXN0Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpb
c2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAg
X3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0
YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07CisgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU6WUVTIGFk
anVzdFZpZXdTaXplOllFU107Cit9CiAKLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJI
VE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
Y291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6
WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFsUGFn
ZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRqdXN0
Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2lu
YXRpb25Nb2RlXV07CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLSAgICBbZGVz
Y2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luU3Vi
dmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3QK
K3sKKyAgICAvLyBDb3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmlld3NdIHJldHVybnMg
dGhlIHZpZXcncyBtdXRhYmxlIGludGVybmFsIGFycmF5LAorICAgIC8vIGFuZCB3ZSBtdXN0IGF2
b2lkIG11dGF0aW5nIHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4KKyAgICBmb3IgKE5T
VmlldyAqdmlldyBpbiBhZG9wdE5TKFtbc2VsZiBzdWJ2aWV3c10gY29weV0pLmdldCgpKSB7Cisg
ICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
IGNsYXNzXV0pCisgICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0
aE9iamVjdDpvYmplY3RdOworICAgIH0KK30KIAotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0
ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwogI2VuZGlmCi19Ci0jZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIAogQGVuZAogCkBAIC0xNjQzLDE1ICsxNTEwLDE3IEBAICsgKE5TQXJyYXkgKil1
bnN1cHBvcnRlZFRleHRNSU1FVHlwZXMKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKKwogLSAodm9p
ZCltb3VzZU1vdmVkOihXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoZnJhbWUpCisgICAgaWYgKGF1dG8qIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNl
TW92ZWQoZXZlbnQpOwogfQorCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQorCiArICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilm
bGFnc0NoYW5nZWRFdmVudAogewogICAgIC8vIFRoaXMgaXMgb2Jzb2xldGUgU1BJIG5lZWRlZCBv
bmx5IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkKQEAgLTE2ODEsNyArMTU1MCw4IEBAIC0g
KHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQKIAogICAgIFtzZWxmIF91cGRhdGVN
b3VzZW92ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hh
bmdlZAogewpAQCAtMTY5OCw3ICsxNTY4LDcgQEAgLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5n
ZWQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIAotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVy
IGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAjZW5kaWYKICAgICAgICAgCkBA
IC0xNzA5LDcgKzE1NzksNyBAQCAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAogCiAtICh2
b2lkKV9zZXRBc2lkZVN1YnZpZXdzCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CiAgICAgQVNT
RVJUKF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID09IG5pbCk7CiAgICAgX3ByaXZhdGUtPnNhdmVk
U3Vidmlld3MgPSBfc3Vidmlld3M7CkBAIC0xNzI1LDcgKzE1OTUsNyBAQCAtICh2b2lkKV9zZXRB
c2lkZVN1YnZpZXdzCiAgCiAgLSAodm9pZClfcmVzdG9yZVN1YnZpZXdzCiAgewotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmll
d3NTZXRBc2lkZSk7CiAgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CiAgICAg
ICAgIFtfc3Vidmlld3MgcmVsZWFzZV07CkBAIC0xNzM5LDIwICsxNjA5LDEwIEBAIC0gKHZvaWQp
X3NldEFzaWRlU3Vidmlld3MKICNlbmRpZgogfQogCi0jaWZuZGVmIE5ERUJVRwotCi0tICh2b2lk
KWRpZEFkZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmVu
dW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVz
IHdhcyBhZGRlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50
aW5nIG1vZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWlnaHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNl
aXZpbmcgbGF5b3V0LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19
Ci0jZW5kaWYKLQotCiAtICh2b2lkKXZpZXdXaWxsRHJhdwogewotICAgIC8vIE9uIHdpbmRvdyBj
bG9zZSB3ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhlbiBo
aXQgYW4gYXNzZXJ0IGluIF90b3BIVE1MVmlldwotICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBkYXRh
U291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMg
Y2FuIGJlIHJlbW92ZWQKKyAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ugd2lsbCBiZSBjYWxsZWQg
d2hlbiB0aGUgZGF0YSBzb3VyY2UgaXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhU
TUxWaWV3CisgICAgLy8gU28gY2hlY2sgaWYgdGhlIGRhdGEgc291cmNlIGlzIG5pbCBiZWZvcmUg
Y2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJlIHJlbW92ZWQKICAgICAv
LyBvbmNlIHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmlldyBpcyBmaXhlZC4KICAgICBpZiAoX3By
aXZhdGUtPmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9wSFRNTFZpZXddKSB7CiAgICAgICAgIFtz
ZWxmIF93ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZV07CkBAIC0xNzYy
LDggKzE2MjIsOCBAQCAtICh2b2lkKXZpZXdXaWxsRHJhdwogICAgIFtzdXBlciB2aWV3V2lsbERy
YXddOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC8vIERv
bid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4K
IC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5T
UmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxl
UmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldwog
ewpAQCAtMTg4MSwxOSArMTc0MSwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJz
ZVggZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdAogICAgIGlm
IChkaWRTZXRBc2lkZVN1YnZpZXdzKQogICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsK
IH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCi0tIChCT09MKV9pbnNpZGVBbm90aGVySFRN
TFZpZXcKLXsKLSAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRNTFZpZXddOwotfQogCi0j
aWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBCT09MIGlzUXVpY2tMb29rRXZlbnQoTlNFdmVudCAq
ZXZlbnQpCiB7CiAgICAgY29uc3QgaW50IGtDR1NFdmVudFN5c3RlbVN1YnR5cGVIb3RLZXlDb21i
aW5hdGlvblJlbGVhc2VkID0gOTsKICAgICByZXR1cm4gW2V2ZW50IHR5cGVdID09IE5TRXZlbnRU
eXBlU3lzdGVtRGVmaW5lZCAmJiBbZXZlbnQgc3VidHlwZV0gPT0ga0NHU0V2ZW50U3lzdGVtU3Vi
dHlwZUhvdEtleUNvbWJpbmF0aW9uUmVsZWFzZWQgJiYgW2V2ZW50IGRhdGExXSA9PSAnbGt1cCc7
CiB9CisKICNlbmRpZgogCiAtIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50CkBAIC0x
OTYwLDcgKzE4MTQsOCBAQCAtICh2b2lkKV9jbGVhckxhc3RIaXRWaWV3SWZTZWxmCiAgICAgICAg
IGxhc3RIaXRWaWV3ID0gbmlsOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCisKIC0gKE5TVHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJl
Y3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJP
T0wpYXNzdW1lSW5zaWRlCiB7CiAgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25l
ciA9PSBuaWwpOwpAQCAtMjA1MiwyMSArMTkwNywxNiBAQCAtICh2b2lkKV9zZW5kVG9vbFRpcE1v
dXNlRW50ZXJlZAogICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRh
dGFdOwogICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VF
dmVudF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogLSAodm9pZClfc2V0VG9vbFRp
cDooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5n
ICp0b29sVGlwID0gW3N0cmluZyBsZW5ndGhdID09IDAgPyBuaWwgOiBzdHJpbmc7Ci0gICAgTlNT
dHJpbmcgKm9sZFRvb2xUaXAgPSBfcHJpdmF0ZS0+dG9vbFRpcDsKLSAgICBpZiAoKHRvb2xUaXAg
PT0gbmlsIHx8IG9sZFRvb2xUaXAgPT0gbmlsKSA/IHRvb2xUaXAgPT0gb2xkVG9vbFRpcCA6IFt0
b29sVGlwIGlzRXF1YWxUb1N0cmluZzpvbGRUb29sVGlwXSkgeworICAgIE5TU3RyaW5nICpvbGRU
b29sVGlwID0gX3ByaXZhdGUtPnRvb2xUaXAuZ2V0KCk7CisgICAgaWYgKHRvb2xUaXAgPT0gb2xk
VG9vbFRpcCB8fCBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRpcF0pCiAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9sZFRvb2xUaXApIHsKKyAgICBpZiAob2xkVG9vbFRp
cCkKICAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFeGl0ZWRdOwotICAgICAgICBbb2xk
VG9vbFRpcCByZWxlYXNlXTsKLSAgICB9Ci0gICAgX3ByaXZhdGUtPnRvb2xUaXAgPSBbdG9vbFRp
cCBjb3B5XTsKKyAgICBfcHJpdmF0ZS0+dG9vbFRpcCA9IGFkb3B0TlMoW3Rvb2xUaXAgY29weV0p
OwogICAgIGlmICh0b29sVGlwKSB7CiAgICAgICAgIC8vIFNlZSByYWRhciAzNTAwMjE3IGZvciB3
aHkgd2UgcmVtb3ZlIGFsbCB0b29sdGlwcyByYXRoZXIgdGhhbiBqdXN0IHRoZSBzaW5nbGUgb25l
IHdlIGNyZWF0ZWQuCiAgICAgICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKQEAgLTIwNzQs
MTAgKzE5MjQsOCBAQCAtICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZwogICAg
ICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVjdDp3aWRl
T3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKICAgICAgICAgW3NlbGYgX3NlbmRU
b29sVGlwTW91c2VFbnRlcmVkXTsKICAgICB9Ci0jZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJ
T1MpCiAtIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nRm9yVG9vbFRpcDoo
TlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2VyRGF0YToodm9pZCAqKWRh
dGEKIHsKICAgICByZXR1cm4gW1tfcHJpdmF0ZS0+dG9vbFRpcCBjb3B5XSBhdXRvcmVsZWFzZV07
CkBAIC0yMTkxLDE5ICsyMDM5LDE4IEBAICsgKE5TQXJyYXkgKilfc2VsZWN0aW9uUGFzdGVib2Fy
ZFR5cGVzCiAKIC0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAogewotICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBd
OworICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOm51bGxwdHJdOwogfQog
CiAtICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgcHJvdmlkZURh
dGFGb3JUeXBlOihOU1N0cmluZyAqKXR5cGUKIHsKICAgICBpZiAoW3R5cGUgaXNFcXVhbDpOU1JU
RkRQYm9hcmRUeXBlXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYkFy
Y2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJB
cmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJj
aGl2ZVBib2FyZFR5cGVdXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVByb21pc2Vk
UlRGREZyb21BcmNoaXZlOmFyY2hpdmUgY29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQgdHlwZXNd
IGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdXTsKLSAgICAgICAgW2FyY2hpdmUgcmVs
ZWFzZV07Ci0gICAgfSBlbHNlIGlmIChbdHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdICYm
IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgewotICAgICAgICBpZiAoSW1hZ2Uq
IGltYWdlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgpKQorICAg
ICAgICBhdXRvIGFyY2hpdmUgPSBhZG9wdE5TKFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhE
YXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV0pOworICAg
ICAgICBbcGFzdGVib2FyZCBfd2ViX3dyaXRlUHJvbWlzZWRSVEZERnJvbUFyY2hpdmU6YXJjaGl2
ZS5nZXQoKSBjb250YWluc0ltYWdlOltbcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6
TlNUSUZGUGJvYXJkVHlwZV1dOworICAgIH0gZWxzZSBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQ
Ym9hcmRUeXBlXSAmJiBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGltYWdlID0gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlLT5pbWFnZSgpKQogICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICop
aW1hZ2UtPnRpZmZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0g
ICAgICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOworICAgICAgICBb
c2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTpudWxscHRyXTsKICAgICB9CiB9CiAK
QEAgLTIyMTEsMTUgKzIwNTgsMTIgQEAgLSAodm9pZClfaGFuZGxlQXV0b3Njcm9sbEZvck1vdXNl
RHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50CiB7IAogICAgIFtzZWxmIGF1dG9zY3JvbGw6ZXZlbnRd
OyAKICAgICBbc2VsZiBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6ZXZlbnRdOyAKLX0gCi0jZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKLQotLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250
cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyOwogfQogCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAjaWYgUExBVEZPUk0oSU9TKQorCiAvLyBXQUtWaWV3
IG92ZXJyaWRlLgogLSAodm9pZClsYXlvdXRJZk5lZWRlZAogewpAQCAtMjI0Miw3ICsyMDg2LDgg
QEAgLSAodm9pZClzZXRTY2FsZTooZmxvYXQpc2NhbGUKIAogI2VuZGlmCiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClfbGF5b3V0Rm9yUHJpbnRpbmcK
IHsKICAgICAvLyBTZXQgcHJpbnRpbmcgbW9kZSB0ZW1wb3JhcmlseSBzbyB3ZSBjYW4gYWRqdXN0
IHRoZSBzaXplIG9mIHRoZSB2aWV3LiBUaGlzIHdpbGwgYWxsb3cKQEAgLTIyNTIsOSArMjA5Nyw3
IEBAIC0gKHZvaWQpX2xheW91dEZvclByaW50aW5nCiAgICAgW3NlbGYgX3dlYl9zZXRQcmludGlu
Z01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZV07CiAgICAgW3NlbGYgX3dlYl9jbGVhclBy
aW50aW5nTW9kZVJlY3Vyc2l2ZV07CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAt
ICh2b2lkKV9zbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBs
YWNpbmdSYW5nZTooRE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3Ry
aW5nICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmcK
IHsKICAgICBpZiAoIXBhc3RlU3RyaW5nIHx8ICFyYW5nZVRvUmVwbGFjZSB8fCAhW1tzZWxmIF93
ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdKSB7CkBAIC0yMjczLDE3ICsyMTE2LDcg
QEAgLSAoQk9PTClfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAq
KXBhc3RlYm9hcmQKICAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0
ZUVuYWJsZWRdICYmIFtbcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21hcnRQ
YXN0ZVBib2FyZFR5cGVdOwogfQogCi0tICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjooTlNF
dmVudCAqKXRyaWdnZXJFdmVudAotI2Vsc2UKLS0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVy
OiAoV2ViRXZlbnQgKil0cmlnZ2VyRXZlbnQKICNlbmRpZgotewotICAgIGlmIChfcHJpdmF0ZS0+
YXV0b3Njcm9sbFRpbWVyID09IG5pbCkgewotICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRp
bWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDpBVVRPU0NST0xM
X0lOVEVSVkFMCi0gICAgICAgICAgICB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2F1
dG9zY3JvbGwpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0YWluXTsKLSAgICAgICAgX3By
aXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBbdHJpZ2dlckV2ZW50IHJldGFpbl07Ci0g
ICAgfQotfQogCiAvLyBGSVhNRTogX3NlbGVjdGlvblJlY3QgaXMgZGVwcmVjYXRlZCBpbiBmYXZv
ciBvZiBzZWxlY3Rpb25SZWN0LCB3aGljaCBpcyBpbiBwcm90b2NvbCBXZWJEb2N1bWVudFNlbGVj
dGlvbi4KIC8vIFdlIGNhbid0IHJlbW92ZSB0aGlzIHlldCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4g
dXNlIGJ5IE1haWwuCkBAIC0yMjkyLDM2ICsyMTI1LDE4IEBAIC0gKE5TUmVjdClfc2VsZWN0aW9u
UmVjdAogICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0XTsKIH0KIAotLSAodm9pZClfc3Rv
cEF1dG9zY3JvbGxUaW1lcgotewotICAgIE5TVGltZXIgKnRpbWVyID0gX3ByaXZhdGUtPmF1dG9z
Y3JvbGxUaW1lcjsKLSAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gbmlsOwotI2lmICFQ
TEFURk9STShJT1MpCi0gICAgW19wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50IHJlbGVh
c2VdOwotI2Vsc2UKLSAgICBpZiAoX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQpCi0g
ICAgICAgIENGUmVsZWFzZSAoX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQpOwotI2Vu
ZGlmCi0gICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7Ci0gICAgW3Rp
bWVyIGludmFsaWRhdGVdOwotICAgIFt0aW1lciByZWxlYXNlXTsKLX0KKyNpZiBQTEFURk9STShN
QUMpCiAKIC0gKHZvaWQpX2F1dG9zY3JvbGwKIHsKICAgICAvLyBHdWFyYW50ZWUgdGhhdCB0aGUg
YXV0b3Njcm9sbCB0aW1lciBpcyBpbnZhbGlkYXRlZCwgZXZlbiBpZiB3ZSBkb24ndCByZWNlaXZl
CiAgICAgLy8gYSBtb3VzZSB1cCBldmVudC4KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIEJPT0wg
aXNTdGlsbERvd24gPSBDR0V2ZW50U291cmNlQnV0dG9uU3RhdGUoa0NHRXZlbnRTb3VyY2VTdGF0
ZUNvbWJpbmVkU2Vzc2lvblN0YXRlLCBrQ0dNb3VzZUJ1dHRvbkxlZnQpOyAgIAotI2Vsc2UKLSAg
ICBCT09MIGlzU3RpbGxEb3duID0gTk87Ci0jZW5kaWYKKyAgICBCT09MIGlzU3RpbGxEb3duID0g
Q0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNlc3Np
b25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsKICAgICBpZiAoIWlzU3RpbGxEb3duKXsKICAg
ICAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKICAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVu
dCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVMZWZ0TW91c2VEcmFnZ2VkCiAgICAgICAg
IGxvY2F0aW9uOltbc2VsZiB3aW5kb3ddCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaApA
QCAtMjMzNSw5ICsyMTUwLDEwIEBAIC0gKHZvaWQpX2F1dG9zY3JvbGwKICAgICAgICAgZXZlbnRO
dW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CiAKICAgICBbc2VsZiBtb3VzZURyYWdn
ZWQ6ZmFrZUV2ZW50XTsKLSNlbmRpZgogfQogCisjZW5kaWYKKwogLSAoQk9PTClfY2FuRWRpdAog
ewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwpAQCAtMjM3OSw2
ICsyMTk1LDggQEAgLSAoQk9PTClfaXNFZGl0YWJsZQogICAgIHJldHVybiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwog
fQogCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKV90cmFuc3BhcmVudEJhY2tncm91bmQK
IHsKICAgICByZXR1cm4gX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZDsKQEAgLTIzODks
NyArMjIwNyw2IEBAIC0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClmCiAg
ICAgX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7CiB9CiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQogLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCiB7CiAgICAgaWYg
KCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKQEAgLTI0MTEsNiArMjIyOCw3IEBAIC0gKE5TUmVjdClf
c2VsZWN0aW9uRHJhZ2dpbmdSZWN0CiAgICAgLy8gTWFpbCBjdXJyZW50bHkgY2FsbHMgdGhpcyBt
ZXRob2QuIFdlIGNhbiBlbGltaW5hdGUgaXQgd2hlbiBNYWlsIG5vIGxvbmdlciBjYWxscyBpdC4K
ICAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07CiB9CisKICNlbmRpZgogCiAtIChET01O
b2RlICopX2luc2VydE9yZGVyZWRMaXN0CkBAIC0yNDYyLDcgKzIyODAsOCBAQCAtICh2b2lkKV9k
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAogICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmRl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKIHsKICAgICBBU1NFUlQoW3NlbGYgX2hhc1NlbGVjdGlv
bl0pOwpAQCAtMjQ3MCwxNyArMjI4OSwxNyBAQCAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogCiAgICAgLy8gRG9uJ3Qgd3JpdGUg
UlRGRCB0byB0aGUgcGFzdGVib2FyZCB3aGVuIHRoZSBjb3BpZWQgYXR0cmlidXRlZCBzdHJpbmcg
aGFzIG5vIGF0dGFjaG1lbnRzLgogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107Ci0gICAgTlNNdXRhYmxlQXJy
YXkgKm11dGFibGVUeXBlcyA9IG5pbDsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG11
dGFibGVUeXBlczsKICAgICBpZiAoIVthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVu
dHNdKSB7Ci0gICAgICAgIG11dGFibGVUeXBlcyA9IFt0eXBlcyBtdXRhYmxlQ29weV07CisgICAg
ICAgIG11dGFibGVUeXBlcyA9IGFkb3B0TlMoW3R5cGVzIG11dGFibGVDb3B5XSk7CiAgICAgICAg
IFttdXRhYmxlVHlwZXMgcmVtb3ZlT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdOwotICAgICAgICB0
eXBlcyA9IG11dGFibGVUeXBlczsKKyAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXMuZ2V0KCk7
CiAgICAgfQogCiAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxm
IF90b3BIVE1MVmlld11dOwogICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
VHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmlu
ZzphdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICBbbXV0YWJsZVR5cGVzIHJlbGVhc2VdOwogfQorCiAj
ZW5kaWYKIAogLSAodm9pZCljbG9zZQpAQCAtMjQ5MiwxNCArMjMxMSwxNyBAQCAtICh2b2lkKWNs
b3NlCiAKICAgICBfcHJpdmF0ZS0+Y2xvc2VkID0gWUVTOwogCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIFtzZWxmIF9jbGVhckxhc3RIaXRWaWV3SWZTZWxmXTsKLSNpZiAhUExBVEZPUk0oSU9TKQor
CiAgICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2VydmVyc107CiAgICAgW3NlbGYgX3JlbW92ZVN1
cGVydmlld09ic2VydmVyc107CiAjZW5kaWYKKwogICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJv
bGxlciBkZXN0cm95QWxsUGx1Z2luc107CiAgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVy
IHNldERhdGFTb3VyY2U6bmlsXTsKLSNpZiAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0o
TUFDKQogICAgIC8vIHJlbW92ZSB0b29sdGlwcyBiZWZvcmUgY2xlYXJpbmcgX3ByaXZhdGUgc28g
cmVtb3ZlVHJhY2tpbmdSZWN0OiB3aWxsIHdvcmsgY29ycmVjdGx5CiAgICAgW3NlbGYgcmVtb3Zl
QWxsVG9vbFRpcHNdOwogCkBAIC0yNTEyLDMzICsyMzM0LDMyIEBAIC0gKHZvaWQpY2xvc2UKICAg
ICBbX3ByaXZhdGUgY2xlYXJdOwogfQogCi0tIChCT09MKV9oYXNIVE1MRG9jdW1lbnQKKyNpZiBQ
TEFURk9STShNQUMpCisKKy0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfd2ViX2RvY3VtZW50RnJh
Z21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBwYXN0ZWJvYXJk
VHlwZTooTlNTdHJpbmcgKilwYXN0ZWJvYXJkVHlwZSBpbWFnZU1JTUVUeXBlOihOU1N0cmluZyAq
KWltYWdlTUlNRVR5cGUKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICByZXR1cm4gZG9jdW1l
bnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCk7CisgICAgYXV0byBmaWxlbmFtZSA9IFtp
bWFnZU1JTUVUeXBlIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIi8iIHdp
dGhTdHJpbmc6QCIuIl07CisgICAgYXV0byByZXNvdXJjZSA9IGFkb3B0TlMoW1tXZWJSZXNvdXJj
ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOnBhc3RlYm9hcmRU
eXBlXQorICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChmaWxlbmFtZSkgTUlN
RVR5cGU6aW1hZ2VNSU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOm5pbCBmcmFtZU5hbWU6bmlsXSk7
CisgICAgcmV0dXJuIFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1h
Z2VSZXNvdXJjZTpyZXNvdXJjZS5nZXQoKV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQogLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyAqKXBib2FyZFR5cGUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OihET01SYW5n
ZSAqKWNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlcwogewotICAgIGlmIChwYm9hcmRU
eXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdlYkFyY2hpdmUgKmFyY2hp
dmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFs
VG9TdHJpbmc6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIGF1dG8gYXJjaGl2ZSA9
IGFkb3B0TlMoW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0
YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdXSk7CiAgICAgICAgIGlmIChzdWJyZXNvdXJj
ZXMpCiAgICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gW2FyY2hpdmUgc3VicmVzb3VyY2VzXTsK
LSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3Vy
Y2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6YXJjaGl2ZV07Ci0gICAgICAgIFthcmNo
aXZlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgIHJldHVybiBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6YXJjaGl2ZS5n
ZXQoKV07CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSkKKworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNGaWxlbmFtZXNQYm9h
cmRUeXBlXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50V2l0aFBhdGhz
OltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXV07
Ci0gICAgICAgIAotICAgIGlmIChwYm9hcmRUeXBlID09IE5TSFRNTFBib2FyZFR5cGUpIHsKKwor
ICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNIVE1MUGJvYXJkVHlwZV0pIHsK
ICAgICAgICAgTlNTdHJpbmcgKkhUTUxTdHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBl
Ok5TSFRNTFBib2FyZFR5cGVdOwogICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIE1p
Y3Jvc29mdCdzIEhUTUwgcGFzdGVib2FyZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgogICAgICAg
ICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJlZml4OkAiVmVyc2lvbjoiXSkgewpAQCAtMjU0OCw3OSAr
MjM2OSw1MCBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9t
UGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVibwogICAgICAgICB9CiAgICAgICAgIGlm
IChbSFRNTFN0cmluZyBsZW5ndGhdID09IDApCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAg
ICAgICAKICAgICAgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0
aE1hcmt1cFN0cmluZzpIVE1MU3RyaW5nIGJhc2VVUkxTdHJpbmc6bmlsXTsKICAgICB9CiAKLSAg
ICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURlBib2FyZFR5cGUgfHwgcGJvYXJkVHlwZSA9PSBOU1JU
RkRQYm9hcmRUeXBlKSB7Ci0gICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gbmls
OwotICAgICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKQotICAgICAgICAg
ICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFz
dGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6
TlVMTF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQotICAgICAgICAgICAgc3RyaW5nID0g
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFG
b3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotICAgICAg
ICBpZiAoc3RyaW5nID09IG5pbCkKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5n
Ok5TUlRGUGJvYXJkVHlwZV0gfHwgW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUlRGRFBi
b2FyZFR5cGVdKSB7CisgICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmlu
ZzsKKyAgICAgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1JURkRQYm9hcmRU
eXBlXSkKKyAgICAgICAgICAgIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRU
eXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0pOworICAgICAgICBpZiAoIXN0cmluZykKKyAg
ICAgICAgICAgIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1l
bnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgIE5TRGljdGlvbmFyeSAqZG9jdW1lbnRB
dHRyaWJ1dGVzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6
CisKKyAgICAgICAgYXV0byBkb2N1bWVudEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICAgICAgW1tzZWxmIGNs
YXNzXSBfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uXSwgTlNF
eGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUsCi0gICAgICAgICAgICBuaWxdOwotICAg
ICAgICBOU0FycmF5ICpzOwotICAgICAgICAKKyAgICAgICAgICAgIG5pbF0pOworCiAgICAgICAg
IEJPT0wgd2FzRGVmZXJyaW5nQ2FsbGJhY2tzID0gW1tzZWxmIF93ZWJWaWV3XSBkZWZlcnNDYWxs
YmFja3NdOwogICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKICAgICAgICAgICAg
IFtbc2VsZiBfd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOllFU107Ci0gICAgICAgICAgICAK
LSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVu
dEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Oltb
c2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkb2N1bWVudEF0dHJpYnV0ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YnJlc291cmNlczomc107CisKKyAgICAgICAgTlNBcnJheSAqbG9jYWxTdWJyZXNvdXJjZXM7Cisg
ICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1lbnRG
cm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudDpbW3NlbGYg
X2ZyYW1lXSBET01Eb2N1bWVudF0KKyAgICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkb2N1
bWVudEF0dHJpYnV0ZXMuZ2V0KCkgc3VicmVzb3VyY2VzOiZsb2NhbFN1YnJlc291cmNlc107CisK
ICAgICAgICAgaWYgKHN1YnJlc291cmNlcykKLSAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBz
OwotICAgICAgICAKLSAgICAgICAgTlNFbnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51bWVyYXRv
cl07Ci0gICAgICAgIFdlYlJlc291cmNlICpyOwotICAgICAgICB3aGlsZSAoKHIgPSBbZSBuZXh0
T2JqZWN0XSkpCi0gICAgICAgICAgICBbW3NlbGYgX2RhdGFTb3VyY2VdIGFkZFN1YnJlc291cmNl
OnJdOwotICAgICAgICAKKyAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBsb2NhbFN1YnJlc291
cmNlczsKKworICAgICAgICBmb3IgKFdlYlJlc291cmNlICpyZXNvdXJjZSBpbiBsb2NhbFN1YnJl
c291cmNlcykKKyAgICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRkU3VicmVzb3VyY2U6
cmVzb3VyY2VdOworCiAgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQogICAgICAg
ICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOwotICAgICAgICAK
LSAgICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsKLSAgICAgICAgW3N0cmluZyBy
ZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJk
VHlwZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJj
ZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU1RJRkZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFy
dChAImltYWdlLnRpZmYiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVz
b3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFn
bWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQREZQYm9hcmRUeXBlKSB7Ci0g
ICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRX
aXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBib2FyZFR5cGVdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRpb24ucGRmIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBl
OkAiYXBwbGljYXRpb24vcGRmIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKLSAgICAg
ICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9k
b2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOwotICAgICAgICBbcmVz
b3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9CiAKLSAgICBp
ZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsK
LSAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5p
dFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5
cGU6QCJpbWFnZS9wbmciIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJj
ZSByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0KLSAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU1VSTFBib2FyZFR5cGUpIHsKKworICAgIGlmIChbcGJvYXJkVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6TlNUSUZGUGJvYXJkVHlwZV0pCisgICAgICAgIHJldHVybiBbc2VsZiBfd2Vi
X2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIHBhc3RlYm9hcmRUeXBl
Ok5TVElGRlBib2FyZFR5cGUgaW1hZ2VNSU1FVHlwZTpAImltYWdlL3RpZmYiXTsKKyAgICBpZiAo
W3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUERGUGJvYXJkVHlwZV0pCisgICAgICAgIHJl
dHVybiBbc2VsZiBfd2ViX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IHBhc3RlYm9hcmRUeXBlOk5TUERGUGJvYXJkVHlwZSBpbWFnZU1JTUVUeXBlOkAiYXBwbGljYXRp
b24vcGRmIl07CisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcg
KilrVVRUeXBlUE5HXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF93ZWJfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgcGFzdGVib2FyZFR5cGU6KE5TU3RyaW5nICopa1VU
VHlwZVBORyBpbWFnZU1JTUVUeXBlOkAiaW1hZ2UvcG5nIl07CisKKyAgICBpZiAoW3Bib2FyZFR5
cGUgaXNFcXVhbFRvU3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsKICAgICAgICAgTlNVUkwgKlVS
TCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKICAgICAgICAgRE9NRG9j
dW1lbnQqIGRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwogICAgICAgICBB
U1NFUlQoZG9jdW1lbnQpOwpAQCAtMjYzOCw0MyArMjQzMCwzMCBAQCAtIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVibwogICAgICAgICBbZnJhZ21lbnQgYXBwZW5kQ2hpbGQ6YW5jaG9yXTsKICAgICAgICAg
cmV0dXJuIGZyYWdtZW50OwogICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bi
b2FyZFR5cGUpIHsKKworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJp
bmdQYm9hcmRUeXBlXSkgewogICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1
cm4gbmlsOwogICAgICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvcmUo
Y29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0g
cHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLnB0cigpKTsKICAgICB9CisK
ICAgICByZXR1cm4gbmlsOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgCisKIC0g
KHZvaWQpX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNB
cnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2
aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0lu
ZGV4OyAKLSAgICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1
YnZpZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9
IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1
YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAK
LSAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgc3RvcFRp
bWVyc107Ci0gICAgfSAKLX0gCi0jZW5kaWYgCit7CisgICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2lu
U3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHN0b3BUaW1lcnMpIHdpdGhPYmplY3Q6
bmlsXTsKK30KKworLSAodm9pZClfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lu
cworeworICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOkBz
ZWxlY3RvcihyZXN0YXJ0VGltZXJzKSB3aXRoT2JqZWN0Om5pbF07Cit9CiAKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkgCi0tICh2b2lkKV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0
c2NhcGVQbHVnaW5zIAoteyAKLSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdz
XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAot
ICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0lu
ZGV4ID0gMDsgc3Vidmlld0luZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAK
LSAgICAgICAgTlNWaWV3ICpzdWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmll
d0luZGV4XTsgCi0gICAgICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3ICopc3VidmlldyByZXN0YXJ0VGltZXJzXTsgCi0gICAgfSAKLX0gCiAjZW5kaWYg
CiAKIC0gKEJPT0wpX2lzVXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCkBAIC0yODAyLDQwICsy
NTgxLDI0IEBAIC0gKENHRmxvYXQpX2FkanVzdGVkQm90dG9tT2ZQYWdlV2l0aFRvcDooQ0dGbG9h
dCl0b3AgYm90dG9tOihDR0Zsb2F0KWJvdHRvbSBsaW1pCiB9CiAKICNpZiBQTEFURk9STShJT1Mp
CisKIC0gKGlkKWFjY2Vzc2liaWxpdHlSb290RWxlbWVudAogewogICAgIHJldHVybiBbW3NlbGYg
X2ZyYW1lXSBhY2Nlc3NpYmlsaXR5Um9vdF07CiB9CisKICNlbmRpZgogCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQogCi0tICh2b2lkKV93
ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJy
YXkKKy0gKHZvaWQpX3dlYl9hZGREZXNjZW5kZW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRh
YmxlQXJyYXkgKilhcnJheQogewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBOU0FycmF5KiBfc3Vi
dmlld3MgPSBbc2VsZiBzdWJ2aWV3c107Ci0jZW5kaWYKLSAgICB1bnNpZ25lZCBjb3VudCA9IFtf
c3Vidmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIE5TVmlldyAqY2hpbGQgPSBbX3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6aV07
CisgICAgZm9yIChOU1ZpZXcgKmNoaWxkIGluIFtzZWxmIHN1YnZpZXdzXSkgewogICAgICAgICBp
ZiAoW2NoaWxkIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0OmNoaWxkXTsKLSAgICAgICAgW2NoaWxkIF93ZWJfYWRkRGVzY2Vu
ZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6YXJyYXldOwotICAgIH0KLX0KLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwp
Ci0KLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQp
a2V5Ci17Ci0gICAgaWYgKG9iamVjdCA9PSBuaWwpIHsKLSAgICAgICAgW3NlbGYgcmVtb3ZlT2Jq
ZWN0Rm9yS2V5OmtleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgc2V0T2JqZWN0Om9i
amVjdCBmb3JLZXk6a2V5XTsKKyAgICAgICAgW2NoaWxkIF93ZWJfYWRkRGVzY2VuZGVudFdlYkhU
TUxWaWV3c1RvQXJyYXk6YXJyYXldOwogICAgIH0KIH0KIApAQCAtMjg0MywyNCArMjYwNiwyNiBA
QCBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldwogCisjaWYgUExBVEZPUk0oTUFD
KQorCiArICh2b2lkKWluaXRpYWxpemUKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFtOU0Fw
cCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBlczpbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25Q
YXN0ZWJvYXJkVHlwZXNdIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBl
czpbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzXV07CisgICAgW05TQXBw
IHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBh
c3RlYm9hcmRUeXBlc10gcmV0dXJuVHlwZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3Rl
Ym9hcmRUeXBlc11dOworCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RG
Ojppbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKICAgICBSdW5Mb29w
Ojppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSNlbmRpZgogfQogCisjZW5kaWYKKwogLSAoaWQp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0
aEZyYW1lOmZyYW1lXTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgW3NlbGYgc2V0Rm9j
dXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVOb25lXTsKICNlbmRpZgogICAgIApAQCAtMjg2OSwx
MiArMjYzNCwxNSBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKICAgICAKICAg
ICBfcHJpdmF0ZSA9IFtbV2ViSFRNTFZpZXdQcml2YXRlIGFsbG9jXSBpbml0XTsKIAotICAgIF9w
cml2YXRlLT5wbHVnaW5Db250cm9sbGVyID0gW1tXZWJQbHVnaW5Db250cm9sbGVyIGFsbG9jXSBp
bml0V2l0aERvY3VtZW50VmlldzpzZWxmXTsKKyAgICBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxl
ciA9IGFkb3B0TlMoW1tXZWJQbHVnaW5Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERvY3VtZW50
VmlldzpzZWxmXSk7CisKICNpZiBQTEFURk9STShJT1MpCiAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSAKICAgICAgICAgICAgIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKG1hcmtlZFRleHRVcGRhdGU6KSAKICAgICAgICAgICAgICAgICAgICBuYW1l
OldlYk1hcmtlZFRleHRVcGRhdGVkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotI2Vsc2UKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQogICAgIF9wcml2YXRlLT5zb2Z0U3BhY2VSYW5nZSA9
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogI2VuZGlmCiAgICAgCkBAIC0yODk2LDYgKzI2
NjQsNyBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW19wcml2YXRl
IHJlbGVhc2VdOwogICAgIF9wcml2YXRlID0gbmlsOworCiAgICAgW3N1cGVyIGRlYWxsb2NdOwog
fQogCkBAIC0zMDkxLDcgKzI4NjAsOCBAQCBXRUJDT1JFX0NPTU1BTkQodG9nZ2xlVW5kZXJsaW5l
KQogCiAjZGVmaW5lIENPTU1BTkRfUFJPTE9HVUUgaWYgKFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29t
bWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpfY21kXSkgcmV0dXJuOwogCi0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKElCQWN0aW9uKXRha2VGaW5kU3RyaW5nRnJvbVNl
bGVjdGlvbjooaWQpc2VuZGVyCiB7CiAgICAgQ09NTUFORF9QUk9MT0dVRQpAQCAtMzEwNCw3ICsy
ODc0LDcgQEAgLSAoSUJBY3Rpb24pdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5k
ZXIKICAgICBbTlNQYXN0ZWJvYXJkIF93ZWJfc2V0RmluZFBhc3RlYm9hcmRTdHJpbmc6W3NlbGYg
c2VsZWN0ZWRTdHJpbmddIHdpdGhPd25lcjpzZWxmXTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMg
bmVlZGVkIHRvIHN1cHBvcnQgTWFjIE9TIFggc2VydmljZXMuCisvLyBUaGlzIG1ldGhvZCBpcyBu
ZWVkZWQgdG8gc3VwcG9ydCBtYWNPUyBzZXJ2aWNlcy4KIC0gKEJPT0wpd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0
eXBlcwogewogICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBf
dG9wSFRNTFZpZXddXTsKQEAgLTMxMjYsNiArMjg5Niw3IEBAIC0gKGlkKXZhbGlkUmVxdWVzdG9y
Rm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKily
ZXR1CiAgICAgICAgIHJldHVybiBzZWxmOwogICAgIHJldHVybiBbW3NlbGYgbmV4dFJlc3BvbmRl
cl0gdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpzZW5kVHlwZSByZXR1cm5UeXBlOnJldHVyblR5
cGVdOwogfQorCiAjZW5kaWYKIAogLy8ganVtcFRvU2VsZWN0aW9uIGlzIHRoZSBvbGQgbmFtZSBm
b3Igd2hhdCBBcHBLaXQgbm93IGNhbGxzIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEuIFNh
ZmFyaQpAQCAtMzE0MSw3ICsyOTEyLDggQEAgLSAodm9pZClqdW1wVG9TZWxlY3Rpb246KGlkKXNl
bmRlcgogICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTZWxl
Y3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdh
eXMpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKEJP
T0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRh
dGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KIHsKICAgICBTRUwgYWN0aW9uID0gW2l0ZW0gYWN0
aW9uXTsKQEAgLTMxNDksNyArMjkyMSw3IEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNl
SXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0CiAKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgCisKICAgICBpZiAoRG9jdW1l
bnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChkb2MtPmlzUGx1Z2lu
RG9jdW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBOTzsKQEAgLTMxNjgsNyArMjk0MCw2IEBA
IC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5T
VmFsaWRhdGVkVXNlckludGVyZmFjZUl0CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07
CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vlc3NQYW5lbDopKSB7Ci0gICAg
ICAgIC8vIE1hdGNoIE9TIFggQXBwS2l0IGJlaGF2aW9yIGZvciBwb3N0LVRpZ2VyLiBEb24ndCBj
aGFuZ2UgVGlnZXIgYmVoYXZpb3IuCiAgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5T
TWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05T
TWVudUl0ZW0gY2xhc3NdXSkgewogICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJs
ZV07CkBAIC0zMjE5LDEyICsyOTkwLDEyIEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNl
SXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9IAotICAgIAorCiAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQXR0cmlidXRlczopCiAgICAgICAgICAg
ICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUNvbG9yOikgICAgICAgIAogICAgICAgICAg
ICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VGb250OikpCiAgICAgICAgIHJldHVybiBb
c2VsZiBfY2FuRWRpdFJpY2hseV07Ci0gICAgCisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cihjYXBpdGFsaXplV29yZDopCiAgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KGxvd2VyY2FzZVdvcmQ6KQogICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih1
cHBlcmNhc2VXb3JkOikpCkBAIC0zMjM0LDI1ICszMDA1LDI1IEBAIC0gKEJPT0wpdmFsaWRhdGVV
c2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVy
ZmFjZUl0CiAgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGp1bXBUb1NlbGVj
dGlvbjopCiAgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHlGb250Oikp
CiAgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXSB8fCAoW3NlbGYgX2lzRWRpdGFi
bGVdICYmIFtzZWxmIF9oYXNJbnNlcnRpb25Qb2ludF0pOwotICAgIAorCiAgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IoY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KSkKICAgICAgICAg
cmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2NhbkVkaXRSaWNo
bHldOwotICAgIAorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2lnbm9yZVNwZWxsaW5n
RnJvbU1lbnU6KQogICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfbGVhcm5TcGVs
bGluZ0Zyb21NZW51OikKICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodGFrZUZp
bmRTdHJpbmdGcm9tU2VsZWN0aW9uOikpCiAgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0
aW9uXTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikgfHwgYWN0
aW9uID09IEBzZWxlY3RvcihwYXN0ZUFzUGxhaW5UZXh0OikpCiAgICAgICAgIHJldHVybiBmcmFt
ZSAmJiAoZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRpdG9yKCku
Y2FuUGFzdGUoKSk7Ci0gICAgCisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUFz
UmljaFRleHQ6KSkKICAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCkuY2Fu
REhUTUxQYXN0ZSgpCiAgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLmNhblBhc3RlKCkg
JiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpKTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBlcmZvcm1GaW5kUGFu
ZWxBY3Rpb246KSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIAorCiAgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OikpCiAgICAgICAgIHJldHVy
biBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKIApAQCAtMzI3OSw2ICszMDUwLDcgQEAgLSAoQk9PTCl2
YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRV
c2VySW50ZXJmYWNlSXQKICAgICAgICAgfQogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OwogICAgIH0KKwogICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5l
Y2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAogICAgIC8vIHRoZSBzZWxl
Y3RvciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxl
bWVudCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKICAgICAvLyBjb2RlIGNoZWNrcyB0aGUg
Zmlyc3QgcmVzcG9uZGVyLgpAQCAtMzI4OCwzMCArMzA2MCwzNSBAQCAtIChCT09MKXZhbGlkYXRl
VXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRl
cmZhY2VJdAogICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIHNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKICAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0
b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjopKSB7CiAgICAgICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlz
S2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKICAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09u
U3RhdGUgOiBOU09mZlN0YXRlXTsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAg
ICB9CisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uOikpIHsKICAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAq
KWl0ZW07CiAgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBj
bGFzc11dKQogICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CiAgICAgICAg
IHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2Vs
ZWN0b3IodG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjopKSB7CiAgICAgICAgIE5TTWVu
dUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJ
dGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKICAgICAgICAgICAgIFttZW51
SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudDopKSB7CiAgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVu
dUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVu
dUl0ZW0gY2xhc3NdXSkKICAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07
CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOikpIHsKICAg
ICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAg
IGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQpAQCAtMzMx
OSw3ICszMDk2LDcgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERl
bGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXQKICAgICAgICAgcmV0dXJuIFtz
ZWxmIF9jYW5FZGl0XTsKICAgICB9CiAKLSAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtz
ZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjphY3Rpb25dOworICAgIGF1dG8gY29tbWFuZCA9IFtz
ZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjphY3Rpb25dOwogICAgIGlmIChjb21tYW5kLmlzU3Vw
cG9ydGVkKCkpIHsKICAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAq
KWl0ZW07CiAgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBj
bGFzc11dKQpAQCAtMzMzOSw3ICszMTE2LDggQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZh
Y2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQogICAgIEJPT0wg
cmVzdWx0ID0gW3NlbGYgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTpp
dGVtXTsKICAgICByZXR1cm4gQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwg
W3NlbGYgX3dlYlZpZXddLCBAc2VsZWN0b3Iod2ViVmlldzp2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJ
dGVtOmRlZmF1bHRWYWxpZGF0aW9uOiksIGl0ZW0sIHJlc3VsdCk7CiB9Ci0jZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAoQk9PTClhY2NlcHRz
Rmlyc3RSZXNwb25kZXIKIHsKQEAgLTMzNDcsMjAgKzMxMjUsMTUgQEAgLSAoQk9PTClhY2NlcHRz
Rmlyc3RSZXNwb25kZXIKICAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIGV2ZW50IGRvd24gdGhy
b3VnaCBXZWJDb3JlIGZpcnN0IHRvIGJlIHN1cmUgd2UgZG9uJ3QgaGl0IGEgc3Vidmlldy4KICAg
ICAvLyBEbyBhY2NlcHQgZmlyc3QgcmVzcG9uZGVyIGF0IGFueSBvdGhlciB0aW1lLCBmb3IgZXhh
bXBsZSBmcm9tIGtleWJvYXJkIGV2ZW50cywKICAgICAvLyBvciBmcm9tIGNhbGxzIGJhY2sgZnJv
bSBXZWJDb3JlIG9uY2Ugd2UgYmVnaW4gbW91c2UtZG93biBldmVudCBoYW5kbGluZy4KLSNpZiAh
UExBVEZPUk0oSU9TKSAgICAgICAgICAgIAotICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1
cnJlbnRFdmVudF07Ci0gICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUxlZnRNb3Vz
ZURvd24KLSAgICAgICAgICAgICYmICFfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudAot
ICAgICAgICAgICAgJiYgTlNQb2ludEluUmVjdChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtz
ZWxmIGNvbnZlcnRSZWN0OltzZWxmIHZpc2libGVSZWN0XSB0b1ZpZXc6bmlsXSkpIHsKLSAgICAg
ICAgcmV0dXJuIE5POwotICAgIH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgV2ViRXZlbnQgKmV2
ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CiAjZWxzZQogICAgIFdlYkV2ZW50ICpldmVudCA9
IFtXQUtXaW5kb3cgY3VycmVudEV2ZW50XTsKKyNlbmRpZgogICAgIGlmIChldmVudCAmJiBldmVu
dC50eXBlID09IFdlYkV2ZW50TW91c2VEb3duCiAgICAgICAgICAgICAmJiAhX3ByaXZhdGUtPmhh
bmRsaW5nTW91c2VEb3duRXZlbnQKICAgICAgICAgICAgICYmIE5TUG9pbnRJblJlY3QoW2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddLCBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxlUmVjdF0g
dG9WaWV3Om5pbF0pKQogICAgICAgICByZXR1cm4gTk87Ci0jZW5kaWYKICAgICByZXR1cm4gWUVT
OwogfQogCkBAIC0zNDE0LDcgKzMxODcsOCBAQCAtIChCT09MKW1haW50YWluc0luYWN0aXZlU2Vs
ZWN0aW9uCiAjZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQorCiAtICh2b2lkKWFkZFN1cGVydmlld09ic2VydmVycwogewogICAgIGlmIChfcHJpdmF0ZS0+
b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKQEAgLTM0NTAsOCArMzIyNCw2IEBAIC0g
KHZvaWQpYWRkV2luZG93T2JzZXJ2ZXJzCiAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlm
aWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKICAg
ICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KHdpbmRvd0RpZEJlY29tZUtleTopIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRp
b24gb2JqZWN0Om5pbF07CiAgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRSZXNpZ25LZXk6KSBuYW1lOk5TV2luZG93RGlk
UmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbE9yZGVyT25T
Y3JlZW46KSBuYW1lOk5TV2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0
OndpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsT3JkZXJPZmZTY3JlZW46KSBuYW1lOk5TV2luZG93V2ls
bE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwogICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2ls
bENsb3NlOikgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKICAgICAKICAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IHRy
dWU7CkBAIC0zNDczLDcgKzMyNDUsOCBAQCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcK
ICAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5v
dGlmaWNhdGlvbk5hbWU6X1dlYlZpZXdEaWRTdGFydEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdOb3Rp
ZmljYXRpb24gb2JqZWN0OndlYlZpZXcgdXNlckluZm86bmlsXTsKICAgICB9CiB9Ci0jZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAodm9pZCl2
aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKIHsKQEAgLTM0ODQsNyArMzI1
Nyw3IEBAIC0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopd2luZG93CiAg
ICAgaWYgKCFfcHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgIVBMQVRGT1JNKElPUykK
KyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gRklYTUU6IFNvbWUgb2YgdGhlc2UgY2FsbHMgbWF5
IG5vdCB3b3JrIGJlY2F1c2UgdGhpcyB2aWV3IG1heSBiZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSBp
dCdzIHN1cGVydmlldy4KICAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKICAgICBb
c2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKQEAgLTM1MDcsNyArMzI4MCw3IEBAIC0g
KHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwogICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVy
XTsKICAgICBpZiAoW3NlbGYgd2luZG93XSkgewogICAgICAgICBfcHJpdmF0ZS0+bGFzdFNjcm9s
bFBvc2l0aW9uID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47Ci0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFtzZWxmIGFkZFdpbmRvd09ic2Vy
dmVyc107CiAgICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2VydmVyc107CiAjZW5kaWYKQEAg
LTM1MTgsNyArMzI5MSw3IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwogCiAgICAgICAg
IF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBOU1plcm9Qb2ludDsKIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoIV9wcml2YXRlLT5mbGFn
c0NoYW5nZWRFdmVudE1vbml0b3IpIHsKICAgICAgICAgICAgIF9fYmxvY2sgV2ViSFRNTFZpZXcg
KndlYWtTZWxmID0gc2VsZjsKICAgICAgICAgICAgIF9wcml2YXRlLT5mbGFnc0NoYW5nZWRFdmVu
dE1vbml0b3IgPSBbTlNFdmVudCBhZGRMb2NhbE1vbml0b3JGb3JFdmVudHNNYXRjaGluZ01hc2s6
TlNFdmVudE1hc2tGbGFnc0NoYW5nZWQgaGFuZGxlcjpeKE5TRXZlbnQgKmZsYWdzQ2hhbmdlZEV2
ZW50KSB7CkBAIC0zNTMzLDM4ICszMzA2LDIwIEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRv
dwogICAgIH0KIH0KIAotLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxl
Y3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdAotewotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIC8vIENvcHkgc3Vidmlld3MgYmVjYXVzZSBbc2VsZiBz
dWJ2aWV3c10gcmV0dXJucyB0aGUgdmlldydzIG11dGFibGUgaW50ZXJuYWwgYXJyYXksCi0gICAg
Ly8gYW5kIHdlIG11c3QgYXZvaWQgbXV0YXRpbmcgdGhlIGFycmF5IHdoaWxlIGVudW1lcmF0aW5n
IGl0LgotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW1tzZWxmIHN1YnZpZXdzXSBjb3B5XTsKLSAg
ICAKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbc3Vidmlld3Mgb2JqZWN0RW51bWVy
YXRvcl07Ci0gICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICp2aWV3OwotICAgIHdoaWxlICgodmll
dyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpCi0gICAgICAgIGlmIChbdmlldyBp
c0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pCi0gICAgICAg
ICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpvYmplY3RdOwot
ICAgIAotICAgIFtzdWJ2aWV3cyByZWxlYXNlXTsKLSNlbmRpZgotfQotCiAtICh2b2lkKXZpZXdX
aWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93CiB7Ci0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBbc2VsZiBfd2Vi
X21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld1dpbGxNb3Zl
VG9Ib3N0V2luZG93Oikgd2l0aE9iamVjdDpob3N0V2luZG93XTsKICNlbmRpZgogfQogCiAtICh2
b2lkKXZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93CiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBbc2VsZiBfd2ViX21ha2VQbHVnaW5TdWJ2
aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld0RpZE1vdmVUb0hvc3RXaW5kb3cpIHdp
dGhPYmplY3Q6bmlsXTsKICNlbmRpZgogfQogCi0KIC0gKHZvaWQpYWRkU3VidmlldzooTlNWaWV3
ICopdmlldwogewogICAgIFtzdXBlciBhZGRTdWJ2aWV3OnZpZXddOwpAQCAtMzU4MiwxMyArMzMz
Nyw2IEBAIC0gKHZvaWQpYWRkU3VidmlldzooTlNWaWV3ICopdmlldwogCiAtICh2b2lkKXdpbGxS
ZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3CiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIC8v
IEhhdmUgdG8gbnVsbC1jaGVjayBfcHJpdmF0ZSwgc2luY2UgdGhpcyBjYW4gYmUgY2FsbGVkIHZp
YSAtZGVhbGxvYyB3aGVuCi0gICAgLy8gY2xlYW5pbmcgdXAgdGhlIHRoZSBsYXllckhvc3RpbmdW
aWV3LgotICAgIGlmIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykK
LSAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIHJlbW92ZWQgZHVyaW5n
IHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2RlIGNoYW5nZS4g
V2Ugd2lsbCBzdGlsbCBkbyBsYXlvdXQgb3IgdGhlIHByaW50aW5nIG1vZGUgY2hhbmdlIGV2ZW4g
dGhvdWdoIHRoaXMgdmlldyBpcyBubyBsb25nZXIgaW4gdGhlIHZpZXcgaGllcmFyY2h5LiIsIG9i
amVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci0jZW5kaWYKLQogICAgIGlmIChb
V2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJblZpZXc6c3Vidmlld10pCiAgICAgICAgIFtbc2Vs
ZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveVBsdWdpbjpzdWJ2aWV3XTsKIApAQCAtMzY2MSw3
ICszNDA5LDggQEAgLSAodm9pZClsYXlvdXQKICAgICBbc2VsZiBsYXlvdXRUb01pbmltdW1QYWdl
V2lkdGg6MCBoZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDow
IG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdGluZ1ZpZXdTaXplOk5PXTsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAvLyBEZWxpdmVyIG1vdXNldXAgZXZl
bnRzIHRvIHRoZSBET00gZm9yIGJ1dHRvbiAyLgogLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZl
bnQgKilldmVudAogewpAQCAtMzc2OSwxMCArMzUxOCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNB
cnJheT4gZml4TWVudXNSZWNlaXZlZEZyb21PbGRDbGllbnRzKE5TQXJyYXkgKmRlbGVnYXRlU3Vw
cGxpCiAgICAgICAgIHJldHVybiBuZXdNZW51SXRlbXM7CiAgICAgCiAgICAgLy8gUmVzdG9yZSB0
aGUgbW9kZXJuIHRhZ3MgdG8gdGhlIG1lbnUgaXRlbXMgd2hvc2UgdGFncyB3ZSBhbHRlcmVkIGlu
IGZpeE1lbnVzVG9TZW5kVG9PbGRDbGllbnRzLiAKLSAgICB1bnNpZ25lZCBuZXdJdGVtc0NvdW50
ID0gW25ld01lbnVJdGVtcyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5l
d0l0ZW1zQ291bnQ7ICsraSkgewotICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW25ld01lbnVJ
dGVtcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICAKKyAgICBmb3IgKE5TTWVudUl0ZW0gKml0
ZW0gaW4gbmV3TWVudUl0ZW1zLmdldCgpKSB7CiAgICAgICAgIGludCB0YWcgPSBbaXRlbSB0YWdd
OwogICAgICAgICBpbnQgbW9kZXJuVGFnID0gdGFnOwogICAgICAgICAKQEAgLTQwNTYsNyArMzgw
Miw4IEBAIC0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CiAgICAgCiAg
ICAgcmV0dXJuIG1lbnUuYXV0b3JlbGVhc2UoKTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChCT09MKXNlYXJjaEZvcjooTlNTdHJp
bmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTClj
YXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnCiB7CkBAIC00MDgwLDcgKzM4MjcsOCBAQCAtIChC
T09MKWlzT3BhcXVlCiAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gZHJhd3NCYWNrZ3JvdW5k
XTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lk
KXNldExheWVyOihDQUxheWVyICopbGF5ZXIKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkgewpAQCAtNDA5MCw2ICszODM4LDcgQEAgLSAodm9pZClzZXRMYXll
cjooQ0FMYXllciAqKWxheWVyCiAKICAgICBbc3VwZXIgc2V0TGF5ZXI6bGF5ZXJdOwogfQorCiAj
ZW5kaWYKIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTQxNTEsMTcgKzM5MDAsMTUgQEAgLSAodm9p
ZClzZXROZWVkc1RvQXBwbHlTdHlsZXM6IChCT09MKWZsYWcKIAogLSAodm9pZClkcmF3U2luZ2xl
UmVjdDooTlNSZWN0KXJlY3QKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogICAgIE5TUmVj
dENsaXAocmVjdCk7CiAgICAgICAgIAogICAgIEFTU0VSVChbW3NlbGYgc3VwZXJ2aWV3XSBpc0tp
bmRPZkNsYXNzOltXZWJDbGlwVmlldyBjbGFzc11dKTsKIAogICAgIFsoV2ViQ2xpcFZpZXcgKilb
c2VsZiBzdXBlcnZpZXddIHNldEFkZGl0aW9uYWxDbGlwOnJlY3RdOwotI2VuZGlmCiAKICAgICBA
dHJ5IHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAoW3NlbGYgX3RyYW5zcGFyZW50
QmFja2dyb3VuZF0pIHsKICAgICAgICAgICAgIFtbTlNDb2xvciBjbGVhckNvbG9yXSBzZXRdOwog
ICAgICAgICAgICAgTlNSZWN0RmlsbCAocmVjdCk7CkBAIC00MTcwLDM1ICszOTE3LDMxIEBAIC0g
KHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAgICAgW1tzZWxmIF9mcmFt
ZV0gX2RyYXdSZWN0OnJlY3QgY29udGVudHNPbmx5OllFU107CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93
ZWJWaWV3XTsKIAogICAgICAgICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8cmRhcjovL3By
b2JsZW0vNTAyMzU0NT4uIFdlIGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBkcmF3UmVj
dCB3aWxsIGJlCiAgICAgICAgIC8vIGNhbGxlZCBhZnRlciB0aGUgV2ViVmlldyBoYXMgY2xvc2Vk
LiBJZiB0aGUgY2xpZW50IGRpZCBub3QgcHJvcGVybHkgY2xvc2UgdGhlIFdlYlZpZXcgYW5kIHNl
dCB0aGUgCiAgICAgICAgIC8vIFVJRGVsZWdhdGUgdG8gbmlsLCB0aGVuIHRoZSBVSURlbGVnYXRl
IHdpbGwgYmUgc3RhbGUgYW5kIHRoaXMgY29kZSB3aWxsIGNyYXNoLiAKLSAgICAgICAgc3RhdGlj
IEJPT0wgdmVyc2lvbjNPckxhdGVyQ2xpZW50ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJ
VF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfUVVJQ0tCT09LU19RVUlSSyk7CisgICAgICAgIHN0YXRp
YyBib29sIHZlcnNpb24zT3JMYXRlckNsaWVudCA9IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJL
SVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX1FVSUNLQk9PS1NfUVVJUkspOwogICAgICAgICBpZiAo
dmVyc2lvbjNPckxhdGVyQ2xpZW50KQogICAgICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJl
Y3Q6cmVjdCBmcm9tVmlldzpzZWxmXV07CisgICAgICAgIC8vIENsaWVudHMgZG9uJ3QgbmVlZCBz
dXBwb3J0IGZvciB0aGUgZGlkRHJhd1JlY3QgZGVsZWdhdGUgbWV0aG9kIGFib3ZlIG9uIGlPUy4K
KyAgICAgICAgLy8gQWxzbywgYSBsb25nIHRpbWUgYWdvLCB3aGVuIGl0IHdhcyBzdXBwb3J0ZWQs
IGl0IHdhcyBwYXJ0IG9mIGEgdGhyZWFkaW5nIHByb2JsZW0uCiAKICAgICAgICAgaWYgKFdlYk5v
ZGVIaWdobGlnaHQgKmN1cnJlbnRIaWdobGlnaHQgPSBbd2ViVmlldyBjdXJyZW50Tm9kZUhpZ2hs
aWdodF0pCiAgICAgICAgICAgICBbY3VycmVudEhpZ2hsaWdodCBzZXROZWVkc1VwZGF0ZUluVGFy
Z2V0Vmlld1JlY3Q6W3NlbGYgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6W2N1cnJlbnRIaWdobGln
aHQgdGFyZ2V0Vmlld11dXTsKLSNlbHNlCi0gICAgICAgIC8vIERvbid0IHNlbmQgZGlkRHJhd1Jl
Y3QsIGl0IGlzIG5vdCB1c2VkIGJ5IGFueW9uZSBhbmQgaXQgaXMgY2F1c2luZyB0aHJlYWQgc3lu
Y2hyb25pemF0aW9uIHByb2JsZW1zLgotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlw
XTsKLQogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwot
I2VuZGlmCiAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgewotI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXdd
IHJlc2V0QWRkaXRpb25hbENsaXBdOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9y
ZUdyYXBoaWNzU3RhdGVdOwotI2VuZGlmCisKICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24g
Y2F1Z2h0IHdoaWxlIGRyYXdpbmc6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwogICAgICAgICBbbG9j
YWxFeGNlcHRpb24gcmFpc2VdOwogICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKWRyYXdSZWN0
OihOU1JlY3QpcmVjdApAQCAtNDIwNyw3ICszOTUwLDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNS
ZWN0KXJlY3QKICAgICAKICAgICBUcmFjZVNjb3BlIHNjb3BlKFdlYkhUTUxWaWV3UGFpbnRTdGFy
dCwgV2ViSFRNTFZpZXdQYWludEVuZCk7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRG
T1JNKE1BQykKICAgICBjb25zdCBOU1JlY3QgKnJlY3RzOwogICAgIE5TSW50ZWdlciBjb3VudDsK
ICAgICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJhd246JnJlY3RzIGNvdW50OiZjb3VudF07CkBAIC00
MjIxLDcgKzM5NjQsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgIGRvdWJs
ZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBJZiBjb3VudCA9PSAwIGhlcmUs
IHVzZSB0aGUgcmVjdCBwYXNzZWQgaW4gZm9yIGRyYXdpbmcuIFRoaXMgaXMgYSB3b3JrYXJvdW5k
IGZvcjogCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5MDgyODI+IFJFR1JFU1NJT04gKE1haWwp
OiBObyBkcmFnIGltYWdlIGRyYWdnaW5nIHNlbGVjdGVkIHRleHQgaW4gQmxvdCBhbmQgTWFpbCAK
ICAgICAvLyBUaGUgcmVhc29uIGZvciB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBleHBsaWNpdGx5IGZyb20gdGhlIGNvZGUgCkBAIC00MjU3LDE0ICs0MDAwLDE0
IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAgICAgTE9HKFRpbWluZywgIiVzIGRy
YXcgc2Vjb25kcyA9ICVmIiwgd2lkZ2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEo
KSwgdGhpc1RpbWUpOwogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKICAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCiAgICAgICAgIFtzZWxmIF9zZXRB
c2lkZVN1YnZpZXdzXTsKICNlbmRpZgogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93
ZWJWaWV3XTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8v
IE9ubHkgZG8gdGhlIHN5bmNocm9uaXphdGlvbiBkYW5jZSBpZiB3ZSdyZSBkcmF3aW5nIGludG8g
dGhlIHdpbmRvdywgb3RoZXJ3aXNlCiAgICAgLy8gd2UgcmlzayBkaXNhYmxpbmcgc2NyZWVuIHVw
ZGF0ZXMgd2hlbiBubyBmbHVzaCBpcyBwZW5kaW5nLgogICAgIGlmIChbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdID09IFtbc2VsZiB3aW5kb3ddIGdyYXBoaWNzQ29udGV4dF0gJiYg
W3dlYlZpZXcgX25lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7CkBAIC00Mjgz
LDcgKzQwMjYsOCBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgICAgICBDYWxs
VUlEZWxlZ2F0ZSh3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWREcmF3RnJhbWU6KSwgW3Nl
bGYgX2ZyYW1lXSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
KwogLy8gVHVybiBvZmYgdGhlIGFkZGl0aW9uYWwgY2xpcCB3aGlsZSBjb21wdXRpbmcgb3VyIHZp
c2libGVSZWN0LgogLSAoTlNSZWN0KXZpc2libGVSZWN0CiB7CkBAIC00MjkyLDExICs0MDM2LDkg
QEAgLSAoTlNSZWN0KXZpc2libGVSZWN0CiAKICAgICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAo
V2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddOwogCi0gICAgQk9PTCBoYXNBZGRpdGlvbmFs
Q2xpcCA9IFtjbGlwVmlldyBoYXNBZGRpdGlvbmFsQ2xpcF07Ci0gICAgaWYgKCFoYXNBZGRpdGlv
bmFsQ2xpcCkgeworICAgIGlmICghW2NsaXBWaWV3IGhhc0FkZGl0aW9uYWxDbGlwXSkKICAgICAg
ICAgcmV0dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07Ci0gICAgfQotICAgIAorCiAgICAgTlNSZWN0
IGFkZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKICAgICBbY2xpcFZp
ZXcgcmVzZXRBZGRpdGlvbmFsQ2xpcF07CiAgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW3N1cGVy
IHZpc2libGVSZWN0XTsKQEAgLTQzNDcsMjIgKzQwODksNiBAQCAtICh2b2lkKXdpbmRvd0RpZFJl
c2lnbktleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KICAgICB9CiB9CiAKLS0gKHZv
aWQpd2luZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Ci17Ci0gICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50
aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotLSAodm9pZCl3aW5kb3dX
aWxsT3JkZXJPZmZTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
aWYgKCFwdGhyZWFkX21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JP
bk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5P
XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQogLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7CiAgICAgaWYgKCFwdGhyZWFkX21haW5f
bnAoKSkgewpAQCAtNDM3Myw1MSArNDA5OSw0NSBAQCAtICh2b2lkKXdpbmRvd1dpbGxDbG9zZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25D
b250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAgICAgW1tzZWxm
IF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107CiB9Ci0jZW5kaWYgLy8gIVBM
QVRGT1JNKElPUykKIAotI2lmICFQTEFURk9STShJT1MpCi0tICh2b2lkKXNjcm9sbFdoZWVsOihO
U0V2ZW50ICopZXZlbnQKLSNlbHNlCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAtICh2b2lk
KXNjcm9sbFdoZWVsOihXZWJFdmVudCAqKWV2ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVz
cG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAog
ICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJl
dGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQg
cHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBw
S2l0IGNvZGUuCisgICAgLy8gRklYTUU6IFdoeSBub3QgZG8gdGhpcyBvbiBpT1MgdG9vPwogICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CiAjZW5kaWYKIAogICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoIWZy
YW1lIHx8ICFmcmFtZS0+ZXZlbnRIYW5kbGVyKCkud2hlZWxFdmVudChldmVudCkpCisgICAgaWYg
KCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigpLndoZWVsRXZlbnQoZXZlbnQpKSB7Cisj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZlbnRdOwotCi0j
ZWxzZQotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLndoZWVs
RXZlbnQoZXZlbnQpOwogI2VuZGlmCisgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFtb
W3NlbGYgX3dlYlZpZXddIF9pbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyXSB3ZWJWaWV3OltzZWxm
IF93ZWJWaWV3XSBkaWRIYW5kbGVTY3JvbGxXaGVlbDpldmVudF07CiAjZW5kaWYKIH0KIAotI2lm
ICFQTEFURk9STShJT1MpCi0tIChCT09MKV9pc1NlbGVjdGlvbkV2ZW50OihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2Nh
dGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRB
dFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpZRVNdIG9iamVjdEZvcktleTpXZWJFbGVt
ZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKLX0KLSNlbHNlCiAtIChCT09MKV9pc1NlbGVj
dGlvbkV2ZW50OihXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxm
IGNvbnZlcnRQb2ludDpldmVudC5sb2NhdGlvbkluV2luZG93IGZyb21WaWV3Om5pbF07Ci0gICAg
cmV0dXJuIFtbW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnRdIG9iamVjdEZvcktleTpXZWJFbGVt
ZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKLX0KKyNpZiBQTEFURk9STShNQUMpCisgICAg
Ym9vbCBhbGxvd1NoYWRvd0NvbnRlbnQgPSB0cnVlOworI2Vsc2UKKyAgICBib29sIGFsbG93U2hh
ZG93Q29udGVudCA9IGZhbHNlOyAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBuZWVkIHRvIGJlIGZh
bHNlIG9uIGlPUz8KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyAgICBOU1BvaW50IHBv
aW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdOworICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hh
ZG93Q29udGVudDphbGxvd1NoYWRvd0NvbnRlbnRdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNT
ZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9P
TClfaXNTY3JvbGxCYXJFdmVudDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgTlNQb2ludCBwb2lu
dCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6
bmlsXTsKQEAgLTQ0ODMsMTcgKzQyMDMsMTQgQEAgLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09y
ZGVyaW5nRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIH0KICAgICByZXR1cm4gW2hpdFZp
ZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKIH0KLSNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCi0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpbW91c2VEb3du
OihOU0V2ZW50ICopZXZlbnQKLSNlbHNlCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAtICh2
b2lkKW1vdXNlRG93bjooV2ViRXZlbnQgKilldmVudAotI2VuZGlmCiB7CiAgICAgW1tzZWxmIF93
ZWJWaWV3XSBwcmVwYXJlRm9yTW91c2VEb3duXTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
QEAgLTQ1MDEsNyArNDIxOCw4IEBAIC0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKWV2ZW50
CiAjZW5kaWYKIAogICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsK
LSNpZiAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChbW3NlbGYg
aW5wdXRDb250ZXh0XSB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtbc2VsZiBpbnB1dENv
bnRleHRdIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQogICAgICAgICByZXR1cm47CiAjZW5kaWYK
QEAgLTQ1NDksNiArNDI2Nyw3IEBAIC0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKWV2ZW50
CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiAtICh2b2lkKXRvdWNoOihXZWJFdmVu
dCAqKWV2ZW50CiB7CiAgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxm
OwpAQCAtNDU1OCw2ICs0Mjc3LDcgQEAgLSAodm9pZCl0b3VjaDooV2ViRXZlbnQgKilldmVudAog
ICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKICAgICAgICAg
Y29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS50b3VjaEV2ZW50KGV2ZW50KTsKIH0KKwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShNQUMpCkBAIC00NjU0LDcg
KzQzNzQsNyBAQCAtIChOU0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0
aW5hdGlvbjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24KICAgICBOU0ZpbGVXcmFwcGVyICp3cmFw
cGVyID0gbmlsOwogICAgIE5TVVJMICpkcmFnZ2luZ0VsZW1lbnRVUkwgPSBuaWw7CiAgICAgCi0g
ICAgaWYgKFdlYkNvcmU6OkNhY2hlZEltYWdlKiB0aWZmUmVzb3VyY2UgPSBbc2VsZiBwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKKyAgICBpZiAoYXV0byogdGlmZlJlc291cmNlID0gX3By
aXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKSB7CiAgICAgICAgIGlmIChhdXRvKiBi
dWZmZXIgPSB0aWZmUmVzb3VyY2UtPnJlc291cmNlQnVmZmVyKCkpIHsKICAgICAgICAgICAgIE5T
VVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gdGlmZlJlc291cmNlLT5yZXNwb25zZSgpLm5zVVJMUmVz
cG9uc2UoKTsKICAgICAgICAgICAgIGRyYWdnaW5nRWxlbWVudFVSTCA9IFtyZXNwb25zZSBVUkxd
OwpAQCAtNDc0MiwxNSArNDQ2MiwxMSBAQCAtICh2b2lkKWRyYWdnaW5nU2Vzc2lvbjooTlNEcmFn
Z2luZ1Nlc3Npb24gKilzZXNzaW9uIGVuZGVkQXRQb2ludDooTlNQb2ludClzY3JlZQogCiAjZW5k
aWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRG
T1JNKElPUykKLS0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci0jZWxzZQogLSAodm9p
ZCltb3VzZVVwOihXZWJFdmVudCAqKWV2ZW50Ci0jZW5kaWYKIHsKICAgICBbW3NlbGYgX3dlYlZp
ZXddIHByZXBhcmVGb3JNb3VzZVVwXTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZP
Uk0oTUFDKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMg
ZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcg
YSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVu
IGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZy
b20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KQEAgLTQ3
NTksNyArNDQ3NSw3IEBAIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAogCiAgICAg
W3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBO
U0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJy
ZW50SW5wdXRNYW5hZ2VyXTsKQEAgLTQ3NjcsNiArNDQ4Myw3IEBAIC0gKHZvaWQpbW91c2VVcDoo
V2ViRXZlbnQgKilldmVudAogICAgICAgICByZXR1cm47CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCiAjZW5kaWYKKwogICAgIFtzZWxmIHJldGFpbl07CiAKICAgICBbc2VsZiBfc3RvcEF1
dG9zY3JvbGxUaW1lcl07CkBAIC00Nzc5LDE4ICs0NDk2LDIxIEBAIC0gKHZvaWQpbW91c2VVcDoo
V2ViRXZlbnQgKilldmVudAogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Ci0jaWYgIVBMQVRGT1JN
KElPUykKKworI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0
aEZha2VFdmVudF07CiAjZW5kaWYKIAogICAgIFtzZWxmIHJlbGVhc2VdOwogfQogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpbW91c2VNb3ZlZDooTlNF
dmVudCAqKWV2ZW50CiB7CiAgICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpldmVu
dF07CiB9CisKICNlbmRpZgogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2
ZW50ICopZXZlbnQKQEAgLTQ4MDksMTMgKzQ1MjksMTUgQEAgLSAodm9pZClwcmVzc3VyZUNoYW5n
ZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CiAjZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAvLyByZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRo
b2QgaXMgdGhlIHdheSB3ZSB0ZWxsIEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcK
IC8vIHRvIGJlIGluIHRoZSBrZXkgbG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMi
IGlzIG5vdCBvbi4KIC0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5CiB7CiAgICAgcmV0dXJu
IFlFUzsKIH0KKwogI2VuZGlmCiAKIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHdl
IGRvbid0IHJldHVybiBhbnl0aGluZyB0aHJvdWdoIHRoZSBOU1RleHRJbnB1dApAQCAtNDgyOCwx
NiArNDU1MCwxOCBAQCBzdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1lKQog
ICAgIHJldHVybiAhc2VsZWN0aW9uLmlzTm9uZSgpICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0
YWJsZSgpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIHN0
YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxkKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5Q
YXNzd29yZEZpZWxkKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgUmVmUHRyPEtleWJvYXJkRXZl
bnQ+IGN1cnJlbnRLZXlib2FyZEV2ZW50KEZyYW1lKiBjb3JlRnJhbWUpCiB7Ci0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAg
Y3VycmVudEV2ZW50XTsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTQ4NzIsNyArNDU5Niw3IEBAIC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAgICBp
ZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKICAg
ICAgICAgZGlyZWN0aW9uID0gW1tzZWxmIHdpbmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVjdGlv
bl07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBf
dXBkYXRlRm9udFBhbmVsXTsKICNlbmRpZgogICAgIApAQCAtNDg4MCw3ICs0NjA0LDcgQEAgLSAo
Qk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBZRVM7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBCT09M
IGV4cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBhc3N3b3Jk
RmllbGQoZnJhbWUpOwogICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4
cG9zZUlucHV0Q29udGV4dCkgewogICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0
ID0gZXhwb3NlSW5wdXRDb250ZXh0OwpAQCAtNDkxOCw3ICs0NjQyLDcgQEAgLSAoQk9PTClyZXNp
Z25GaXJzdFJlc3BvbmRlcgogewogICAgIEJPT0wgcmVzaWduID0gW3N1cGVyIHJlc2lnbkZpcnN0
UmVzcG9uZGVyXTsKICAgICBpZiAocmVzaWduKSB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgICAgIGlmIChfcHJpdmF0ZS0+aXNJblNlY3VyZUlucHV0U3RhdGUp
IHsKICAgICAgICAgICAgIERpc2FibGVTZWN1cmVFdmVudElucHV0KCk7CiAgICAgICAgICAgICBf
cHJpdmF0ZS0+aXNJblNlY3VyZUlucHV0U3RhdGUgPSBOTzsKQEAgLTQ5NDUsMTcgKzQ2NjksMTEg
QEAgLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgogICAgICAgICAgICAgICAgIFtzZWxmIGNs
ZWFyRm9jdXNdOwogICAgICAgICB9CiAgICAgICAgIAotI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIGlkIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJB
ZnRlclJlc2lnbmluZ107CiAgICAgICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3ID0g
W25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KICAgICAgICAgICAg
ICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5G
cmFtZV0gZnJhbWVWaWV3XV07CiAgICAgICAgIGlmICghbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3
KQogICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZChmYWxzZSk7
Ci0jZWxzZQotICAgICAgICBOU1ZpZXcqIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBf
bmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZ107Ci0gICAgICAgIGlmIChuZXh0UmVzcG9u
ZGVyICYmICFbbmV4dFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBt
YWluRnJhbWVdIGZyYW1lVmlld11dKQotICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZChmYWxzZSk7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIHJlc2lnbjsK
IH0KQEAgLTQ5NjgsMTIgKzQ2ODYsMTAgQEAgLSAodm9pZClzZXREYXRhU291cmNlOihXZWJEYXRh
U291cmNlICopZGF0YVNvdXJjZQogCiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKIAot
ICAgIFtkYXRhU291cmNlIHJldGFpbl07Ci0gICAgW19wcml2YXRlLT5kYXRhU291cmNlIHJlbGVh
c2VdOwogICAgIF9wcml2YXRlLT5kYXRhU291cmNlID0gZGF0YVNvdXJjZTsKICAgICBbX3ByaXZh
dGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpkYXRhU291cmNlXTsKIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICghX3ByaXZhdGUtPmluc3Rh
bGxlZFRyYWNraW5nQXJlYSkgewogICAgICAgICBOU1RyYWNraW5nQXJlYU9wdGlvbnMgb3B0aW9u
cyA9IE5TVHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRl
ZCB8IE5TVHJhY2tpbmdJblZpc2libGVSZWN0IHwgTlNUcmFja2luZ0N1cnNvclVwZGF0ZTsKICAg
ICAgICAgaWYgKFdLUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCkgPT0gTlNTY3JvbGxlclN0eWxl
TGVnYWN5CkBAIC00OTg1LDEwICs0NzAxLDcgQEAgLSAodm9pZClzZXREYXRhU291cmNlOihXZWJE
YXRhU291cmNlICopZGF0YVNvdXJjZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvcHRpb25z
IHw9IE5TVHJhY2tpbmdBY3RpdmVJbktleVdpbmRvdzsKIAotICAgICAgICBOU1RyYWNraW5nQXJl
YSAqdHJhY2tpbmdBcmVhID0gW1tOU1RyYWNraW5nQXJlYSBhbGxvY10gCi0gICAgICAgICAgICBp
bml0V2l0aFJlY3Q6W3NlbGYgZnJhbWVdIG9wdGlvbnM6b3B0aW9ucyBvd25lcjpzZWxmIHVzZXJJ
bmZvOm5pbF07Ci0gICAgICAgIFtzZWxmIGFkZFRyYWNraW5nQXJlYTp0cmFja2luZ0FyZWFdOwot
ICAgICAgICBbdHJhY2tpbmdBcmVhIHJlbGVhc2VdOworICAgICAgICBbc2VsZiBhZGRUcmFja2lu
Z0FyZWE6YWRvcHROUyhbW05TVHJhY2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W3NlbGYg
ZnJhbWVdIG9wdGlvbnM6b3B0aW9ucyBvd25lcjpzZWxmIHVzZXJJbmZvOm5pbF0pLmdldCgpXTsK
ICAgICAgICAgX3ByaXZhdGUtPmluc3RhbGxlZFRyYWNraW5nQXJlYSA9IFlFUzsKICAgICB9CiAj
ZW5kaWYKQEAgLTQ5OTgsMTMgKzQ3MTEsMTUgQEAgLSAodm9pZClkYXRhU291cmNlVXBkYXRlZDoo
V2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi0v
LyBUaGlzIGlzIGFuIG92ZXJyaWRlIG9mIGFuIE5TQ29udHJvbCBtZXRob2QgdGhhdCB3YW50cyB0
byByZXBhaW50IHRoZSBlbnRpcmUgdmlldyB3aGVuIHRoZSB3aW5kb3cgcmVzaWducy9iZWNvbWVz
Ci0vLyBrZXkuICBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhv
c3RzIE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQorI2lm
IFBMQVRGT1JNKE1BQykKKworLy8gVGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBOU0NvbnRyb2wg
bWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUgZW50aXJlIHZpZXcgd2hlbiB0aGUgd2lu
ZG93IHJlc2lnbnMvYmVjb21lcyBrZXkuCisvLyBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wg
b25seSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3Jl
J3MgQXF1YSB0aGVtZQogLy8gcmVuZGVyZXIgKGFuZCB0aG9zZSBjZWxscyBtdXN0IGJlIGhvc3Rl
ZCBieSBhbiBlbmNsb3NpbmcgTlNDb250cm9sIGluIG9yZGVyIHRvIHBhaW50IHByb3Blcmx5KS4K
LS0gKHZvaWQpdXBkYXRlQ2VsbDooTlNDZWxsKiljZWxsCistICh2b2lkKXVwZGF0ZUNlbGw6KE5T
Q2VsbCAqKWNlbGwKIHsKIH0KKwogI2VuZGlmCiAKIC8vIERvZXMgc2V0TmVlZHNEaXNwbGF5Ok5P
IGFzIGEgc2lkZSBlZmZlY3Qgd2hlbiBwcmludGluZyBpcyBlbmRpbmcuCkBAIC01MDE0LDE5ICs0
NzI5LDEzIEBAIC0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdl
TG9naWNhbFdpZHRoOihmbG9hdCltaW5QYWdlTG9naWNhCiAgICAgaWYgKHByaW50aW5nID09IF9w
cml2YXRlLT5wcmludGluZyAmJiBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQgPT0gX3ByaXZhdGUtPnBh
Z2luYXRlU2NyZWVuQ29udGVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViRnJhbWUgKmZy
YW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBOU0FycmF5ICpzdWJmcmFtZXMgPSBbZnJhbWUgY2hp
bGRGcmFtZXNdOwotICAgIHVuc2lnbmVkIG4gPSBbc3ViZnJhbWVzIGNvdW50XTsKLSAgICB1bnNp
Z25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgIT0gbjsgKytpKSB7Ci0gICAgICAgIFdlYkZyYW1l
ICpzdWJmcmFtZSA9IFtzdWJmcmFtZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICBmb3IgKFdlYkZy
YW1lICpzdWJmcmFtZSBpbiBbW3NlbGYgX2ZyYW1lXSBjaGlsZEZyYW1lc10pIHsKICAgICAgICAg
V2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbc3ViZnJhbWUgZnJhbWVWaWV3XTsKICAgICAgICAg
aWYgKFtbc3ViZnJhbWUgX2RhdGFTb3VyY2VdIF9pc0RvY3VtZW50SFRNTF0pIHsKICAgICAgICAg
ICAgIFsoV2ViSFRNTFZpZXcgKilbZnJhbWVWaWV3IGRvY3VtZW50Vmlld10gX3NldFByaW50aW5n
OnByaW50aW5nIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdp
bmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAg
YWRqdXN0Vmlld1NpemU6YWRqdXN0Vmlld1NpemUgcGFnaW5hdGVTY3JlZW5Db250ZW50OnBhZ2lu
YXRlU2NyZWVuQ29udGVudF07CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBbX3ByaXZhdGUtPnBh
Z2VSZWN0cyByZWxlYXNlXTsKICAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gbmlsOwogICAgIF9w
cml2YXRlLT5wcmludGluZyA9IHByaW50aW5nOwogICAgIF9wcml2YXRlLT5wYWdpbmF0ZVNjcmVl
bkNvbnRlbnQgPSBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ7CkBAIC01MDU0LDcgKzQ3NjMsOCBAQCAt
ICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0
aDooZmxvYXQpbWluUGFnZUxvZ2ljYQogICAgIH0KIH0KIAotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKWNhblByaW50SGVhZGVyc0FuZEZvb3RlcnMKIHsK
ICAgICByZXR1cm4gWUVTOwpAQCAtNTE4MCwyMyArNDg5MCwyMiBAQCAtIChCT09MKWtub3dzUGFn
ZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQogICAgIHJhbmdlLT5sb2NhdGlvbiA9IDE7CiAg
ICAgZmxvYXQgdG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3Bl
cmF0aW9uOnByaW50T3BlcmF0aW9uXTsKICAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJp
bnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07Ci0gICAgW19wcml2YXRlLT5w
YWdlUmVjdHMgcmVsZWFzZV07CiAgICAgZmxvYXQgZnVsbFBhZ2VXaWR0aCA9IGZsb29yZihbcHJp
bnRPcGVyYXRpb24gX3dlYl9hdmFpbGFibGVQYXBlcldpZHRoXSAvIHRvdGFsU2NhbGVGYWN0b3Ip
OwogICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0ID0gZmxvb3JmKFtwcmludE9wZXJhdGlvbiBfd2Vi
X2F2YWlsYWJsZVBhcGVySGVpZ2h0XSAvIHRvdGFsU2NhbGVGYWN0b3IpOwogICAgIFdlYkZyYW1l
ICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CiAgICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0gW2Zy
YW1lIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9y
IHBhZ2VTaXplOk5TTWFrZVNpemUoZnVsbFBhZ2VXaWR0aCwgZnVsbFBhZ2VIZWlnaHQpXTsKLSAg
ICAKKwogICAgIC8vIEFwcEtpdCBnZXRzIGFsbCBtZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6
ZXJvLWxlbmd0aCBwYWdlIGNvdW50IChzZWUgMzU3NjMzNCksIHNvIGlmIHdlCiAgICAgLy8gaGl0
IHRoYXQgY2FzZSB3ZSdsbCBwYXNzIGFsb25nIGEgZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0
byBwcmludC4gVGhpcyB3aWxsIHByaW50CiAgICAgLy8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJl
Y3QtbG9va2luZyBoZWFkZXIgYW5kIGZvb3RlciBpZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNo
IG1hdGNoZXMKICAgICAvLyB0aGUgYmVoYXZpb3Igb2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4K
ICAgICBpZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0gPT0gMCkKICAgICAgICAgbmV3UGFnZVJlY3Rz
ID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtl
UmVjdCgwLCAwLCAxLCAxKV1dOwotICAgIAotICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBbbmV3
UGFnZVJlY3RzIHJldGFpbl07Ci0gICAgCisKKyAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gbmV3
UGFnZVJlY3RzOworCiAgICAgcmFuZ2UtPmxlbmd0aCA9IFtfcHJpdmF0ZS0+cGFnZVJlY3RzIGNv
dW50XTsKLSAgICAKKwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAgLTUyMzQsMTUgKzQ5NDMsMTIg
QEAgLSAodm9pZCllbmREb2N1bWVudAogICAgIC8vIE5vdGUgc2FkbHkgYXQgdGhpcyBwb2ludCBb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dIGlzIHN0aWxs
IE5PIAogICAgIFtzZWxmIF9lbmRQcmludE1vZGVBbmRSZXN0b3JlV2luZG93QXV0b2Rpc3BsYXld
OwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAo
dm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKLSNlbHNlCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorCiAtICh2b2lkKWtleURvd246KFdlYkV2ZW50ICopZXZlbnQKLSNlbmRpZgogewotI2lm
ICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFu
Y2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQg
bG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUg
b2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3Vy
cmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdl
YktpdCBvciBBcHBLaXQgY29kZS4KQEAgLTUyNTQsMTAgKzQ5NjAsOSBAQCAtICh2b2lkKWtleURv
d246KFdlYkV2ZW50ICopZXZlbnQKIAogICAgIEJPT0wgY2FsbFN1cGVyID0gTk87CiAKLSAgICBb
X3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5RG93bkV2
ZW50ID0gW2V2ZW50IHJldGFpbl07CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IGV2ZW50
OwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBjb21w
bGV0aW9uUG9wdXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyICYmIFtf
cHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOwogICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghZXZlbnRXYXNT
ZW50VG9XZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmtl
eUV2ZW50KGV2ZW50KSkgewpAQCAtNTI4MSwxMyArNDk4Niw5IEBAIC0gKHZvaWQpa2V5RG93bjoo
V2ViRXZlbnQgKilldmVudAogICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9pZClrZXlVcDooTlNFdmVu
dCAqKWV2ZW50Ci0jZWxzZQogLSAodm9pZClrZXlVcDooV2ViRXZlbnQgKilldmVudAotI2VuZGlm
CiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVGhlcmUn
cyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3Rl
ZCBldmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxl
YXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8v
IHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBp
bnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgpAQCAtNTMwNCw3ICs1MDA1LDggQEAgLSAodm9p
ZClrZXlVcDooV2ViRXZlbnQgKilldmVudAogICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOwog
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpZmxh
Z3NDaGFuZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3As
IGFuZApAQCAtNTMzNiw2ICs1MDM4LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQogICAgIH0KICAgICByZXR1cm4gW3N1cGVyIGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGVOYW1lXTsKIH0KKwogI2VuZGlmCiAK
IC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CkBAIC01MzgyLDE1ICs1MDg1LDE0
IEBAIC0gKHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyCiAgICAg
ICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7CiB9CiAK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNEYXRhICopX3Nl
bGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURgogewogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0g
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIKLSAgICAgICAg
YXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRBdHRyaWJ1dGVz
Rm9yU2VsZWN0aW9uU3RhcnQoKS5nZXQoKSA6IG5pbF07Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0
cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6QHsgfV07Ci0gICAgW3N0cmluZyByZWxlYXNlXTsKLSAgICByZXR1cm4gZGF0
YTsKKyAgICBhdXRvIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOkAieCIKKyAgICAgICAgYXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3Jl
RnJhbWUtPmVkaXRvcigpLmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKS5nZXQoKSA6
IG5pbF0pOworICAgIHJldHVybiBbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBb
c3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKIH0KIAogLSAoTlNEaWN0
aW9uYXJ5ICopX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkCkBAIC01NDEwLDYgKzUx
MTIsNyBAQCAtIChOU0RpY3Rpb25hcnkgKilfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9h
cmQKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gW3N0cmluZyBmb250QXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMSldOwogfQorCiAjZW5kaWYKIAogLSAoRE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlCkBAIC01NDE3LDcgKzUxMjAsOCBAQCAtIChET01D
U1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUKICAgICByZXR1cm4gW1tbc2VsZiBfZnJh
bWVdIERPTURvY3VtZW50XSBjcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uXTsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU1N0cmluZyAqKV9jb2xvckFz
U3RyaW5nOihOU0NvbG9yICopY29sb3IKIHsKICAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtjb2xv
ciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKQEAgLTU1
MTUsNyArNTIxOSw4IEBAIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9u
dEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnkKIAogICAgIHJldHVybiBzdHls
ZTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQogCiAtICh2b2lkKV9hcHBseVN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRp
b24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCiB7CkBAIC01
NTMyLDcgKzUyMzcsOCBAQCAtICh2b2lkKV9hcHBseUVkaXRpbmdTdHlsZVRvU2VsZWN0aW9uOihS
ZWY8RWRpdGluZ1N0eWxlPiYmKWVkaXRpbmdTdHlsZSB3aXRoVW5kbwogICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLmFwcGx5U3R5bGVUb1NlbGVjdGlvbihXVEZNb3ZlKGVkaXRpbmdTdHlsZSks
IHVuZG9BY3Rpb24pOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIC0gKEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50CiB7
CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKQEAgLTU1NzEsOCArNTI3
Nyw3IEBAIC0gKEJPT0wpcGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAogICAg
IEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0g
ZXZlbnQpOwogICAgIEJPT0wgcmV0ID0gTk87CiAKLSAgICBbX3ByaXZhdGUtPmtleURvd25FdmVu
dCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07
CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IGV2ZW50OwogICAgIAogICAgIFtzZWxmIHJl
dGFpbl07CiAKQEAgLTU3MzIsNyArNTQzNyw3IEBAIC0gKFJlZjxFZGl0aW5nU3R5bGU+KV9zdHls
ZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2VuZGVyCiB7CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CiAKLSAgICBOU1NoYWRvdyAqc2hhZG93
ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07CisgICAgYXV0byBzaGFkb3cgPSBhZG9wdE5TKFtb
TlNTaGFkb3cgYWxsb2NdIGluaXRdKTsKICAgICBbc2hhZG93IHNldFNoYWRvd09mZnNldDpOU01h
a2VTaXplKDEsIDEpXTsKIAogICAgIE5TRGljdGlvbmFyeSAqb2EgPSBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CkBAIC01NzQyLDE0ICs1NDQ3LDEyIEBAIC0gKFJl
ZjxFZGl0aW5nU3R5bGU+KV9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2VuZGVyCiAgICAg
ICAgIFtOU0NvbG9yIGJsYWNrQ29sb3JdLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUs
CiAgICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRCXSwgTlNGb250QXR0cmlidXRlTmFtZSwKICAg
ICAgICAgW05TQ29sb3Igd2hpdGVDb2xvcl0sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZSwKLSAgICAgICAgc2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsCisgICAgICAgIHNoYWRv
dy5nZXQoKSwgTlNTaGFkb3dBdHRyaWJ1dGVOYW1lLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRy
aWJ1dGVOYW1lLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXSwgTlNTdXBlcnNj
cmlwdEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5k
ZXJsaW5lU3R5bGVTaW5nbGVdLCBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKICAgICAg
ICAgbmlsXTsKIAotICAgIFtzaGFkb3cgcmVsZWFzZV07Ci0KICAgICBOU0RpY3Rpb25hcnkgKmEg
PSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9hXTsKICAgICBOU0RpY3Rpb25hcnkgKmIgPSBb
c2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9iXTsKIApAQCAtNTg3Myw3ICs1NTc2LDggQEAgLSAo
dm9pZCljaGFuZ2VDb2xvcjooaWQpc2VuZGVyCiAgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVj
dGlvbjpbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0
Q29sb3I6KV0gCiAgICAgICAgICAgICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0
Q29sb3JdOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCiAKIC0gKHZvaWQpX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0
b3IKIHsKQEAgLTU5MDksNyArNTYxMyw4IEBAIC0gKHZvaWQpY2FwaXRhbGl6ZVdvcmQ6KGlkKXNl
bmRlcgogICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2Fw
aXRhbGl6ZWRTdHJpbmcpXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0o
TUFDKQorCiAtICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xP
R1VFCkBAIC01OTE3LDcgKzU2MjIsNyBAQCAtICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKICAg
ICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghX3ByaXZh
dGUtPmNvbXBsZXRpb25Db250cm9sbGVyKQotICAgICAgICBfcHJpdmF0ZS0+Y29tcGxldGlvbkNv
bnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OltzZWxmIF93ZWJWaWV3XSBIVE1MVmlldzpzZWxmXTsKKyAgICAgICAgX3ByaXZhdGUt
PmNvbXBsZXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1dlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OltzZWxmIF93ZWJWaWV3XSBIVE1MVmlldzpzZWxm
XSk7CiAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBkb0NvbXBsZXRpb25dOwog
fQogCkBAIC02MDY0LDcgKzU3NjksOCBAQCAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlv
blJpZ2h0VG9MZWZ0OihpZClzZW5kZXIKIAogICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0Rp
cmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIH0KLSNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKW1ha2VC
YXNlV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KGlkKXNlbmRlcgogewpAQCAtNjA5NCw3ICs1ODAw
LDYgQEAgLSAodm9pZCl0cmFuc3Bvc2VXb3JkczooaWQpc2VuZGVyOwogCiAjZW5kaWYKIAotCiAv
LyBPdmVycmlkZSB0aGlzIHNvIHRoYXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFz
IGtleSBkb3duIGV2ZW50cyBzbyB3ZSBjYW4KIC8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBi
aW5kaW5ncyBtZWNoYW5pc20uCiAtIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVu
dCAqKWV2ZW50CkBAIC02MTA4LDcgKzU4MTMsOCBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqKWV2ZW50CiAgICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7CiB9CiAK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfYXV0b21h
dGljRm9jdXNSaW5nRGlzYWJsZWQKIHsKICAgICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgX2F1
dG9tYXRpY0ZvY3VzUmluZ0Rpc2FibGVkIGlzIE5PLCB3aGljaCBwcmV2ZW50cyBmb2N1cyByaW5n
cwpAQCAtNjExNiw3ICs1ODIyLDYgQEAgLSAoQk9PTClfYXV0b21hdGljRm9jdXNSaW5nRGlzYWJs
ZWQKICAgICAvLyBvZiBjaGFuZ2luZyB0aGlzIHRvIFlFUywgc28ganVzdCByZXR1cm4gWUVTIGFs
bCB0aGUgdGltZS4gPHJkYXI6Ly9wcm9ibGVtLzEzNzgwMTIyPiwKICAgICByZXR1cm4gWUVTOwog
fQotI2VuZGlmCiAKIC0gKHZvaWQpX3VwZGF0ZUNvbnRyb2xUaW50cwogewpAQCAtNjEzNSwxOSAr
NTg0MCwxNCBAQCAtICh2b2lkKV91cGRhdGVDb250cm9sVGludHMKIC8vIHRvIGRvIHRoaXMgd2l0
aCBBUEkuIDxyZGFyOi8vcHJvYmxlbS81MTM2NzYwPgogLSAodm9pZClfd2luZG93Q2hhbmdlZEtl
eVN0YXRlCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocHRocmVhZF9tYWluX25wKCkp
CiAgICAgICAgIFtzZWxmIF91cGRhdGVDb250cm9sVGludHNdOwogICAgIGVsc2UKICAgICAgICAg
W3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihfdXBkYXRlQ29udHJv
bFRpbnRzKSB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKLSNlbHNlCi0gICAgW3Nl
bGYgX3VwZGF0ZUNvbnRyb2xUaW50c107Ci0jZW5kaWYKIAogICAgIFtzdXBlciBfd2luZG93Q2hh
bmdlZEtleVN0YXRlXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKW90aGVyTW91
c2VEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBpZiAoZXZlbnQuYnV0dG9uTnVtYmVyICE9
IDIgfHwgW05TTWVudSBtZW51VHlwZUZvckV2ZW50OmV2ZW50XSA9PSBOU01lbnVUeXBlQ29udGV4
dE1lbnUpIHsKQEAgLTYxNzMsNiArNTg3Myw3IEBAIC0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2
ZW50ICopZXZlbnQKICAgICBlbHNlCiAgICAgICAgIFtzdXBlciBvdGhlck1vdXNlVXA6ZXZlbnRd
OwogfQorCiAjZW5kaWYKIAogQGVuZApAQCAtNjE4MSw4ICs1ODgyLDggQEAgQGltcGxlbWVudGF0
aW9uIFdlYkhUTUxWaWV3IChXZWJJbnRlcm5hbCkKIAogLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdl
ZAogeworI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBfdXBkYXRlU2VsZWN0aW9uRm9ySW5w
dXRNYW5hZ2VyXTsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIFtzZWxmIF91cGRhdGVGb250UGFu
ZWxdOwogICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewog
ICAgICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlk
YXRlKCkpCkBAIC02MTkxLDcgKzU4OTIsOCBAQCAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCiAj
ZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2
b2lkKV91cGRhdGVGb250UGFuZWwKIHsKICAgICAvLyBGSVhNRTogTlNUZXh0VmlldyBiYWlscyBv
dXQgaWYgYmVjb21pbmcgb3IgcmVzaWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9yIHdoaWNoIGl0
IGhhcyBpdmFyIGZsYWdzLiBOb3QKQEAgLTYyMjksNyArNTkzMSw4IEBAIC0gKHZvaWQpX3NldFNv
ZnRTcGFjZVJhbmdlOihOU1JhbmdlKXJhbmdlCiB7CiAgICAgX3ByaXZhdGUtPnNvZnRTcGFjZVJh
bmdlID0gcmFuZ2U7CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKIAogLSAoQk9PTClfY2FuU21hcnRDb3B5T3JEZWxldGUKIHsKQEAgLTYyMzks
MTEgKzU5NDIsMTMgQEAgLSAoQk9PTClfY2FuU21hcnRDb3B5T3JEZWxldGUKICAgICByZXR1cm4g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3Jk
R3JhbnVsYXJpdHk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
KwogLSAoTlNFdmVudCAqKV9tb3VzZURvd25FdmVudAogewotICAgIHJldHVybiBfcHJpdmF0ZS0+
bW91c2VEb3duRXZlbnQ7CisgICAgcmV0dXJuIF9wcml2YXRlLT5tb3VzZURvd25FdmVudC5nZXQo
KTsKIH0KKwogI2VuZGlmCiAKIC0gKFdlYkZyYW1lICopX2ZyYW1lCkBAIC02MjU3LDcgKzU5NjIs
OCBAQCAtICh2b2lkKWNsb3NlSWZOb3RDdXJyZW50VmlldwogICAgICAgICBbc2VsZiBjbG9zZV07
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAogewogICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWluVGV4dDpOT107
CkBAIC02NDE0LDExICs2MTIwLDE0IEBAIC0gKHZvaWQpcXVpY2tMb29rV2l0aEV2ZW50OihOU0V2
ZW50ICopZXZlbnQKICAgICBbW3NlbGYgX3dlYlZpZXddIF9jbGVhclRleHRJbmRpY2F0b3JXaXRo
QW5pbWF0aW9uOlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZhZGVPdXRd
OwogICAgIFtzdXBlciBxdWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRdOwogfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyN1bmRlZiBDT01NQU5E
X1BST0xPR1VFCiAKIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKIHsKLSAg
ICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBhdXRvKiBwYXJhbWV0
ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CiAgICAgaWYgKCFw
YXJhbWV0ZXJzIHx8IHBhcmFtZXRlcnMtPmV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTY0NTAsNyArNjE1OSw4IEBAIC0gKHZvaWQpX2V4
ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKICAgICBwYXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZl
ZEtleXByZXNzQ29tbWFuZHMgPSBmYWxzZTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQorCiAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVu
dCopZXZlbnQgc2F2aW5nQ29tbWFuZHM6KEJPT0wpc2F2aW5nQ29tbWFuZHMKIHsKICAgICBBU1NF
UlQoY29yZShbc2VsZiBfZnJhbWVdKSA9PSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpLT5kb2N1
bWVudCgpLmZyYW1lKCkpOwpAQCAtNjUwNSw3ICs2MjE1LDcgQEAgLSAoQk9PTClfaW50ZXJwcmV0
S2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNhdmluZ0NvbW1hbmRzOihCT09MKXNhdmlu
Z0NvbW0KICAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBsYXRmb3Jt
RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKQogICAgICAgICAgICAgW3NlbGYg
X2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogICAgIH0KLSAgICBfcHJpdmF0ZS0+aW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMgPSBudWxscHRyOwogCiAgICAgLy8gQW4gaW5wdXQgbWV0aG9kIG1h
eSBtYWtlIHNldmVyYWwgYWN0aW9ucyBwZXIga2V5cHJlc3MuIEZvciBleGFtcGxlLCBwcmVzc2lu
ZyBSZXR1cm4gd2l0aCBLb3JlYW4gSU0gYm90aCBjb25maXJtcyBpdCBhbmQgc2VuZHMgYSBuZXds
aW5lLgogICAgIC8vIElNLWxpa2UgYWN0aW9ucyBhcmUgaGFuZGxlZCBpbW1lZGlhdGVseSAoc28g
cGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgaXMgdHJ1ZSksIGJ1
dCB0aGVyZSBhcmUgc2F2ZWQgY29tbWFuZHMgdGhhdApAQCAtNjUyMSw4ICs2MjMxLDkgQEAgLSAo
Qk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNhdmluZ0NvbW1h
bmRzOihCT09MKXNhdmluZ0NvbW0KICAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgZXhlY3V0ZWQg
YWxsIGNvbW1hbmRzLCBkb24ndCBkbyBpdCBhZ2Fpbi4KICAgICByZXR1cm4gcGFyYW1ldGVycy5l
dmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHM7CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKLSAgICAKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogI2lmIFBMQVRGT1JNKElP
UykKICAgICAKICNkZWZpbmUga1dlYkVudGVyS2V5ICAgICAgICAgMHgwMDAzCkBAIC02NTc2LDEx
ICs2Mjg3LDcgQEAgLSAoQk9PTClfaGFuZGxlRWRpdGluZ0tleUV2ZW50OihLZXlib2FyZEV2ZW50
ICopd2NFdmVudAogfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotI2lmICFQTEFURk9STShJ
T1MpCi0tIChXZWJDb3JlOjpDYWNoZWRJbWFnZSopcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UK
LXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwotfQor
I2lmIFBMQVRGT1JNKE1BQykKIAogLSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNvdXJjZQogewpAQCAtNjU5MSwxMyArNjI5OCwxMiBA
QCAtICh2b2lkKXNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOihXZWJDb3JlOjpDYWNoZWRJ
bWFnZSopc291cmNlCiAgICAgICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKICAgICBfcHJpdmF0ZS0+cHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSBzb3VyY2U7CiB9Ci0jZW5kaWYKIAotI3VuZGVmIENP
TU1BTkRfUFJPTE9HVUUKKyNlbmRpZgogCiAtICh2b2lkKV9sYXlvdXRJZk5lZWRlZAogewotI2lm
ICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFTU0VSVCghX3ByaXZhdGUt
PnN1YnZpZXdzU2V0QXNpZGUpOwogI2VuZGlmCiAKQEAgLTY2MjMsMTYgKzYzMjksMTYgQEAgLSAo
Qk9PTClfbmVlZHNMYXlvdXQKICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX25lZWRzTGF5b3V0
XTsKIH0KIAotLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVyCisjaWYgUExB
VEZPUk0oTUFDKQorCistICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciAqKWxheWVyCiB7
Ci0jaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIV9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3
KSB7Ci0gICAgICAgIE5TVmlldyogaG9zdGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ0ZsaXBw
ZWRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11dOworICAgICAgICBhdXRv
IGhvc3RpbmdWaWV3ID0gYWRvcHROUyhbW1dlYkxheWVySG9zdGluZ0ZsaXBwZWRWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11dKTsKICAgICAgICAgW2hvc3RpbmdWaWV3IHNl
dEF1dG9yZXNpemluZ01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFi
bGUpXTsKLSAgICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlld107Ci0gICAgICAgIFto
b3N0aW5nVmlldyByZWxlYXNlXTsKKyAgICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmll
dy5nZXQoKV07CiAgICAgICAgIC8vIGhvc3RpbmdWaWV3IGlzIG93bmVkIGJ5IGJlaW5nIGEgc3Vi
dmlldyBvZiBzZWxmCi0gICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGlu
Z1ZpZXc7CisgICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXcu
Z2V0KCk7CiAgICAgfQogCiAgICAgLy8gTWFrZSBhIGNvbnRhaW5lciBsYXllciwgd2hpY2ggd2ls
bCBnZXQgc2l6ZWQvcG9zaXRpb25lZCBieSBBcHBLaXQgYW5kIENBLgpAQCAtNjY2MCwyMiArNjM2
NiwxOCBAQCAtICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIKIAogICAgIGlm
IChXS0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3JlTGlvbigpKQogICAgICAgICBbdmlld0xh
eWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9
CiAKIC0gKHZvaWQpZGV0YWNoUm9vdExheWVyCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKICAgICBp
ZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKICAgICAgICAgW19wcml2YXRlLT5sYXll
ckhvc3RpbmdWaWV3IHNldExheWVyOm5pbF07CiAgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0
aW5nVmlldyBzZXRXYW50c0xheWVyOk5PXTsKICAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3Rp
bmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwogICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0
aW5nVmlldyA9IG5pbDsKICAgICB9Ci0jZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKIC0g
KHZvaWQpZHJhd0xheWVyOihDQUxheWVyICopbGF5ZXIgaW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y3R4CiB7CiAgICAgaWYgKF9wcml2YXRlKSB7CkBAIC02NjkxLDE1ICs2MzkzLDEwIEBAIC0gKHZv
aWQpZHJhd0xheWVyOihDQUxheWVyICopbGF5ZXIgaW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4
CiAgICAgICAgIF9wcml2YXRlLT5kcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIgPSBOTzsKICAg
ICB9CiB9Ci0jZW5kaWYKIAogLSAoQk9PTClfd2ViX2lzRHJhd2luZ0ludG9MYXllcgogewotI2lm
IFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4gWUVTOwotI2Vsc2UKICAgICByZXR1cm4gX3ByaXZh
dGUtPmRyYXdpbmdJbnRvTGF5ZXI7Ci0jZW5kaWYKIH0KIAogLSAoQk9PTClfd2ViX2lzRHJhd2lu
Z0ludG9BY2NlbGVyYXRlZExheWVyCkBAIC02NzA3LDcgKzY0MDQsNiBAQCAtIChCT09MKV93ZWJf
aXNEcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIKICAgICByZXR1cm4gX3ByaXZhdGUtPmRyYXdp
bmdJbnRvQWNjZWxlcmF0ZWRMYXllcjsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQp
X2NoYW5nZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dvcmQKIHsKICAgICBpZiAoIVtz
ZWxmIF9jYW5FZGl0XSkKQEAgLTY3MjUsMzQgKzY0MjEsNTIgQEAgLSAodm9pZClfY2hhbmdlU3Bl
bGxpbmdUb1dvcmQ6KE5TU3RyaW5nICopbmV3V29yZAogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFj
dGlvblBhc3RlZF0pCiAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6bmV3V29yZCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKIH0K
KworLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQK
K3sKKyAgICBpZiAoIV9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIpIHsKKyAgICAgICAgX3ByaXZh
dGUtPmF1dG9zY3JvbGxUaW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRl
cnZhbDpBVVRPU0NST0xMX0lOVEVSVkFMCisgICAgICAgICAgICB0YXJnZXQ6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IoX2F1dG9zY3JvbGwpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU107CisgICAg
ICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gdHJpZ2dlckV2ZW50OworICAg
IH0KK30KKworI2VuZGlmCisKKy0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgW19wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgaW52YWxpZGF0ZV07
CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBfcHJpdmF0ZS0+YXV0
b3Njcm9sbFRyaWdnZXJFdmVudCA9IG5pbDsKICNlbmRpZgorfQorCistIChXZWJQbHVnaW5Db250
cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnBsdWdp
bkNvbnRyb2xsZXIuZ2V0KCk7Cit9CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxW
aWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBM
QVRGT1JNKE1BQykKKwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQK
IHsKLSAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzOwotICAgIGlmICghdmFsaWRB
dHRyaWJ1dGVzKSB7Ci0gICAgICAgIHZhbGlkQXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5h
bWUsIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAgICAgTlNNYXJrZWRD
bGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwgTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0
cmlidXRlTmFtZSwKKyAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIE5TVW5kZXJsaW5lU3R5bGVBdHRy
aWJ1dGVOYW1lLAorICAgICAgICBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSwKKyAgICAg
ICAgTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwKKyAgICAgICAgTlNUZXh0SW5w
dXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSwKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVGV4dEFsdGVybmF0aXZlc0F0
dHJpYnV0ZU5hbWUsCisgICAgICAgIE5TVGV4dEFsdGVybmF0aXZlc0F0dHJpYnV0ZU5hbWUsCiAj
ZW5kaWYKICNpZiBVU0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJTkcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU1RleHRJbnNlcnRpb25VbmRvYWJsZUF0dHJpYnV0ZU5hbWUsCisgICAgICAg
IE5TVGV4dEluc2VydGlvblVuZG9hYmxlQXR0cmlidXRlTmFtZSwKICNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICAgICAgLy8gTlNUZXh0IGFsc28gc3VwcG9ydHMg
dGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBidXQgaXQncwotICAgICAgICAvLyBoYXJkIHRvIHRl
bGwgd2hpY2ggYXJlIHJlYWxseSByZXF1aXJlZCBmb3IgdGV4dCBpbnB1dCB0bwotICAgICAgICAv
LyB3b3JrIHdlbGw7IEkgaGF2ZSBub3Qgc2VlbiBhbnkgaW5wdXQgbWV0aG9kIG1ha2UgdXNlIG9m
IHRoZW0geWV0LgotICAgICAgICAvLyAgICAgTlNGb250QXR0cmlidXRlTmFtZSwgTlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAvLyAgICAgTlNCYWNrZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lLCBOU0xhbmd1YWdlQXR0cmlidXRlTmFtZS4KLSAgICAgICAgQ0ZSZXRhaW4o
dmFsaWRBdHRyaWJ1dGVzKTsKLSAgICB9CisgICAgICAgIG5pbF07CiAgICAgTE9HKFRleHRJbnB1
dCwgInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQgLT4gKC4uLikiKTsKICAgICByZXR1cm4g
dmFsaWRBdHRyaWJ1dGVzOwogfQpAQCAtNjc3OCw3ICs2NDkyLDggQEAgLSAoTlNBdHRyaWJ1dGVk
U3RyaW5nICopdGV4dFN0b3JhZ2UKICAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhbiBlbXB0eSBz
dHJpbmcgcmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50IFRTTSBmcm9tIGNhbGxpbmcgLXN0cmlu
ZwogICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOwogfQotI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKE5TVUludGVnZXIpY2hh
cmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAogewpAQCAtNjg2NCw3ICs2NTc5
LDggQEAgLSAoTlNSYW5nZSltYXJrZWRSYW5nZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1JhbmdlCiB7CiAg
ICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwpAQCAtNjg5NCw2ICs2NjEw
LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5n
ZTooTlNSYW5nZSluc1JhbmdlCiAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5n
ZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKwogI2Vu
ZGlmCiAKIC0gKE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCkBAIC02OTIzLDcgKzY2
NDAsNyBAQCAtICh2b2lkKXVubWFya1RleHQKICAgICBMT0coVGV4dElucHV0LCAidW5tYXJrVGV4
dCIpOwogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVz
IGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIGF1dG8qIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+
aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKIAogICAgIGlmIChwYXJhbWV0ZXJzKSB7CiAg
ICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyA9IHRy
dWU7CkBAIC02OTM0LDcgKzY2NTEsOCBAQCAtICh2b2lkKXVubWFya1RleHQKICAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5l
cyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5l
PiYgcmVzdWx0KQogewogICAgIGludCBsZW5ndGggPSBbW3N0cmluZyBzdHJpbmddIGxlbmd0aF07
CkBAIC02OTU3LDEzICs2Njc1LDE0IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5T
QXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgICAg
IGkgPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKICAgICB9CiB9CisKICNlbmRpZgog
CiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1Jhbmdl
KW5ld1NlbFJhbmdlCiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNd
OwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBpc0F0
dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmlu
ZyBjbGFzc11dOwogICAgIEFTU0VSVChpc0F0dHJpYnV0ZWRTdHJpbmcgfHwgW3N0cmluZyBpc0tp
bmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKIApAQCAtNjk3MSw3ICs2NjkwLDcgQEAgLSAo
dm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdT
ZWxSYW5nZQogI2VuZGlmCiAKICAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBw
YXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0gICAgV2Vi
SFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZh
dGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgYXV0byogcGFyYW1ldGVycyA9
IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwogCiAgICAgaWYgKHBhcmFt
ZXRlcnMpIHsKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVF
ZmZlY3RzID0gdHJ1ZTsKQEAgLTY5ODksNyArNjcwOCw3IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4
dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKICAgICBOU1N0
cmluZyAqdGV4dDsKICAgICBOU1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UgPSB7IE5TTm90Rm91bmQs
IDAgfTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChp
c0F0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBtb3N0IGF0
dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBhbiBpbnB1dCBtZXRob2QgY2Fubm90IHNwZWNp
ZnkgZS5nLiBhIGZvbnQgb3IgYSBnbHlwaCB2YXJpYXRpb24uCiAgICAgICAgIHRleHQgPSBbc3Ry
aW5nIHN0cmluZ107CkBAIC03MDMwLDcgKzY3NDksNyBAQCAtICh2b2lkKWRvQ29tbWFuZEJ5U2Vs
ZWN0b3I6KFNFTClzZWxlY3RvcgogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRl
cnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgogICAg
IC8vIFRoZSBzYW1lIGNhbGwgdG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBkbyBtb3JlIHRoYW4g
b25lIGNvbW1hbmQuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Cisg
ICAgYXV0byogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzOwogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5
SU0gPSBmYWxzZTsKIApAQCAtNzA1NiwxOCArNjc3NSwxNyBAQCAtICh2b2lkKWRvQ29tbWFuZEJ5
U2VsZWN0b3I6KFNFTClzZWxlY3RvcgogICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1h
bmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwogICAgICAgICAgICAg
aWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkKICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRs
ZWQgPSBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgV2Vi
S2l0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIHNl
bGVjdG9yIHRvIHN1cGVyLgogICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRv
Q29tbWFuZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsKIAogICAgICAgICAgICAgICAgIC8vIFRoZSBz
aW5rIGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMgdXMgaWYgdGhlIHJlc3BvbmRlciB3ZW50IHVu
aGFuZGxlZCwgYW5kCiAgICAgICAgICAgICAgICAgLy8gMikgcHJldmVudHMgYW55IE5TQmVlcDsg
d2UgZG9uJ3QgZXZlciB3YW50IHRvIGJlZXAgaGVyZS4KLSAgICAgICAgICAgICAgICBXZWJSZXNw
b25kZXJDaGFpblNpbmsgKnNpbmsgPSBbW1dlYlJlc3BvbmRlckNoYWluU2luayBhbGxvY10gaW5p
dFdpdGhSZXNwb25kZXJDaGFpbjpzZWxmXTsKKyAgICAgICAgICAgICAgICBhdXRvIHNpbmsgPSBh
ZG9wdE5TKFtbV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIGFsbG9jXSBpbml0V2l0aFJlc3BvbmRlckNo
YWluOnNlbGZdKTsKICAgICAgICAgICAgICAgICBbc3VwZXIgZG9Db21tYW5kQnlTZWxlY3Rvcjpz
ZWxlY3Rvcl07CiAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gIVtzaW5rIHJlY2Vp
dmVkVW5oYW5kbGVkQ29tbWFuZF07CiAgICAgICAgICAgICAgICAgW3NpbmsgZGV0YWNoXTsKLSAg
ICAgICAgICAgICAgICBbc2luayByZWxlYXNlXTsKIAogICAgICAgICAgICAgICAgIF9wcml2YXRl
LT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOwogICAgICAgICAgICAgfQpAQCAt
NzA4MywxNCArNjgwMSwxNCBAQCAtICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxl
Y3RvcgogCiAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0
cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKICAgICBBU1NF
UlQoaXNBdHRyaWJ1dGVkU3RyaW5nIHx8IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSk7CiAKICAgICBMT0coVGV4dElucHV0LCAiaW5zZXJ0VGV4dDpcIiVAXCIiLCBpc0F0
dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcpOwogI2VuZGlmCiAKLSAg
ICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBhdXRvKiBwYXJhbWV0
ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CiAgICAgaWYgKHBh
cmFtZXRlcnMpCiAgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IGZhbHNlOwogCkBA
IC03MTAzLDcgKzY4MjEsNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogI2VuZGlm
CiAKICAgICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+IGRpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb25zOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
IChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
ICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4gdGV4dEFs
dGVybmF0aXZlczsKQEAgLTcxNTEsNyArNjg2OSw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQp
c3RyaW5nCiAgICAgICAgIG5lZWRUb1JlbW92ZVNvZnRTcGFjZSA9IFlFUzsKICAgICB9CiAjZW5k
aWYKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBfcHJpdmF0ZS0+
c29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICNlbmRpZgogCkBA
IC03MTg5LDcgKzY5MDcsOCBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogICAgICAg
ICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0gZXZlbnRI
YW5kbGVkOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0g
KHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKIHsKICAgICBpZiAoIVtbc2VsZiB3aW5kb3dd
IGlzS2V5V2luZG93XSB8fCAoW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdICE9IHNlbGYg
JiYgIV9wcml2YXRlLT5fZm9yY2VVcGRhdGVTZWN1cmVJbnB1dFN0YXRlKSkgewpAQCAtNzIyMCwx
MSArNjkzOSw5IEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKICAgICAgICAgVFNN
UmVtb3ZlRG9jdW1lbnRQcm9wZXJ0eSgwLCBrVFNNRG9jdW1lbnRFbmFibGVkSW5wdXRTb3VyY2Vz
UHJvcGVydHlUYWcpOwogICAgIH0KIH0KLSNlbmRpZgogCiAtICh2b2lkKV91cGRhdGVTZWxlY3Rp
b25Gb3JJbnB1dE1hbmFnZXIKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAg
ICByZXR1cm47CkBAIC03MjU0LDIzICs2OTcxLDE3IEBAIC0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlv
bkZvcklucHV0TWFuYWdlcgogICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1h
bmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2VsZl07CiAgICAgfQogI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAotI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBjb2RlOgot
ICAgIC8vCi0gICAgLy8gICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmdldENvbXBvc2l0
aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQotICAgIC8vICAgICAgICAgIGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7Ci0g
ICAgLy8KLSAgICAvLwotICAgIC8vIHdvdWxkIHdvcmsgaWYgZ2V0Q29tcG9zaXRpb25TZWxlY3Rp
b24gcmV0dXJuZWQgZmFsc2Ugd2hlbiBjb21wb3NpdGlvbiAhPSBzZWxlY3Rpb24uCi0gICAgLy8g
V2h5IGRvZXNuJ3QgaXQ/ICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY4MzcyNTI+IGZvciBxdWVzdGlv
bnMuCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogfQogCisjZW5kaWYKKwogI2lmIEhBVkUoVE9V
Q0hfQkFSKQorCiAtIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtCiB7CiAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gY2FuZGlkYXRlTGlz
dF07CiB9CisKICNlbmRpZgogCiBAZW5kCkBAIC03MzA5LDYgKzcwMjAsNyBAQCAtIChOU1ZpZXcg
KilzZWxlY3Rpb25WaWV3CiB9CiAKICNpZiBQTEFURk9STShJT1MpCisKIHN0YXRpYyBDR0ltYWdl
UmVmIGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBDR1JlY3QgcmVjdCkKIHsKICAgICBQYWdl
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKQEAgLTczODUsOSArNzA5NywxMCBAQCBzdGF0aWMgQ0dJ
bWFnZVJlZiBzZWxlY3Rpb25JbWFnZShGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFja1RleHQp
CiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yTm9ybWFs
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKE1BQykKIC0gKE5TSW1hZ2Ug
KilzZWxlY3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKICNl
bHNlCiAtIChDR0ltYWdlUmVmKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClm
b3JjZUJsYWNrVGV4dApAQCAtNzQxNSwyMiArNzEyOCwyMyBAQCAtIChOU1JlY3Qpc2VsZWN0aW9u
SW1hZ2VSZWN0CiAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbkJvdW5kcygpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCisKIC0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KIHsKICAgICBp
ZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSkgewogICAgICAgICBOU011dGFibGVBcnJh
eSAqdHlwZXMgPSBbW1tbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gbXV0
YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKICAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpXZWJTbWFy
dFBhc3RlUGJvYXJkVHlwZV07CiAgICAgICAgIHJldHVybiB0eXBlczsKLSAgICB9IGVsc2Ugewot
ICAgICAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXTsK
ICAgICB9CisgICAgcmV0dXJuIFtbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBl
c107CiB9CiAKIC0gKHZvaWQpd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0Fy
cmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7CiAg
ICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOm5pbF07CiB9CisKICNlbmRp
ZgogCiAtICh2b2lkKXNlbGVjdEFsbApAQCAtNzQ1Myw3ICs3MTY3LDggQEAgLSAoTlNTdHJpbmcg
KilzdHJpbmcKICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3N0cmluZ0ZvclJhbmdlOltzZWxm
IF9kb2N1bWVudFJhbmdlXV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKKwogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9N
UmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmc7CkBAIC03NDk2LDYgKzcyMTEsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcg
KilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKICAgICB9CiAgICAgcmV0dXJuIGF0dHJpYnV0ZWRT
dHJpbmc7CiB9CisKICNlbmRpZgogCiAtIChOU1N0cmluZyAqKXNlbGVjdGVkU3RyaW5nCkBAIC03
NTkzLDIyICs3MzA5LDE5IEBAIC0gKEJPT0wpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMKIAogQGVuZAogCi0vLyBUaGlzIGlzIHVz
ZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVByb3RvY29s
U2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNlLgorLy8gVGhpcyBpcyB1c2VkIGJ5IEFwcEtpdC9U
ZXh0S2l0IGFuZCBpcyBpbXBsZW1lbnRlZCBoZXJlIGluIHBhcnQgc28gdGhhdCBXZWJEYXRhUHJv
dG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVkIG9uY2UuCisvLyBGSVhNRTogUmVhbGx5IHNob3Vs
ZCBoYXZlIGFuIEBpbnRlcmZhY2UgZm9yIHRoaXMgc29tZXdoZXJlIGluIHRoaXMgZmlsZSBvciBh
biBpbmNsdWRlLiBOb3Qgc3VyZSB3aHkgaXQgY29tcGlsZXMgd2l0aG91dCBvbmUuCiBAaW1wbGVt
ZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCiAKICsgKE5TVVJMICopX3dlYl91bmlxdWVXZWJE
YXRhVVJMCiB7Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVV
SURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxl
YXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUs
IFVVSURTdHJpbmddXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0gICAgcmV0dXJuIFVS
TDsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBjcmVhdGVVVUlEU3RyaW5n
KCldXTsKIH0KIAogQGVuZAogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIEBpbXBsZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsKIAogLSAoaWQpaW5pdFdp
dGhSZXNwb25kZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgpAQCAtNzY0OSw0ICs3MzYyLDUg
QEAgLSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rpb24gd2l0aDooaWQpb2JqZWN0CiB9CiAK
IEBlbmQKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCmluZGV4IGRkYzAyMTUxMzUyNjIyMjljNDliYzIyMGJj
MTRkYzhjNWI0ODU3YWEuLjhiNjQ3MjE1ZmYzOTIxYjVjNzk1NjkwZDVkYzkyZTA0ODhkMDg2MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdJ
bnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXdJbnRlcm5hbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAKIAogQGNsYXNzIENB
TGF5ZXI7CiBAY2xhc3MgV2ViRnJhbWU7CitAY2xhc3MgV2ViUGx1Z2luQ29udHJvbGxlcjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENhY2hlZEltYWdlOwpAQCAtMzksMjAgKzQw
LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogQGlu
dGVyZmFjZSBXZWJIVE1MVmlldyAoKSA8TlNEcmFnZ2luZ1NvdXJjZT4KIEBlbmQKKwogI2VuZGlm
CiAKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkludGVybmFsKQogLSAodm9pZClfc2VsZWN0
aW9uQ2hhbmdlZDsKLSNpZiAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0oTUFDKQogLSAo
dm9pZClfdXBkYXRlRm9udFBhbmVsOwogLSAodm9pZClfc2V0U29mdFNwYWNlUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2U7CiAjZW5kaWYKKwogLSAoQk9PTClfY2FuU21hcnRDb3B5T3JEZWxldGU7CiAKIC0g
KFdlYkZyYW1lICopX2ZyYW1lOwotI2lmICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShN
QUMpCiAtICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyOwogLSAo
Qk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYkNvcmU6OktleWJvYXJkRXZlbnQgKilldmVudCBz
YXZpbmdDb21tYW5kczooQk9PTClzYXZpbmdDb21tYW5kczsKIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkOwpAQCAtNjAsMjYgKzY2LDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC0gKEJPT0wp
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOwogLSAodm9pZClzZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOihCT09MKWZsYWc7CiAtICh2b2lkKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVy
OwotLSAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwog
LSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1h
Z2UqKXNvdXJjZTsKLSNlbHNlCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKIC0gKEJPT0wp
X2hhbmRsZUVkaXRpbmdLZXlFdmVudDooV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCAqKWV2ZW50Owog
I2VuZGlmCisKIC0gKHZvaWQpX3dlYl91cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJz
aXZlOwogLSAodm9pZClfZGVzdHJveUFsbFdlYlBsdWdpbnM7CiAtIChCT09MKV9uZWVkc0xheW91
dDsKIAotLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVyOworI2lmIFBMQVRG
T1JNKE1BQykKKy0gKHZvaWQpYXR0YWNoUm9vdExheWVyOihDQUxheWVyICopbGF5ZXI7CiAtICh2
b2lkKWRldGFjaFJvb3RMYXllcjsKKwogLSAoQk9PTClfd2ViX2lzRHJhd2luZ0ludG9MYXllcjsK
IC0gKEJPT0wpX3dlYl9pc0RyYXdpbmdJbnRvQWNjZWxlcmF0ZWRMYXllcjsKKyNlbmRpZgogCiAj
aWYgUExBVEZPUk0oSU9TKQogLSAodm9pZClfbGF5b3V0SWZOZWVkZWQ7CiAjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpX2NoYW5nZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAq
KW5ld1dvcmQ7CistICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjooTlNFdmVudCAqKWV2ZW50
OworLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcjsKICNlbmRpZgorCistIChXZWJQbHVnaW5D
b250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXI7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFJlbW92ZWRBcHBLaXRTdXBlcmNsYXNzTWV0aG9kcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCmluZGV4IGM0MGM3
NmRhYTlhY2E0ZWI3NTMyYTRhYzQ4MmZjNGFhYmQ5NmMxZDUuLmI4Yzk2Y2UwODE2ZWZmMThkYTIy
MDI4Zjk2ZDAzMGJiYWMzNDZhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaApAQCAtMzcsNyArMzcsNiBAQAogQGNsYXNz
IERPTURvY3VtZW50RnJhZ21lbnQ7CiBAY2xhc3MgRE9NTm9kZTsKIEBjbGFzcyBET01SYW5nZTsK
LUBjbGFzcyBXZWJQbHVnaW5Db250cm9sbGVyOwogCiBleHRlcm4gY29uc3QgZmxvYXQgX1dlYkhU
TUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogZXh0ZXJuIGNvbnN0IGZsb2F0IF9X
ZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKQEAgLTUzLDIzICs1MiwyMSBA
QCBleHRlcm4gY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFj
dG9yOwogLSAodm9pZCljbG9zZTsKIAogI2lmICFUQVJHRVRfT1NfSVBIT05FCisKIC8vIE1vZGlm
aWVyIChmbGFnc0NoYW5nZWQpIHRyYWNraW5nIFNQSQogKyAodm9pZClfcG9zdEZsYWdzQ2hhbmdl
ZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQ7CiAtICh2b2lkKV91cGRhdGVNb3Vz
ZW92ZXJXaXRoRmFrZUV2ZW50OwogCiAtICh2b2lkKV9zZXRBc2lkZVN1YnZpZXdzOwogLSAodm9p
ZClfcmVzdG9yZVN1YnZpZXdzOwotI2VuZGlmCiAKLS0gKEJPT0wpX2luc2lkZUFub3RoZXJIVE1M
VmlldzsKLS0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGY7Ci0jaWYgIVRBUkdFVF9PU19J
UEhPTkUKIC0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50
OwogCiArIChOU0FycmF5ICopX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXM7CiArIChOU1N0cmlu
ZyAqKV9kdW1teVBhc3RlYm9hcmRUeXBlOwogKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25QYXN0ZWJv
YXJkVHlwZXM7CiAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZDsKKwogI2VuZGlmCiAKIC0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFu
Z2VkOwpAQCAtNzcsMTkgKzc0LDExIEBAIGV4dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQ
cmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7CiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKIC0gKHZv
aWQpX2hhbmRsZUF1dG9zY3JvbGxGb3JNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKICNl
bmRpZgotLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVyOwogCiAvLyBG
SVhNRTogX3NlbGVjdGlvblJlY3QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzZWxlY3Rpb25S
ZWN0LCB3aGljaCBpcyBpbiBwcm90b2NvbCBXZWJEb2N1bWVudFNlbGVjdGlvbi4KIC8vIFdlIGNh
bid0IHJlbW92ZSB0aGlzIHlldCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdXNlIGJ5IE1haWwuCiAt
IChOU1JlY3QpX3NlbGVjdGlvblJlY3Q7CiAKLSNpZiAhVEFSR0VUX09TX0lQSE9ORQotLSAodm9p
ZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6KE5TRXZlbnQgKilldmVudDsKLSNlbHNlCi0tICh2b2lk
KV9zdGFydEF1dG9zY3JvbGxUaW1lcjooV2ViRXZlbnQgKilldmVudDsKLSNlbmRpZgotLSAodm9p
ZClfc3RvcEF1dG9zY3JvbGxUaW1lcjsKLQogLSAoQk9PTClfY2FuRWRpdDsKIC0gKEJPT0wpX2Nh
bkVkaXRSaWNobHk7CiAtIChCT09MKV9jYW5BbHRlckN1cnJlbnRTZWxlY3Rpb247CkBAIC05Nywx
MiArODYsMTMgQEAgZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11
bVNocmlua0ZhY3RvcjsKIC0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQ7CiAt
IChCT09MKV9pc0VkaXRhYmxlOwogCisjaWYgIVRBUkdFVF9PU19JUEhPTkUKKwogLSAoQk9PTClf
dHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwogLSAodm9pZClfc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5k
OihCT09MKWlzQmFja2dyb3VuZFRyYW5zcGFyZW50OwogCiAtICh2b2lkKV9zZXRUb29sVGlwOihO
U1N0cmluZyAqKXN0cmluZzsKIAotI2lmICFUQVJHRVRfT1NfSVBIT05FCiAvLyBTUEkgdXNlZCBi
eSBNYWlsLgogLy8gRklYTUU6IFRoZXNlIHNob3VsZCBhbGwgYmUgbW92ZWQgdG8gV2ViVmlldzsg
d2Ugd29uJ3QgYWx3YXlzIGhhdmUgYSBXZWJIVE1MVmlldy4KIC0gKE5TSW1hZ2UgKilfc2VsZWN0
aW9uRHJhZ2dpbmdJbWFnZTsKQEAgLTExNiw2ICsxMDYsNyBAQCBleHRlcm4gY29uc3QgZmxvYXQg
X1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOwogLSAoRE9NTm9kZSAqKV9p
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZDsKIC0gKHZvaWQpX2RlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgZm9yVHlwZTooTlNT
dHJpbmcgKilwYm9hcmRUeXBlIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IHN1YnJlc291
cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CisKICNlbmRpZgogCiAjaWYgRU5BQkxFX05F
VFNDQVBFX1BMVUdJTl9BUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319802</attachid>
            <date>2017-09-03 13:56:21 -0700</date>
            <delta_ts>2017-09-03 14:53:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176280-20170903135620.patch</filename>
            <type>text/plain</type>
            <size>138112</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggZWFjMmMxZGQzMzk5ZGQ1ZTcyMWI0YzIzOGFmZDFkMmYyZWE0NmVlNi4uOGE5NjczYzdjN2Nj
OGM5Nzc5ZjE0NzIwNWY1YzU0NWQ1MmQ4ZTI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyNCBAQAorMjAxNy0wOS0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBUaWR5IGEgZmV3IHRoaW5ncyBpbiBsZWdhY3kgV2Vi
SFRNTFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NjI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVD
bGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKTogTWFkZSB0aGlzIGZ1bmN0aW9uIE1hYy1v
bmx5LCBiZWNhdXNlIHRoZQorICAgICAgICBtZXRob2RzIGl0IGNhbGxzIG9uIFdlYkhUTUxWaWV3
IHdlcmUgZG9pbmcgbm90aGluZyBvbiBpT1MuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29u
dGV4dDpdKTogQ2hhbmdlZCBpT1MgY29kZSBzbyB0aGF0IGl0IG5vIGxvbmdlcgorICAgICAgICBk
ZXBlbmRzIG9uIC1bV2ViSFRNTFZpZXcgX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXJdLCB3aGljaCBh
bHdheXMgcmV0dXJuZWQgWUVTIG9uIGlPUy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZp
ZXcubW06IERlZmluZSBXZWJFdmVudCBvbiBib3RoIGlPUyBhbmQgTWFjIHNvIG1vcmUgZXZlbnQg
aGFuZGxpbmcKKyAgICAgICAgY29kZSBjYW4gYmUgc2hhcmVkIHdpdGhvdXQgI2lmIGJlbG93LiBV
c2UgI2lmIFBMQVRGT1JNKE1BQykgaW5zdGVhZCBvZiAjaWYgIVBMQVRGT1JNKElPUykKKyAgICAg
ICAgaW4gYSBsb3QgbW9yZSBwbGFjZXMuIE1vdmUgbWFueSBvZiB0aGUgU1BJIGRlY2xhcmF0aW9u
cyB1cCB0byB0aGUgdG9wIGluIGFscGhhYmV0aWNhbAorICAgICAgICBvcmRlci4gUmVtb3ZlZCBh
bGwgc29ydHMgb2YgdW51c2VkIHRoaW5ncy4gTWFkZSBtb3JlIGNvZGUgYW5kIGZpZWxkcyBNYWMt
b25seSB3aGVyZQorICAgICAgICB3aGF0IHdhcyBjb21waWxlZCB3YXMgZG9pbmcgbm90aGluZyBv
biBpT1MgYW5kIGl0IG1ha2VzIHRoZSByZXN1bHRpbmcgY29kZSBzaW1wbGVyLgorICAgICAgICBV
c2UgUmV0YWluUHRyIGluc3RlYWQgb2Ygd3JpdGluZyByZXRhaW4vcmVsZWFzZSB3aGVyZXZlciBw
b3NzaWJsZS4KKyAgICAgICAgKCtbV2ViTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XSk6IE1v
dmVkIGdsb2JhbCBpbnNpZGUgdGhpcyBtZXRob2QgYW5kIHVzZWQgQysrCisgICAgICAgIGluaXRp
YWxpemF0aW9uIGZvciBpdC4gUmVtb3ZlZCB2YXJpb3VzIHVudXNlZCBtZXRob2RzIGFuZCBkZWNs
YXJhdGlvbnMgb2YgbWV0aG9kcy4KKyAgICAgICAgKHByb21pc2VkRGF0YUNsaWVudCk6IFVzZSBO
ZXZlckRlc3Ryb3llZCBpbnN0ZWFkIG9mIGp1c3QgZG9pbmcgYSAibmV3IiBvbiB0aGUgaGVhcC4K
KyAgICAgICAgKGNyZWF0ZVVVSURTdHJpbmcpOiBBZGRlZC4gU2ltcGxpZmllcyBVVUlEIG1ldGhv
ZHMgYmVsb3cuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbWFnZUV4aXN0c0F0UGF0aHM6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVudEZyYWdtZW50V2l0aFBh
dGhzOl0pOiBVc2UgUmV0YWluUHRyIGFuZCBtb2Rlcm4gZm9yIGxvb3AuCisgICAgICAgICgrW1dl
YkhUTUxWaWV3IF9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb25d
KTogVXNlIEMrKyBpbml0aWFsaXphdGlvbiwKKyAgICAgICAgYW5kIHJlbW92ZSBDRlJldGFpbiBu
byBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9u
IGFueSBtb3JlLgorICAgICAgICAodW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydCk6IFNpbXBsaWZp
ZWQgdXNpbmcgY3JlYXRlVVVJRFN0cmluZyBmdW5jdGlvbi4KKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOl0pOiBTaW1wbGlmaWVkIHdpdGggUmV0YWluUHRy
LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGFzdGVXaXRoUGFzdGVib2FyZDphbGxvd1BsYWlu
VGV4dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9wYXN0ZUFzUGxhaW5UZXh0
V2l0aFBhc3RlYm9hcmQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcmVtb3Zl
V2luZG93T2JzZXJ2ZXJzXSk6IFJlbW92ZWQgY29kZSBkZWFsaW5nIHdpdGggZW1wdHkKKyAgICAg
ICAgbWV0aG9kcyB3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjogYW5kIHdpbmRvd1dpbGxPcmRlck9m
ZlNjcmVlbjouCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zaG91bGREZWxldGVSYW5nZTpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3Rl
Ym9hcmRUeXBlczp0b1Bhc3RlYm9hcmQ6Y2FjaGVkQXR0cmlidXRlZFN0cmluZzpdKToKKyAgICAg
ICAgU2ltcGxpZmllZCB3aXRoIFJldGFpblB0ci4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3Nl
dE1vdXNlRG93bkV2ZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9z
ZXRQcmludGluZ01vZGVSZWN1cnNpdmU6YWRqdXN0Vmlld1NpemU6XSk6IEFkZGVkLiBIZWxwZXIg
bWV0aG9kIHNvCisgICAgICAgIHRoZSBuZXh0IHRocmVlIG1ldGhob2RzIGNhbiBiZSBzdXBlci1z
aW1wbGUuIFVzZWQgUmV0YWluUHRyIGFuZCBhIG1vZGVybiBmb3IgbG9vcCB0byBtYWtlCisgICAg
ICAgIHRoaXMgbWV0aG9kIHNpbXBsZXIgdGhhbiB0aGUgZnVuY3Rpb25zIGl0IHJlcGxhY2VkLiBB
bHNvIGdvdCByaWQgb2YgdGhlIGVudW1lcmF0aW5nU3Vidmlld3MKKyAgICAgICAgZGVidWcgZmxh
Zzsgd2UgaGF2ZW4ndCB1c2VkIGl0IGZvciB5ZWFycyBhbmQgaXQncyBub3QgY2xlYXJseSBoZWxw
ZnVsLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2
ZV0pOiBUdXJuZWQgaW50byBhIG9uZS1saW5lciB3aXRoIHRoZSBhYm92ZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1
c3RWaWV3U2l6ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dlYl9tYWtlUGx1
Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDpdKTogTW92ZWQgZnJvbSB0aGUK
KyAgICAgICAgV2ViSW50ZXJuYWwgY2F0ZWdvcnkgdG8gdGhlIFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsIGNhdGVnb3J5IHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkKKyAgICAgICAgdHdvIGFkZGl0aW9u
YWwgbWV0aG9kcyBpbiB0aGUgV2ViUHJpdmF0ZSBjYXRlZ29yeSBhbmQgc3RpbGwgYmUgY2FsbGVk
IGJ5IHRoZSB0d28KKyAgICAgICAgbWV0aG9kcyBpbiB0aGUgV2ViSW50ZXJuYWwgY2F0ZWdvcnkg
dGhhdCB3ZXJlIGFscmVhZHkgdXNpbmcgaXQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGRpZEFk
ZFN1YnZpZXc6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbnNpZGVBbm90
aGVySFRNTFZpZXddKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3NldFRvb2xU
aXA6XSk6IFNpbXBsaWZpZWQgd2l0aCBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IHBhc3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX2F1dG9zY3JvbGxdKTogU2ltcGxpZmllZCBieSBtYWtpbmcgdGhpcyBNYWMtb25s
eS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hhc0hUTUxEb2N1bWVudF0pOiBEZWxldGVkLiBU
aGUgb25lIGNhbGxlciB3YXMgcmVtb3ZlZCBhIGxvbmcgdGltZSBhZ28uCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRU
eXBlOmltYWdlTUlNRVR5cGU6XSk6CisgICAgICAgIEFkZGVkIGhlbHBlciBtZXRob2QgdG8gbWFr
ZSB0aGUgb25lIGJlbG93IHNpbXBsZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6Zm9yVHlwZTppbkNvbnRleHQ6c3VicmVzb3VyY2VzOl0p
OgorICAgICAgICBDb21wYXJlZCBwYXN0ZWJvYXJkIHR5cGUgc3RyaW5ncyB1c2luZyBpc0VxdWFs
VG9TdHJpbmc6IHJhdGhlciB0aGFuIHVzaW5nID09IHNpbmNlCisgICAgICAgIHdlIHdhbnQgdG8g
YWN0dWFsbHkgY29tcGFyZSB0aGUgc3RyaW5nIGNvbnRlbnRzLiBBbHNvIHVwZGF0ZWQgdG8gdXNl
IG1vZGVybiBmb3IgbG9vcCwKKyAgICAgICAgcmVuYW1lZCBhIGxvY2FsIHZhcmlhYmxlIGZyb20g
InMiIHRvICJsb2NhbFN1YnJlc291cmNlcyIsIGFuZCBmYWN0b3JlZCBvdXQgdGhlIGhhbmRsaW5n
CisgICAgICAgIG9mIHRocmVlIGltYWdlIHR5cGVzIHRvIHVzZSB0aGUgaGVscGVyIG1ldGhvZCBh
Ym92ZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNj
YXBlUGx1Z2luc10pOiBSZXdyaXRlIHVzaW5nIHRoZQorICAgICAgICBfd2ViX21ha2VQbHVnaW5T
dWJ2aWV3c1BlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OiBtZXRob2QuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zXSk6IERpdHRv
LgorICAgICAgICAoLVtOU1ZpZXcgX3dlYl9hZGREZXNjZW5kZW50V2ViSFRNTFZpZXdzVG9BcnJh
eTpdKTogRml4ZWQgc3BlbGxpbmcgdG8gdXNlIHRoZSBhZGplY3RpdmUKKyAgICAgICAgImRlc2Nl
bmRlbnQiIHJhdGhlciB0aGFuIHRoZSBub3VuICJkZXNjZW5kYW50Ii4gQWxzbyByZW1vdmVkIE1h
Yy1vbmx5IG9wdGltaXphdGlvbiB0bworICAgICAgICBub3QgY2FsbCB0aGUgLVtOU1ZpZXcgc3Vi
dmlld3NdIG1ldGhvZCB0byBtYWtlIHRoaXMgaWRlbnRpY2FsIG9uIGJvdGggcGxhdGZvcm1zIGFu
ZCB1c2VkCisgICAgICAgIGEgbW9kZXJuIGZvciBsb29wLgorICAgICAgICAoLVtOU011dGFibGVE
aWN0aW9uYXJ5IF93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6Zm9yS2V5Ol0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKTogUmVkdWNlZCBhbW91
bnQgb2YgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBieQorICAgICAgICBkZWZpbmluZyBXZWJFdmVu
dE1vdXNlRG93biBhcyBhIHN5bm9ueW0gZm9yIE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93biBvbiBN
YWMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFkZFdpbmRvd09ic2VydmVyc10pOiBSZW1vdmVk
IGNvZGUgZGVhbGluZyB3aXRoIGVtcHR5CisgICAgICAgIG1ldGhvZHMgd2luZG93V2lsbE9yZGVy
T25TY3JlZW46IGFuZCB3aW5kb3dXaWxsT3JkZXJPZmZTY3JlZW46LgorICAgICAgICAoLVtXZWJI
VE1MVmlldyB3aWxsUmVtb3ZlU3VidmlldzpdKTogUmVtb3ZlZCB0aGUgZW51bWVyYXRpbmdTdWJ2
aWV3cyBjaGVjay4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZHJhd1NpbmdsZVJlY3Q6XSk6IFJl
YXJyYW5nZWQgdGhpcyBtZXRob2QgdG8gbWFrZSBpdCBjbGVhcmVyIHRoYXQgbW9zdAorICAgICAg
ICBvZiBpdCBpcyBNYWMtb25seS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgd2luZG93V2lsbE9y
ZGVyT25TY3JlZW46XSk6IERlbGV0ZWQuIEFsbCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMK
KyAgICAgICAgbWV0aG9kIGRpZCB3YXMgY2FsbCBpdHNlbGYgb24gdGhlIG1haW4gdGhyZWFkLCBh
bmQgZG8gbm90aGluZyBpZiBjYWxsZWQgb24gbWFpbiB0aHJlYWQuCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHdpbmRvd1dpbGxPcmRlck9mZlNjcmVlbjpdKTogRGVsZXRlZC4gRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50Ol0pOiBNZXJnZWQgbWFjT1MgYW5k
IGlPUyB2ZXJzaW9ucy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmVzaWduRmlyc3RSZXNwb25k
ZXJdKTogUmVtb3ZlZCBpT1Mtc3BlY2lmaWMgY29kZSBpbiB0aGUgbWFjT1Mtc3BlY2lmaWMKKyAg
ICAgICAgaGFsZiBvZiB0aGlzIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0RGF0
YVNvdXJjZTpdKTogU2ltcGxpZmllZCB1c2luZyBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IF9zZXRQcmludGluZzptaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDpsb2dpY2FsSGVpZ2h0
Om9yaWdpbmFsUGFnZVdpZHRoOm9yaWdpbmFsUGFnZUhlaWdodDptYXhpbXVtU2hyaW5rUmF0aW86
YWRqdXN0Vmlld1NpemU6cGFnaW5hdGVTY3JlZW5Db250ZW50Ol0pOgorICAgICAgICBTaW1wbGlm
aWVkIHVzaW5nIGEgbW9kZXJuIGZvciBsb29wIGFuZCBSZXRhaW5QdHIuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IGtub3dzUGFnZVJhbmdlOl0pOiBTaW1wbGlmaWVkIHVzaW5nIFJldGFpblB0ci4K
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcga2V5RG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEZdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOl0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY29tcGxldGU6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfd2luZG93Q2hhbmdlZEtleVN0YXRlXSk6IFJlbW92ZWQgaU9TLXNwZWNpZmlj
IGNvZGUgc2luY2UgdGhpcyBtZXRob2QgaXMKKyAgICAgICAgbm93IG1hY09TLW9ubHkuCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXSk6IFJlbW92ZWQgY2FsbCB0byBf
dXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyIG9uCisgICAgICAgIGlPUyBzaW5jZSB0aGF0
IGlzIG5vdyBtYWNPUy1vbmx5LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc3RhcnRB
dXRvc2Nyb2xsVGltZXI6XSk6IE1vdmVkIHRoaXMgaW50byBhbiBpbnRlcm5hbCBjYXRlZ29yeSBp
bnN0ZWFkIG9mCisgICAgICAgIGEgcHJpdmF0ZSBvbmUgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCBv
ciBuZWVkZWQgb3V0c2lkZSBXZWJLaXQuIEFsc28gbWFkZSBpdCBtYWNPUy1vbmx5LgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBfc3RvcEF1dG9zY3JvbGxUaW1lcl0pOiBNb3ZlZCBpbnRvIGludGVy
bmFsIGNhdGVnb3J5LiBJdCByZW1haW5zIGEgbm8tb3AKKyAgICAgICAgb24gaU9TLCBidXQga2Vw
dCB0aGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvICNpZiBhdCBldmVyeSBjYWxsIHNpdGUuCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IF9wbHVnaW5Db250cm9sbGVyXSk6IE1vdmVkIGludG8gaW50
ZXJuYWwgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHZhbGlkQXR0cmlidXRlc0Zv
ck1hcmtlZFRleHRdKTogU2ltcGxpZmllZCBieSByZW1vdmluZyBDRlJldGFpbiB0aGF0IHdhcwor
ICAgICAgICB0aGVyZSBvbmx5IGZvciBHQywgdXNpbmcgQysrIGluaXRpYWxpemF0aW9uLCByZW1v
dmluZyBvYnNvbGV0ZSBjb21tZW50LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlU2Vs
ZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSk6IE1hZGUgdGhpcyBtYWNPUy1vbmx5IGFuZCByZW1vdmVk
CisgICAgICAgIHBlY3VsaWFyIGlPUy1vbmx5IGNvbW1lbnQuCisgICAgICAgICgrW05TVVJMIF93
ZWJfdW5pcXVlV2ViRGF0YVVSTF0pOiBTaW1wbGlmaWVkIHVzaW5nIGNyZWF0ZVVVSURTdHJpbmcg
ZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaDogUmVt
b3ZlZCB1bnVzZWQgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgbWV0aG9kLgorICAgICAgICBN
YWRlIGF0dGFjaFJvb3RMYXllcjosIGRldGFjaFJvb3RMYXllciwgX3dlYl9pc0RyYXdpbmdJbnRv
TGF5ZXIsCisgICAgICAgIF93ZWJfaXNEcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIgYWxsIG1h
Y09TLW9ubHkuIE1vdmVkIF9zdGFydEF1dG9zY3JvbGxUaW1lcjosCisgICAgICAgIF9zdG9wQXV0
b3Njcm9sbFRpbWVyLCBhbmQgX3BsdWdpbkNvbnRyb2xsZXIgaGVyZSBmcm9tIFNQSSBoZWFkZXIg
c2luY2UgdGhleSBhcmVuJ3QKKyAgICAgICAgbmVlZGVkIG9yIHVzZWQgYXMgU1BJLiBBbmQgbWFk
ZSB0aGUgdHdvIGF1dG9zY3JvbGwgb25lcyBtYWNPUy1vbmx5LgorCisgICAgICAgICogV2ViVmll
dy9XZWJIVE1MVmlld1ByaXZhdGUuaDogUmVtb3ZlZCB1bm5lZWRlZCBhbmQgdW51c2VkIFNQSTog
X2luc2lkZUFub3RoZXJIVE1MVmlldywKKyAgICAgICAgX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYs
IF9wbHVnaW5Db250cm9sbGVyLCBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6LCBhbmQgX3N0b3BBdXRv
c2Nyb2xsVGltZXIuCisgICAgICAgIE1hZGUgX3RyYW5zcGFyZW50QmFja2dyb3VuZCBhbmQgX3Nl
dFRyYW5zcGFyZW50QmFja2dyb3VuZDogbWFjT1Mtb25seS4gVGhlc2UgcHJvYmFibHkKKyAgICAg
ICAgYXJlIG5vdCBuZWVkZWQgb24gbWFjT1MgZWl0aGVyLCBidXQgSSB3YXNuJ3QgYWJsZSB0byBt
YWtlIGFic29sdXRlbHkgc3VyZSBJIGNvdWxkIHJlbW92ZQorICAgICAgICB0aGVtIGF0IHRoaXMg
dGltZS4KKwogMjAxNy0wOS0wMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlbW92ZSBDYW52YXNQcm94eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IGIxNzBhYjkzNDUx
OGFiOGFhNmEwOWUwODUwYjc5OWJhMDhjY2UzYTcuLjFjYjI0ODA4ZmI1OWE0MmJlMWY4YTk0ZjMx
ZjFkOWNjMzQzMTljMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTkwNiw2ICs5MDYsMTAgQEAg
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBjb25zdAog
CiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmIGZy
YW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogeworI2lmICFQTEFURk9STShNQUMp
CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhcGhpY3NMYXll
cik7CisjZWxzZQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIE5TVmll
dyAqZG9jdW1lbnRWaWV3ID0gW1traXQoJmZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107
CkBAIC05MjEsNiArOTI1LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lJiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICBlbHNlCiAg
ICAgICAgIFt3ZWJIVE1MVmlldyBkZXRhY2hSb290TGF5ZXJdOwogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZTdmZjRkMGM3ZWExNTQ1
NzA2NGEzMzgxMjk2NWE5ZDUyYmUwMDJlMC4uOGQ3ZmNlYjEwOTFmOTNlMzM4MjI1MzZmY2YxMTBk
YjRmNmZhNjg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCkBAIC01NTksNiArNTU5LDcgQEAgLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlCiB9
CiAKICNpZiBQTEFURk9STShJT1MpCisKIC0gKEJPT0wpX2lzQ29tbWl0dGluZwogewogICAgIHJl
dHVybiBfcHJpdmF0ZS0+aXNDb21taXR0aW5nOwpAQCAtNTY4LDYgKzU2OSw3IEBAIC0gKHZvaWQp
X3NldElzQ29tbWl0dGluZzooQk9PTCl2YWx1ZQogewogICAgIF9wcml2YXRlLT5pc0NvbW1pdHRp
bmcgPSB2YWx1ZTsKIH0KKwogI2VuZGlmCiAKIC0gKE5TQXJyYXkgKilfbm9kZXNGcm9tTGlzdDoo
VmVjdG9yPE5vZGUqPiAqKW5vZGVzVmVjdG9yCkBAIC01OTEsNyArNTkzLDcgQEAgLSAoTlNTdHJp
bmcgKilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoUGFpbnRCZWhhdmlv
cilfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRl
eHQKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyAtY3Vy
cmVudENvbnRleHREcmF3aW5nVG9TY3JlZW4gcmV0dXJucyBZRVMgZm9yIGJpdG1hcCBjb250ZXh0
cy4KICAgICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0RHJhd2luZ1RvU2NyZWVuXTsKICAgICBpZiAoaXNQcmludGluZykKQEAgLTYwMSwxNCArNjAz
LDE1IEBAIC0gKFBhaW50QmVoYXZpb3IpX3BhaW50QmVoYXZpb3JGb3JEZXN0aW5hdGlvbkNvbnRl
eHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiAgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY29udGV4
dCkgIT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCiAgICAgICAgIHJldHVybiBQYWludEJlaGF2aW9y
Tm9ybWFsOwogCi0gICAgLy8gSWYgd2UncmUgZHJhd2luZyBpbnRvIGEgYml0bWFwLCB3ZSBtaWdo
dCBiZSBzbmFwc2hvdHRpbmcsIG9yIGRyYXdpbmcgaW50byBhIGxheWVyLWJhY2tlZCB2aWV3Lgot
ICAgIGlmIChXZWJIVE1MVmlldyAqaHRtbERvY3VtZW50VmlldyA9IFtzZWxmIF93ZWJIVE1MRG9j
dW1lbnRWaWV3XSkgeworICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgaW50byBhIGJpdG1hcCwgd2Ug
Y291bGQgYmUgc25hcHNob3R0aW5nIG9yIGRyYXdpbmcgaW50byBhIGxheWVyLWJhY2tlZCB2aWV3
LgorICAgIGlmIChXZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gW3NlbGYgX3dlYkhUTUxEb2N1
bWVudFZpZXddKSB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBpZiAoW1todG1sRG9jdW1l
bnRWaWV3IHdpbmRvd10gaXNJblNuYXBzaG90dGluZ1BhaW50XSkKLSAgICAgICAgICAgIHJldHVy
biBQYWludEJlaGF2aW9yU25hcHNob3R0aW5nOworICAgICAgICByZXR1cm4gW1tkb2N1bWVudFZp
ZXcgd2luZG93XSBpc0luU25hcHNob3R0aW5nUGFpbnRdID8gUGFpbnRCZWhhdmlvclNuYXBzaG90
dGluZyA6IFBhaW50QmVoYXZpb3JOb3JtYWw7CiAjZW5kaWYKLSAgICAgICAgaWYgKFtodG1sRG9j
dW1lbnRWaWV3IF93ZWJfaXNEcmF3aW5nSW50b0xheWVyXSkKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IF93ZWJfaXNEcmF3aW5nSW50b0xheWVyXSkKICAgICAg
ICAgICAgIHJldHVybiBQYWludEJlaGF2aW9yTm9ybWFsOworI2VuZGlmCiAgICAgfQogICAgIAog
ICAgIHJldHVybiBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzIHwgUGFpbnRC
ZWhhdmlvclNuYXBzaG90dGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDhkMGQ0ZDkyNTQ4MGNiODNjMjBhZTgxNDU1NDU0MjMwMDc0
YTY4ZGIuLmFmZTVkNWE2ZTQxNDI0NzZhY2Q5NTgwNjA3MTNhZmU0MzQxYmM4ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYsIDIwMDcgR3JhaGFt
IERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03
Miw2ICs3Miw3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJV
SURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oPgpAQCAtMTQxLDcgKzE0Miw3IEBACiAjaW1wb3J0
IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogI2ltcG9ydCAiV2ViTlNFdmVudEV4dHJh
cy5oIgogI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCiAjaW1wb3J0IDxBcHBLaXQv
TlNBY2Nlc3NpYmlsaXR5Lmg+CkBAIC0xNTAsOCArMTUxLDYgQEAKICNpbXBvcnQgPHBhbC9zcGkv
bWFjL05TTWVudVNQSS5oPgogI2VuZGlmCiAKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5oIgog
I2ltcG9ydCA8V2ViQ29yZS9LZXlFdmVudENvZGVzSU9TLmg+CkBAIC0xNjgsMTMgKzE2Nyw1NCBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogI2lm
IFBMQVRGT1JNKElPUykKKwogQGludGVyZmFjZSBOU09iamVjdCAoQWNjZXNzaWJpbGl0eSkKIC0g
KGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBvaW50OwogLSAoaWQpYWNjZXNzaWJp
bGl0eUZvY3VzZWRVSUVsZW1lbnQ7CiBAZW5kCisKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCisKK0BjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7CisKK0Bp
bnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoKQorLSAoQk9PTClpc1NwZWFraW5nOworLSAodm9pZClz
cGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lkKXN0b3BTcGVha2luZzooaWQp
c2VuZGVyOworQGVuZAorCitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQorLSAoRE9N
RG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1
bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlv
bmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKK0BlbmQK
KworQGludGVyZmFjZSBOU09iamVjdCAoKQorLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50OihOU0V2
ZW50ICopZXZlbnQ7CistIChCT09MKXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKK0BlbmQKKwor
QGludGVyZmFjZSBOU1Jlc3BvbmRlciAoKQorLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRD
b250ZXh0OworQGVuZAorCitAaW50ZXJmYWNlIE5TVmlldyAoKQorLSAoQk9PTClfZHJhd25CeUFu
Y2VzdG9yOworLSAodm9pZClfaW52YWxpZGF0ZUdTdGF0ZXNGb3JUcmVlOworLSAodm9pZClfd2lu
ZG93Q2hhbmdlZEtleVN0YXRlOworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93ICgpCistIChp
ZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKK0BlbmQKKworQGludGVyZmFjZSBO
U1dpbmRvdyAoV2ViQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyAqKV93ZWJfYm9yZGVyVmll
dzsKK0BlbmQKKwordXNpbmcgV2ViRXZlbnQgPSBOU0V2ZW50OworY29uc3QgYXV0byBXZWJFdmVu
dE1vdXNlRG93biA9IE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93bjsKKwogQGludGVyZmFjZSBXZWJN
ZW51VGFyZ2V0IDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
ciogX21lbnVDb250cm9sbGVyOwogfQpAQCAtNTUyLDE0ICs1OTIsMTEgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TlNJbnRlZ2VyPiB0b1RhZyhDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCiAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIFdlYk1lbnVUYXJnZXQqIHRhcmdldDsK
LQogQGltcGxlbWVudGF0aW9uIFdlYk1lbnVUYXJnZXQKIAotKyAoV2ViTWVudVRhcmdldCopc2hh
cmVkTWVudVRhcmdldAorKyAoV2ViTWVudVRhcmdldCAqKXNoYXJlZE1lbnVUYXJnZXQKIHsKLSAg
ICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gW1tXZWJNZW51VGFyZ2V0IGFsbG9jXSBp
bml0XTsKKyAgICBzdGF0aWMgV2ViTWVudVRhcmdldCAqdGFyZ2V0ID0gW1tXZWJNZW51VGFyZ2V0
IGFsbG9jXSBpbml0XTsKICAgICByZXR1cm4gdGFyZ2V0OwogfQogCkBAIC01ODEsMTUgKzYxOCwx
MyBAQCAtICh2b2lkKWZvcndhcmRDb250ZXh0TWVudUFjdGlvbjooaWQpc2VuZGVyCiAKIEBlbmQK
IAotQGludGVyZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKLS0gKE5TVmlldyopX3dl
Yl9ib3JkZXJWaWV3OwotQGVuZAorQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChXZWJCb3JkZXJW
aWV3QWNjZXNzKQogCi1AaW1wbGVtZW50YXRpb24gTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3Mp
Ci0tIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldworLSAoTlNWaWV3ICopX3dlYl9ib3JkZXJWaWV3
CiB7CiAgICAgcmV0dXJuIF9ib3JkZXJWaWV3OwogfQorCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2Vi
UmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25kZXIgewpAQCAtNjA1LDE3ICs2NDAsMjAgQEAg
QGludGVyZmFjZSBXZWJMYXllckhvc3RpbmdGbGlwcGVkVmlldyA6IE5TVmlldwogQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gV2ViTGF5ZXJIb3N0aW5nRmxpcHBlZFZpZXcKKwogLSAoQk9PTClpc0Zs
aXBwZWQKIHsKICAgICByZXR1cm4gWUVTOwogfQorCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViUm9v
dExheWVyIDogQ0FMYXllcgogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViUm9vdExheWVyCi0t
ICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAorCistICh2b2lkKXJlbmRl
ckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWdyYXBoaWNzQ29udGV4dAogewogICAgIC8vIEFwcEtp
dCBjYWxscyAtW0NBTGF5ZXIgcmVuZGVySW5Db250ZXh0Ol0gdG8gcmVuZGVyIGxheWVyLWJhY2tl
ZCB2aWV3cwogICAgIC8vIGludG8gYml0bWFwIGNvbnRleHRzLCBidXQgcmVuZGVySW5Db250ZXh0
OiBkb2Vzbid0IGNhcHR1cmUgbWFzayBsYXllcnMKQEAgLTYyMyw2ICs2NjEsNyBAQCAtICh2b2lk
KXJlbmRlckluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAogICAgIC8vIGNvbnRlbnRzIHdpbGwg
aGF2ZSBhbHJlYWR5IGJlZW4gcmVuZGVyZWQgYnkgZHJhd1JlY3Q6LCB3ZSBjYW4gc2FmZWx5IG1h
a2UKICAgICAvLyB0aGlzIGEgTk9PUC4KIH0KKwogQGVuZAogCiAvLyBpZiBZRVMsIGRvIHRoZSBz
dGFuZGFyZCBOU1ZpZXcgaGl0IHRlc3QgKHdoaWNoIGNhbid0IGdpdmUgdGhlIHJpZ2h0IHJlc3Vs
dCB3aGVuIEhUTUwgb3ZlcmxhcHMgYSB2aWV3KQpAQCAtNjMxLDE2ICs2NzAsOCBAQCBzdGF0aWMg
Qk9PTCBmb3JjZU5TVmlld0hpdFRlc3Q7CiAvLyBpZiBZRVMsIGRvIHRoZSAidG9wIFdlYkhUTUxW
aWV3IiBoaXQgdGVzdCAod2hpY2ggd2UnZCBsaWtlIHRvIGRvIGFsbCB0aGUgdGltZSBidXQgY2Fu
J3QgYmVjYXVzZSBvZiBKYXZhIHJlcXVpcmVtZW50cyBbc2VlIGJ1ZyA0MzQ5NzIxXSkKIHN0YXRp
YyBCT09MIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0OwogCi1AaW50ZXJmYWNlIE5TQXBwbGljYXRp
b24gKCkKLS0gKEJPT0wpaXNTcGVha2luZzsKLS0gKHZvaWQpc3RvcFNwZWFraW5nOihpZClzZW5k
ZXI7Ci1AZW5kCi0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCiBzdGF0aWMgV2ViSFRNTFZp
ZXcgKmxhc3RIaXRWaWV3OwogCi0jaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBib29sIG5lZWRz
Q3Vyc29yUmVjdHNTdXBwb3J0QXRQb2ludChOU1dpbmRvdyogd2luZG93LCBOU1BvaW50IHBvaW50
KQogewogICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IFlFUzsKQEAgLTY2MSw3ICs2OTIsNiBAQCBz
dGF0aWMgYm9vbCBuZWVkc0N1cnNvclJlY3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cqIHdpbmRv
dywgTlNQb2ludCBwb2ludCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiBzdGF0aWMgSU1QIG9s
ZFNldEN1cnNvckZvck1vdXNlTG9jYXRpb25JTVA7CiAKIC8vIE92ZXJyaWRpbmcgYW4gaW50ZXJu
YWwgbWV0aG9kIGlzIGEgaGFjazsgPHJkYXI6Ly9wcm9ibGVtLzc2NjI5ODc+IHRyYWNrcyBmaW5k
aW5nIGEgYmV0dGVyIHNvbHV0aW9uLgpAQCAtNjcxLDE4ICs3MDEsMTIgQEAgc3RhdGljIHZvaWQg
c2V0Q3Vyc29yKE5TV2luZG93ICpzZWxmLCBTRUwgY21kLCBOU1BvaW50IHBvaW50KQogICAgICAg
ICB3dGZDYWxsSU1QPGlkPihvbGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QLCBzZWxmLCBj
bWQsIHBvaW50KTsKIH0KIAotI2VuZGlmCi0KLWV4dGVybiAiQyIgewotCi0vLyBOZWVkIHRvIGRl
Y2xhcmUgdGhlc2UgYXR0cmlidXRlIG5hbWVzIGJlY2F1c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBi
dXQgZG9lcyBub3QgbWFrZSB0aGVtIGF2YWlsYWJsZSBpbiBBUEkgb3IgU1BJIGhlYWRlcnMuCisv
LyBGSVhNRTogR2V0IHRoaXMgZnJvbSA8QXBwS2l0L05TVGV4dElucHV0Q29udGV4dF9Qcml2YXRl
Lmg+IHVzaW5nIGEgTlNUZXh0SW5wdXRDb250ZXh0U1BJLmggaGVhZGVyIGluc3RlYWQgb2YgZGVm
aW5pbmcgaXQgaGVyZS4KK2V4dGVybiAiQyIgTlNTdHJpbmcgKk5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWU7CiAKLWV4dGVybiBOU1N0cmluZyAqTlNNYXJrZWRDbGF1c2VT
ZWdtZW50QXR0cmlidXRlTmFtZTsKLWV4dGVybiBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNl
bWVudFJhbmdlQXR0cmlidXRlTmFtZTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLX0KLQot
QGludGVyZmFjZSBOU1ZpZXcgKFdlYk5TVmlld0RldGFpbHMpCitAaW50ZXJmYWNlIE5TVmlldyAo
KQogLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eToo
TlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2li
bGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3
OwogLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTClu
ZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdDsKICNpZiBQTEFURk9STShNQUMp
CkBAIC02OTQsMTggKzcxOCwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBk
aXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0CiAtICh2b2lkKV9y
ZWN1cnNpdmU6KEJPT0wpcmVjdXJzZVggZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVj
dClkaXNwbGF5UmVjdCBpbkdyYXBoaWNzQ29udGV4dDooTlNHcmFwaGljc0NvbnRleHQgKilncmFw
aGljc0NvbnRleHQgQ0dDb250ZXh0OihDR0NvbnRleHRSZWYpY3R4IHRvcFZpZXc6KEJPT0wpaXNU
b3BWaWV3IHNob3VsZENoYW5nZUZvbnRSZWZlcmVuY2VDb2xvcjooQk9PTClzaG91bGRDaGFuZ2VG
b250UmVmZXJlbmNlQ29sb3I7CiAjZW5kaWYKICNlbmRpZgotLSAoTlNSZWN0KV9kaXJ0eVJlY3Q7
CiAtICh2b2lkKV9zZXREcmF3c093bkRlc2NlbmRhbnRzOihCT09MKWRyYXdzT3duRGVzY2VuZGFu
dHM7Ci0tIChCT09MKV9kcmF3bkJ5QW5jZXN0b3I7Ci0tICh2b2lkKV9pbnZhbGlkYXRlR1N0YXRl
c0ZvclRyZWU7Ci0tICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnM7
Ci0tICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGU7CiAjaWYgUExBVEZPUk0oSU9TKQogLSAo
dm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOihpZClzZW5kZXI7CiAjZW5kaWYKIEBl
bmQKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogCiBAaW50ZXJmYWNl
IE5TVmlldyAoV2ViU2V0TmVlZHNEaXNwbGF5SW5SZWN0KQogLSAodm9pZClfd2ViX3NldE5lZWRz
RGlzcGxheUluUmVjdDooTlNSZWN0KWludmFsaWRSZWN0OwpAQCAtNzUwLDMyICs3NjksMTcgQEAg
LSAodm9pZClfd2ViX3NldE5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KWludmFsaWRSZWN0CiAK
IEBlbmQKIAotQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWls
cykKLS0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotQGVuZAotCi1AaW50
ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCi0tIChpZClfbmV3Rmlyc3RSZXNw
b25kZXJBZnRlclJlc2lnbmluZzsKLUBlbmQKLQotQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJp
bmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCi0tIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1bWVu
dCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdCBzdWJy
ZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwotQGVuZAotCi1AaW50ZXJmYWNlIE5T
U3BlbGxDaGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCi0tICh2b2lkKWxlYXJuV29y
ZDooTlNTdHJpbmcgKil3b3JkOwotQGVuZAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01p
bmltdW1TaHJpbmtGYWN0b3IgPSBQcmludENvbnRleHQ6Om1pbmltdW1TaHJpbmtGYWN0b3IoKTsK
IGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciA9IFBy
aW50Q29udGV4dDo6bWF4aW11bVNocmlua0ZhY3RvcigpOwogCi0jZGVmaW5lIEFVVE9TQ1JPTExf
SU5URVJWQUwgICAgICAgICAgICAgMC4xZgorI2RlZmluZSBBVVRPU0NST0xMX0lOVEVSVkFMIDAu
MQogCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyBy
ZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUgVFJBQ0tJ
TkdfUkVDVF9UQUcgMHhCQURGQUNFCiAKLS8vIEZJWE1FOiBUaGlzIGNvbnN0YW50IGlzIGNvcGll
ZCBmcm9tIEFwcEtpdCdzIF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQuCisvLyBGSVhNRTogRnJvbSBB
cHBLaXQncyBfTlhTbWFydFBhc3RlIGNvbnN0YW50LiBHZXQgd2l0aCBhbiBTUEkgaGVhZGVyIGlu
c3RlYWQ/CiAjZGVmaW5lIFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlIEAiTmVYVCBzbWFydCBwYXN0
ZSBwYXN0ZWJvYXJkIHR5cGUiCiAKICNkZWZpbmUgU1RBTkRBUkRfV0VJR0hUIDUKQEAgLTc4NSw3
ICs3ODksOCBAQCBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtG
YWN0b3IgPSBQcmludENvbnRleHQ6Om1heGltdW1TaHJpbgogLy8gRmFrZSBVUkwgc2NoZW1lLgog
I2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLy8gPHJkYXI6Ly9wcm9ibGVtLzQ5
ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcgYXMgYSBzdWJ2aWV3IG9mIGEg
V2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKIC8vIGluIHNvbWUgTklCIGZpbGVzLCBzbyBOU1Vu
YXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAgdGhpcyBub3ctdW51c2VkIGNs
YXNzLgogQGludGVyZmFjZSBXZWJDb3JlU2Nyb2xsVmlldyA6IE5TU2Nyb2xsVmlldwpAQCAtNzk3
LDkgKzgwMiwxMCBAQCBAZW5kCiAvLyBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0byBzYWZlbHkg
cmVmZXJlbmNlIHRoZSBDYWNoZWRJbWFnZSBmb3IgdGhlIHByb21pc2VkIGRyYWcgZGF0YQogc3Rh
dGljIENhY2hlZEltYWdlQ2xpZW50JiBwcm9taXNlZERhdGFDbGllbnQoKQogewotICAgIHN0YXRp
YyBDYWNoZWRJbWFnZUNsaWVudCogc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQgPSBuZXcgQ2Fj
aGVkSW1hZ2VDbGllbnQ7Ci0gICAgcmV0dXJuICpzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FjaGVkSW1hZ2VDbGllbnQ+IHN0YXRpY0NhY2hl
ZFJlc291cmNlQ2xpZW50OworICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudC5n
ZXQoKTsKIH0KKwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC04MDcsOCArODEzLDcg
QEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViTWFya2VkVGV4dFVwZGF0ZWROb3RpZmljYXRp
b24gPSBAIldlYk1hcmtlZFRleHRVcGRhdGUKICNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkhUTUxW
aWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAoQk9P
TClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHM7CisjaWYgUExBVEZPUk0oTUFD
KQogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9h
cmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRl
eHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CiAtIChOU1N0cmluZyAqKV9w
bGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIC0gKHZv
aWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQ
bGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CkBAIC04MjEsMjYgKzgyNiwyNiBAQCAtIChC
T09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50
IHJlcGxhY2luZ0RPTVJhbmdlOgogLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcg
Kil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0
aW9uKWFjdGlvbjsKIC0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7Ci0tIChCT09MKV9zaG91
bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lm
IFBMQVRGT1JNKE1BQykKIC0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKill
dmVudDsKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJh
eSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRB
dHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nOwog
I2VuZGlmCiAtIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlOwotI2lmICFQTEFURk9STShJT1Mp
Ci0tICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50OwotI2Vsc2UKIC0g
KHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJFdmVudCAqKWV2ZW50OwotI2VuZGlmCiAtIChX
ZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldzsKIC0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7Ci0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV93ZWJfc2V0UHJpbnRp
bmdNb2RlUmVjdXJzaXZlOwogLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFu
ZEFkanVzdFZpZXdTaXplOwogLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZl
OwogI2VuZGlmCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCistICh2b2lkKV93ZWJf
bWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVj
dDooaWQpb2JqZWN0OworI2VuZGlmCiBAZW5kCiAKKyNpZiBQTEFURk9STShNQUMpCisKIEBpbnRl
cmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3VGV4dENoZWNraW5nSW50ZXJuYWwpCiAtICh2
b2lkKW9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcjsKIC0gKEJPT0wpc21h
cnRJbnNlcnREZWxldGVFbmFibGVkOwpAQCAtODYzLDQ5ICs4NjgsMjggQEAgLSAodm9pZClzZXRB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CiAtICh2b2lkKXRv
Z2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyOwogQGVuZAogCi1AaW50
ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQdXQg
dGhpcyBpbiBhIG5vcm1hbCBjYXRlZ29yeSBhbmQgc3RvcCBkb2luZyB0aGUgZm9yd2FyZCBkZWNs
YXJhdGlvbiB0cmljay4KLS0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmlt
dW1QYWdlTG9naWNhbFdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbG9naWNhbEhlaWdodDooZmxv
YXQpbWluUGFnZUhlaWdodCBvcmlnaW5hbFBhZ2VXaWR0aDooZmxvYXQpcGFnZUxvZ2ljYWxXaWR0
aCBvcmlnaW5hbFBhZ2VIZWlnaHQ6KGZsb2F0KXBhZ2VMb2dpY2FsSGVpZ2h0IG1heGltdW1TaHJp
bmtSYXRpbzooZmxvYXQpbWF4aW11bVNocmlua1JhdGlvIGFkanVzdFZpZXdTaXplOihCT09MKWFk
anVzdFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDooQk9PTClwYWdpbmF0ZVNjcmVlbkNv
bnRlbnQ7Ci0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3Rh
dGU7CiAjZW5kaWYKLUBlbmQKLQotI2lmICFQTEFURk9STShJT1MpCi1AY2xhc3MgTlNUZXh0SW5w
dXRDb250ZXh0OwotQGludGVyZmFjZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKLS0gKE5T
VGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKLUBlbmQKIAotQGludGVyZmFjZSBOU09i
amVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykKLS0gKEJPT0wpd2FudHNUb0hhbmRsZU1v
dXNlRXZlbnRzOwotLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CitA
aW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQ
dXQgdGhpcyBpbiB0aGUgV2ViRmlsZUludGVybmFsIGNhdGVnb3J5IGluc3RlYWQgb2YgZG9pbmcg
dGhlIGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCistICh2b2lkKV9zZXRQcmludGluZzooQk9P
TClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIGxv
Z2ljYWxIZWlnaHQ6KGZsb2F0KW1pblBhZ2VIZWlnaHQgb3JpZ2luYWxQYWdlV2lkdGg6KGZsb2F0
KXBhZ2VMb2dpY2FsV2lkdGggb3JpZ2luYWxQYWdlSGVpZ2h0OihmbG9hdClwYWdlTG9naWNhbEhl
aWdodCBtYXhpbXVtU2hyaW5rUmF0aW86KGZsb2F0KW1heGltdW1TaHJpbmtSYXRpbyBhZGp1c3RW
aWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZSBwYWdpbmF0ZVNjcmVlbkNvbnRlbnQ6KEJPT0wp
cGFnaW5hdGVTY3JlZW5Db250ZW50OwogQGVuZAotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYk5TVGV4dElu
cHV0U3VwcG9ydCkgPE5TVGV4dElucHV0PgogI2Vsc2UKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcg
KFdlYk5TVGV4dElucHV0U3VwcG9ydCkKICNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKy0gKHZv
aWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CiAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJ
bnB1dE1hbmFnZXI7CisjZW5kaWYKICNpZiBQTEFURk9STShJT1MpCiAtICh2b2lkKWRvQ29tbWFu
ZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcjsKICNlbmRpZgogQGVuZAogCi1AaW50ZXJmYWNlIFdl
YkhUTUxWaWV3IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqKV9lbXB0eVN0eWxlOwotI2lmICFQTEFURk9STShJT1MpCi0tIChOU1N0cmluZyAqKV9j
b2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3I7Ci0jZW5kaWYKLUBlbmQKLQogQGludGVyZmFj
ZSBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9pZClfd2ViX2FkZERlc2Nl
bmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAqKSBhcnJheTsKLUBlbmQK
LQotQGludGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5h
bCkKLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQp
a2V5OworLSAodm9pZClfd2ViX2FkZERlc2NlbmRlbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011
dGFibGVBcnJheSAqKSBhcnJheTsKIEBlbmQKIAogc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVycyB7CkBAIC05MjIsMzUgKzkwNiwzMSBAQCBAcHVibGljCiAgICAg
Qk9PTCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKICAgICBCT09MIHByaW50aW5nOwogICAg
IEJPT0wgcGFnaW5hdGVTY3JlZW5Db250ZW50OwotI2lmICFQTEFURk9STShJT1MpCisKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgQk9PTCBvYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zOwog
ICAgIEJPT0wgb2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9uczsKLSAgICAKKwogICAgIGlkIHNh
dmVkU3Vidmlld3M7CiAgICAgQk9PTCBzdWJ2aWV3c1NldEFzaWRlOwogI2VuZGlmCiAKICAgICBO
U1ZpZXcgKmxheWVySG9zdGluZ1ZpZXc7CisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBk
cmF3aW5nSW50b0xheWVyOwogICAgIEJPT0wgZHJhd2luZ0ludG9BY2NlbGVyYXRlZExheWVyOwot
Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8gS2Vw
dCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0jZWxzZQotICAgIFdlYkV2ZW50ICptb3VzZURv
d25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCiAjZW5kaWYKKworICAg
IFJldGFpblB0cjxXZWJFdmVudD4gbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxp
bmcgdGhlIGV2ZW50LgogICAgIEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKLSNpZiAhUExB
VEZPUk0oSU9TKSAgICAKLSAgICBOU0V2ZW50ICprZXlEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIg
aGFuZGxpbmcgdGhlIGV2ZW50LgotI2Vsc2UKLSAgICBXZWJFdmVudCAqa2V5RG93bkV2ZW50OyAv
LyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLSNlbmRpZgorICAgIFJldGFpblB0cjxX
ZWJFdmVudD4ga2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4K
IAogICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFzIGEgc2luZ2xlIGlucHV0IGNvbnRleHQsIGJ1dCB3
ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgdG8gYXZvaWQgbWFraW5n
IGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29yay4KICAgICAvLyBUaGlzIHN0YXRlIGlzIHNhdmVk
IGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdlcywgYmVjYXVzZSBjb21wdXRpbmcgaXQgY2F1c2Vz
IHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90IGFsd2F5cyBzYWZlIHRvIGRvLgogICAgIEJPT0wg
ZXhwb3NlSW5wdXRDb250ZXh0OwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgLy8gVHJhY2sgd2hldGhlciB0aGUgdmlldyBoYXMgc2V0IGEgc2VjdXJlIGlucHV0
IHN0YXRlLgogICAgIEJPT0wgaXNJblNlY3VyZUlucHV0U3RhdGU7CiAKQEAgLTk2MCw0OSArOTQw
LDQzIEBAIEBwdWJsaWMKICAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKICAgICBCT09M
IGluU2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwogCi0gICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1
Z2luQ29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V2ViUGx1Z2luQ29udHJvbGxlcj4gcGx1Z2lu
Q29udHJvbGxlcjsKICAgICAKLSAgICBOU1N0cmluZyAqdG9vbFRpcDsKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHRvb2xUaXA7
CiAgICAgTlNUb29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOwotI2VuZGlmCisKICAgICBpZCB0cmFj
a2luZ1JlY3RPd25lcjsKLSAgICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0YTsKKyAgICB2b2lk
KiB0cmFja2luZ1JlY3RVc2VyRGF0YTsKICAgICAKLSAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGlt
ZXI7Ci0jaWYgIVBMQVRGT1JNKElPUykgICAgCi0gICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdn
ZXJFdmVudDsKLSNlbHNlCi0gICAgV2ViRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7Cisg
ICAgUmV0YWluUHRyPE5TVGltZXI+IGF1dG9zY3JvbGxUaW1lcjsKKyAgICBSZXRhaW5QdHI8TlNF
dmVudD4gYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKICNlbmRpZgotICAgIAotICAgIE5TQXJyYXkg
KnBhZ2VSZWN0czsKIAotI2lmICFQTEFURk9STShJT1MpCi0gICAgV2ViVGV4dENvbXBsZXRpb25D
b250cm9sbGVyICpjb21wbGV0aW9uQ29udHJvbGxlcjsKLSNlbmRpZgotICAgIAorICAgIFJldGFp
blB0cjxOU0FycmF5PiBwYWdlUmVjdHM7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWlu
UHRyPFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlcj4gY29tcGxldGlvbkNvbnRyb2xsZXI7CisK
ICAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKKyNlbmRpZgogCiAgICAgV2ViSFRNTFZp
ZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzOwogICAgIAotICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2U7Ci0jaWYgIVBMQVRGT1JN
KElPUykKKyAgICBSZXRhaW5QdHI8V2ViRGF0YVNvdXJjZT4gZGF0YVNvdXJjZTsKKworI2lmIFBM
QVRGT1JNKE1BQykKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogcHJvbWlzZWREcmFnVElGRkRh
dGFTb3VyY2U7CiAjZW5kaWYKIAogICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0
b3I7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBCT09MIGlu
c3RhbGxlZFRyYWNraW5nQXJlYTsKICAgICBpZCBmbGFnc0NoYW5nZWRFdmVudE1vbml0b3I7CiAg
ICAgTlNSYW5nZSBzb2Z0U3BhY2VSYW5nZTsKICNlbmRpZgogCi0jaWZuZGVmIE5ERUJVRwotICAg
IEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCiAgICAgUmV0YWluUHRyPFdlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxl
cj4gY3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlcjsKICNlbmRpZgpAQCAtMTAx
MCw3ICs5ODQsOCBAQCBAcHVibGljCiAtICh2b2lkKWNsZWFyOwogQGVuZAogCi0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtp
dChUcmlTdGF0ZSBzdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHN0YXRlKSB7CkBAIC0xMDI0LDE5ICs5
OTksMjcgQEAgc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YXRlKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBOU09mZlN0YXRlOwogfQorCiAjZW5k
aWYKIAorc3RhdGljIE5TU3RyaW5nICpjcmVhdGVVVUlEU3RyaW5nKCkKK3sKKyAgICByZXR1cm4g
KE5TU3RyaW5nICopYWRvcHRDRihDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgYWRvcHRDRihDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCkpLmdldCgpKSkuYXV0
b3JlbGVhc2UoKTsKK30KKwogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3UHJpdmF0ZQogCisj
aWYgUExBVEZPUk0oTUFDKQorCiArICh2b2lkKWluaXRpYWxpemUKIHsKLSNpZiAhUExBVEZPUk0o
SU9TKQorICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgYWxsIG9mIHRoaXMgbW92ZSBpbnRvICtbV2Vi
SFRNTFZpZXcgaW5pdGlhbGl6ZV0/CisgICAgLy8gQW5kIHNvbWUgb2YgdGhpcyB3b3JrIGlzIGxp
a2VseSByZWR1bmRhbnQgc2luY2UgK1tXZWJIVE1MVmlldyBpbml0aWFsaXplXSBpcyBndWFyYW50
ZWVkIHRvIHJ1biBmaXJzdC4KKwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7CiAgICAgUnVu
TG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKCFvbGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QKSB7CiAgICAgICAg
IE1ldGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5k
b3cgY2xhc3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7CiAgICAg
ICAgIEFTU0VSVChzZXRDdXJzb3JNZXRob2QpOwpAQCAtMTA0NSwzMyArMTAyOCwyMSBAQCArICh2
b2lkKWluaXRpYWxpemUKICAgICB9CiAKICAgICBtZXRob2RfZXhjaGFuZ2VJbXBsZW1lbnRhdGlv
bnMoY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TVmlldyBjbGFzc10sIEBzZWxlY3RvcihzZXRO
ZWVkc0Rpc3BsYXlJblJlY3Q6KSksIGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1ZpZXcgY2xh
c3NdLCBAc2VsZWN0b3IoX3dlYl9zZXROZWVkc0Rpc3BsYXlJblJlY3Q6KSkpOwotI2VuZGlmCiB9
CiAKKyNlbmRpZgorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAoV2ViQ29yZU9iakNTY2hl
ZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3UHJpdmF0ZSBjbGFzc10sIHNl
bGYpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQVNTRVJUKCFh
dXRvc2Nyb2xsVGltZXIpOwogICAgIEFTU0VSVCghYXV0b3Njcm9sbFRyaWdnZXJFdmVudCk7Ci0g
ICAgCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFzZV07Ci0g
ICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSNlbHNlCi0gICAgaWYgKG1vdXNlRG93bkV2ZW50
KQotICAgICAgICBDRlJlbGVhc2UgKG1vdXNlRG93bkV2ZW50KTsKLSAgICBpZiAoa2V5RG93bkV2
ZW50KQotICAgICAgICBDRlJlbGVhc2Uoa2V5RG93bkV2ZW50KTsKLSNlbmRpZgotICAgIFtwbHVn
aW5Db250cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29sVGlwIHJlbGVhc2VdOwotI2lmICFQTEFU
Rk9STShJT1MpCi0gICAgW2NvbXBsZXRpb25Db250cm9sbGVyIHJlbGVhc2VdOwogI2VuZGlmCi0g
ICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0jaWYgIVBMQVRGT1JNKElPUykKKworI2lmIFBMQVRG
T1JNKE1BQykKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCiAgICAgICAgIHBy
b21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50
KCkpOwogCkBAIC0xMDg2LDIyICsxMDU3LDcgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQp
Y2xlYXIKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFttb3VzZURvd25FdmVudCByZWxlYXNl
XTsKLSAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOwotI2Vsc2UKLSAgICBpZiAobW91c2VEb3du
RXZlbnQpCi0gICAgICAgIENGUmVsZWFzZShtb3VzZURvd25FdmVudCk7Ci0gICAgaWYgKGtleURv
d25FdmVudCkKLSAgICAgICAgQ0ZSZWxlYXNlKGtleURvd25FdmVudCk7Ci0jZW5kaWYKLSAgICBb
cGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSNpZiAh
UExBVEZPUk0oSU9TKQotICAgIFtjb21wbGV0aW9uQ29udHJvbGxlciByZWxlYXNlXTsKLSNlbmRp
ZgotICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKICAgICAgICAg
cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGll
bnQoKSk7CiAjZW5kaWYKQEAgLTExMDksMTMgKzEwNjUsMTMgQEAgLSAodm9pZCljbGVhcgogICAg
IG1vdXNlRG93bkV2ZW50ID0gbmlsOwogICAgIGtleURvd25FdmVudCA9IG5pbDsKICAgICBwbHVn
aW5Db250cm9sbGVyID0gbmlsOworI2lmIFBMQVRGT1JNKE1BQykKICAgICB0b29sVGlwID0gbmls
OwotI2lmICFQTEFURk9STShJT1MpCiAgICAgY29tcGxldGlvbkNvbnRyb2xsZXIgPSBuaWw7CiAj
ZW5kaWYKICAgICBkYXRhU291cmNlID0gbmlsOwotI2lmICFQTEFURk9STShJT1MpCi0gICAgcHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBwcm9t
aXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IG51bGxwdHI7CiAjZW5kaWYKIAogICAgIGxheWVySG9z
dGluZ1ZpZXcgPSBuaWw7CkBAIC0xMTMwLDI1ICsxMDg2LDkgQEAgLSAoRE9NUmFuZ2UgKilfZG9j
dW1lbnRSYW5nZQogICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIF9kb2N1
bWVudFJhbmdlXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi0tIChCT09MKV9pbWFnZUV4aXN0
c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRocwotewotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRv
ciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU1N0cmluZyAqcGF0aDsKLSAgICAK
LSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0g
ICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFtbTlNVUkxGaWxlVHlwZU1hcHBpbmdzIHNoYXJl
ZE1hcHBpbmdzXSBNSU1FVHlwZUZvckV4dGVuc2lvbjpbcGF0aCBwYXRoRXh0ZW5zaW9uXV07Ci0g
ICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1F
VHlwZShNSU1FVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gTk87Ci19Ci0jZW5kaWYKLQogLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNl
CiB7Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNlOworICAgIHJldHVybiBfcHJpdmF0
ZS0+ZGF0YVNvdXJjZS5nZXQoKTsKIH0KIAogLSAoV2ViVmlldyAqKV93ZWJWaWV3CkBAIC0xMTYx
LDU3ICsxMTAxLDQyIEBAIC0gKFdlYkZyYW1lVmlldyAqKV9mcmFtZVZpZXcKICAgICByZXR1cm4g
W1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XTsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5TQXJyYXkgKilwYXRocwogewotICAgIERP
TURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50OwotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRv
ciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBOU011dGFibGVBcnJheSAqZG9tTm9k
ZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU1N0cmluZyAqcGF0aDsK
LSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmls
KSB7CisgICAgYXV0byB0ZXh0Tm9kZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKKworICAgIGZvciAoTlNTdHJpbmcgKnBhdGggaW4gcGF0aHMpIHsKICAgICAgICAg
Ly8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93ZWJfdXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9w
cmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2lsbAogICAgICAgICAvLyBiZSBwYXN0ZWQgYXMgdmlz
aWJsZSB0ZXh0LgogICAgICAgICBOU1N0cmluZyAqdXJsID0gW1tbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOnBhdGhdIF93ZWJraXRfY2Fub25pY2FsaXplXSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsK
LSAgICAgICAgW2RvbU5vZGVzIGFkZE9iamVjdDpbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRd
IGNyZWF0ZVRleHROb2RlOiB1cmxdXTsKKyAgICAgICAgW3RleHROb2RlcyBhZGRPYmplY3Q6W1tb
c2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTp1cmxdXTsKICAgICB9Ci0g
ICAgCi0gICAgZnJhZ21lbnQgPSBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhO
b2Rlc0FzUGFyYWdyYXBoczpkb21Ob2Rlc107IAotICAgIAotICAgIFtkb21Ob2RlcyByZWxlYXNl
XTsKLSAgICAKKworICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9m
cmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6dGV4dE5vZGVzLmdl
dCgpXTsKICAgICByZXR1cm4gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdICE9IG5pbCA/IGZyYWdtZW50
IDogbmlsOwogfQogCiArIChOU0FycmF5ICopX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVk
U3RyaW5nQ29udmVyc2lvbgogewotICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9IG5pbDsK
LSAgICBpZiAoZWxlbWVudHMgPT0gbmlsKSB7Ci0gICAgICAgIGVsZW1lbnRzID0gW1tOU0FycmF5
IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6Ci0gICAgICAgICAgICAvLyBPbWl0IHN0eWxlIHNpbmNl
IHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5
IGluc2VydGVkLgotICAgICAgICAgICAgQCJzdHlsZSIsCi0gICAgICAgICAgICAvLyBPbWl0IHht
bCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KLSAgICAgICAgICAgIEAieG1sIiwgCi0gICAg
ICAgICAgICAvLyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRl
ZCB0byBhIGZyYWdtZW50IGFueXdheS4KLSAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIs
IEAiaGVhZCIsIEAiYm9keSIsCi0gICAgICAgICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4K
LSAgICAgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBA
ImZvbnQiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlrZSIsIEAidSIsCi0gICAgICAgICAgICAvLyBP
bWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVu
dC4KLSAgICAgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKLSAgICAgICAgQ0ZSZXRhaW4oZWxlbWVu
dHMpOwotICAgIH0KKyAgICBzdGF0aWMgTlNBcnJheSAqZWxlbWVudHMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgLy8gT21pdCBzdHlsZSBzaW5jZSB3ZSB3YW50
IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQgY2FuIGJlIGVhc2lseSBpbnNlcnRl
ZC4KKyAgICAgICAgQCJzdHlsZSIsCisgICAgICAgIC8vIE9taXQgeG1sIHNvIHRoZSByZXN1bHQg
aXMgbm90IFhIVE1MLgorICAgICAgICBAInhtbCIsCisgICAgICAgIC8vIE9taXQgdGFncyB0aGF0
IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21lbnQgYW55d2F5Lgor
ICAgICAgICBAImRvY3R5cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJvZHkiLAorICAgICAgICAv
LyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4KKyAgICAgICAgQCJhcHBsZXQiLCBAImJhc2Vmb250Iiwg
QCJjZW50ZXIiLCBAImRpciIsIEAiZm9udCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtlIiwgQCJ1
IiwKKyAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50cyBhcmUgcGFy
dCBvZiB0aGUgZnJhZ21lbnQuCisgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKICAgICByZXR1cm4g
ZWxlbWVudHM7CiB9CiAKLXN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChO
U1N0cmluZyAqcmVsYXRpdmVQYXJ0KQorc3RhdGljIE5TVVJMICp1bmlxdWVVUkxXaXRoUmVsYXRp
dmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCiB7Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYg
PSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURT
dHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAv
JUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1dOwot
ICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKLQotICAgIHJldHVybiBVUkw7CisgICAgcmV0dXJu
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8l
QC8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgY3JlYXRlVVVJRFN0cmluZygpLCByZWxhdGl2
ZVBhcnRdXTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKQEAgLTEzMDEsNDAgKzEy
MjYsMzIgQEAgLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQKICAgICAKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5T
U3RyaW5nUGJvYXJkVHlwZV0pCiAgICAgICAgIHJldHVybiBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9y
VHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddOwotICAgIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9
IG5pbDsKLSAgICBOU1N0cmluZyAqc3RyaW5nOwogCisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZzsKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUlRGRFBib2FyZFR5cGVdKQotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpO
U1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAgICAgIGF0dHJp
YnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdKTsKICAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwgJiYgW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRT
dHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9h
cmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0gICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgIT0gbmlsKSB7Ci0gICAgICAgIHN0cmluZyA9IFtb
YXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNvcHldOwotICAgICAgICBbYXR0cmlidXRlZFN0cmlu
ZyByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIFtzdHJpbmcgYXV0b3JlbGVhc2VdOwotICAgIH0K
LSAgICAKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJv
YXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAgICBpZiAoYXR0cmlidXRlZFN0
cmluZykKKyAgICAgICAgcmV0dXJuIFtbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjb3B5XSBh
dXRvcmVsZWFzZV07CisKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVz
UGJvYXJkVHlwZV0pIHsKLSAgICAgICAgc3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3BlcnR5TGlz
dEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6
QCJcbiJdOwotICAgICAgICBpZiAoc3RyaW5nICE9IG5pbCkKKyAgICAgICAgaWYgKE5TU3RyaW5n
ICpzdHJpbmcgPSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl0pCiAgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nOwogICAgIH0KLSAgICAKLSAgICBOU1VSTCAqVVJMOwotICAgIAotICAgIGlm
ICgoVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSkgewotICAgICAg
ICBzdHJpbmcgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgICAgICBpZiAoW3N0
cmluZyBsZW5ndGhdID4gMCkKKworICAgIGlmIChOU1VSTCAqVVJMID0gW05TVVJMIFVSTEZyb21Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSB7CisgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbVVJM
IF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgICAgICBpZiAoW3N0cmluZyBsZW5ndGhdKQog
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbmls
OwogfQogCiAtICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0CiB7Ci0gICAgV2ViVmll
dyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKKyAgICBhdXRvIHdlYlZpZXcg
PSByZXRhaW5QdHIoW3NlbGYgX3dlYlZpZXddKTsKICAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9u
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKIAogICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9z
ZWxlY3RlZFJhbmdlXTsKQEAgLTEzNDUsMjAgKzEyNjIsMTggQEAgLSAodm9pZClfcGFzdGVXaXRo
UGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9P
TClhbGwKICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5wYXN0ZUFzRnJhZ21lbnQoKmNvcmUo
ZnJhZ21lbnQpLCBbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZF0sIGZhbHNlKTsKIAogICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07
Ci0gICAgW3dlYlZpZXcgcmVsZWFzZV07CiB9CiAKIC0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRX
aXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCAKIHsgCi0gICAgV2ViVmll
dyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsgCi0gICAgW3dlYlZpZXcgX3Nl
dEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07IAorICAgIGF1dG8gd2ViVmlldyA9IHJl
dGFpblB0cihbc2VsZiBfd2ViVmlld10pOworICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0
ZWJvYXJkOnBhc3RlYm9hcmRdOwogCiAgICAgTlNTdHJpbmcgKnRleHQgPSBbc2VsZiBfcGxhaW5U
ZXh0RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07IAogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlv
blBhc3RlZF0pIAogICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFy
dFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXV07IAogCiAgICAgW3dlYlZpZXcgX3Nl
dEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsgCi0gICAgW3dlYlZpZXcgcmVsZWFzZV07CiB9CiAK
IC0gKHZvaWQpX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3NDaGFuZ2VkRXZlbnQ6KE5T
RXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudApAQCAtMTM2OSw3ICsxMjg0LDcgQEAgLSAodm9pZClf
cG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZs
YWdzQ2hhbmdlZEV2ZW4KICAgICBbc2VsZiBtb3VzZU1vdmVkOmZha2VFdmVudF07CiB9CiAKLS8v
IFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBzdXBwb3J0IE1hYyBPUyBYIHNlcnZpY2VzLgorLy8g
VGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbWFjT1Mgc2VydmljZXMuCiAtIChCT09M
KXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCAK
IHsgCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7IApAQCAtMTM4
NiwxNSArMTMwMSwxNSBAQCAtICh2b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnMKIHsKICAg
ICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0
aW9ucykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBb
c2VsZiBzdXBlcnZpZXddOwogICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZp
Y2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwogICAg
IFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0ZyYW1l
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwogICAgIFtub3RpZmljYXRp
b25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0RpZENoYW5nZU5v
dGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKKwogICAgIF9wcml2YXRlLT5vYnNl
cnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gZmFsc2U7CiB9CiAKQEAgLTE0MDIsMjEgKzEz
MTcsMjAgQEAgLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCiB7CiAgICAgaWYgKCFfcHJp
dmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKICAgICAgICAgcmV0dXJuOwotICAg
IAorCiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAgICAgaWYgKCF3aW5k
b3cpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpu
b3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07
CiAgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5k
b3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAgICAgW25vdGlmaWNhdGlv
bkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3Rp
ZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNl
cnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbiBvYmpl
Y3Q6d2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYg
bmFtZTpOU1dpbmRvd1dpbGxPcmRlck9mZlNjcmVlbk5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93
XTsKICAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dp
bmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICAKKwogICAgIF9w
cml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFsc2U7CiB9Ci0jZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAoQk9PTClf
c2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBs
YWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2Vy
dEFjdGlvbilhY3Rpb24KIHsKQEAgLTE0NDQsMTMgKzEzNTgsOCBAQCAtIChET01SYW5nZSAqKV9z
ZWxlY3RlZFJhbmdlCiAgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOwogfQogCi0tIChCT09MKV9z
aG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5lZGl0b3IoKS5zaG91bGREZWxldGVSYW5nZShjb3JlKHJhbmdlKSk7Ci19CisjaWYgUExB
VEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TVmlldyAqKV9oaXRWaWV3Rm9y
RXZlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIC8vIFVzdWFsbHksIHdlIGhhY2sgQUsncyBo
aXRUZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0b3Btb3N0IFdlYkhUTUxW
aWV3LiAgCkBAIC0xNDYwLDkgKzEzNjksNyBAQCAtIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKICAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBOTzsgICAgCiAgICAg
cmV0dXJuIGhpdFZpZXc7CiB9Ci0jZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCiAtICh2b2lk
KV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bh
c3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmlu
ZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwogewogICAgIC8vIFB1dCBI
VE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgpAQCAtMTQ3Miw3ICsxMzc5LDcgQEAgLSAodm9pZClfd3Jp
dGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJv
YXJkOihOU1Bhc3QKICAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEg
KilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFz
dGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4KICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUlRGRFBib2FyZFR5cGVdKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5p
bCkgewpAQCAtMTQ4OSw0MiArMTM5NiwzMiBAQCAtICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQ
YXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdAogICAg
ICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
OkB7IH1dOwogICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9yVHlwZTpOU1JU
RlBib2FyZFR5cGVdOwogICAgIH0KLSAgICAKKwogICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcgb24g
dGhlIHBhc3RlYm9hcmQuCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bi
b2FyZFR5cGVdKSB7CiAgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQgc3BhY2Ug
YmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJzIGRv
IGl0LAogICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhpcyBh
bnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93LgotICAgICAgICBOU011dGFibGVT
dHJpbmcgKnMgPSBbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIG11dGFibGVDb3B5XTsKLSAgICAgICAg
Y29uc3QgdW5pY2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKLSAgICAgICAg
TlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENo
YXJhY3RlcnM6Jk5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgbGVuZ3RoOjFdOwotICAgICAgICBb
cyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpOb25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhT
dHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwot
ICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6cyBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlw
ZV07Ci0gICAgICAgIFtzIHJlbGVhc2VdOworICAgICAgICBhdXRvIHN0cmluZyA9IGFkb3B0TlMo
W1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBtdXRhYmxlQ29weV0pOworICAgICAgICBjb25zdCB1bmlj
aGFyIG5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAgICAgICBOU1N0cmluZyAq
bm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczom
bm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07CisgICAgICAgIFtzdHJpbmcgcmVw
bGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6bm9uQnJlYWtpbmdTcGFjZVN0cmluZyB3aXRoU3RyaW5n
OkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSldOwor
ICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6c3RyaW5nLmdldCgpIGZvclR5cGU6TlNTdHJp
bmdQYm9hcmRUeXBlXTsKICAgICB9Ci0gICAgCi0gICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlP
ckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBl
XSkgeworCisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNv
bnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXSkKICAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Ci0gICAgfQog
fQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9p
ZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAotI2Vsc2UKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKIC0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJFdmVudCAqKWV2
ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUxlZnRNb3VzZURv
d24gfHwgW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50
IHR5cGVdID09IE5TRXZlbnRUeXBlT3RoZXJNb3VzZURvd24pOwogI2Vsc2UKICAgICBBU1NFUlQo
IWV2ZW50IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRNb3VzZURvd24pOwogI2VuZGlmCiAKLSAg
ICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbZXZlbnQgcmV0YWluXTsKLSAgICBbX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50IHJl
bGVhc2VdOwogICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9IGV2ZW50OwogfQogCkBAIC0x
NTQyLDc2ICsxNDM5LDQ2IEBAIC0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKICAgICByZXR1cm4gc2Vs
ZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZv
aWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRp
bmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFs
UGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRq
dXN0Vmlld1NpemU6Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFn
aW5hdGlvbk1vZGVdXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRp
bmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRh
bnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQotICAgIFtz
ZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhU
TUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdz
IGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAg
ICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5n
OllFUyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBh
Z2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVz
dFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2lu
YXRpb25Nb2RlXV07CisjaWYgUExBVEZPUk0oTUFDKQogCi0gICAgW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgcmVsZWFzZV07CistICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOihC
T09MKXByaW50aW5nIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmpl
Y3RzOnNlbGYsIG5pbF0pOworICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGVudFdlYkhUTUxWaWV3
c1RvQXJyYXk6YXJyYXkuZ2V0KCldOworICAgIGZvciAoV2ViSFRNTFZpZXcgKnZpZXcgaW4gYXJy
YXkuZ2V0KCkpCisgICAgICAgIFt2aWV3IF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFn
ZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdp
bmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOmFkanVz
dFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRp
b25Nb2RlXV07Cit9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5n
U3Vidmlld3MgPSBOTzsKLSNlbmRpZgorLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZQoreworICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOllFUyBhZGp1
c3RWaWV3U2l6ZTpOT107CiB9CiAKIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vy
c2l2ZQogewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0
aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdo
dDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVu
Q29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQot
ICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1M
Vmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBv
YmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDow
IGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDow
IG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVuQ29u
dGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSAgICBbZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+
ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCisgICAgW3NlbGYgX3dlYl9zZXRQcmlu
dGluZ01vZGVSZWN1cnNpdmU6Tk8gYWRqdXN0Vmlld1NpemU6Tk9dOwogfQogCiAtICh2b2lkKV93
ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKIHsKLSAgICBbc2Vs
ZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdo
dDowIG9yaWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlu
a1JhdGlvOjAgYWRqdXN0Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBf
aXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZh
dGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFy
cmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF07CisgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU6WUVTIGFkanVzdFZp
ZXdTaXplOllFU107Cit9CiAKLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmll
d3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRd
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rl
c2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6WUVTIG1p
bmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFsUGFnZVdpZHRo
OjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRqdXN0Vmlld1Np
emU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25N
b2RlXV07CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLSAgICBbZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQ
ZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3QKK3sKKyAg
ICAvLyBDb3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmlld3NdIHJldHVybnMgdGhlIHZp
ZXcncyBtdXRhYmxlIGludGVybmFsIGFycmF5LAorICAgIC8vIGFuZCB3ZSBtdXN0IGF2b2lkIG11
dGF0aW5nIHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4KKyAgICBmb3IgKE5TVmlldyAq
dmlldyBpbiBhZG9wdE5TKFtbc2VsZiBzdWJ2aWV3c10gY29weV0pLmdldCgpKSB7CisgICAgICAg
IGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNz
XV0pCisgICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVj
dDpvYmplY3RdOworICAgIH0KK30KIAotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwogI2VuZGlmCi19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogQGVuZAogCkBAIC0xNjQzLDE1ICsxNTEwLDE3IEBAICsgKE5TQXJyYXkgKil1bnN1cHBv
cnRlZFRleHRNSU1FVHlwZXMKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKKwogLSAodm9pZCltb3Vz
ZU1vdmVkOihXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICBpZiAoZnJhbWUpCisgICAgaWYgKGF1dG8qIGZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQo
ZXZlbnQpOwogfQorCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0o
TUFDKQorCiArICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0No
YW5nZWRFdmVudAogewogICAgIC8vIFRoaXMgaXMgb2Jzb2xldGUgU1BJIG5lZWRlZCBvbmx5IGZv
ciBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkKQEAgLTE2ODEsNyArMTU1MCw4IEBAIC0gKHZvaWQp
X3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQKIAogICAgIFtzZWxmIF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAog
ewpAQCAtMTY5OCw3ICsxNTY4LDcgQEAgLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJl
dmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAjZW5kaWYKICAgICAgICAgCkBAIC0xNzA5
LDcgKzE1NzksNyBAQCAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAogCiAtICh2b2lkKV9z
ZXRBc2lkZVN1YnZpZXdzCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CiAgICAgQVNTRVJUKF9w
cml2YXRlLT5zYXZlZFN1YnZpZXdzID09IG5pbCk7CiAgICAgX3ByaXZhdGUtPnNhdmVkU3Vidmll
d3MgPSBfc3Vidmlld3M7CkBAIC0xNzI1LDcgKzE1OTUsNyBAQCAtICh2b2lkKV9zZXRBc2lkZVN1
YnZpZXdzCiAgCiAgLSAodm9pZClfcmVzdG9yZVN1YnZpZXdzCiAgewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmlld3NTZXRB
c2lkZSk7CiAgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CiAgICAgICAgIFtf
c3Vidmlld3MgcmVsZWFzZV07CkBAIC0xNzM5LDIwICsxNjA5LDEwIEBAIC0gKHZvaWQpX3NldEFz
aWRlU3Vidmlld3MKICNlbmRpZgogfQogCi0jaWZuZGVmIE5ERUJVRwotCi0tICh2b2lkKWRpZEFk
ZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmVudW1lcmF0
aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyBh
ZGRlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1v
ZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWlnaHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcg
bGF5b3V0LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0jZW5k
aWYKLQotCiAtICh2b2lkKXZpZXdXaWxsRHJhdwogewotICAgIC8vIE9uIHdpbmRvdyBjbG9zZSB3
ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhlbiBoaXQgYW4g
YXNzZXJ0IGluIF90b3BIVE1MVmlldwotICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBkYXRhU291cmNl
IGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJl
IHJlbW92ZWQKKyAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgd2hlbiB0
aGUgZGF0YSBzb3VyY2UgaXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxWaWV3
CisgICAgLy8gU28gY2hlY2sgaWYgdGhlIGRhdGEgc291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGlu
ZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJlIHJlbW92ZWQKICAgICAvLyBvbmNl
IHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmlldyBpcyBmaXhlZC4KICAgICBpZiAoX3ByaXZhdGUt
PmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9wSFRNTFZpZXddKSB7CiAgICAgICAgIFtzZWxmIF93
ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZV07CkBAIC0xNzYyLDggKzE2
MjIsOCBAQCAtICh2b2lkKXZpZXdXaWxsRHJhdwogICAgIFtzdXBlciB2aWV3V2lsbERyYXddOwog
fQogCisjaWYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC8vIERvbid0IGxl
dCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KIC0gKHZv
aWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdCly
ZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZv
clZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldwogewpAQCAt
MTg4MSwxOSArMTc0MSwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZVggZGlz
cGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdAogICAgIGlmIChkaWRT
ZXRBc2lkZVN1YnZpZXdzKQogICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKIH0KLSNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCi0tIChCT09MKV9pbnNpZGVBbm90aGVySFRNTFZpZXcK
LXsKLSAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRNTFZpZXddOwotfQogCi0jaWYgIVBM
QVRGT1JNKElPUykKIHN0YXRpYyBCT09MIGlzUXVpY2tMb29rRXZlbnQoTlNFdmVudCAqZXZlbnQp
CiB7CiAgICAgY29uc3QgaW50IGtDR1NFdmVudFN5c3RlbVN1YnR5cGVIb3RLZXlDb21iaW5hdGlv
blJlbGVhc2VkID0gOTsKICAgICByZXR1cm4gW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlU3lz
dGVtRGVmaW5lZCAmJiBbZXZlbnQgc3VidHlwZV0gPT0ga0NHU0V2ZW50U3lzdGVtU3VidHlwZUhv
dEtleUNvbWJpbmF0aW9uUmVsZWFzZWQgJiYgW2V2ZW50IGRhdGExXSA9PSAnbGt1cCc7CiB9CisK
ICNlbmRpZgogCiAtIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50CkBAIC0xOTYwLDcg
KzE4MTQsOCBAQCAtICh2b2lkKV9jbGVhckxhc3RIaXRWaWV3SWZTZWxmCiAgICAgICAgIGxhc3RI
aXRWaWV3ID0gbmlsOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIC0gKE5TVHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3du
ZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNz
dW1lSW5zaWRlCiB7CiAgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBu
aWwpOwpAQCAtMjA1MiwyMSArMTkwNywxOSBAQCAtICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRW50
ZXJlZAogICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOwog
ICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVudF07
CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
IAogLSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJp
bmcgbGVuZ3RoXSA9PSAwID8gbmlsIDogc3RyaW5nOwotICAgIE5TU3RyaW5nICpvbGRUb29sVGlw
ID0gX3ByaXZhdGUtPnRvb2xUaXA7Ci0gICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29s
VGlwID09IG5pbCkgPyB0b29sVGlwID09IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9T
dHJpbmc6b2xkVG9vbFRpcF0pIHsKKyAgICBOU1N0cmluZyAqb2xkVG9vbFRpcCA9IF9wcml2YXRl
LT50b29sVGlwLmdldCgpOworICAgIGlmICh0b29sVGlwID09IG9sZFRvb2xUaXAgfHwgW3Rvb2xU
aXAgaXNFcXVhbFRvU3RyaW5nOm9sZFRvb2xUaXBdKQogICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChvbGRUb29sVGlwKSB7CisgICAgaWYgKG9sZFRvb2xUaXApCiAgICAgICAgIFtzZWxm
IF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKLSAgICAgICAgW29sZFRvb2xUaXAgcmVsZWFzZV07
Ci0gICAgfQotICAgIF9wcml2YXRlLT50b29sVGlwID0gW3Rvb2xUaXAgY29weV07CisgICAgX3By
aXZhdGUtPnRvb2xUaXAgPSBhZG9wdE5TKFt0b29sVGlwIGNvcHldKTsKICAgICBpZiAodG9vbFRp
cCkgewogICAgICAgICAvLyBTZWUgcmFkYXIgMzUwMDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwg
dG9vbHRpcHMgcmF0aGVyIHRoYW4ganVzdCB0aGUgc2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgogICAg
ICAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107CkBAIC0yMDc3LDcgKzE5MzAsOCBAQCAtICh2
b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZwogI2VuZGlmCiB9CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNTdHJpbmcgKil2aWV3OihOU1Zp
ZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5TVG9vbFRpcFRhZyl0YWcgcG9pbnQ6KE5TUG9p
bnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRhCiB7CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUt
PnRvb2xUaXAgY29weV0gYXV0b3JlbGVhc2VdOwpAQCAtMjE5MSwxOSArMjA0NSwxOCBAQCArIChO
U0FycmF5ICopX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlcwogCiAtICh2b2lkKXBhc3RlYm9hcmRD
aGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKIHsKLSAgICBbc2VsZiBzZXRQ
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsKKyAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZTpudWxscHRyXTsKIH0KIAogLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCiB7
CiAgICAgaWYgKFt0eXBlIGlzRXF1YWw6TlNSVEZEUGJvYXJkVHlwZV0gJiYgW1twYXN0ZWJvYXJk
IHR5cGVzXSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKLSAgICAgICAg
V2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltw
YXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07Ci0gICAgICAgIFtw
YXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZlIGNvbnRh
aW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRU
eXBlXV07Ci0gICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwotICAgIH0gZWxzZSBpZiAoW3R5cGUg
aXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZV0pIHsKLSAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlXS0+aW1hZ2UoKSkKKyAgICAgICAgYXV0byBhcmNoaXZlID0gYWRvcHROUyhb
W1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpX
ZWJBcmNoaXZlUGJvYXJkVHlwZV1dKTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVBy
b21pc2VkUlRGREZyb21BcmNoaXZlOmFyY2hpdmUuZ2V0KCkgY29udGFpbnNJbWFnZTpbW3Bhc3Rl
Ym9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdXTsKKyAgICB9IGVs
c2UgaWYgKFt0eXBlIGlzRXF1YWw6TlNUSUZGUGJvYXJkVHlwZV0gJiYgX3ByaXZhdGUtPnByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlKSB7CisgICAgICAgIGlmIChhdXRvKiBpbWFnZSA9IF9wcml2
YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+aW1hZ2UoKSkKICAgICAgICAgICAgIFtw
YXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWltYWdlLT50aWZmUmVwcmVzZW50YXRpb24oKSBm
b3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOwotICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZTowXTsKKyAgICAgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFT
b3VyY2U6bnVsbHB0cl07CiAgICAgfQogfQogCkBAIC0yMjExLDE1ICsyMDY0LDEyIEBAIC0gKHZv
aWQpX2hhbmRsZUF1dG9zY3JvbGxGb3JNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAogeyAK
ICAgICBbc2VsZiBhdXRvc2Nyb2xsOmV2ZW50XTsgCiAgICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9s
bFRpbWVyOmV2ZW50XTsgCi19IAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KLS0gKFdlYlBs
dWdpbkNvbnRyb2xsZXIgKilfcGx1Z2luQ29udHJvbGxlcgotewotICAgIHJldHVybiBfcHJpdmF0
ZS0+cGx1Z2luQ29udHJvbGxlcjsKIH0KIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogI2lm
IFBMQVRGT1JNKElPUykKKwogLy8gV0FLVmlldyBvdmVycmlkZS4KIC0gKHZvaWQpbGF5b3V0SWZO
ZWVkZWQKIHsKQEAgLTIyNDIsNyArMjA5Miw4IEBAIC0gKHZvaWQpc2V0U2NhbGU6KGZsb2F0KXNj
YWxlCiAKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisK
IC0gKHZvaWQpX2xheW91dEZvclByaW50aW5nCiB7CiAgICAgLy8gU2V0IHByaW50aW5nIG1vZGUg
dGVtcG9yYXJpbHkgc28gd2UgY2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3
aWxsIGFsbG93CkBAIC0yMjUyLDkgKzIxMDMsNyBAQCAtICh2b2lkKV9sYXlvdXRGb3JQcmludGlu
ZwogICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1Np
emVdOwogICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwogfQotI2Vu
ZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQogLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6
KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopcmFuZ2VU
b1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJp
bmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nCiB7CiAgICAgaWYgKCFwYXN0ZVN0cmluZyB8fCAh
cmFuZ2VUb1JlcGxhY2UgfHwgIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFi
bGVkXSkgewpAQCAtMjI3MywxNyArMjEyMiw3IEBAIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdp
dGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiAgICAgcmV0dXJuIFtbc2Vs
ZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlw
ZXNdIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKIH0KIAotLSAodm9p
ZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKLSNlbHNlCi0t
ICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjogKFdlYkV2ZW50ICopdHJpZ2dlckV2ZW50CiAj
ZW5kaWYKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9PSBuaWwpIHsKLSAg
ICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1l
cldpdGhUaW1lSW50ZXJ2YWw6QVVUT1NDUk9MTF9JTlRFUlZBTAotICAgICAgICAgICAgdGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2VySW5mbzpuaWwgcmVwZWF0
czpZRVNdIHJldGFpbl07Ci0gICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50
ID0gW3RyaWdnZXJFdmVudCByZXRhaW5dOwotICAgIH0KLX0KIAogLy8gRklYTUU6IF9zZWxlY3Rp
b25SZWN0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMg
aW4gcHJvdG9jb2wgV2ViRG9jdW1lbnRTZWxlY3Rpb24uCiAvLyBXZSBjYW4ndCByZW1vdmUgdGhp
cyB5ZXQgYmVjYXVzZSBpdCdzIHN0aWxsIGluIHVzZSBieSBNYWlsLgpAQCAtMjI5MiwzNiArMjEz
MSwxOCBAQCAtIChOU1JlY3QpX3NlbGVjdGlvblJlY3QKICAgICByZXR1cm4gW3NlbGYgc2VsZWN0
aW9uUmVjdF07CiB9CiAKLS0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKLXsKLSAgICBOU1Rp
bWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXI7Ci0gICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IG5pbDsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFtfcHJpdmF0ZS0+
YXV0b3Njcm9sbFRyaWdnZXJFdmVudCByZWxlYXNlXTsKLSNlbHNlCi0gICAgaWYgKF9wcml2YXRl
LT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50KQotICAgICAgICBDRlJlbGVhc2UgKF9wcml2YXRlLT5h
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50KTsKLSNlbmRpZgotICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xs
VHJpZ2dlckV2ZW50ID0gbmlsOwotICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKLSAgICBbdGltZXIg
cmVsZWFzZV07Ci19CisjaWYgUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9hdXRvc2Nyb2xsCiB7
CiAgICAgLy8gR3VhcmFudGVlIHRoYXQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0
ZWQsIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2ZQogICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCi0j
aWYgIVBMQVRGT1JNKElPUykKLSAgICBCT09MIGlzU3RpbGxEb3duID0gQ0dFdmVudFNvdXJjZUJ1
dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNlc3Npb25TdGF0ZSwga0NHTW91
c2VCdXR0b25MZWZ0KTsgICAKLSNlbHNlCi0gICAgQk9PTCBpc1N0aWxsRG93biA9IE5POwotI2Vu
ZGlmCisgICAgQk9PTCBpc1N0aWxsRG93biA9IENHRXZlbnRTb3VyY2VCdXR0b25TdGF0ZShrQ0dF
dmVudFNvdXJjZVN0YXRlQ29tYmluZWRTZXNzaW9uU3RhdGUsIGtDR01vdXNlQnV0dG9uTGVmdCk7
CiAgICAgaWYgKCFpc1N0aWxsRG93bil7CiAgICAgICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRp
bWVyXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmICFQTEFURk9STShJT1MpCiAgICAg
TlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRU
eXBlTGVmdE1vdXNlRHJhZ2dlZAogICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XQogI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKQEAgLTIzMzUsOSArMjE1NiwxMCBAQCAtICh2b2lk
KV9hdXRvc2Nyb2xsCiAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJl
OjBdOwogCiAgICAgW3NlbGYgbW91c2VEcmFnZ2VkOmZha2VFdmVudF07Ci0jZW5kaWYKIH0KIAor
I2VuZGlmCisKIC0gKEJPT0wpX2NhbkVkaXQKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKQEAgLTIzNzksNiArMjIwMSw4IEBAIC0gKEJPT0wpX2lzRWRpdGFi
bGUKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAo
Qk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT50cmFu
c3BhcmVudEJhY2tncm91bmQ7CkBAIC0yMzg5LDcgKzIyMTMsNiBAQCAtICh2b2lkKV9zZXRUcmFu
c3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZgogICAgIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tn
cm91bmQgPSBmOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TSW1hZ2UgKilfc2VsZWN0
aW9uRHJhZ2dpbmdJbWFnZQogewogICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCkBAIC0y
NDExLDYgKzIyMzQsNyBAQCAtIChOU1JlY3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAogICAgIC8v
IE1haWwgY3VycmVudGx5IGNhbGxzIHRoaXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdo
ZW4gTWFpbCBubyBsb25nZXIgY2FsbHMgaXQuCiAgICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJl
Y3RdOwogfQorCiAjZW5kaWYKIAogLSAoRE9NTm9kZSAqKV9pbnNlcnRPcmRlcmVkTGlzdApAQCAt
MjQ2Miw3ICsyMjg2LDggQEAgLSAodm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKICAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwog
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX3dy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7CiAg
ICAgQVNTRVJUKFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKQEAgLTI0NzAsMTcgKzIyOTUsMTcgQEAg
LSAodm9pZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKIAogICAgIC8vIERvbid0IHdyaXRlIFJURkQgdG8gdGhlIHBhc3RlYm9hcmQgd2hlbiB0
aGUgY29waWVkIGF0dHJpYnV0ZWQgc3RyaW5nIGhhcyBubyBhdHRhY2htZW50cy4KICAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0
ZWRTdHJpbmddOwotICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlVHlwZXMgPSBuaWw7CisgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtdXRhYmxlVHlwZXM7CiAgICAgaWYgKCFbYXR0cmli
dXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgewotICAgICAgICBtdXRhYmxlVHlwZXMg
PSBbdHlwZXMgbXV0YWJsZUNvcHldOworICAgICAgICBtdXRhYmxlVHlwZXMgPSBhZG9wdE5TKFt0
eXBlcyBtdXRhYmxlQ29weV0pOwogICAgICAgICBbbXV0YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpO
U1JURkRQYm9hcmRUeXBlXTsKLSAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXM7CisgICAgICAg
IHR5cGVzID0gbXV0YWJsZVR5cGVzLmdldCgpOwogICAgIH0KIAogICAgIFtwYXN0ZWJvYXJkIGRl
Y2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKICAgICBbc2VsZiBf
d3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107Ci0gICAgW211
dGFibGVUeXBlcyByZWxlYXNlXTsKIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQpY2xvc2UKQEAgLTI0
OTIsMTQgKzIzMTcsMTcgQEAgLSAodm9pZCljbG9zZQogCiAgICAgX3ByaXZhdGUtPmNsb3NlZCA9
IFlFUzsKIAorI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lm
U2VsZl07Ci0jaWYgIVBMQVRGT1JNKElPUykKKwogICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNl
cnZlcnNdOwogICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwogI2VuZGlmCisK
ICAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdpbnNdOwogICAg
IFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOm5pbF07Ci0jaWYgIVBM
QVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyByZW1vdmUgdG9vbHRpcHMg
YmVmb3JlIGNsZWFyaW5nIF9wcml2YXRlIHNvIHJlbW92ZVRyYWNraW5nUmVjdDogd2lsbCB3b3Jr
IGNvcnJlY3RseQogICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKIApAQCAtMjUxMiwzMyAr
MjM0MCwzMiBAQCAtICh2b2lkKWNsb3NlCiAgICAgW19wcml2YXRlIGNsZWFyXTsKIH0KIAotLSAo
Qk9PTClfaGFzSFRNTERvY3VtZW50CisjaWYgUExBVEZPUk0oTUFDKQorCistIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX3dlYl9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQgcGFzdGVib2FyZFR5cGU6KE5TU3RyaW5nICopcGFzdGVib2FyZFR5
cGUgaW1hZ2VNSU1FVHlwZTooTlNTdHJpbmcgKilpbWFnZU1JTUVUeXBlCiB7Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpOworICAgIGF1dG8gZmlsZW5hbWUgPSBbaW1hZ2VNSU1FVHlwZSBzdHJpbmdCeVJlcGxhY2lu
Z09jY3VycmVuY2VzT2ZTdHJpbmc6QCIvIiB3aXRoU3RyaW5nOkAiLiJdOworICAgIGF1dG8gcmVz
b3VyY2UgPSBhZG9wdE5TKFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVi
b2FyZCBkYXRhRm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV0KKyAgICAgICAgVVJMOnVuaXF1ZVVSTFdp
dGhSZWxhdGl2ZVBhcnQoZmlsZW5hbWUpIE1JTUVUeXBlOmltYWdlTUlNRVR5cGUgdGV4dEVuY29k
aW5nTmFtZTpuaWwgZnJhbWVOYW1lOm5pbF0pOworICAgIHJldHVybiBbW3NlbGYgX2RhdGFTb3Vy
Y2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2UuZ2V0KCldOwog
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTooTlNT
dHJpbmcgKilwYm9hcmRUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJy
ZXNvdXJjZXMKIHsKLSAgICBpZiAocGJvYXJkVHlwZSA9PSBXZWJBcmNoaXZlUGJvYXJkVHlwZSkg
ewotICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0
V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsK
KyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkFyY2hpdmVQYm9hcmRUeXBl
XSkgeworICAgICAgICBhdXRvIGFyY2hpdmUgPSBhZG9wdE5TKFtbV2ViQXJjaGl2ZSBhbGxvY10g
aW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBl
XV0pOwogICAgICAgICBpZiAoc3VicmVzb3VyY2VzKQogICAgICAgICAgICAgKnN1YnJlc291cmNl
cyA9IFthcmNoaXZlIHN1YnJlc291cmNlc107Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNo
aXZlOmFyY2hpdmVdOwotICAgICAgICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50OworICAgICAgICByZXR1cm4gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRG
cmFnbWVudFdpdGhBcmNoaXZlOmFyY2hpdmUuZ2V0KCldOwogICAgIH0KLSAgICBpZiAocGJvYXJk
VHlwZSA9PSBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpCisKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNF
cXVhbFRvU3RyaW5nOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV0pCiAgICAgICAgIHJldHVybiBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV1dOwotICAgICAgICAKLSAgICBpZiAocGJvYXJkVHlw
ZSA9PSBOU0hUTUxQYm9hcmRUeXBlKSB7CisKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRv
U3RyaW5nOk5TSFRNTFBib2FyZFR5cGVdKSB7CiAgICAgICAgIE5TU3RyaW5nICpIVE1MU3RyaW5n
ID0gW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsKICAgICAgICAg
Ly8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBIVE1MIHBhc3RlYm9hcmQgZGF0
YSB3b3JrLiBTZWUgMzc3ODc4NS4KICAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGhhc1ByZWZpeDpA
IlZlcnNpb246Il0pIHsKQEAgLTI1NDgsNzkgKzIzNzUsNTAgQEAgLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm8KICAgICAgICAgfQogICAgICAgICBpZiAoW0hUTUxTdHJpbmcgbGVuZ3RoXSA9PSAwKQog
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiBbW3NlbGYg
X2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0cmluZyBiYXNl
VVJMU3RyaW5nOm5pbF07CiAgICAgfQogCi0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNSVEZQYm9h
cmRUeXBlIHx8IHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgewotICAgICAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICAgICAgaWYgKHBib2FyZFR5cGUgPT0g
TlNSVEZEUGJvYXJkVHlwZSkKLSAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJv
YXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotICAgICAgICBpZiAoc3RyaW5nID09
IG5pbCkKLSAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3Vt
ZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCisgICAgaWYg
KFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1JURlBib2FyZFR5cGVdIHx8IFtwYm9hcmRU
eXBlIGlzRXF1YWxUb1N0cmluZzpOU1JURkRQYm9hcmRUeXBlXSkgeworICAgICAgICBSZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmc7CisgICAgICAgIGlmIChbcGJvYXJkVHlwZSBp
c0VxdWFsVG9TdHJpbmc6TlNSVEZEUGJvYXJkVHlwZV0pCisgICAgICAgICAgICBzdHJpbmcgPSBh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9h
cmQgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExd
KTsKKyAgICAgICAgaWYgKCFzdHJpbmcpCisgICAgICAgICAgICBzdHJpbmcgPSBhZG9wdE5TKFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXSk7CisgICAgICAg
IGlmICghc3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAotICAg
ICAgICBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0cmlidXRlcyA9IFtbTlNEaWN0aW9uYXJ5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorCisgICAgICAgIGF1dG8gZG9jdW1lbnRBdHRy
aWJ1dGVzID0gYWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5k
S2V5czoKICAgICAgICAgICAgIFtbc2VsZiBjbGFzc10gX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRy
aWJ1dGVkU3RyaW5nQ29udmVyc2lvbl0sIE5TRXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmli
dXRlLAotICAgICAgICAgICAgbmlsXTsKLSAgICAgICAgTlNBcnJheSAqczsKLSAgICAgICAgCisg
ICAgICAgICAgICBuaWxdKTsKKwogICAgICAgICBCT09MIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9
IFtbc2VsZiBfd2ViVmlld10gZGVmZXJzQ2FsbGJhY2tzXTsKICAgICAgICAgaWYgKCF3YXNEZWZl
cnJpbmdDYWxsYmFja3MpCiAgICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0Nh
bGxiYWNrczpZRVNdOwotICAgICAgICAgICAgCi0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1lbnRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0
cmluZyBsZW5ndGhdKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudDpbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0
dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOworCisgICAgICAgIE5T
QXJyYXkgKmxvY2FsU3VicmVzb3VyY2VzOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpm
cmFnbWVudCA9IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJp
bmcgbGVuZ3RoXSkgZG9jdW1lbnQ6W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdCisgICAgICAg
ICAgICBkb2N1bWVudEF0dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHN1YnJlc291
cmNlczombG9jYWxTdWJyZXNvdXJjZXNdOworCiAgICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCi0g
ICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gczsKLSAgICAgICAgCi0gICAgICAgIE5TRW51bWVy
YXRvciAqZSA9IFtzIG9iamVjdEVudW1lcmF0b3JdOwotICAgICAgICBXZWJSZXNvdXJjZSAqcjsK
LSAgICAgICAgd2hpbGUgKChyID0gW2UgbmV4dE9iamVjdF0pKQotICAgICAgICAgICAgW1tzZWxm
IF9kYXRhU291cmNlXSBhZGRTdWJyZXNvdXJjZTpyXTsKLSAgICAgICAgCisgICAgICAgICAgICAq
c3VicmVzb3VyY2VzID0gbG9jYWxTdWJyZXNvdXJjZXM7CisKKyAgICAgICAgZm9yIChXZWJSZXNv
dXJjZSAqcmVzb3VyY2UgaW4gbG9jYWxTdWJyZXNvdXJjZXMpCisgICAgICAgICAgICBbW3NlbGYg
X2RhdGFTb3VyY2VdIGFkZFN1YnJlc291cmNlOnJlc291cmNlXTsKKwogICAgICAgICBpZiAoIXdh
c0RlZmVycmluZ0NhbGxiYWNrcykKICAgICAgICAgICAgIFtbc2VsZiBfd2ViVmlld10gc2V0RGVm
ZXJzQ2FsbGJhY2tzOk5PXTsKLSAgICAgICAgCi0gICAgICAgIFtkb2N1bWVudEF0dHJpYnV0ZXMg
cmVsZWFzZV07Ci0gICAgICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFn
bWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNUSUZGUGJvYXJkVHlwZSkgewot
ICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0
V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50aWZmIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAi
aW1hZ2UvdGlmZiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07Ci0gICAgICAgIERPTURv
Y3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRG
cmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAgICAgW3Jlc291cmNlIHJl
bGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRU
eXBlID09IE5TUERGUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2Ug
PSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6TlNQREZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChA
ImFwcGxpY2F0aW9uLnBkZiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFt
ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWVOYW1lOm5pbF07Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291
cmNlOnJlc291cmNlXTsKLSAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0gICAgfQogCi0gICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmlu
ZzooTlNTdHJpbmcqKWtVVFR5cGVQTkddKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJj
ZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRp
dmVQYXJ0KEAiaW1hZ2UucG5nIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5p
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQg
PSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6
cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07CiAgICAgICAgIHJldHVybiBm
cmFnbWVudDsKICAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNVUkxQYm9hcmRUeXBlKSB7
CisKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TVElGRlBib2FyZFR5cGVd
KQorICAgICAgICByZXR1cm4gW3NlbGYgX3dlYl9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9h
cmQ6cGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZTpOU1RJRkZQYm9hcmRUeXBlIGltYWdlTUlNRVR5
cGU6QCJpbWFnZS90aWZmIl07CisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpO
U1BERlBib2FyZFR5cGVdKQorICAgICAgICByZXR1cm4gW3NlbGYgX3dlYl9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZTpOU1BERlBib2FyZFR5
cGUgaW1hZ2VNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiJdOworICAgIGlmIChbcGJvYXJkVHlw
ZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVBOR10pCisgICAgICAgIHJldHVy
biBbc2VsZiBfd2ViX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIHBh
c3RlYm9hcmRUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkcgaW1hZ2VNSU1FVHlwZTpAImltYWdl
L3BuZyJdOworCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1VSTFBib2Fy
ZFR5cGVdKSB7CiAgICAgICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6
cGFzdGVib2FyZF07CiAgICAgICAgIERPTURvY3VtZW50KiBkb2N1bWVudCA9IFtbc2VsZiBfZnJh
bWVdIERPTURvY3VtZW50XTsKICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTI2MzgsNDMg
KzI0MzYsMzAgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm8KICAgICAgICAgW2ZyYWdtZW50IGFw
cGVuZENoaWxkOmFuY2hvcl07CiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9Ci0gICAg
aWYgKHBib2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKSB7CisKKyAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKICAgICAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgcmV0dXJuIGtpdChj
cmVhdGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5n
Rm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKS5wdHIoKSk7CiAgICAgfQorCiAgICAgcmV0dXJuIG5pbDsKIH0KLSNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpIAorCiAtICh2b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxO
ZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmll
d3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsg
Ci0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9yIChzdWJ2aWV3
SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7
IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2
aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcgKilzdWJ2aWV3IHN0b3BUaW1lcnNdOwotICAgIH0gCi19IAotI2VuZGlmIAor
eworICAgIFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxl
Y3RvcihzdG9wVGltZXJzKSB3aXRoT2JqZWN0Om5pbF07Cit9CisKKy0gKHZvaWQpX3Jlc3VtZU51
bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMKK3sKKyAgICBbc2VsZiBfd2ViX21ha2VQbHVn
aW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVzdGFydFRpbWVycykgd2l0aE9i
amVjdDpuaWxdOworfQogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAotLSAodm9p
ZClfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNBcnJh
eSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3
Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4
OyAKLSAgICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZp
ZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtz
dWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1YnZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKLSAg
ICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgcmVzdGFydFRp
bWVyc107IAotICAgIH0gCi19IAogI2VuZGlmIAogCiAtIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0
ZWRDb21wb3NpdGluZwpAQCAtMjgwMiw0MCArMjU4NywyNCBAQCAtIChDR0Zsb2F0KV9hZGp1c3Rl
ZEJvdHRvbU9mUGFnZVdpdGhUb3A6KENHRmxvYXQpdG9wIGJvdHRvbTooQ0dGbG9hdClib3R0b20g
bGltaQogfQogCiAjaWYgUExBVEZPUk0oSU9TKQorCiAtIChpZClhY2Nlc3NpYmlsaXR5Um9vdEVs
ZW1lbnQKIHsKICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gYWNjZXNzaWJpbGl0eVJvb3RdOwog
fQorCiAjZW5kaWYKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJIVE1MVmll
d0ZpbGVJbnRlcm5hbCkKIAotLSAodm9pZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NU
b0FycmF5OihOU011dGFibGVBcnJheSAqKWFycmF5CistICh2b2lkKV93ZWJfYWRkRGVzY2VuZGVu
dFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJyYXkKIHsKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgTlNBcnJheSogX3N1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOwotI2Vu
ZGlmCi0gICAgdW5zaWduZWQgY291bnQgPSBbX3N1YnZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU1ZpZXcgKmNoaWxkID0g
W19zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmldOworICAgIGZvciAoTlNWaWV3ICpjaGlsZCBpbiBb
c2VsZiBzdWJ2aWV3c10pIHsKICAgICAgICAgaWYgKFtjaGlsZCBpc0tpbmRPZkNsYXNzOltXZWJI
VE1MVmlldyBjbGFzc11dKQogICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpjaGlsZF07Ci0g
ICAgICAgIFtjaGlsZCBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmFycmF5
XTsKLSAgICB9Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TTXV0YWJsZURpY3Rpb25h
cnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotCi0tICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZO
b3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleQotewotICAgIGlmIChvYmplY3QgPT0gbmls
KSB7Ci0gICAgICAgIFtzZWxmIHJlbW92ZU9iamVjdEZvcktleTprZXldOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFtzZWxmIHNldE9iamVjdDpvYmplY3QgZm9yS2V5OmtleV07CisgICAgICAgIFtj
aGlsZCBfd2ViX2FkZERlc2NlbmRlbnRXZWJIVE1MVmlld3NUb0FycmF5OmFycmF5XTsKICAgICB9
CiB9CiAKQEAgLTI4NDMsMjQgKzI2MTIsMjYgQEAgQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2Vi
SFRNTFZpZXcKIAorI2lmIFBMQVRGT1JNKE1BQykKKwogKyAodm9pZClpbml0aWFsaXplCiB7Ci0j
aWYgIVBMQVRGT1JNKElPUykKLSAgICBbTlNBcHAgcmVnaXN0ZXJTZXJ2aWNlc01lbnVTZW5kVHlw
ZXM6W1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXSAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBh
c3RlYm9hcmRUeXBlc11dOworICAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBl
czpbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIHJldHVyblR5cGVzOltb
c2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdXTsKKwogICAgIEpTQzo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nl
c3NNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0j
ZW5kaWYKIH0KIAorI2VuZGlmCisKIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQog
ewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07CiAgICAgaWYgKCFzZWxm
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgIFtzZWxmIHNldEZvY3VzUmluZ1R5cGU6TlNGb2N1c1JpbmdUeXBlTm9u
ZV07CiAjZW5kaWYKICAgICAKQEAgLTI4NjksMTIgKzI2NDAsMTUgQEAgLSAoaWQpaW5pdFdpdGhG
cmFtZTooTlNSZWN0KWZyYW1lCiAgICAgCiAgICAgX3ByaXZhdGUgPSBbW1dlYkhUTUxWaWV3UHJp
dmF0ZSBhbGxvY10gaW5pdF07CiAKLSAgICBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciA9IFtb
V2ViUGx1Z2luQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEb2N1bWVudFZpZXc6c2VsZl07Cisg
ICAgX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViUGx1Z2luQ29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhEb2N1bWVudFZpZXc6c2VsZl0pOworCiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCiAgICAgICAg
ICAgICBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihtYXJrZWRUZXh0VXBkYXRl
OikgCiAgICAgICAgICAgICAgICAgICAgbmFtZTpXZWJNYXJrZWRUZXh0VXBkYXRlZE5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKLSNlbHNlCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBfcHJpdmF0ZS0+c29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsK
ICNlbmRpZgogICAgIApAQCAtMjg5Niw2ICsyNjcwLDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAg
W3NlbGYgY2xvc2VdOwogICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsKICAgICBfcHJpdmF0ZSA9IG5p
bDsKKwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtMzA5MSw3ICsyODY2LDggQEAgV0VC
Q09SRV9DT01NQU5EKHRvZ2dsZVVuZGVybGluZSkKIAogI2RlZmluZSBDT01NQU5EX1BST0xPR1VF
IGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6X2NtZF0p
IHJldHVybjsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChJ
QkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgogewogICAgIENP
TU1BTkRfUFJPTE9HVUUKQEAgLTMxMDQsNyArMjg4MCw3IEBAIC0gKElCQWN0aW9uKXRha2VGaW5k
U3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCiAgICAgW05TUGFzdGVib2FyZCBfd2ViX3Nl
dEZpbmRQYXN0ZWJvYXJkU3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSB3aXRoT3duZXI6c2Vs
Zl07CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBzdXBwb3J0IE1hYyBPUyBYIHNl
cnZpY2VzLgorLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbWFjT1Mgc2Vydmlj
ZXMuCiAtIChCT09MKXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilw
YXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5ICopdHlwZXMKIHsKICAgICBbcGFzdGVib2FyZCBkZWNs
YXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07CkBAIC0zMTI2LDYgKzI5
MDIsNyBAQCAtIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmluZyAqKXNlbmRU
eXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dQogICAgICAgICByZXR1cm4gc2VsZjsKICAg
ICByZXR1cm4gW1tzZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6
c2VuZFR5cGUgcmV0dXJuVHlwZTpyZXR1cm5UeXBlXTsKIH0KKwogI2VuZGlmCiAKIC8vIGp1bXBU
b1NlbGVjdGlvbiBpcyB0aGUgb2xkIG5hbWUgZm9yIHdoYXQgQXBwS2l0IG5vdyBjYWxscyBjZW50
ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBTYWZhcmkKQEAgLTMxNDEsNyArMjkxOCw4IEBAIC0g
KHZvaWQpanVtcFRvU2VsZWN0aW9uOihpZClzZW5kZXIKICAgICAgICAgY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKIH0KIAotI2lmICFQTEFURk9STShJT1Mp
CisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1X
aXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCiB7
CiAgICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlvbl07CkBAIC0zMTQ5LDcgKzI5MjcsNyBAQCAt
IChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1Zh
bGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IE5POwotICAgIAorCiAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkg
ewogICAgICAgICBpZiAoZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gTk87CkBAIC0zMTY4LDcgKzI5NDYsNiBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFj
ZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3Ioc2hvd0d1ZXNzUGFuZWw6KSkgewotICAgICAgICAvLyBNYXRjaCBPUyBYIEFwcEtpdCBiZWhh
dmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hhbmdlIFRpZ2VyIGJlaGF2aW9yLgogICAgICAg
ICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKICAgICAgICAgaWYg
KFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKICAgICAgICAg
ICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVj
a2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwpAQCAtMzIxOSwxMiArMjk5NiwxMiBAQCAt
IChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1Zh
bGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBbc2VsZiBf
Y2FuRWRpdF07CiAgICAgfSAKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNo
YW5nZUF0dHJpYnV0ZXM6KQogICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGFu
Z2VDb2xvcjopICAgICAgICAKICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hh
bmdlRm9udDopKQogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRSaWNobHldOwotICAgIAor
CiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2FwaXRhbGl6ZVdvcmQ6KQogICAgICAgICAg
ICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihsb3dlcmNhc2VXb3JkOikKICAgICAgICAgICAg
ICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodXBwZXJjYXNlV29yZDopKQpAQCAtMzIzNCwyNSAr
MzAxMSwyNSBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdh
dGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAgICAgICAgICAgfHwgYWN0
aW9uID09IEBzZWxlY3RvcihqdW1wVG9TZWxlY3Rpb246KQogICAgICAgICAgICAgICAgfHwgYWN0
aW9uID09IEBzZWxlY3Rvcihjb3B5Rm9udDopKQogICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1Nl
bGVjdGlvbl0gfHwgKFtzZWxmIF9pc0VkaXRhYmxlXSAmJiBbc2VsZiBfaGFzSW5zZXJ0aW9uUG9p
bnRdKTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZURvY3VtZW50
QmFja2dyb3VuZENvbG9yOikpCiAgICAgICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzRWRp
dGFibGVdICYmIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKF9pZ25vcmVTcGVsbGluZ0Zyb21NZW51OikKICAgICAgICAgICAgIHx8IGFj
dGlvbiA9PSBAc2VsZWN0b3IoX2xlYXJuU3BlbGxpbmdGcm9tTWVudTopCiAgICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjopKQogICAg
ICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCisKICAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihwYXN0ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1BsYWlu
VGV4dDopKQogICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS5jYW5ESFRN
TFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLmNhblBhc3RlKCkpOwotICAgIAorCiAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJldHVybiBm
cmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKQogICAgICAgICAgICAgfHwg
KGZyYW1lLT5lZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7Ci0gICAgCisKICAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0aW9uOikpCiAgICAgICAgIHJldHVybiBO
TzsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9sb29rVXBJbkRpY3Rpb25h
cnlGcm9tTWVudTopKQogICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07CiAKQEAg
LTMyNzksNiArMzA1Niw3IEBAIC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhv
dXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICAvLyBGSVhNRSA0Nzk5
MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVz
dCB2YWxpZGF0ZSAKICAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVu
dCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBL
aXQgCiAgICAgLy8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KQEAgLTMyODgsMzAg
KzMwNjYsMzUgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVn
YXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXQKICAgICAgICAgICAgIFttZW51SXRl
bSBzZXRTdGF0ZTpbc2VsZiBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdID8gTlNPblN0YXRlIDog
TlNPZmZTdGF0ZV07CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQorCiAg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRl
bTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNz
XV0pCiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CiAgICAgICAg
IHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2Vs
ZWN0b3IodG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjopKSB7CiAgICAgICAgIE5TTWVudUl0
ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVt
IGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKICAgICAgICAgICAgIFttZW51SXRl
bSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkXSA/IE5TT25T
dGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogICAg
IH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJz
dGl0dXRpb246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVt
ICopaXRlbTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVt
IGNsYXNzXV0pCiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0
aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKICAg
ICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KSkgewogICAgICAgICBO
U01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKICAgICAgICAgaWYgKFtt
ZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCiAgICAgICAgICAgICBb
bWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVk
XSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVk
aXRdOwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbjopKSB7CiAgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKQEAgLTMzMTksNyArMzEwMiw3IEBAIC0gKEJPT0wpdmFsaWRh
dGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlcklu
dGVyZmFjZUl0CiAgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CiAgICAgfQogCi0gICAg
RWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6YWN0
aW9uXTsKKyAgICBhdXRvIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6YWN0
aW9uXTsKICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKSB7CiAgICAgICAgIE5TTWVudUl0
ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVt
IGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKQEAgLTMzMzksNyArMzEyMiw4IEBA
IC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlcklu
dGVyZmFjZUl0ZW0+KWl0ZW0KICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6aXRlbV07CiAgICAgcmV0dXJuIENhbGxVSURlbGVn
YXRlUmV0dXJuaW5nQm9vbGVhbihyZXN1bHQsIFtzZWxmIF93ZWJWaWV3XSwgQHNlbGVjdG9yKHdl
YlZpZXc6dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpkZWZhdWx0VmFsaWRhdGlvbjopLCBpdGVt
LCByZXN1bHQpOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCiAKIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiB7CkBAIC0zMzQ3LDIw
ICszMTMxLDE1IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiAgICAgLy8gV2UgaGF2
ZSB0byBwYXNzIHRoZSBldmVudCBkb3duIHRocm91Z2ggV2ViQ29yZSBmaXJzdCB0byBiZSBzdXJl
IHdlIGRvbid0IGhpdCBhIHN1YnZpZXcuCiAgICAgLy8gRG8gYWNjZXB0IGZpcnN0IHJlc3BvbmRl
ciBhdCBhbnkgb3RoZXIgdGltZSwgZm9yIGV4YW1wbGUgZnJvbSBrZXlib2FyZCBldmVudHMsCiAg
ICAgLy8gb3IgZnJvbSBjYWxscyBiYWNrIGZyb20gV2ViQ29yZSBvbmNlIHdlIGJlZ2luIG1vdXNl
LWRvd24gZXZlbnQgaGFuZGxpbmcuCi0jaWYgIVBMQVRGT1JNKElPUykgICAgICAgICAgICAKLSAg
ICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIGlmIChbZXZlbnQg
dHlwZV0gPT0gTlNFdmVudFR5cGVMZWZ0TW91c2VEb3duCi0gICAgICAgICAgICAmJiAhX3ByaXZh
dGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQKLSAgICAgICAgICAgICYmIE5TUG9pbnRJblJlY3Qo
W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxl
UmVjdF0gdG9WaWV3Om5pbF0pKSB7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIFdlYkV2ZW50ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwog
I2Vsc2UKICAgICBXZWJFdmVudCAqZXZlbnQgPSBbV0FLV2luZG93IGN1cnJlbnRFdmVudF07Cisj
ZW5kaWYKICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudHlwZSA9PSBXZWJFdmVudE1vdXNlRG93bgog
ICAgICAgICAgICAgJiYgIV9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50CiAgICAgICAg
ICAgICAmJiBOU1BvaW50SW5SZWN0KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW3NlbGYgY29u
dmVydFJlY3Q6W3NlbGYgdmlzaWJsZVJlY3RdIHRvVmlldzpuaWxdKSkKICAgICAgICAgcmV0dXJu
IE5POwotI2VuZGlmCiAgICAgcmV0dXJuIFlFUzsKIH0KIApAQCAtMzQxNCw3ICszMTkzLDggQEAg
LSAoQk9PTCltYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgogI2VuZGlmCiB9CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClhZGRTdXBlcnZpZXdPYnNl
cnZlcnMKIHsKICAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlv
bnMpCkBAIC0zNDUwLDggKzMyMzAsNiBAQCAtICh2b2lkKWFkZFdpbmRvd09ic2VydmVycwogICAg
IE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl07CiAgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRCZWNvbWVLZXk6KSBuYW1lOk5T
V2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93RGlk
UmVzaWduS2V5OikgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6
bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKHdpbmRvd1dpbGxPcmRlck9uU2NyZWVuOikgbmFtZTpOU1dpbmRvd1dpbGxPcmRl
ck9uU2NyZWVuTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25D
ZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbE9yZGVy
T2ZmU2NyZWVuOikgbmFtZTpOU1dpbmRvd1dpbGxPcmRlck9mZlNjcmVlbk5vdGlmaWNhdGlvbiBv
YmplY3Q6d2luZG93XTsKICAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxDbG9zZTopIG5hbWU6TlNXaW5kb3dXaWxsQ2xv
c2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CiAgICAgCiAgICAgX3ByaXZhdGUtPm9ic2Vy
dmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSB0cnVlOwpAQCAtMzQ3Myw3ICszMjUxLDggQEAgLSAo
dm9pZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3CiAgICAgICAgICAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOl9XZWJWaWV3RGlkU3Rh
cnRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTm90aWZpY2F0aW9uIG9iamVjdDp3ZWJWaWV3IHVzZXJJ
bmZvOm5pbF07CiAgICAgfQogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93
ICopd2luZG93CiB7CkBAIC0zNDg0LDcgKzMyNjMsNyBAQCAtICh2b2lkKXZpZXdXaWxsTW92ZVRv
V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwogICAgIGlmICghX3ByaXZhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEZJ
WE1FOiBTb21lIG9mIHRoZXNlIGNhbGxzIG1heSBub3Qgd29yayBiZWNhdXNlIHRoaXMgdmlldyBt
YXkgYmUgYWxyZWFkeSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcuCiAgICAgW3NlbGYgX3Jl
bW92ZVdpbmRvd09ic2VydmVyc107CiAgICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVy
c107CkBAIC0zNTA3LDcgKzMyODYsNyBAQCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKICAg
ICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CiAgICAgaWYgKFtzZWxmIHdpbmRvd10pIHsK
ICAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IFtbc2VsZiBzdXBlcnZpZXdd
IGJvdW5kc10ub3JpZ2luOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNdOwogICAgICAgICBbc2VsZiBhZGRTdXBl
cnZpZXdPYnNlcnZlcnNdOwogI2VuZGlmCkBAIC0zNTE4LDcgKzMyOTcsNyBAQCAtICh2b2lkKXZp
ZXdEaWRNb3ZlVG9XaW5kb3cKIAogICAgICAgICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9u
ID0gTlNaZXJvUG9pbnQ7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgaWYgKCFfcHJpdmF0ZS0+ZmxhZ3NDaGFuZ2VkRXZlbnRNb25pdG9yKSB7CiAgICAg
ICAgICAgICBfX2Jsb2NrIFdlYkhUTUxWaWV3ICp3ZWFrU2VsZiA9IHNlbGY7CiAgICAgICAgICAg
ICBfcHJpdmF0ZS0+ZmxhZ3NDaGFuZ2VkRXZlbnRNb25pdG9yID0gW05TRXZlbnQgYWRkTG9jYWxN
b25pdG9yRm9yRXZlbnRzTWF0Y2hpbmdNYXNrOk5TRXZlbnRNYXNrRmxhZ3NDaGFuZ2VkIGhhbmRs
ZXI6XihOU0V2ZW50ICpmbGFnc0NoYW5nZWRFdmVudCkgewpAQCAtMzUzMywzOCArMzMxMiwyMCBA
QCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKICAgICB9CiB9CiAKLS0gKHZvaWQpX3dlYl9t
YWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0
OihpZClvYmplY3QKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAvLyBD
b3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmlld3NdIHJldHVybnMgdGhlIHZpZXcncyBt
dXRhYmxlIGludGVybmFsIGFycmF5LAotICAgIC8vIGFuZCB3ZSBtdXN0IGF2b2lkIG11dGF0aW5n
IHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4KLSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9
IFtbc2VsZiBzdWJ2aWV3c10gY29weV07Ci0gICAgCi0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJh
dG9yID0gW3N1YnZpZXdzIG9iamVjdEVudW1lcmF0b3JdOwotICAgIFdlYk5ldHNjYXBlUGx1Z2lu
VmlldyAqdmlldzsKLSAgICB3aGlsZSAoKHZpZXcgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkg
IT0gbmlsKQotICAgICAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldyBjbGFzc11dKQotICAgICAgICAgICAgW3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNl
bGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsKLSAgICAKLSAgICBbc3Vidmlld3MgcmVsZWFzZV07
Ci0jZW5kaWYKLX0KLQogLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5TV2luZG93
ICopaG9zdFdpbmRvdwogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCiAgICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9z
dFdpbmRvd107CiAjZW5kaWYKIH0KIAogLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdwog
ewotI2lmICFQTEFURk9STShJT1MpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07CiAjZW5kaWYKIH0KIAot
CiAtICh2b2lkKWFkZFN1YnZpZXc6KE5TVmlldyAqKXZpZXcKIHsKICAgICBbc3VwZXIgYWRkU3Vi
dmlldzp2aWV3XTsKQEAgLTM1ODIsMTMgKzMzNDMsNiBAQCAtICh2b2lkKWFkZFN1YnZpZXc6KE5T
VmlldyAqKXZpZXcKIAogLSAodm9pZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3Vidmll
dwogewotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBIYXZlIHRvIG51bGwtY2hlY2sgX3ByaXZhdGUs
IHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCB2aWEgLWRlYWxsb2Mgd2hlbgotICAgIC8vIGNsZWFu
aW5nIHVwIHRoZSB0aGUgbGF5ZXJIb3N0aW5nVmlldy4KLSAgICBpZiAoX3ByaXZhdGUgJiYgX3By
aXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9m
IGNsYXNzICVzIHdhcyByZW1vdmVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlv
dXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFdlIHdpbGwgc3RpbGwgZG8gbGF5b3V0IG9yIHRo
ZSBwcmludGluZyBtb2RlIGNoYW5nZSBldmVuIHRob3VnaCB0aGlzIHZpZXcgaXMgbm8gbG9uZ2Vy
IGluIHRoZSB2aWV3IGhpZXJhcmNoeS4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNs
YXNzXSkpOwotI2VuZGlmCi0KICAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5W
aWV3OnN1YnZpZXddKQogICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lQ
bHVnaW46c3Vidmlld107CiAKQEAgLTM2NjEsNyArMzQxNSw4IEBAIC0gKHZvaWQpbGF5b3V0CiAg
ICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOjAgaGVpZ2h0OjAgb3JpZ2luYWxQYWdl
V2lkdGg6MCBvcmlnaW5hbFBhZ2VIZWlnaHQ6MCBtYXhpbXVtU2hyaW5rUmF0aW86MCBhZGp1c3Rp
bmdWaWV3U2l6ZTpOT107CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKKwogLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0aGUgRE9NIGZvciBidXR0b24gMi4K
IC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKQEAgLTM3NjksMTAgKzM1
MjQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpeE1lbnVzUmVjZWl2ZWRGcm9tT2xk
Q2xpZW50cyhOU0FycmF5ICpkZWxlZ2F0ZVN1cHBsaQogICAgICAgICByZXR1cm4gbmV3TWVudUl0
ZW1zOwogICAgIAogICAgIC8vIFJlc3RvcmUgdGhlIG1vZGVybiB0YWdzIHRvIHRoZSBtZW51IGl0
ZW1zIHdob3NlIHRhZ3Mgd2UgYWx0ZXJlZCBpbiBmaXhNZW51c1RvU2VuZFRvT2xkQ2xpZW50cy4g
Ci0gICAgdW5zaWduZWQgbmV3SXRlbXNDb3VudCA9IFtuZXdNZW51SXRlbXMgY291bnRdOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdJdGVtc0NvdW50OyArK2kpIHsKLSAgICAgICAg
TlNNZW51SXRlbSAqaXRlbSA9IFtuZXdNZW51SXRlbXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAg
ICAgCisgICAgZm9yIChOU01lbnVJdGVtICppdGVtIGluIG5ld01lbnVJdGVtcy5nZXQoKSkgewog
ICAgICAgICBpbnQgdGFnID0gW2l0ZW0gdGFnXTsKICAgICAgICAgaW50IG1vZGVyblRhZyA9IHRh
ZzsKICAgICAgICAgCkBAIC00MDU2LDcgKzM4MDgsOCBAQCAtIChOU01lbnUgKiltZW51Rm9yRXZl
bnQ6KE5TRXZlbnQgKilldmVudAogICAgIAogICAgIHJldHVybiBtZW51LmF1dG9yZWxlYXNlKCk7
CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
IAogLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClm
b3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZwog
ewpAQCAtNDA4MCw3ICszODMzLDggQEAgLSAoQk9PTClpc09wYXF1ZQogICAgIHJldHVybiBbW3Nl
bGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClzZXRMYXllcjooQ0FMYXllciAqKWxheWVyCiB7
CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKQEAgLTQwOTAs
NiArMzg0NCw3IEBAIC0gKHZvaWQpc2V0TGF5ZXI6KENBTGF5ZXIgKilsYXllcgogCiAgICAgW3N1
cGVyIHNldExheWVyOmxheWVyXTsKIH0KKwogI2VuZGlmCiAKICNpZiAhTE9HX0RJU0FCTEVECkBA
IC00MTUxLDE3ICszOTA2LDE1IEBAIC0gKHZvaWQpc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiAoQk9P
TClmbGFnCiAKIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0CiB7Ci0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNh
dmVHcmFwaGljc1N0YXRlXTsKICAgICBOU1JlY3RDbGlwKHJlY3QpOwogICAgICAgICAKICAgICBB
U1NFUlQoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xhc3Nd
XSk7CiAKICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBzZXRBZGRpdGlvbmFs
Q2xpcDpyZWN0XTsKLSNlbmRpZgogCiAgICAgQHRyeSB7Ci0jaWYgIVBMQVRGT1JNKElPUykKICAg
ICAgICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7CiAgICAgICAgICAgICBb
W05TQ29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJlY3Qp
OwpAQCAtNDE3MCwzNSArMzkyMywzMSBAQCAtICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3Qp
cmVjdAogCiAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9kcmF3UmVjdDpyZWN0IGNvbnRlbnRzT25s
eTpZRVNdOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAKICAgICAgICAgLy8gVGhpcyBo
YWNrIGlzIG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMjM1NDU+LiBXZSBjYW4gaGl0IGEg
cmFjZSBjb25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBiZQogICAgICAgICAvLyBjYWxsZWQg
YWZ0ZXIgdGhlIFdlYlZpZXcgaGFzIGNsb3NlZC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHByb3Bl
cmx5IGNsb3NlIHRoZSBXZWJWaWV3IGFuZCBzZXQgdGhlIAogICAgICAgICAvLyBVSURlbGVnYXRl
IHRvIG5pbCwgdGhlbiB0aGUgVUlEZWxlZ2F0ZSB3aWxsIGJlIHN0YWxlIGFuZCB0aGlzIGNvZGUg
d2lsbCBjcmFzaC4gCi0gICAgICAgIHN0YXRpYyBCT09MIHZlcnNpb24zT3JMYXRlckNsaWVudCA9
IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX1FVSUNL
Qk9PS1NfUVVJUkspOworICAgICAgICBzdGF0aWMgYm9vbCB2ZXJzaW9uM09yTGF0ZXJDbGllbnQg
PSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9RVUlD
S0JPT0tTX1FVSVJLKTsKICAgICAgICAgaWYgKHZlcnNpb24zT3JMYXRlckNsaWVudCkKICAgICAg
ICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRp
ZERyYXdSZWN0Olt3ZWJWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6c2VsZl1dOworICAg
ICAgICAvLyBDbGllbnRzIGRvbid0IG5lZWQgc3VwcG9ydCBmb3IgdGhlIGRpZERyYXdSZWN0IGRl
bGVnYXRlIG1ldGhvZCBhYm92ZSBvbiBpT1MuCisgICAgICAgIC8vIEFsc28sIGEgbG9uZyB0aW1l
IGFnbywgd2hlbiBpdCB3YXMgc3VwcG9ydGVkLCBpdCB3YXMgcGFydCBvZiBhIHRocmVhZGluZyBw
cm9ibGVtLgogCiAgICAgICAgIGlmIChXZWJOb2RlSGlnaGxpZ2h0ICpjdXJyZW50SGlnaGxpZ2h0
ID0gW3dlYlZpZXcgY3VycmVudE5vZGVIaWdobGlnaHRdKQogICAgICAgICAgICAgW2N1cnJlbnRI
aWdobGlnaHQgc2V0TmVlZHNVcGRhdGVJblRhcmdldFZpZXdSZWN0OltzZWxmIGNvbnZlcnRSZWN0
OnJlY3QgdG9WaWV3OltjdXJyZW50SGlnaGxpZ2h0IHRhcmdldFZpZXddXV07Ci0jZWxzZQotICAg
ICAgICAvLyBEb24ndCBzZW5kIGRpZERyYXdSZWN0LCBpdCBpcyBub3QgdXNlZCBieSBhbnlvbmUg
YW5kIGl0IGlzIGNhdXNpbmcgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcy4KLSNlbmRp
ZgogCi0jaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1
cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0KICAgICAgICAgW05TR3JhcGhpY3NDb250
ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSNlbmRpZgogICAgIH0gQGNhdGNoIChOU0V4Y2Vw
dGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBbKFdl
YkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKICAgICAg
ICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSNlbmRpZgorCiAg
ICAgICAgIExPR19FUlJPUigiRXhjZXB0aW9uIGNhdWdodCB3aGlsZSBkcmF3aW5nOiAlQCIsIGxv
Y2FsRXhjZXB0aW9uKTsKICAgICAgICAgW2xvY2FsRXhjZXB0aW9uIHJhaXNlXTsKICAgICB9Cisj
ZW5kaWYKIH0KIAogLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKQEAgLTQyMDcsNyArMzk1
Niw3IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAgICAgCiAgICAgVHJhY2VTY29w
ZSBzY29wZShXZWJIVE1MVmlld1BhaW50U3RhcnQsIFdlYkhUTUxWaWV3UGFpbnRFbmQpOwogCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgY29uc3QgTlNSZWN0ICpy
ZWN0czsKICAgICBOU0ludGVnZXIgY291bnQ7CiAgICAgW3NlbGYgZ2V0UmVjdHNCZWluZ0RyYXdu
OiZyZWN0cyBjb3VudDomY291bnRdOwpAQCAtNDIyMSw3ICszOTcwLDcgQEAgLSAodm9pZClkcmF3
UmVjdDooTlNSZWN0KXJlY3QKICAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKTsKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CiAgICAgLy8gSWYgY291bnQgPT0gMCBoZXJlLCB1c2UgdGhlIHJlY3QgcGFzc2VkIGluIGZvciBk
cmF3aW5nLiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3I6IAogICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS8zOTA4MjgyPiBSRUdSRVNTSU9OIChNYWlsKTogTm8gZHJhZyBpbWFnZSBkcmFnZ2luZyBzZWxl
Y3RlZCB0ZXh0IGluIEJsb3QgYW5kIE1haWwgCiAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhlIHdv
cmthcm91bmQgaXMgdGhhdCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZXhwbGljaXRseSBmcm9tIHRo
ZSBjb2RlIApAQCAtNDI1NywxNCArNDAwNiwxNCBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3Qp
cmVjdAogICAgIExPRyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdpZGdldC0+cGFy
dCgpLT5iYXNlVVJMKCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKICNlbmRpZgogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKHN1YnZpZXdzV2VyZVNl
dEFzaWRlKQogICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CiAjZW5kaWYKIAogICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBPbmx5IGRvIHRoZSBzeW5jaHJvbml6YXRpb24g
ZGFuY2UgaWYgd2UncmUgZHJhd2luZyBpbnRvIHRoZSB3aW5kb3csIG90aGVyd2lzZQogICAgIC8v
IHdlIHJpc2sgZGlzYWJsaW5nIHNjcmVlbiB1cGRhdGVzIHdoZW4gbm8gZmx1c2ggaXMgcGVuZGlu
Zy4KICAgICBpZiAoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSA9PSBbW3NlbGYg
d2luZG93XSBncmFwaGljc0NvbnRleHRdICYmIFt3ZWJWaWV3IF9uZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uXSkgewpAQCAtNDI4Myw3ICs0MDMyLDggQEAgLSAodm9pZClkcmF3UmVj
dDooTlNSZWN0KXJlY3QKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUod2ViVmlldywgQHNlbGVjdG9y
KHdlYlZpZXc6ZGlkRHJhd0ZyYW1lOiksIFtzZWxmIF9mcmFtZV0pOwogfQogCi0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC8vIFR1cm4gb2ZmIHRoZSBhZGRpdGlvbmFs
IGNsaXAgd2hpbGUgY29tcHV0aW5nIG91ciB2aXNpYmxlUmVjdC4KIC0gKE5TUmVjdCl2aXNpYmxl
UmVjdAogewpAQCAtNDI5MiwxMSArNDA0Miw5IEBAIC0gKE5TUmVjdCl2aXNpYmxlUmVjdAogCiAg
ICAgV2ViQ2xpcFZpZXcgKmNsaXBWaWV3ID0gKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3
XTsKIAotICAgIEJPT0wgaGFzQWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgaGFzQWRkaXRpb25h
bENsaXBdOwotICAgIGlmICghaGFzQWRkaXRpb25hbENsaXApIHsKKyAgICBpZiAoIVtjbGlwVmll
dyBoYXNBZGRpdGlvbmFsQ2xpcF0pCiAgICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3Rd
OwotICAgIH0KLSAgICAKKwogICAgIE5TUmVjdCBhZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBh
ZGRpdGlvbmFsQ2xpcF07CiAgICAgW2NsaXBWaWV3IHJlc2V0QWRkaXRpb25hbENsaXBdOwogICAg
IE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtzdXBlciB2aXNpYmxlUmVjdF07CkBAIC00MzQ3LDIyICs0
MDk1LDYgQEAgLSAodm9pZCl3aW5kb3dEaWRSZXNpZ25LZXk6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCiAgICAgfQogfQogCi0tICh2b2lkKXdpbmRvd1dpbGxPcmRlck9uU2NyZWVuOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25w
KCkpIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0
aE9iamVjdDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKLSAg
ICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpu
b3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KIC0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgogewogICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKQEAgLTQzNzMsNTEgKzQxMDUsNDUg
QEAgLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
CiAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOwogICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveUFs
bFBsdWdpbnNdOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0o
SU9TKQotLSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Ci0jZWxzZQorI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClzY3JvbGxXaGVlbDooV2ViRXZlbnQgKilldmVu
dAotI2VuZGlmCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1
biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKICAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBt
aWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2lu
ZwogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEg
cHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIC8vIEZJWE1FOiBXaHkg
bm90IGRvIHRoaXMgb24gaU9TIHRvbz8KICAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2Vd
OwogI2VuZGlmCiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotI2lm
ICFQTEFURk9STShJT1MpCi0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigp
LndoZWVsRXZlbnQoZXZlbnQpKQorICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5ldmVudEhhbmRs
ZXIoKS53aGVlbEV2ZW50KGV2ZW50KSkgeworI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgW3N1
cGVyIHNjcm9sbFdoZWVsOmV2ZW50XTsKLQotI2Vsc2UKLSAgICBpZiAoZnJhbWUpCi0gICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS53aGVlbEV2ZW50KGV2ZW50KTsKICNlbmRpZgorICAgIH0K
IAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBbW1tzZWxmIF93ZWJWaWV3XSBfaW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlcl0gd2ViVmlldzpbc2VsZiBfd2ViVmlld10gZGlkSGFuZGxlU2Nyb2xsV2hl
ZWw6ZXZlbnRdOwogI2VuZGlmCiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAoQk9PTClfaXNT
ZWxlY3Rpb25FdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgTlNQb2ludCBwb2ludCA9IFtz
ZWxmIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsK
LSAgICByZXR1cm4gW1tbc2VsZiBlbGVtZW50QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRl
bnQ6WUVTXSBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07
Ci19Ci0jZWxzZQogLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooV2ViRXZlbnQgKilldmVudAog
ewotICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6ZXZlbnQubG9jYXRpb25J
bldpbmRvdyBmcm9tVmlldzpuaWxdOwotICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50
OnBvaW50XSBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07
Ci19CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50ID0gdHJ1
ZTsKKyNlbHNlCisgICAgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQgPSBmYWxzZTsgLy8gRklYTUU6
IFdoeSBkb2VzIHRoaXMgbmVlZCB0byBiZSBmYWxzZSBvbiBpT1M/CiAjZW5kaWYKIAotI2lmICFQ
TEFURk9STShJT1MpCisgICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZl
bnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKKyAgICByZXR1cm4gW1tbc2VsZiBl
bGVtZW50QXRQb2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6YWxsb3dTaGFkb3dDb250ZW50
XSBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Cit9CisK
KyNpZiBQTEFURk9STShNQUMpCisKIC0gKEJPT0wpX2lzU2Nyb2xsQmFyRXZlbnQ6KE5TRXZlbnQg
KilldmVudAogewogICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07CkBAIC00NDgzLDE3ICs0MjA5LDE0IEBA
IC0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OihOU0V2ZW50ICopZXZl
bnQKICAgICB9CiAgICAgcmV0dXJuIFtoaXRWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdG
b3JFdmVudDpldmVudF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotI2lmICFQTEFU
Rk9STShJT1MpCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci0jZWxzZQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZl
bnQKLSNlbmRpZgogewogICAgIFtbc2VsZiBfd2ViVmlld10gcHJlcGFyZUZvck1vdXNlRG93bl07
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCiAgICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCkBAIC00NTAxLDcgKzQyMjQsOCBAQCAtICh2b2lk
KW1vdXNlRG93bjooV2ViRXZlbnQgKilldmVudAogI2VuZGlmCiAKICAgICBSZXRhaW5QdHI8V2Vi
SFRNTFZpZXc+IHByb3RlY3RvciA9IHNlbGY7Ci0jaWYgIVBMQVRGT1JNKElPUykKKworI2lmIFBM
QVRGT1JNKE1BQykKICAgICBpZiAoW1tzZWxmIGlucHV0Q29udGV4dF0gd2FudHNUb0hhbmRsZU1v
dXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250ZXh0XSBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50
XSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCkBAIC00NTQ5LDYgKzQyNzMsNyBAQCAtICh2b2lk
KW1vdXNlRG93bjooV2ViRXZlbnQgKilldmVudAogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKKwogLSAodm9pZCl0b3VjaDooV2ViRXZlbnQgKilldmVudAogewogICAgIFJldGFpblB0cjxX
ZWJIVE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKQEAgLTQ1NTgsNiArNDI4Myw3IEBAIC0gKHZv
aWQpdG91Y2g6KFdlYkV2ZW50ICopZXZlbnQKICAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCiAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCkudG91
Y2hFdmVudChldmVudCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkg
JiYgUExBVEZPUk0oTUFDKQpAQCAtNDY1NCw3ICs0MzgwLDcgQEAgLSAoTlNBcnJheSAqKW5hbWVz
T2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0
aW9uCiAgICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKICAgICBOU1VSTCAqZHJhZ2dp
bmdFbGVtZW50VVJMID0gbmlsOwogICAgIAotICAgIGlmIChXZWJDb3JlOjpDYWNoZWRJbWFnZSog
dGlmZlJlc291cmNlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdKSB7CisgICAg
aWYgKGF1dG8qIHRpZmZSZXNvdXJjZSA9IF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZSkgewogICAgICAgICBpZiAoYXV0byogYnVmZmVyID0gdGlmZlJlc291cmNlLT5yZXNvdXJj
ZUJ1ZmZlcigpKSB7CiAgICAgICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IHRpZmZS
ZXNvdXJjZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7CiAgICAgICAgICAgICBkcmFnZ2lu
Z0VsZW1lbnRVUkwgPSBbcmVzcG9uc2UgVVJMXTsKQEAgLTQ3NDIsMTUgKzQ0NjgsMTEgQEAgLSAo
dm9pZClkcmFnZ2luZ1Nlc3Npb246KE5TRHJhZ2dpbmdTZXNzaW9uICopc2Vzc2lvbiBlbmRlZEF0
UG9pbnQ6KE5TUG9pbnQpc2NyZWUKIAogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYm
IFBMQVRGT1JNKE1BQykKIAotI2lmICFQTEFURk9STShJT1MpCi0tICh2b2lkKW1vdXNlVXA6KE5T
RXZlbnQgKilldmVudAotI2Vsc2UKIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAot
I2VuZGlmCiB7CiAgICAgW1tzZWxmIF93ZWJWaWV3XSBwcmVwYXJlRm9yTW91c2VVcF07CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUaGVyZSdzIGEgY2hh
bmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50
IGxvb3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhl
IG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1
cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBX
ZWJLaXQgb3IgQXBwS2l0IGNvZGUuCkBAIC00NzU5LDcgKzQ0ODEsNyBAQCAtICh2b2lkKW1vdXNl
VXA6KFdlYkV2ZW50ICopZXZlbnQKIAogICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxd
OwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1h
bmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CkBAIC00NzY3LDYg
KzQ0ODksNyBAQCAtICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKICAgICAgICAgcmV0
dXJuOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCisKICAgICBbc2VsZiBy
ZXRhaW5dOwogCiAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwpAQCAtNDc3OSwxOCAr
NDUwMiwyMSBAQCAtICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKICNlbmRpZgogICAg
ICAgICB9CiAgICAgfQotI2lmICFQTEFURk9STShJT1MpCisKKyNpZiBQTEFURk9STShNQUMpCiAg
ICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwogI2VuZGlmCiAKICAgICBb
c2VsZiByZWxlYXNlXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQorCiAtICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogewogICAgIFtzZWxmIF91
cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6ZXZlbnRdOwogfQorCiAjZW5kaWYKIAogLSAodm9pZClw
cmVzc3VyZUNoYW5nZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CkBAIC00ODA5LDEzICs0NTM1
LDE1IEBAIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAog
I2VuZGlmCiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLy8g
cmV0dXJuaW5nIFlFUyBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQg
dGhhdCBpdCBpcyBvayBmb3IgdGhpcyB2aWV3CiAvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZl
biB3aGVuICJ0YWIgdG8gYWxsIGNvbnRyb2xzIiBpcyBub3Qgb24uCiAtIChCT09MKW5lZWRzUGFu
ZWxUb0JlY29tZUtleQogewogICAgIHJldHVybiBZRVM7CiB9CisKICNlbmRpZgogCiAvLyBVdGls
aXR5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55dGhpbmcgdGhyb3Vn
aCB0aGUgTlNUZXh0SW5wdXQKQEAgLTQ4MjgsMTYgKzQ1NTYsMTggQEAgc3RhdGljIEJPT0wgaXNU
ZXh0SW5wdXQoRnJhbWUqIGNvcmVGcmFtZSkKICAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUo
KSAmJiBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChG
cmFtZSogY29yZUZyYW1lKQogewogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQorCiAjZW5kaWYK
IAogc3RhdGljIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBjdXJyZW50S2V5Ym9hcmRFdmVudChGcmFt
ZSogY29yZUZyYW1lKQogewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CiAgICAgaWYgKCFldmVu
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00ODcyLDcgKzQ2MDIsNyBAQCAtIChCT09M
KWJlY29tZUZpcnN0UmVzcG9uZGVyCiAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZv
cm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCiAgICAgICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3aW5k
b3ddIGtleVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25dOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCiAgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CiAjZW5kaWYKICAg
ICAKQEAgLTQ4ODAsNyArNDYxMCw3IEBAIC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gWUVTOwogCi0jaWYgIVBMQVRGT1JNKElPUykK
KyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJ
bnB1dChmcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsKICAgICBpZiAoZXhwb3Nl
SW5wdXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKICAgICAgICAg
X3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKQEAgLTQ5
MTgsNyArNDY0OCw3IEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKIHsKICAgICBCT09M
IHJlc2lnbiA9IFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07CiAgICAgaWYgKHJlc2lnbikg
ewotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoX3By
aXZhdGUtPmlzSW5TZWN1cmVJbnB1dFN0YXRlKSB7CiAgICAgICAgICAgICBEaXNhYmxlU2VjdXJl
RXZlbnRJbnB1dCgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmlzSW5TZWN1cmVJbnB1dFN0YXRl
ID0gTk87CkBAIC00OTQ1LDE3ICs0Njc1LDExIEBAIC0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25k
ZXIKICAgICAgICAgICAgICAgICBbc2VsZiBjbGVhckZvY3VzXTsKICAgICAgICAgfQogICAgICAg
ICAKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZCBuZXh0UmVzcG9uZGVyID0gW1tzZWxm
IHdpbmRvd10gX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmddOwogICAgICAgICBib29s
IG5leHRSZXNwb25kZXJJc0luV2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6
W05TVmlldyBjbGFzc11dCiAgICAgICAgICAgICAmJiBbbmV4dFJlc3BvbmRlciBpc0Rlc2NlbmRh
bnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld11dOwogICAgICAgICBp
ZiAoIW5leHRSZXNwb25kZXJJc0luV2ViVmlldykKICAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLnNldEZvY3VzZWQoZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgTlNWaWV3KiBuZXh0
UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25p
bmddOwotICAgICAgICBpZiAobmV4dFJlc3BvbmRlciAmJiAhW25leHRSZXNwb25kZXIgaXNEZXNj
ZW5kYW50T2Y6W1tbc2VsZiBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddXSkKLSAgICAg
ICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWQoZmFsc2UpOwotI2VuZGlm
CiAgICAgfQogICAgIHJldHVybiByZXNpZ247CiB9CkBAIC00OTY4LDEyICs0NjkyLDEwIEBAIC0g
KHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIAogICAgIEFT
U0VSVCghX3ByaXZhdGUtPmNsb3NlZCk7CiAKLSAgICBbZGF0YVNvdXJjZSByZXRhaW5dOwotICAg
IFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSByZWxlYXNlXTsKICAgICBfcHJpdmF0ZS0+ZGF0YVNvdXJj
ZSA9IGRhdGFTb3VyY2U7CiAgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIHNldERhdGFT
b3VyY2U6ZGF0YVNvdXJjZV07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBpZiAoIV9wcml2YXRlLT5pbnN0YWxsZWRUcmFja2luZ0FyZWEpIHsKICAgICAgICAg
TlNUcmFja2luZ0FyZWFPcHRpb25zIG9wdGlvbnMgPSBOU1RyYWNraW5nTW91c2VNb3ZlZCB8IE5T
VHJhY2tpbmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nSW5WaXNpYmxlUmVjdCB8
IE5TVHJhY2tpbmdDdXJzb3JVcGRhdGU7CiAgICAgICAgIGlmIChXS1JlY29tbWVuZGVkU2Nyb2xs
ZXJTdHlsZSgpID09IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeQpAQCAtNDk4NSwxMCArNDcwNyw3IEBA
IC0gKHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgb3B0aW9ucyB8PSBOU1RyYWNraW5nQWN0aXZlSW5LZXlXaW5k
b3c7CiAKLSAgICAgICAgTlNUcmFja2luZ0FyZWEgKnRyYWNraW5nQXJlYSA9IFtbTlNUcmFja2lu
Z0FyZWEgYWxsb2NdIAotICAgICAgICAgICAgaW5pdFdpdGhSZWN0OltzZWxmIGZyYW1lXSBvcHRp
b25zOm9wdGlvbnMgb3duZXI6c2VsZiB1c2VySW5mbzpuaWxdOwotICAgICAgICBbc2VsZiBhZGRU
cmFja2luZ0FyZWE6dHJhY2tpbmdBcmVhXTsKLSAgICAgICAgW3RyYWNraW5nQXJlYSByZWxlYXNl
XTsKKyAgICAgICAgW3NlbGYgYWRkVHJhY2tpbmdBcmVhOmFkb3B0TlMoW1tOU1RyYWNraW5nQXJl
YSBhbGxvY10gaW5pdFdpdGhSZWN0OltzZWxmIGZyYW1lXSBvcHRpb25zOm9wdGlvbnMgb3duZXI6
c2VsZiB1c2VySW5mbzpuaWxdKS5nZXQoKV07CiAgICAgICAgIF9wcml2YXRlLT5pbnN0YWxsZWRU
cmFja2luZ0FyZWEgPSBZRVM7CiAgICAgfQogI2VuZGlmCkBAIC00OTk4LDEzICs0NzE3LDE1IEBA
IC0gKHZvaWQpZGF0YVNvdXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLy8gVGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBO
U0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUgZW50aXJlIHZpZXcgd2hl
biB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcwotLy8ga2V5LiAgV2ViSFRNTFZpZXcgaXMgYW4g
TlNDb250cm9sIG9ubHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxzIHRoYXQgYXJlIHBhaW50ZWQg
YnkgV2ViQ29yZSdzIEFxdWEgdGhlbWUKKyNpZiBQTEFURk9STShNQUMpCisKKy8vIFRoaXMgaXMg
YW4gb3ZlcnJpZGUgb2YgYW4gTlNDb250cm9sIG1ldGhvZCB0aGF0IHdhbnRzIHRvIHJlcGFpbnQg
dGhlIGVudGlyZSB2aWV3IHdoZW4gdGhlIHdpbmRvdyByZXNpZ25zL2JlY29tZXMga2V5LgorLy8g
V2ViSFRNTFZpZXcgaXMgYW4gTlNDb250cm9sIG9ubHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxz
IHRoYXQgYXJlIHBhaW50ZWQgYnkgV2ViQ29yZSdzIEFxdWEgdGhlbWUKIC8vIHJlbmRlcmVyIChh
bmQgdGhvc2UgY2VsbHMgbXVzdCBiZSBob3N0ZWQgYnkgYW4gZW5jbG9zaW5nIE5TQ29udHJvbCBp
biBvcmRlciB0byBwYWludCBwcm9wZXJseSkuCi0tICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCop
Y2VsbAorLSAodm9pZCl1cGRhdGVDZWxsOihOU0NlbGwgKiljZWxsCiB7CiB9CisKICNlbmRpZgog
CiAvLyBEb2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0IHdoZW4gcHJpbnRp
bmcgaXMgZW5kaW5nLgpAQCAtNTAxNCwxOSArNDczNSwxMyBAQCAtICh2b2lkKV9zZXRQcmludGlu
ZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZUxv
Z2ljYQogICAgIGlmIChwcmludGluZyA9PSBfcHJpdmF0ZS0+cHJpbnRpbmcgJiYgcGFnaW5hdGVT
Y3JlZW5Db250ZW50ID09IF9wcml2YXRlLT5wYWdpbmF0ZVNjcmVlbkNvbnRlbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgTlNB
cnJheSAqc3ViZnJhbWVzID0gW2ZyYW1lIGNoaWxkRnJhbWVzXTsKLSAgICB1bnNpZ25lZCBuID0g
W3N1YmZyYW1lcyBjb3VudF07Ci0gICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpICE9
IG47ICsraSkgewotICAgICAgICBXZWJGcmFtZSAqc3ViZnJhbWUgPSBbc3ViZnJhbWVzIG9iamVj
dEF0SW5kZXg6aV07CisgICAgZm9yIChXZWJGcmFtZSAqc3ViZnJhbWUgaW4gW1tzZWxmIF9mcmFt
ZV0gY2hpbGRGcmFtZXNdKSB7CiAgICAgICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gW3N1
YmZyYW1lIGZyYW1lVmlld107CiAgICAgICAgIGlmIChbW3N1YmZyYW1lIF9kYXRhU291cmNlXSBf
aXNEb2N1bWVudEhUTUxdKSB7CiAgICAgICAgICAgICBbKFdlYkhUTUxWaWV3ICopW2ZyYW1lVmll
dyBkb2N1bWVudFZpZXddIF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxX
aWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhl
aWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOmFkanVzdFZpZXdTaXpl
IHBhZ2luYXRlU2NyZWVuQ29udGVudDpwYWdpbmF0ZVNjcmVlbkNvbnRlbnRdOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07CiAgICAgX3ByaXZh
dGUtPnBhZ2VSZWN0cyA9IG5pbDsKICAgICBfcHJpdmF0ZS0+cHJpbnRpbmcgPSBwcmludGluZzsK
ICAgICBfcHJpdmF0ZS0+cGFnaW5hdGVTY3JlZW5Db250ZW50ID0gcGFnaW5hdGVTY3JlZW5Db250
ZW50OwpAQCAtNTA1NCw3ICs0NzY5LDggQEAgLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJp
bnRpbmcgbWluaW11bVBhZ2VMb2dpY2FsV2lkdGg6KGZsb2F0KW1pblBhZ2VMb2dpY2EKICAgICB9
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClj
YW5QcmludEhlYWRlcnNBbmRGb290ZXJzCiB7CiAgICAgcmV0dXJuIFlFUzsKQEAgLTUxODAsMjMg
KzQ4OTYsMjIgQEAgLSAoQk9PTClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBvaW50ZXIpcmFuZ2UK
ICAgICByYW5nZS0+bG9jYXRpb24gPSAxOwogICAgIGZsb2F0IHRvdGFsU2NhbGVGYWN0b3IgPSBb
c2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl07CiAgICAg
ZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2Nh
bGVGYWN0b3JdOwotICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2VdOwogICAgIGZsb2F0
IGZ1bGxQYWdlV2lkdGggPSBmbG9vcmYoW3ByaW50T3BlcmF0aW9uIF93ZWJfYXZhaWxhYmxlUGFw
ZXJXaWR0aF0gLyB0b3RhbFNjYWxlRmFjdG9yKTsKICAgICBmbG9hdCBmdWxsUGFnZUhlaWdodCA9
IGZsb29yZihbcHJpbnRPcGVyYXRpb24gX3dlYl9hdmFpbGFibGVQYXBlckhlaWdodF0gLyB0b3Rh
bFNjYWxlRmFjdG9yKTsKICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwogICAg
IE5TQXJyYXkgKm5ld1BhZ2VSZWN0cyA9IFtmcmFtZSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmlu
dFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvciBwYWdlU2l6ZTpOU01ha2VTaXplKGZ1bGxQYWdl
V2lkdGgsIGZ1bGxQYWdlSGVpZ2h0KV07Ci0gICAgCisKICAgICAvLyBBcHBLaXQgZ2V0cyBhbGwg
bWVzc2VkIHVwIGlmIHlvdSBnaXZlIGl0IGEgemVyby1sZW5ndGggcGFnZSBjb3VudCAoc2VlIDM1
NzYzMzQpLCBzbyBpZiB3ZQogICAgIC8vIGhpdCB0aGF0IGNhc2Ugd2UnbGwgcGFzcyBhbG9uZyBh
IGRlZ2VuZXJhdGUgMSBwaXhlbCBzcXVhcmUgdG8gcHJpbnQuIFRoaXMgd2lsbCBwcmludAogICAg
IC8vIGEgYmxhbmsgcGFnZSAod2l0aCBjb3JyZWN0LWxvb2tpbmcgaGVhZGVyIGFuZCBmb290ZXIg
aWYgdGhhdCBvcHRpb24gaXMgb24pLCB3aGljaCBtYXRjaGVzCiAgICAgLy8gdGhlIGJlaGF2aW9y
IG9mIElFIGFuZCBDYW1pbm8gYXQgbGVhc3QuCiAgICAgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRd
ID09IDApCiAgICAgICAgIG5ld1BhZ2VSZWN0cyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpb
TlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldXTsKLSAgICAKLSAg
ICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gW25ld1BhZ2VSZWN0cyByZXRhaW5dOwotICAgIAorCisg
ICAgX3ByaXZhdGUtPnBhZ2VSZWN0cyA9IG5ld1BhZ2VSZWN0czsKKwogICAgIHJhbmdlLT5sZW5n
dGggPSBbX3ByaXZhdGUtPnBhZ2VSZWN0cyBjb3VudF07Ci0gICAgCisKICAgICByZXR1cm4gWUVT
OwogfQogCkBAIC01MjM0LDE1ICs0OTQ5LDEyIEBAIC0gKHZvaWQpZW5kRG9jdW1lbnQKICAgICAv
LyBOb3RlIHNhZGx5IGF0IHRoaXMgcG9pbnQgW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0RHJhd2luZ1RvU2NyZWVuXSBpcyBzdGlsbCBOTyAKICAgICBbc2VsZiBfZW5kUHJpbnRNb2Rl
QW5kUmVzdG9yZVdpbmRvd0F1dG9kaXNwbGF5XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQogCi0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50
Ci0jZWxzZQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClrZXlEb3duOihXZWJF
dmVudCAqKWV2ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2
ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEg
bmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBh
dXRvcmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9t
IGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCkBAIC01MjU0
LDEwICs0OTY2LDkgQEAgLSAodm9pZClrZXlEb3duOihXZWJFdmVudCAqKWV2ZW50CiAKICAgICBC
T09MIGNhbGxTdXBlciA9IE5POwogCi0gICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFz
ZV07Ci0gICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworICAgIF9w
cml2YXRlLT5rZXlEb3duRXZlbnQgPSBldmVudDsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRl
LT5jb21wbGV0aW9uQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVy
IHBvcHVwV2luZG93SXNPcGVuXTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKICAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChldmVudCkpIHsKQEAgLTUyODEsMTMg
KzQ5OTIsOSBAQCAtICh2b2lkKWtleURvd246KFdlYkV2ZW50ICopZXZlbnQKICAgICAgICAgW05T
Q3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwogfQogCi0jaWYgIVBMQVRGT1JN
KElPUykKLS0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKilldmVudAotI2Vsc2UKIC0gKHZvaWQpa2V5
VXA6KFdlYkV2ZW50ICopZXZlbnQKLSNlbmRpZgogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
QEAgLTUzMDQsNyArNTAxMSw4IEBAIC0gKHZvaWQpa2V5VXA6KFdlYkV2ZW50ICopZXZlbnQKICAg
ICAgICAgW3N1cGVyIGtleVVwOmV2ZW50XTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQorCiAtICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKWV2ZW50CiB7
CiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3
aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKQEAgLTUzMzYsNiArNTA0NCw3IEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUK
ICAgICB9CiAgICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0
cmlidXRlTmFtZV07CiB9CisKICNlbmRpZgogCiAtIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJ
RWxlbWVudApAQCAtNTM4MiwxNSArNTA5MSwxNCBAQCAtICh2b2lkKWNlbnRlclNlbGVjdGlvbklu
VmlzaWJsZUFyZWE6KGlkKXNlbmRlcgogICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25DZW50ZXJBbHdheXMpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCisKIC0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNS
VEYKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpAIngiCi0gICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29yZUZy
YW1lLT5lZGl0b3IoKS5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkuZ2V0KCkgOiBu
aWxdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtzdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwotICAgIFtzdHJp
bmcgcmVsZWFzZV07Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgYXV0byBzdHJpbmcgPSBhZG9wdE5T
KFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIngiCisgICAgICAg
IGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkuZ2V0KCkgOiBuaWxdKTsKKyAgICByZXR1cm4gW3N0cmluZyBS
VEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJp
YnV0ZXM6QHsgfV07CiB9CiAKIC0gKE5TRGljdGlvbmFyeSAqKV9mb250QXR0cmlidXRlc0Zyb21G
b250UGFzdGVib2FyZApAQCAtNTQxMCw2ICs1MTE4LDcgQEAgLSAoTlNEaWN0aW9uYXJ5ICopX2Zv
bnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
cmV0dXJuIFtzdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsK
IH0KKwogI2VuZGlmCiAKIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZQpA
QCAtNTQxNyw3ICs1MTI2LDggQEAgLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0
eWxlCiAgICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gY3JlYXRlQ1NTU3R5
bGVEZWNsYXJhdGlvbl07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKKwogLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9yCiB7CiAg
ICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5T
RGV2aWNlUkdCQ29sb3JTcGFjZV07CkBAIC01NTE1LDcgKzUyMjUsOCBAQCAtIChET01DU1NTdHls
ZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilk
aWN0aW9uYXJ5CiAKICAgICByZXR1cm4gc3R5bGU7CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAodm9pZClfYXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVk
aXRBY3Rpb24pdW5kb0FjdGlvbgogewpAQCAtNTUzMiw3ICs1MjQzLDggQEAgLSAodm9pZClfYXBw
bHlFZGl0aW5nU3R5bGVUb1NlbGVjdGlvbjooUmVmPEVkaXRpbmdTdHlsZT4mJillZGl0aW5nU3R5
bGUgd2l0aFVuZG8KICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlVG9TZWxl
Y3Rpb24oV1RGTW92ZShlZGl0aW5nU3R5bGUpLCB1bmRvQWN0aW9uKTsKIH0KIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChCT09MKV9oYW5kbGVTdHlsZUtleUVx
dWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2Vs
ZiBfd2ViVmlld107CkBAIC01NTcxLDggKzUyODMsNyBAQCAtIChCT09MKXBlcmZvcm1LZXlFcXVp
dmFsZW50OihOU0V2ZW50ICopZXZlbnQKICAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9
IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKICAgICBCT09MIHJldCA9IE5POwog
Ci0gICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUtPmtl
eURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworICAgIF9wcml2YXRlLT5rZXlEb3duRXZlbnQg
PSBldmVudDsKICAgICAKICAgICBbc2VsZiByZXRhaW5dOwogCkBAIC01NzMyLDcgKzU0NDMsNyBA
QCAtIChSZWY8RWRpdGluZ1N0eWxlPilfc3R5bGVGb3JBdHRyaWJ1dGVDaGFuZ2U6KGlkKXNlbmRl
cgogewogICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5
bGVdOwogCi0gICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtbTlNTaGFkb3cgYWxsb2NdIGluaXRdOwor
ICAgIGF1dG8gc2hhZG93ID0gYWRvcHROUyhbW05TU2hhZG93IGFsbG9jXSBpbml0XSk7CiAgICAg
W3NoYWRvdyBzZXRTaGFkb3dPZmZzZXQ6TlNNYWtlU2l6ZSgxLCAxKV07CiAKICAgICBOU0RpY3Rp
b25hcnkgKm9hID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgpA
QCAtNTc0MiwxNCArNTQ1MywxMiBAQCAtIChSZWY8RWRpdGluZ1N0eWxlPilfc3R5bGVGb3JBdHRy
aWJ1dGVDaGFuZ2U6KGlkKXNlbmRlcgogICAgICAgICBbTlNDb2xvciBibGFja0NvbG9yXSwgTlNC
YWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAogICAgICAgICBbc2VsZiBfb3JpZ2luYWxGb250
Ql0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgIFtOU0NvbG9yIHdoaXRlQ29sb3JdLCBO
U0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIHNoYWRvdywgTlNTaGFkb3dB
dHRyaWJ1dGVOYW1lLAorICAgICAgICBzaGFkb3cuZ2V0KCksIE5TU2hhZG93QXR0cmlidXRlTmFt
ZSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmds
ZV0sIE5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwKICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6MV0sIE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lLAogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNVbmRlcmxp
bmVTdHlsZUF0dHJpYnV0ZU5hbWUsCiAgICAgICAgIG5pbF07CiAKLSAgICBbc2hhZG93IHJlbGVh
c2VdOwotCiAgICAgTlNEaWN0aW9uYXJ5ICphID0gW3NlbmRlciBjb252ZXJ0QXR0cmlidXRlczpv
YV07CiAgICAgTlNEaWN0aW9uYXJ5ICpiID0gW3NlbmRlciBjb252ZXJ0QXR0cmlidXRlczpvYl07
CiAKQEAgLTU4NzMsNyArNTU4Miw4IEBAIC0gKHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNlbmRlcgog
ICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUNvbG9yUGFu
ZWxXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbG9yOildIAogICAgICAgICAgICAgICAgICAg
d2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldENvbG9yXTsKIH0KLSNlbmRpZiAvLyAhUExBVEZP
Uk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9jaGFuZ2VXb3Jk
Q2FzZVdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiB7CkBAIC01OTA5LDcgKzU2MTksOCBAQCAt
ICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClzZW5kZXIKICAgICBbc2VsZiBfY2hhbmdlV29yZENh
c2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGNhcGl0YWxpemVkU3RyaW5nKV07CiB9CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZCljb21wbGV0ZTooaWQp
c2VuZGVyCiB7CiAgICAgQ09NTUFORF9QUk9MT0dVRQpAQCAtNTkxNyw3ICs1NjI4LDcgQEAgLSAo
dm9pZCljb21wbGV0ZTooaWQpc2VuZGVyCiAgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIV9wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlcikKLSAg
ICAgICAgX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyID0gW1tXZWJUZXh0Q29tcGxldGlv
bkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpbc2VsZiBfd2ViVmlld10gSFRNTFZp
ZXc6c2VsZl07CisgICAgICAgIF9wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciA9IGFkb3B0
TlMoW1tXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpb
c2VsZiBfd2ViVmlld10gSFRNTFZpZXc6c2VsZl0pOwogICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlv
bkNvbnRyb2xsZXIgZG9Db21wbGV0aW9uXTsKIH0KIApAQCAtNjA2NCw3ICs1Nzc1LDggQEAgLSAo
dm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDooaWQpc2VuZGVyCiAKICAg
ICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rpb25S
aWdodFRvTGVmdF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKIAogLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOihp
ZClzZW5kZXIKIHsKQEAgLTYwOTQsNyArNTgwNiw2IEBAIC0gKHZvaWQpdHJhbnNwb3NlV29yZHM6
KGlkKXNlbmRlcjsKIAogI2VuZGlmCiAKLQogLy8gT3ZlcnJpZGUgdGhpcyBzbyB0aGF0IEFwcEtp
dCB3aWxsIHNlbmQgdXMgYXJyb3cga2V5cyBhcyBrZXkgZG93biBldmVudHMgc28gd2UgY2FuCiAv
LyBzdXBwb3J0IHRoZW0gdmlhIHRoZSBrZXkgYmluZGluZ3MgbWVjaGFuaXNtLgogLSAoQk9PTClf
d2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudApAQCAtNjEwOCw3ICs1ODE5LDgg
QEAgLSAoQk9PTClfd2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIHJl
dHVybiBoYXZlV2ViQ29yZUZyYW1lOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCisKIC0gKEJPT0wpX2F1dG9tYXRpY0ZvY3VzUmluZ0Rpc2FibGVkCiB7CiAgICAg
Ly8gVGhlIGRlZmF1bHQgc3RhdGUgZm9yIF9hdXRvbWF0aWNGb2N1c1JpbmdEaXNhYmxlZCBpcyBO
Tywgd2hpY2ggcHJldmVudHMgZm9jdXMgcmluZ3MKQEAgLTYxMTYsNyArNTgyOCw2IEBAIC0gKEJP
T0wpX2F1dG9tYXRpY0ZvY3VzUmluZ0Rpc2FibGVkCiAgICAgLy8gb2YgY2hhbmdpbmcgdGhpcyB0
byBZRVMsIHNvIGp1c3QgcmV0dXJuIFlFUyBhbGwgdGhlIHRpbWUuIDxyZGFyOi8vcHJvYmxlbS8x
Mzc4MDEyMj4sCiAgICAgcmV0dXJuIFlFUzsKIH0KLSNlbmRpZgogCiAtICh2b2lkKV91cGRhdGVD
b250cm9sVGludHMKIHsKQEAgLTYxMzUsMTkgKzU4NDYsMTQgQEAgLSAodm9pZClfdXBkYXRlQ29u
dHJvbFRpbnRzCiAvLyB0byBkbyB0aGlzIHdpdGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEzNjc2
MD4KIC0gKHZvaWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZQogewotI2lmICFQTEFURk9STShJT1Mp
CiAgICAgaWYgKHB0aHJlYWRfbWFpbl9ucCgpKQogICAgICAgICBbc2VsZiBfdXBkYXRlQ29udHJv
bFRpbnRzXTsKICAgICBlbHNlCiAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRo
cmVhZDpAc2VsZWN0b3IoX3VwZGF0ZUNvbnRyb2xUaW50cykgd2l0aE9iamVjdDpuaWwgd2FpdFVu
dGlsRG9uZTpOT107Ci0jZWxzZQotICAgIFtzZWxmIF91cGRhdGVDb250cm9sVGludHNdOwotI2Vu
ZGlmCiAKICAgICBbc3VwZXIgX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZV07CiB9CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQogLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CiAg
ICAgaWYgKGV2ZW50LmJ1dHRvbk51bWJlciAhPSAyIHx8IFtOU01lbnUgbWVudVR5cGVGb3JFdmVu
dDpldmVudF0gPT0gTlNNZW51VHlwZUNvbnRleHRNZW51KSB7CkBAIC02MTczLDYgKzU4NzksNyBA
QCAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiAgICAgZWxzZQogICAgICAg
ICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKIH0KKwogI2VuZGlmCiAKIEBlbmQKQEAgLTYx
ODEsOCArNTg4OCw4IEBAIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwp
CiAKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKIHsKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
W3NlbGYgX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcl07Ci0jaWYgIVBMQVRGT1JNKElP
UykKICAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKICAgICAgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRv
cigpLmlzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSgpKQpAQCAtNjE5MSw3ICs1ODk4LDggQEAg
LSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAogI2VuZGlmCiB9CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCiB7CiAgICAg
Ly8gRklYTUU6IE5TVGV4dFZpZXcgYmFpbHMgb3V0IGlmIGJlY29taW5nIG9yIHJlc2lnbmluZyBm
aXJzdCByZXNwb25kZXIsIGZvciB3aGljaCBpdCBoYXMgaXZhciBmbGFncy4gTm90CkBAIC02MjI5
LDcgKzU5MzcsOCBAQCAtICh2b2lkKV9zZXRTb2Z0U3BhY2VSYW5nZTooTlNSYW5nZSlyYW5nZQog
ewogICAgIF9wcml2YXRlLT5zb2Z0U3BhY2VSYW5nZSA9IHJhbmdlOwogfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKEJPT0wpX2NhblNt
YXJ0Q29weU9yRGVsZXRlCiB7CkBAIC02MjM5LDExICs1OTQ4LDEzIEBAIC0gKEJPT0wpX2NhblNt
YXJ0Q29weU9yRGVsZXRlCiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OwogfQogCi0jaWYgIVBMQVRG
T1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TRXZlbnQgKilfbW91c2VEb3duRXZl
bnQKIHsKLSAgICByZXR1cm4gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50OworICAgIHJldHVybiBf
cHJpdmF0ZS0+bW91c2VEb3duRXZlbnQuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAtIChXZWJGcmFt
ZSAqKV9mcmFtZQpAQCAtNjI1Nyw3ICs1OTY4LDggQEAgLSAodm9pZCljbG9zZUlmTm90Q3VycmVu
dFZpZXcKICAgICAgICAgW3NlbGYgY2xvc2VdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNp
ZiBQTEFURk9STShNQUMpCisKIC0gKERPTURvY3VtZW50RnJhZ21lbnQqKV9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKIHsKICAgICByZXR1
cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29u
dGV4dDpuaWwgYWxsb3dQbGFpblRleHQ6Tk9dOwpAQCAtNjQxNCwxMSArNjEyNiwxNCBAQCAtICh2
b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CiAgICAgW1tzZWxmIF93ZWJW
aWV3XSBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9yV2luZG93
RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKICAgICBbc3VwZXIgcXVpY2tMb29rV2l0aEV2
ZW50OmV2ZW50XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorCisjdW5kZWYgQ09NTUFORF9QUk9MT0dVRQogCiAtICh2b2lkKV9leGVjdXRl
U2F2ZWRLZXlwcmVzc0NvbW1hbmRzCiB7Ci0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7CisgICAgYXV0byogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzOwogICAgIGlmICghcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJzLT5ldmVu
dC0+a2V5cHJlc3NDb21tYW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02
NDUwLDcgKzYxNjUsOCBAQCAtICh2b2lkKV9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCiAg
ICAgcGFyYW1ldGVycy0+ZXhlY3V0aW5nU2F2ZWRLZXlwcmVzc0NvbW1hbmRzID0gZmFsc2U7CiB9
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfaW50
ZXJwcmV0S2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNhdmluZ0NvbW1hbmRzOihCT09M
KXNhdmluZ0NvbW1hbmRzCiB7CiAgICAgQVNTRVJUKGNvcmUoW3NlbGYgX2ZyYW1lXSkgPT0gZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKQEAgLTY1MDUsNyAr
NjIyMSw3IEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihLZXlib2FyZEV2ZW50KilldmVu
dCBzYXZpbmdDb21tYW5kczooQk9PTClzYXZpbmdDb21tCiAgICAgICAgIGlmICghaGF2ZVRleHRJ
bnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6Q2hhcikKICAgICAgICAgICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRz
XTsKICAgICB9Ci0gICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAw
OworICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gbnVsbHB0cjsK
IAogICAgIC8vIEFuIGlucHV0IG1ldGhvZCBtYXkgbWFrZSBzZXZlcmFsIGFjdGlvbnMgcGVyIGtl
eXByZXNzLiBGb3IgZXhhbXBsZSwgcHJlc3NpbmcgUmV0dXJuIHdpdGggS29yZWFuIElNIGJvdGgg
Y29uZmlybXMgaXQgYW5kIHNlbmRzIGEgbmV3bGluZS4KICAgICAvLyBJTS1saWtlIGFjdGlvbnMg
YXJlIGhhbmRsZWQgaW1tZWRpYXRlbHkgKHNvIHBhcmFtZXRlcnMuZXZlbnRJbnRlcnByZXRhdGlv
bkhhZFNpZGVFZmZlY3RzIGlzIHRydWUpLCBidXQgdGhlcmUgYXJlIHNhdmVkIGNvbW1hbmRzIHRo
YXQKQEAgLTY1MjEsOCArNjIzNyw5IEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihLZXli
b2FyZEV2ZW50KilldmVudCBzYXZpbmdDb21tYW5kczooQk9PTClzYXZpbmdDb21tCiAgICAgLy8g
SWYgd2UgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVkIGFsbCBjb21tYW5kcywgZG9uJ3QgZG8gaXQgYWdh
aW4uCiAgICAgcmV0dXJuIHBhcmFtZXRlcnMuZXZlbnRJbnRlcnByZXRhdGlvbkhhZFNpZGVFZmZl
Y3RzOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0gICAgCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisKICNpZiBQTEFURk9STShJT1MpCiAgICAgCiAjZGVmaW5lIGtXZWJFbnRlcktl
eSAgICAgICAgIDB4MDAwMwpAQCAtNjU3NiwxMSArNjI5Myw3IEBAIC0gKEJPT0wpX2hhbmRsZUVk
aXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCAqKXdjRXZlbnQKIH0KICNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2Uq
KXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5wcm9t
aXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKLX0KKyNpZiBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQp
c2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilzb3Vy
Y2UKIHsKQEAgLTY1OTEsMTMgKzYzMDQsMTIgQEAgLSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNvdXJjZQogICAgICAgICBfcHJpdmF0
ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFD
bGllbnQoKSk7CiAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gc291
cmNlOwogfQotI2VuZGlmCiAKLSN1bmRlZiBDT01NQU5EX1BST0xPR1VFCisjZW5kaWYKIAogLSAo
dm9pZClfbGF5b3V0SWZOZWVkZWQKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKICAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKICNlbmRpZgog
CkBAIC02NjIzLDE2ICs2MzM1LDE2IEBAIC0gKEJPT0wpX25lZWRzTGF5b3V0CiAgICAgcmV0dXJu
IFtbc2VsZiBfZnJhbWVdIF9uZWVkc0xheW91dF07CiB9CiAKLS0gKHZvaWQpYXR0YWNoUm9vdExh
eWVyOihDQUxheWVyKilsYXllcgorI2lmIFBMQVRGT1JNKE1BQykKKworLSAodm9pZClhdHRhY2hS
b290TGF5ZXI6KENBTGF5ZXIgKilsYXllcgogewotI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYg
KCFfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAgICBOU1ZpZXcqIGhvc3RpbmdW
aWV3ID0gW1tXZWJMYXllckhvc3RpbmdGbGlwcGVkVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpb
c2VsZiBib3VuZHNdXTsKKyAgICAgICAgYXV0byBob3N0aW5nVmlldyA9IGFkb3B0TlMoW1tXZWJM
YXllckhvc3RpbmdGbGlwcGVkVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2VsZiBib3VuZHNd
XSk7CiAgICAgICAgIFtob3N0aW5nVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihOU1ZpZXdXaWR0
aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlKV07Ci0gICAgICAgIFtzZWxmIGFkZFN1YnZp
ZXc6aG9zdGluZ1ZpZXddOwotICAgICAgICBbaG9zdGluZ1ZpZXcgcmVsZWFzZV07CisgICAgICAg
IFtzZWxmIGFkZFN1YnZpZXc6aG9zdGluZ1ZpZXcuZ2V0KCldOwogICAgICAgICAvLyBob3N0aW5n
VmlldyBpcyBvd25lZCBieSBiZWluZyBhIHN1YnZpZXcgb2Ygc2VsZgotICAgICAgICBfcHJpdmF0
ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IGhvc3RpbmdWaWV3OworICAgICAgICBfcHJpdmF0ZS0+bGF5
ZXJIb3N0aW5nVmlldyA9IGhvc3RpbmdWaWV3LmdldCgpOwogICAgIH0KIAogICAgIC8vIE1ha2Ug
YSBjb250YWluZXIgbGF5ZXIsIHdoaWNoIHdpbGwgZ2V0IHNpemVkL3Bvc2l0aW9uZWQgYnkgQXBw
S2l0IGFuZCBDQS4KQEAgLTY2NjAsMjIgKzYzNzIsMTggQEAgLSAodm9pZClhdHRhY2hSb290TGF5
ZXI6KENBTGF5ZXIqKWxheWVyCiAKICAgICBpZiAoV0tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJl
Zm9yZUxpb24oKSkKICAgICAgICAgW3ZpZXdMYXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsK
LSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCiAtICh2b2lkKWRldGFjaFJvb3RMYXllcgog
ewotI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3
KSB7CiAgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjpuaWxdOwog
ICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2FudHNMYXllcjpOT107CiAg
ICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
ICAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBuaWw7CiAgICAgfQotI2VuZGlm
CiB9CiAKLSNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKWRyYXdMYXllcjooQ0FMYXllciAqKWxh
eWVyIGluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAogewogICAgIGlmIChfcHJpdmF0ZSkgewpA
QCAtNjY5MSwxNSArNjM5OSwxMCBAQCAtICh2b2lkKWRyYXdMYXllcjooQ0FMYXllciAqKWxheWVy
IGluQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAogICAgICAgICBfcHJpdmF0ZS0+ZHJhd2luZ0lu
dG9BY2NlbGVyYXRlZExheWVyID0gTk87CiAgICAgfQogfQotI2VuZGlmCiAKIC0gKEJPT0wpX3dl
Yl9pc0RyYXdpbmdJbnRvTGF5ZXIKIHsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgcmV0dXJuIFlF
UzsKLSNlbHNlCiAgICAgcmV0dXJuIF9wcml2YXRlLT5kcmF3aW5nSW50b0xheWVyOwotI2VuZGlm
CiB9CiAKIC0gKEJPT0wpX3dlYl9pc0RyYXdpbmdJbnRvQWNjZWxlcmF0ZWRMYXllcgpAQCAtNjcw
Nyw3ICs2NDEwLDYgQEAgLSAoQk9PTClfd2ViX2lzRHJhd2luZ0ludG9BY2NlbGVyYXRlZExheWVy
CiAgICAgcmV0dXJuIF9wcml2YXRlLT5kcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXI7CiB9CiAK
LSNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV9jaGFuZ2VTcGVsbGluZ1RvV29yZDooTlNTdHJp
bmcgKiluZXdXb3JkCiB7CiAgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCkBAIC02NzI1LDM0ICs2
NDI3LDUyIEBAIC0gKHZvaWQpX2NoYW5nZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dv
cmQKICAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3Jk
IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQogICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgc2VsZWN0UmVwbGFjZW1l
bnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CiB9CisKKy0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRp
bWVyOihOU0V2ZW50ICopdHJpZ2dlckV2ZW50Cit7CisgICAgaWYgKCFfcHJpdmF0ZS0+YXV0b3Nj
cm9sbFRpbWVyKSB7CisgICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBbTlNUaW1l
ciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6QVVUT1NDUk9MTF9JTlRFUlZBTAorICAg
ICAgICAgICAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2Vy
SW5mbzpuaWwgcmVwZWF0czpZRVNdOworICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdn
ZXJFdmVudCA9IHRyaWdnZXJFdmVudDsKKyAgICB9Cit9CisKKyNlbmRpZgorCistICh2b2lkKV9z
dG9wQXV0b3Njcm9sbFRpbWVyCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtfcHJpdmF0ZS0+
YXV0b3Njcm9sbFRpbWVyIGludmFsaWRhdGVdOworICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGlt
ZXIgPSBuaWw7CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7CiAj
ZW5kaWYKK30KKworLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVyCit7
CisgICAgcmV0dXJuIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyLmdldCgpOworfQogCiBAZW5k
CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KQog
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TQXJyYXkgKil2
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0CiB7Ci0gICAgc3RhdGljIE5TQXJyYXkgKnZhbGlk
QXR0cmlidXRlczsKLSAgICBpZiAoIXZhbGlkQXR0cmlidXRlcykgewotICAgICAgICB2YWxpZEF0
dHJpYnV0ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKLSAgICAgICAgICAg
IE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lLCBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRl
TmFtZSwKLSAgICAgICAgICAgIE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWUsIE5T
VGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUsCisgICAgc3RhdGljIE5TQXJy
YXkgKnZhbGlkQXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgor
ICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKKyAgICAgICAgTlNVbmRlcmxp
bmVDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgIE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJp
YnV0ZU5hbWUsCisgICAgICAgIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5h
bWUsCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU1RleHRBbHRlcm5hdGl2ZXNBdHRyaWJ1dGVOYW1lLAorICAgICAgICBOU1RleHRB
bHRlcm5hdGl2ZXNBdHRyaWJ1dGVOYW1lLAogI2VuZGlmCiAjaWYgVVNFKElOU0VSVElPTl9VTkRP
X0dST1VQSU5HKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNUZXh0SW5zZXJ0aW9uVW5k
b2FibGVBdHRyaWJ1dGVOYW1lLAorICAgICAgICBOU1RleHRJbnNlcnRpb25VbmRvYWJsZUF0dHJp
YnV0ZU5hbWUsCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07Ci0gICAg
ICAgIC8vIE5TVGV4dCBhbHNvIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcywgYnV0
IGl0J3MKLSAgICAgICAgLy8gaGFyZCB0byB0ZWxsIHdoaWNoIGFyZSByZWFsbHkgcmVxdWlyZWQg
Zm9yIHRleHQgaW5wdXQgdG8KLSAgICAgICAgLy8gd29yayB3ZWxsOyBJIGhhdmUgbm90IHNlZW4g
YW55IGlucHV0IG1ldGhvZCBtYWtlIHVzZSBvZiB0aGVtIHlldC4KLSAgICAgICAgLy8gICAgIE5T
Rm9udEF0dHJpYnV0ZU5hbWUsIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAg
ICAgLy8gICAgIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwgTlNMYW5ndWFnZUF0dHJp
YnV0ZU5hbWUuCi0gICAgICAgIENGUmV0YWluKHZhbGlkQXR0cmlidXRlcyk7Ci0gICAgfQorICAg
ICAgICBuaWxdOwogICAgIExPRyhUZXh0SW5wdXQsICJ2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRU
ZXh0IC0+ICguLi4pIik7CiAgICAgcmV0dXJuIHZhbGlkQXR0cmlidXRlczsKIH0KQEAgLTY3Nzgs
NyArNjQ5OCw4IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXRleHRTdG9yYWdlCiAgICAgLy8g
V2UgaGF2ZSB0byByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0aGFuIG51bGwgdG8gcHJl
dmVudCBUU00gZnJvbSBjYWxsaW5nIC1zdHJpbmcKICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0
IDogW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9y
ZWxlYXNlXTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQogCiAtIChOU1VJbnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQp
dGhlUG9pbnQKIHsKQEAgLTY4NjQsNyArNjU4NSw4IEBAIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCisKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9t
UmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQogewogICAgIFtzZWxmIF9leGVjdXRlU2F2ZWRLZXlwcmVz
c0NvbW1hbmRzXTsKQEAgLTY4OTQsNiArNjYxNiw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQogICAgIExPRyhU
ZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBc
IiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CisKICNlbmRpZgogCiAtIChOU0ludGVnZXIpY29udmVyc2F0
aW9uSWRlbnRpZmllcgpAQCAtNjkyMyw3ICs2NjQ2LDcgQEAgLSAodm9pZCl1bm1hcmtUZXh0CiAg
ICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQiKTsKIAogICAgIC8vIFVzZSBwb2ludGVyIHRv
IGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtl
eUV2ZW50cy4KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBh
cmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBh
dXRvKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7
CiAKICAgICBpZiAocGFyYW1ldGVycykgewogICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVy
cHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgPSB0cnVlOwpAQCAtNjkzNCw3ICs2NjU3LDggQEAgLSAo
dm9pZCl1bm1hcmtUZXh0CiAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY29uZmlybUNvbXBv
c2l0aW9uKCk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
c3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcs
IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHJlc3VsdCkKIHsKICAgICBpbnQgbGVuZ3Ro
ID0gW1tzdHJpbmcgc3RyaW5nXSBsZW5ndGhdOwpAQCAtNjk1NywxMyArNjY4MSwxNCBAQCBzdGF0
aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZQogICAgICAgICBpID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5s
ZW5ndGg7CiAgICAgfQogfQorCiAjZW5kaWYKIAogLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClz
dHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZQogewogICAgIFtzZWxmIF9l
eGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzXTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tp
bmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKICAgICBBU1NFUlQoaXNBdHRy
aWJ1dGVkU3RyaW5nIHx8IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7
CiAKQEAgLTY5NzEsNyArNjY5Niw3IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5n
IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKICNlbmRpZgogCiAgICAgLy8gVXNl
IHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2Yg
aW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzOworICAgIGF1dG8qIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVyczsKIAogICAgIGlmIChwYXJhbWV0ZXJzKSB7CiAgICAgICAgIHBhcmFtZXRlcnMt
PmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0cyA9IHRydWU7CkBAIC02OTg5LDcgKzY3
MTQsNyBAQCAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihO
U1JhbmdlKW5ld1NlbFJhbmdlCiAgICAgTlNTdHJpbmcgKnRleHQ7CiAgICAgTlNSYW5nZSByZXBs
YWNlbWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBXZSBpZ25vcmUgbW9zdCBhdHRyaWJ1dGVzIGZyb20gdGhlIHN0cmluZywgc28g
YW4gaW5wdXQgbWV0aG9kIGNhbm5vdCBzcGVjaWZ5IGUuZy4gYSBmb250IG9yIGEgZ2x5cGggdmFy
aWF0aW9uLgogICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwpAQCAtNzAzMCw3ICs2NzU1
LDcgQEAgLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIAogICAgIC8v
IFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVy
IG9mIGludGVycHJldEtleUV2ZW50cy4KICAgICAvLyBUaGUgc2FtZSBjYWxsIHRvIGludGVycHJl
dEtleUV2ZW50cyBjYW4gZG8gbW9yZSB0aGFuIG9uZSBjb21tYW5kLgotICAgIFdlYkhUTUxWaWV3
SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIGF1dG8qIHBhcmFtZXRlcnMgPSBfcHJpdmF0
ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKICAgICBpZiAocGFyYW1ldGVycykKICAg
ICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gZmFsc2U7CiAKQEAgLTcwNTYsMTggKzY3
ODEsMTcgQEAgLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKICAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXTsKICAgICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCiAg
ICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIElmIFdlYktpdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29t
bWFuZCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzZWxlY3RvciB0byBzdXBlci4KICAgICAgICAgICAg
ICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7
CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxz
IHVzIGlmIHRoZSByZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAogICAgICAgICAgICAgICAg
IC8vIDIpIHByZXZlbnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhl
cmUuCi0gICAgICAgICAgICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rICpzaW5rID0gW1tXZWJS
ZXNwb25kZXJDaGFpblNpbmsgYWxsb2NdIGluaXRXaXRoUmVzcG9uZGVyQ2hhaW46c2VsZl07Cisg
ICAgICAgICAgICAgICAgYXV0byBzaW5rID0gYWRvcHROUyhbW1dlYlJlc3BvbmRlckNoYWluU2lu
ayBhbGxvY10gaW5pdFdpdGhSZXNwb25kZXJDaGFpbjpzZWxmXSk7CiAgICAgICAgICAgICAgICAg
W3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwogICAgICAgICAgICAgICAgIGV2
ZW50V2FzSGFuZGxlZCA9ICFbc2luayByZWNlaXZlZFVuaGFuZGxlZENvbW1hbmRdOwogICAgICAg
ICAgICAgICAgIFtzaW5rIGRldGFjaF07Ci0gICAgICAgICAgICAgICAgW3NpbmsgcmVsZWFzZV07
CiAKICAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVj
dG9yID0gMDsKICAgICAgICAgICAgIH0KQEAgLTcwODMsMTQgKzY4MDcsMTQgQEAgLSAodm9pZClk
b0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIAogLSAodm9pZClpbnNlcnRUZXh0Oihp
ZClzdHJpbmcKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBC
T09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1
dGVkU3RyaW5nIGNsYXNzXV07CiAgICAgQVNTRVJUKGlzQXR0cmlidXRlZFN0cmluZyB8fCBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOwogCiAgICAgTE9HKFRleHRJbnB1
dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJp
bmddIDogc3RyaW5nKTsKICNlbmRpZgogCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7CisgICAgYXV0byogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzOwogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBwYXJhbWV0ZXJz
LT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKIApAQCAtNzEwMyw3ICs2ODI3LDcgQEAgLSAodm9pZClp
bnNlcnRUZXh0OihpZClzdHJpbmcKICNlbmRpZgogCiAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVy
bmF0aXZlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9uczsKLSNpZiAhUExBVEZPUk0oSU9T
KQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CiAjaWYg
VVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0
QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+IHRleHRBbHRlcm5hdGl2ZXM7CkBAIC03MTUxLDcgKzY4NzUs
NyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogICAgICAgICBuZWVkVG9SZW1vdmVT
b2Z0U3BhY2UgPSBZRVM7CiAgICAgfQogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgX3ByaXZhdGUtPnNvZnRTcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CiAjZW5kaWYKIApAQCAtNzE4OSw3ICs2OTEzLDggQEAgLSAodm9pZClp
bnNlcnRUZXh0OihpZClzdHJpbmcKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRh
dGlvbkhhZFNpZGVFZmZlY3RzIHw9IGV2ZW50SGFuZGxlZDsKIH0KIAotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRl
CiB7CiAgICAgaWYgKCFbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gfHwgKFtbc2VsZiB3aW5k
b3ddIGZpcnN0UmVzcG9uZGVyXSAhPSBzZWxmICYmICFfcHJpdmF0ZS0+X2ZvcmNlVXBkYXRlU2Vj
dXJlSW5wdXRTdGF0ZSkpIHsKQEAgLTcyMjAsMTEgKzY5NDUsOSBAQCAtICh2b2lkKV91cGRhdGVT
ZWN1cmVJbnB1dFN0YXRlCiAgICAgICAgIFRTTVJlbW92ZURvY3VtZW50UHJvcGVydHkoMCwga1RT
TURvY3VtZW50RW5hYmxlZElucHV0U291cmNlc1Byb3BlcnR5VGFnKTsKICAgICB9CiB9Ci0jZW5k
aWYKIAogLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiB7Ci0jaWYgIVBM
QVRGT1JNKElPUykKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzI1NCwyMyArNjk3Nywx
NyBAQCAtICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXIKICAgICAgICAgW1tO
U0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0QWJhbmRvbmVkOnNl
bGZdOwogICAgIH0KICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbHNlCi0gICAgLy8g
RklYTUU6IFRoZSBmb2xsb3dpbmcgY29kZToKLSAgICAvLwotICAgIC8vICAgICAgaWYgKCFjb3Jl
RnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFydCwgZW5kKSkKLSAg
ICAvLyAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb25XaXRo
b3V0RGlzdHVyYmluZ1NlbGVjdGlvbigpOwotICAgIC8vCi0gICAgLy8KLSAgICAvLyB3b3VsZCB3
b3JrIGlmIGdldENvbXBvc2l0aW9uU2VsZWN0aW9uIHJldHVybmVkIGZhbHNlIHdoZW4gY29tcG9z
aXRpb24gIT0gc2VsZWN0aW9uLgotICAgIC8vIFdoeSBkb2Vzbid0IGl0PyAgU2VlIDxyZGFyOi8v
cHJvYmxlbS82ODM3MjUyPiBmb3IgcXVlc3Rpb25zLgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
IH0KIAorI2VuZGlmCisKICNpZiBIQVZFKFRPVUNIX0JBUikKKwogLSAoTlNDYW5kaWRhdGVMaXN0
VG91Y2hCYXJJdGVtICopY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbQogewogICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIGNhbmRpZGF0ZUxpc3RdOwogfQorCiAjZW5kaWYKIAogQGVuZApAQCAt
NzMwOSw2ICs3MDI2LDcgQEAgLSAoTlNWaWV3ICopc2VsZWN0aW9uVmlldwogfQogCiAjaWYgUExB
VEZPUk0oSU9TKQorCiBzdGF0aWMgQ0dJbWFnZVJlZiBpbWFnZUZyb21SZWN0KEZyYW1lKiBmcmFt
ZSwgQ0dSZWN0IHJlY3QpCiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CkBAIC03
Mzg1LDkgKzcxMDMsMTAgQEAgc3RhdGljIENHSW1hZ2VSZWYgc2VsZWN0aW9uSW1hZ2UoRnJhbWUq
IGZyYW1lLCBib29sIGZvcmNlQmxhY2tUZXh0KQogICAgIGZyYW1lLT52aWV3KCktPnNldFBhaW50
QmVoYXZpb3IoUGFpbnRCZWhhdmlvck5vcm1hbCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNl
bmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyNp
ZiBQTEFURk9STShNQUMpCiAtIChOU0ltYWdlICopc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxhY2tU
ZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0CiAjZWxzZQogLSAoQ0dJbWFnZVJlZilzZWxlY3Rpb25J
bWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKQEAgLTc0MTUsMjIgKzcx
MzQsMjMgQEAgLSAoTlNSZWN0KXNlbGVjdGlvbkltYWdlUmVjdAogICAgIHJldHVybiBjb3JlKFtz
ZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKTsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU0FycmF5ICopcGFzdGVib2Fy
ZFR5cGVzRm9yU2VsZWN0aW9uCiB7CiAgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0
ZV0pIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW1tbW3NlbGYgY2xhc3NdIF9z
ZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CiAgICAg
ICAgIFt0eXBlcyBhZGRPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogICAgICAgICBy
ZXR1cm4gdHlwZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBjbGFzc10g
X3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc107CiAgICAgfQorICAgIHJldHVybiBbW3NlbGYgY2xh
c3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdOwogfQogCiAtICh2b2lkKXdyaXRlU2VsZWN0
aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZAogewogICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQ
YXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmli
dXRlZFN0cmluZzpuaWxdOwogfQorCiAjZW5kaWYKIAogLSAodm9pZClzZWxlY3RBbGwKQEAgLTc0
NTMsNyArNzE3Myw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nCiAgICAgcmV0dXJuIFtbc2VsZiBf
ZnJhbWVdIF9zdHJpbmdGb3JSYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOwogfQogCi0jaWYg
IVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TQXR0cmlidXRlZFN0cmlu
ZyAqKV9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOwpAQCAtNzQ5Niw2ICs3MjE3
LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiAg
ICAgfQogICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwogfQorCiAjZW5kaWYKIAogLSAoTlNT
dHJpbmcgKilzZWxlY3RlZFN0cmluZwpAQCAtNzU5MywyMiArNzMxNSwxOSBAQCAtIChCT09MKV9m
aW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylvcHRp
b25zCiAKIEBlbmQKIAotLy8gVGhpcyBpcyB1c2VkIGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQg
aGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNjaGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4K
Ky8vIFRoaXMgaXMgdXNlZCBieSBBcHBLaXQvVGV4dEtpdCBhbmQgaXMgaW1wbGVtZW50ZWQgaGVy
ZSBpbiBwYXJ0IHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBv
bmNlLgorLy8gRklYTUU6IFJlYWxseSBzaG91bGQgaGF2ZSBhbiBAaW50ZXJmYWNlIGZvciB0aGlz
IHNvbWV3aGVyZSBpbiB0aGlzIGZpbGUgb3IgYW4gaW5jbHVkZS4gTm90IHN1cmUgd2h5IGl0IGNv
bXBpbGVzIHdpdGhvdXQgb25lLgogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJEYXRhVVJMKQog
CiArIChOU1VSTCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTAogewotICAgIENGVVVJRFJlZiBVVUlE
UmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpV
VUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJM
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDov
LyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nXV07Ci0gICAgQ0ZSZWxlYXNl
KFVVSURTdHJpbmcpOwotICAgIHJldHVybiBVUkw7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQCIsIFdlYkRhdGFQcm90
b2NvbFNjaGVtZSwgY3JlYXRlVVVJRFN0cmluZygpXV07CiB9CiAKIEBlbmQKIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBAaW1wbGVtZW50YXRpb24gV2ViUmVzcG9u
ZGVyQ2hhaW5TaW5rCiAKIC0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVy
ICopY2hhaW4KQEAgLTc2NDksNCArNzM2OCw1IEBAIC0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwp
YWN0aW9uIHdpdGg6KGlkKW9iamVjdAogfQogCiBAZW5kCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAppbmRl
eCBkZGMwMjE1MTM1MjYyMjI5YzQ5YmMyMjBiYzE0ZGM4YzViNDg1N2FhLi44YjY0NzIxNWZmMzky
MWI1Yzc5NTY5MGQ1ZGM5MmUwNDg4ZDA4NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw2ICszMiw3IEBACiAKIEBjbGFzcyBDQUxheWVyOwogQGNsYXNzIFdlYkZyYW1lOworQGNs
YXNzIFdlYlBsdWdpbkNvbnRyb2xsZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBDYWNoZWRJbWFnZTsKQEAgLTM5LDIwICs0MCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9
CiAKICNpZiBQTEFURk9STShNQUMpCisKIEBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKCkgPE5TRHJh
Z2dpbmdTb3VyY2U+CiBAZW5kCisKICNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChX
ZWJJbnRlcm5hbCkKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7Ci0jaWYgIVBMQVRGT1JNKElP
UykKKworI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbDsKIC0gKHZv
aWQpX3NldFNvZnRTcGFjZVJhbmdlOihOU1JhbmdlKXJhbmdlOwogI2VuZGlmCisKIC0gKEJPT0wp
X2NhblNtYXJ0Q29weU9yRGVsZXRlOwogCiAtIChXZWJGcmFtZSAqKV9mcmFtZTsKLSNpZiAhUExB
VEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0oTUFDKQogLSAodm9pZClfbG9va1VwSW5EaWN0aW9u
YXJ5RnJvbU1lbnU6KGlkKXNlbmRlcjsKIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJD
b3JlOjpLZXlib2FyZEV2ZW50ICopZXZlbnQgc2F2aW5nQ29tbWFuZHM6KEJPT0wpc2F2aW5nQ29t
bWFuZHM7CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKQEAgLTYwLDI2ICs2NiwzNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAtIChCT09MKWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKIC0g
KHZvaWQpc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDooQk9PTClmbGFnOwogLSAodm9pZCl0b2dn
bGVHcmFtbWFyQ2hlY2tpbmc6KGlkKXNlbmRlcjsKLS0gKFdlYkNvcmU6OkNhY2hlZEltYWdlKilw
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKIC0gKHZvaWQpc2V0UHJvbWlzZWREcmFnVElGRkRh
dGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilzb3VyY2U7Ci0jZWxzZQorI2VuZGlmCisK
KyNpZiBQTEFURk9STShJT1MpCiAtIChCT09MKV9oYW5kbGVFZGl0aW5nS2V5RXZlbnQ6KFdlYkNv
cmU6OktleWJvYXJkRXZlbnQgKilldmVudDsKICNlbmRpZgorCiAtICh2b2lkKV93ZWJfdXBkYXRl
TGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZTsKIC0gKHZvaWQpX2Rlc3Ryb3lBbGxXZWJQ
bHVnaW5zOwogLSAoQk9PTClfbmVlZHNMYXlvdXQ7CiAKLS0gKHZvaWQpYXR0YWNoUm9vdExheWVy
OihDQUxheWVyKilsYXllcjsKKyNpZiBQTEFURk9STShNQUMpCistICh2b2lkKWF0dGFjaFJvb3RM
YXllcjooQ0FMYXllciAqKWxheWVyOwogLSAodm9pZClkZXRhY2hSb290TGF5ZXI7CisKIC0gKEJP
T0wpX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXI7CiAtIChCT09MKV93ZWJfaXNEcmF3aW5nSW50b0Fj
Y2VsZXJhdGVkTGF5ZXI7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKIC0gKHZvaWQpX2xh
eW91dElmTmVlZGVkOwogI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV9jaGFu
Z2VTcGVsbGluZ1RvV29yZDooTlNTdHJpbmcgKiluZXdXb3JkOworLSAodm9pZClfc3RhcnRBdXRv
c2Nyb2xsVGltZXI6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGlt
ZXI7CiAjZW5kaWYKKworLSAoV2ViUGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVy
OwogQGVuZAogCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChSZW1vdmVkQXBwS2l0U3VwZXJjbGFz
c01ldGhvZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJI
VE1MVmlld1ByaXZhdGUuaAppbmRleCBjNDBjNzZkYWE5YWNhNGViNzUzMmE0YWM0ODJmYzRhYWJk
OTZjMWQ1Li43OWVhMjcyZTM2OTU2NGMyYWM3MzM0ODZkYjdjNTFjNjFkYTM2ZWM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRl
LmgKQEAgLTM3LDcgKzM3LDYgQEAKIEBjbGFzcyBET01Eb2N1bWVudEZyYWdtZW50OwogQGNsYXNz
IERPTU5vZGU7CiBAY2xhc3MgRE9NUmFuZ2U7Ci1AY2xhc3MgV2ViUGx1Z2luQ29udHJvbGxlcjsK
IAogZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0Zh
Y3RvcjsKIGV4dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJp
bmtGYWN0b3I7CkBAIC01MywyMyArNTIsMjEgQEAgZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1M
Vmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKIC0gKHZvaWQpY2xvc2U7CiAKICNpZiAh
VEFSR0VUX09TX0lQSE9ORQorCiAvLyBNb2RpZmllciAoZmxhZ3NDaGFuZ2VkKSB0cmFja2luZyBT
UEkKICsgKHZvaWQpX3Bvc3RGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdl
ZEV2ZW50OwogLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudDsKIAogLSAodm9p
ZClfc2V0QXNpZGVTdWJ2aWV3czsKIC0gKHZvaWQpX3Jlc3RvcmVTdWJ2aWV3czsKLSNlbmRpZgog
Ci0tIChCT09MKV9pbnNpZGVBbm90aGVySFRNTFZpZXc7Ci0tICh2b2lkKV9jbGVhckxhc3RIaXRW
aWV3SWZTZWxmOwotI2lmICFUQVJHRVRfT1NfSVBIT05FCiAtICh2b2lkKV91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKIAogKyAoTlNBcnJheSAqKV9pbnNlcnRhYmxl
UGFzdGVib2FyZFR5cGVzOwogKyAoTlNTdHJpbmcgKilfZHVtbXlQYXN0ZWJvYXJkVHlwZTsKICsg
KE5TQXJyYXkgKilfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzOwogLSAodm9pZClfd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CisKICNlbmRpZgog
CiAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZDsKQEAgLTc3LDE5ICs3NCwxMSBAQCBleHRl
cm4gY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOwog
I2lmICFUQVJHRVRfT1NfSVBIT05FCiAtICh2b2lkKV9oYW5kbGVBdXRvc2Nyb2xsRm9yTW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQ7CiAjZW5kaWYKLS0gKFdlYlBsdWdpbkNvbnRyb2xsZXIg
KilfcGx1Z2luQ29udHJvbGxlcjsKIAogLy8gRklYTUU6IF9zZWxlY3Rpb25SZWN0IGlzIGRlcHJl
Y2F0ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMgaW4gcHJvdG9jb2wgV2Vi
RG9jdW1lbnRTZWxlY3Rpb24uCiAvLyBXZSBjYW4ndCByZW1vdmUgdGhpcyB5ZXQgYmVjYXVzZSBp
dCdzIHN0aWxsIGluIHVzZSBieSBNYWlsLgogLSAoTlNSZWN0KV9zZWxlY3Rpb25SZWN0OwogCi0j
aWYgIVRBUkdFVF9PU19JUEhPTkUKLS0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOihOU0V2
ZW50ICopZXZlbnQ7Ci0jZWxzZQotLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6KFdlYkV2
ZW50ICopZXZlbnQ7Ci0jZW5kaWYKLS0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXI7Ci0KIC0g
KEJPT0wpX2NhbkVkaXQ7CiAtIChCT09MKV9jYW5FZGl0UmljaGx5OwogLSAoQk9PTClfY2FuQWx0
ZXJDdXJyZW50U2VsZWN0aW9uOwpAQCAtOTcsMTIgKzg2LDE3IEBAIGV4dGVybiBjb25zdCBmbG9h
dCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7CiAtIChCT09MKV9oYXNT
ZWxlY3Rpb25Pckluc2VydGlvblBvaW50OwogLSAoQk9PTClfaXNFZGl0YWJsZTsKIAorI2lmICFU
QVJHRVRfT1NfSVBIT05FCisKIC0gKEJPT0wpX3RyYW5zcGFyZW50QmFja2dyb3VuZDsKIC0gKHZv
aWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClpc0JhY2tncm91bmRUcmFuc3BhcmVu
dDsKIAorI2VuZGlmCisKIC0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5nOwog
CiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKKwogLy8gU1BJIHVzZWQgYnkgTWFpbC4KIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYWxsIGJlIG1vdmVkIHRvIFdlYlZpZXc7IHdlIHdvbid0IGFsd2F5cyBo
YXZlIGEgV2ViSFRNTFZpZXcuCiAtIChOU0ltYWdlICopX3NlbGVjdGlvbkRyYWdnaW5nSW1hZ2U7
CkBAIC0xMTYsNiArMTEwLDcgQEAgZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1MVmlld1ByaW50
aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKIC0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQ7CiAtICh2b2lkKV9kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbDsK
IC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJk
OihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlw
ZSBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiop
c3VicmVzb3VyY2VzOworCiAjZW5kaWYKIAogI2lmIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJ
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319807</attachid>
            <date>2017-09-03 14:53:14 -0700</date>
            <delta_ts>2017-09-03 14:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176280-20170903145313.patch</filename>
            <type>text/plain</type>
            <size>137975</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggZWFjMmMxZGQzMzk5ZGQ1ZTcyMWI0YzIzOGFmZDFkMmYyZWE0NmVlNi4uYWMyNmE4ZTZmYWE4
MGY1MmMxNTIxMDI2OTdhYjI0MmMzZDZkZWFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxNy0wOS0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBUaWR5IGEgZmV3IHRoaW5ncyBpbiBsZWdhY3kgV2Vi
SFRNTFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NjI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVD
bGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKTogTWFkZSB0aGlzIGZ1bmN0aW9uIE1hYy1v
bmx5LCBiZWNhdXNlIHRoZQorICAgICAgICBtZXRob2RzIGl0IGNhbGxzIG9uIFdlYkhUTUxWaWV3
IHdlcmUgZG9pbmcgbm90aGluZyBvbiBpT1MuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29u
dGV4dDpdKTogQ2hhbmdlZCBpT1MgY29kZSBzbyB0aGF0IGl0IG5vIGxvbmdlcgorICAgICAgICBk
ZXBlbmRzIG9uIC1bV2ViSFRNTFZpZXcgX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXJdLCB3aGljaCBh
bHdheXMgcmV0dXJuZWQgWUVTIG9uIGlPUy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZp
ZXcubW06IERlZmluZSBXZWJFdmVudCBvbiBib3RoIGlPUyBhbmQgTWFjIHNvIG1vcmUgZXZlbnQg
aGFuZGxpbmcKKyAgICAgICAgY29kZSBjYW4gYmUgc2hhcmVkIHdpdGhvdXQgI2lmIGJlbG93LiBV
c2UgI2lmIFBMQVRGT1JNKE1BQykgaW5zdGVhZCBvZiAjaWYgIVBMQVRGT1JNKElPUykKKyAgICAg
ICAgaW4gYSBsb3QgbW9yZSBwbGFjZXMuIE1vdmUgbWFueSBvZiB0aGUgU1BJIGRlY2xhcmF0aW9u
cyB1cCB0byB0aGUgdG9wIGluIGFscGhhYmV0aWNhbAorICAgICAgICBvcmRlci4gUmVtb3ZlZCBh
bGwgc29ydHMgb2YgdW51c2VkIHRoaW5ncy4gTWFkZSBtb3JlIGNvZGUgYW5kIGZpZWxkcyBNYWMt
b25seSB3aGVyZQorICAgICAgICB3aGF0IHdhcyBjb21waWxlZCB3YXMgZG9pbmcgbm90aGluZyBv
biBpT1MgYW5kIGl0IG1ha2VzIHRoZSByZXN1bHRpbmcgY29kZSBzaW1wbGVyLgorICAgICAgICBV
c2UgUmV0YWluUHRyIGluc3RlYWQgb2Ygd3JpdGluZyByZXRhaW4vcmVsZWFzZSB3aGVyZXZlciBw
b3NzaWJsZS4KKyAgICAgICAgKCtbV2ViTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XSk6IE1v
dmVkIGdsb2JhbCBpbnNpZGUgdGhpcyBtZXRob2QgYW5kIHVzZWQgQysrCisgICAgICAgIGluaXRp
YWxpemF0aW9uIGZvciBpdC4gUmVtb3ZlZCB2YXJpb3VzIHVudXNlZCBtZXRob2RzIGFuZCBkZWNs
YXJhdGlvbnMgb2YgbWV0aG9kcy4KKyAgICAgICAgKHByb21pc2VkRGF0YUNsaWVudCk6IFVzZSBO
ZXZlckRlc3Ryb3llZCBpbnN0ZWFkIG9mIGp1c3QgZG9pbmcgYSAibmV3IiBvbiB0aGUgaGVhcC4K
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2ltYWdlRXhpc3RzQXRQYXRoczpdKTogRGVsZXRlZC4K
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6XSk6IFVz
ZSBSZXRhaW5QdHIgYW5kIG1vZGVybiBmb3IgbG9vcC4KKyAgICAgICAgKCtbV2ViSFRNTFZpZXcg
X2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbl0pOiBVc2UgQysr
IGluaXRpYWxpemF0aW9uLAorICAgICAgICBhbmQgcmVtb3ZlIENGUmV0YWluIG5vIGxvbmdlciBu
ZWVkZWQgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBnYXJiYWdlIGNvbGxlY3Rpb24gYW55IG1vcmUu
CisgICAgICAgICh1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KTogU2ltcGxpZmllZCB1c2luZyBb
TlNVVUlEIFVVSURdLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGxhaW5UZXh0RnJvbVBhc3Rl
Ym9hcmQ6XSk6IFNpbXBsaWZpZWQgd2l0aCBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOmFsbG93UGxhaW5UZXh0Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdKTogUmVt
b3ZlZCBjb2RlIGRlYWxpbmcgd2l0aCBlbXB0eQorICAgICAgICBtZXRob2RzIHdpbmRvd1dpbGxP
cmRlck9uU2NyZWVuOiBhbmQgd2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuOi4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3Nob3VsZERlbGV0ZVJhbmdlOl0pOiBEZWxldGVkLiBXYXMgdW51c2VkLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVz
OnRvUGFzdGVib2FyZDpjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOl0pOgorICAgICAgICBTaW1wbGlm
aWVkIHdpdGggc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nIGFuZCBtb2Rlcm4g
c3RyaW5nIGxpdGVyYWwgc3ludGF4LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc2V0TW91c2VE
b3duRXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZTphZGp1c3RWaWV3U2l6ZTpdKTogQWRkZWQuIEhlbHBlciBtZXRob2Qg
c28KKyAgICAgICAgdGhlIG5leHQgdGhyZWUgbWV0aGhvZHMgY2FuIGJlIHN1cGVyLXNpbXBsZS4g
VXNlZCBSZXRhaW5QdHIgYW5kIGEgbW9kZXJuIGZvciBsb29wIHRvIG1ha2UKKyAgICAgICAgdGhp
cyBtZXRob2Qgc2ltcGxlciB0aGFuIHRoZSBmdW5jdGlvbnMgaXQgcmVwbGFjZWQuIEFsc28gZ290
IHJpZCBvZiB0aGUgZW51bWVyYXRpbmdTdWJ2aWV3cworICAgICAgICBkZWJ1ZyBmbGFnOyB3ZSBo
YXZlbid0IHVzZWQgaXQgZm9yIHllYXJzIGFuZCBpdCdzIG5vdCBjbGVhcmx5IGhlbHBmdWwuCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXSk6IFR1
cm5lZCBpbnRvIGEgb25lLWxpbmVyIHdpdGggdGhlIGFib3ZlLgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXSk6IERpdHRvLgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdT
aXplXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX21ha2VQbHVnaW5TdWJ2
aWV3c1BlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0Ol0pOiBNb3ZlZCBmcm9tIHRoZQorICAgICAg
ICBXZWJJbnRlcm5hbCBjYXRlZ29yeSB0byB0aGUgV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwgY2F0
ZWdvcnkgc28gaXQgY2FuIGJlIGNhbGxlZCBieQorICAgICAgICB0d28gYWRkaXRpb25hbCBtZXRo
b2RzIGluIHRoZSBXZWJQcml2YXRlIGNhdGVnb3J5IGFuZCBzdGlsbCBiZSBjYWxsZWQgYnkgdGhl
IHR3bworICAgICAgICBtZXRob2RzIGluIHRoZSBXZWJJbnRlcm5hbCBjYXRlZ29yeSB0aGF0IHdl
cmUgYWxyZWFkeSB1c2luZyBpdC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZGlkQWRkU3Vidmll
dzpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2luc2lkZUFub3RoZXJIVE1M
Vmlld10pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfY2xlYXJMYXN0SGl0Vmll
d0lmU2VsZl0pOiBEZWxldGVkLiBJbmxpbmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgb25l
CisgICAgICAgIHBsYWNlIHRoaXMgd2FzIGNhbGxlZCwgdGhlIGNsb3NlIG1ldGhvZC4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgX3NldFRvb2xUaXA6XSk6IFNpbXBsaWZpZWQgd2l0aCBSZXRhaW5Q
dHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHBhc3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBl
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2F1dG9zY3JvbGxdKTogU2ltcGxp
ZmllZCBieSBtYWtpbmcgdGhpcyBNYWMtb25seS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hh
c0hUTUxEb2N1bWVudF0pOiBEZWxldGVkLiBUaGUgb25lIGNhbGxlciB3YXMgcmVtb3ZlZCBhIGxv
bmcgdGltZSBhZ28uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF93ZWJfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRUeXBlOmltYWdlTUlNRVR5cGU6XSk6CisgICAgICAg
IEFkZGVkIGhlbHBlciBtZXRob2QgdG8gbWFrZSB0aGUgb25lIGJlbG93IHNpbXBsZXIuCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6Zm9yVHlw
ZTppbkNvbnRleHQ6c3VicmVzb3VyY2VzOl0pOgorICAgICAgICBDb21wYXJlZCBwYXN0ZWJvYXJk
IHR5cGUgc3RyaW5ncyB1c2luZyBpc0VxdWFsVG9TdHJpbmc6IHJhdGhlciB0aGFuIHVzaW5nID09
IHNpbmNlCisgICAgICAgIHdlIHdhbnQgdG8gYWN0dWFsbHkgY29tcGFyZSB0aGUgc3RyaW5nIGNv
bnRlbnRzLiBBbHNvIHVwZGF0ZWQgdG8gdXNlIG1vZGVybiBmb3IgbG9vcCwKKyAgICAgICAgcmVu
YW1lZCBhIGxvY2FsIHZhcmlhYmxlIGZyb20gInMiIHRvICJsb2NhbFN1YnJlc291cmNlcyIsIGFu
ZCBmYWN0b3JlZCBvdXQgdGhlIGhhbmRsaW5nCisgICAgICAgIG9mIHRocmVlIGltYWdlIHR5cGVz
IHRvIHVzZSB0aGUgaGVscGVyIG1ldGhvZCBhYm92ZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luc10pOiBSZXdyaXRlIHVzaW5nIHRo
ZQorICAgICAgICBfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3Rvcjp3aXRoT2Jq
ZWN0OiBtZXRob2QuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9yZXN1bWVOdWxsRXZlbnRzRm9y
QWxsTmV0c2NhcGVQbHVnaW5zXSk6IERpdHRvLgorICAgICAgICAoLVtOU1ZpZXcgX3dlYl9hZGRE
ZXNjZW5kZW50V2ViSFRNTFZpZXdzVG9BcnJheTpdKTogRml4ZWQgc3BlbGxpbmcgdG8gdXNlIHRo
ZSBhZGplY3RpdmUKKyAgICAgICAgImRlc2NlbmRlbnQiIHJhdGhlciB0aGFuIHRoZSBub3VuICJk
ZXNjZW5kYW50Ii4gQWxzbyByZW1vdmVkIE1hYy1vbmx5IG9wdGltaXphdGlvbiB0bworICAgICAg
ICBub3QgY2FsbCB0aGUgLVtOU1ZpZXcgc3Vidmlld3NdIG1ldGhvZCB0byBtYWtlIHRoaXMgaWRl
bnRpY2FsIG9uIGJvdGggcGxhdGZvcm1zIGFuZCB1c2VkCisgICAgICAgIGEgbW9kZXJuIGZvciBs
b29wLgorICAgICAgICAoLVtOU011dGFibGVEaWN0aW9uYXJ5IF93ZWJfc2V0T2JqZWN0SWZOb3RO
aWw6Zm9yS2V5Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhY2NlcHRzRmly
c3RSZXNwb25kZXJdKTogUmVkdWNlZCBhbW91bnQgb2YgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBi
eQorICAgICAgICBkZWZpbmluZyBXZWJFdmVudE1vdXNlRG93biBhcyBhIHN5bm9ueW0gZm9yIE5T
RXZlbnRUeXBlTGVmdE1vdXNlRG93biBvbiBNYWMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFk
ZFdpbmRvd09ic2VydmVyc10pOiBSZW1vdmVkIGNvZGUgZGVhbGluZyB3aXRoIGVtcHR5CisgICAg
ICAgIG1ldGhvZHMgd2luZG93V2lsbE9yZGVyT25TY3JlZW46IGFuZCB3aW5kb3dXaWxsT3JkZXJP
ZmZTY3JlZW46LgorICAgICAgICAoLVtXZWJIVE1MVmlldyB3aWxsUmVtb3ZlU3VidmlldzpdKTog
UmVtb3ZlZCB0aGUgZW51bWVyYXRpbmdTdWJ2aWV3cyBjaGVjay4KKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgZHJhd1NpbmdsZVJlY3Q6XSk6IFJlYXJyYW5nZWQgdGhpcyBtZXRob2QgdG8gbWFrZSBp
dCBjbGVhcmVyIHRoYXQgbW9zdAorICAgICAgICBvZiBpdCBpcyBNYWMtb25seS4KKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgd2luZG93V2lsbE9yZGVyT25TY3JlZW46XSk6IERlbGV0ZWQuIEFsbCB0
aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgbWV0aG9kIGRpZCB3YXMgY2FsbCBp
dHNlbGYgb24gdGhlIG1haW4gdGhyZWFkLCBhbmQgZG8gbm90aGluZyBpZiBjYWxsZWQgb24gbWFp
biB0aHJlYWQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdpbmRvd1dpbGxPcmRlck9mZlNjcmVl
bjpdKTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pc1NlbGVjdGlv
bkV2ZW50Ol0pOiBNZXJnZWQgbWFjT1MgYW5kIGlPUyB2ZXJzaW9ucy4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdKTogUmVtb3ZlZCBpT1Mtc3BlY2lmaWMgY29k
ZSBpbiB0aGUgbWFjT1Mtc3BlY2lmaWMKKyAgICAgICAgaGFsZiBvZiB0aGlzIG1ldGhvZC4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0RGF0YVNvdXJjZTpdKTogU2ltcGxpZmllZCB1c2luZyBS
ZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZXRQcmludGluZzptaW5pbXVtUGFn
ZUxvZ2ljYWxXaWR0aDpsb2dpY2FsSGVpZ2h0Om9yaWdpbmFsUGFnZVdpZHRoOm9yaWdpbmFsUGFn
ZUhlaWdodDptYXhpbXVtU2hyaW5rUmF0aW86YWRqdXN0Vmlld1NpemU6cGFnaW5hdGVTY3JlZW5D
b250ZW50Ol0pOgorICAgICAgICBTaW1wbGlmaWVkIHVzaW5nIGEgbW9kZXJuIGZvciBsb29wIGFu
ZCBSZXRhaW5QdHIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGtub3dzUGFnZVJhbmdlOl0pOiBT
aW1wbGlmaWVkIHVzaW5nIFJldGFpblB0ci4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcga2V5RG93
bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3Rpb25TdGFydEZvbnRB
dHRyaWJ1dGVzQXNSVEZdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHBlcmZvcm1L
ZXlFcXVpdmFsZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3N0eWxlRm9y
QXR0cmlidXRlQ2hhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY29tcGxl
dGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2luZG93Q2hhbmdlZEtleVN0
YXRlXSk6IFJlbW92ZWQgaU9TLXNwZWNpZmljIGNvZGUgc2luY2UgdGhpcyBtZXRob2QgaXMKKyAg
ICAgICAgbm93IG1hY09TLW9ubHkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3Rpb25D
aGFuZ2VkXSk6IFJlbW92ZWQgY2FsbCB0byBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2Vy
IG9uCisgICAgICAgIGlPUyBzaW5jZSB0aGF0IGlzIG5vdyBtYWNPUy1vbmx5LgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6XSk6IE1vdmVkIHRoaXMg
aW50byBhbiBpbnRlcm5hbCBjYXRlZ29yeSBpbnN0ZWFkIG9mCisgICAgICAgIGEgcHJpdmF0ZSBv
bmUgYmVjYXVzZSBpdCBpcyBub3QgdXNlZCBvciBuZWVkZWQgb3V0c2lkZSBXZWJLaXQuIEFsc28g
bWFkZSBpdCBtYWNPUy1vbmx5CisgICAgICAgIGFuZCByZW9yZ2FuaXplZCB0byB1c2UgZWFybHkg
cmV0dXJuLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc3RvcEF1dG9zY3JvbGxUaW1lcl0pOiBN
b3ZlZCBpbnRvIGludGVybmFsIGNhdGVnb3J5LiBJdCByZW1haW5zIGEgbm8tb3AKKyAgICAgICAg
b24gaU9TLCBidXQga2VwdCB0aGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvICNpZiBhdCBldmVy
eSBjYWxsIHNpdGUuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9wbHVnaW5Db250cm9sbGVyXSk6
IE1vdmVkIGludG8gaW50ZXJuYWwgY2F0ZWdvcnkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHZh
bGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHRdKTogU2ltcGxpZmllZCBieSByZW1vdmluZyBDRlJl
dGFpbiB0aGF0IHdhcworICAgICAgICB0aGVyZSBvbmx5IGZvciBHQywgdXNpbmcgQysrIGluaXRp
YWxpemF0aW9uLCByZW1vdmluZyBvYnNvbGV0ZSBjb21tZW50LgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSk6IE1hZGUgdGhpcyBtYWNPUy1v
bmx5IGFuZCByZW1vdmVkCisgICAgICAgIHBlY3VsaWFyIGlPUy1vbmx5IGNvbW1lbnQuCisgICAg
ICAgICgrW05TVVJMIF93ZWJfdW5pcXVlV2ViRGF0YVVSTF0pOiBTaW1wbGlmaWVkIHVzaW5nIFtO
U1VVSUQgVVVJRF0uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaDog
UmVtb3ZlZCB1bnVzZWQgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgbWV0aG9kLgorICAgICAg
ICBNYWRlIGF0dGFjaFJvb3RMYXllcjosIGRldGFjaFJvb3RMYXllciwgX3dlYl9pc0RyYXdpbmdJ
bnRvTGF5ZXIsCisgICAgICAgIF93ZWJfaXNEcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIgYWxs
IG1hY09TLW9ubHkuIE1vdmVkIF9zdGFydEF1dG9zY3JvbGxUaW1lcjosCisgICAgICAgIF9zdG9w
QXV0b3Njcm9sbFRpbWVyLCBhbmQgX3BsdWdpbkNvbnRyb2xsZXIgaGVyZSBmcm9tIFNQSSBoZWFk
ZXIgc2luY2UgdGhleSBhcmVuJ3QKKyAgICAgICAgbmVlZGVkIG9yIHVzZWQgYXMgU1BJLiBBbmQg
bWFkZSBfc3RhcnRBdXRvc2Nyb2xsVGltZXIgbWFjT1Mtb25seS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXdQcml2YXRlLmg6IFJlbW92ZWQgdW5uZWVkZWQgYW5kIHVudXNlZCBTUEk6
IF9pbnNpZGVBbm90aGVySFRNTFZpZXcsCisgICAgICAgIF9jbGVhckxhc3RIaXRWaWV3SWZTZWxm
LCBfcGx1Z2luQ29udHJvbGxlciwgX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOiwgYW5kIF9zdG9wQXV0
b3Njcm9sbFRpbWVyLgorICAgICAgICBNYWRlIF90cmFuc3BhcmVudEJhY2tncm91bmQgYW5kIF9z
ZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6IG1hY09TLW9ubHkuIFRoZXNlIHByb2JhYmx5CisgICAg
ICAgIGFyZSBub3QgbmVlZGVkIG9uIG1hY09TIGVpdGhlciwgYnV0IEkgd2Fzbid0IGFibGUgdG8g
bWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBjb3VsZCByZW1vdmUKKyAgICAgICAgdGhlbSBhdCB0aGlz
IHRpbWUuCisKIDIwMTctMDktMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZW1vdmUgQ2FudmFzUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBiMTcwYWI5MzQ1
MThhYjhhYTZhMDllMDg1MGI3OTliYTA4Y2NlM2E3Li4xY2IyNDgwOGZiNTlhNDJiZTFmOGE5NGYz
MWYxZDljYzM0MzE5YzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC05MDYsNiArOTA2LDEwIEBA
IGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRQYWludEVudGlyZUNvbnRlbnRzKCkgY29uc3QK
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiBm
cmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKKyNpZiAhUExBVEZPUk0oTUFD
KQorICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGdyYXBoaWNzTGF5
ZXIpOworI2Vsc2UKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1Zp
ZXcgKmRvY3VtZW50VmlldyA9IFtba2l0KCZmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwpAQCAtOTIxLDYgKzkyNSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3Jh
cGhpY3NMYXllcihGcmFtZSYgZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgZWxzZQog
ICAgICAgICBbd2ViSFRNTFZpZXcgZGV0YWNoUm9vdExheWVyXTsKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hW
aWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGU3ZmY0ZDBjN2VhMTU0
NTcwNjRhMzM4MTI5NjVhOWQ1MmJlMDAyZTAuLjhkN2ZjZWIxMDkxZjkzZTMzODIyNTM2ZmNmMTEw
ZGI0ZjZmYTY4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtNTU5LDYgKzU1OSw3IEBAIC0gKFdlYkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQog
fQogCiAjaWYgUExBVEZPUk0oSU9TKQorCiAtIChCT09MKV9pc0NvbW1pdHRpbmcKIHsKICAgICBy
ZXR1cm4gX3ByaXZhdGUtPmlzQ29tbWl0dGluZzsKQEAgLTU2OCw2ICs1NjksNyBAQCAtICh2b2lk
KV9zZXRJc0NvbW1pdHRpbmc6KEJPT0wpdmFsdWUKIHsKICAgICBfcHJpdmF0ZS0+aXNDb21taXR0
aW5nID0gdmFsdWU7CiB9CisKICNlbmRpZgogCiAtIChOU0FycmF5ICopX25vZGVzRnJvbUxpc3Q6
KFZlY3RvcjxOb2RlKj4gKilub2Rlc1ZlY3RvcgpAQCAtNTkxLDcgKzU5Myw3IEBAIC0gKE5TU3Ry
aW5nICopX3N0cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiAKIC0gKFBhaW50QmVoYXZp
b3IpX3BhaW50QmVoYXZpb3JGb3JEZXN0aW5hdGlvbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250
ZXh0CiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gLWN1
cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuIHJldHVybnMgWUVTIGZvciBiaXRtYXAgY29udGV4
dHMuCiAgICAgQk9PTCBpc1ByaW50aW5nID0gIVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dERyYXdpbmdUb1NjcmVlbl07CiAgICAgaWYgKGlzUHJpbnRpbmcpCkBAIC02MDEsMTQgKzYw
MywxNSBAQCAtIChQYWludEJlaGF2aW9yKV9wYWludEJlaGF2aW9yRm9yRGVzdGluYXRpb25Db250
ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGNvbnRl
eHQpICE9IGtDR0NvbnRleHRUeXBlQml0bWFwKQogICAgICAgICByZXR1cm4gUGFpbnRCZWhhdmlv
ck5vcm1hbDsKIAotICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgaW50byBhIGJpdG1hcCwgd2UgbWln
aHQgYmUgc25hcHNob3R0aW5nLCBvciBkcmF3aW5nIGludG8gYSBsYXllci1iYWNrZWQgdmlldy4K
LSAgICBpZiAoV2ViSFRNTFZpZXcgKmh0bWxEb2N1bWVudFZpZXcgPSBbc2VsZiBfd2ViSFRNTERv
Y3VtZW50Vmlld10pIHsKKyAgICAvLyBJZiB3ZSdyZSBkcmF3aW5nIGludG8gYSBiaXRtYXAsIHdl
IGNvdWxkIGJlIHNuYXBzaG90dGluZyBvciBkcmF3aW5nIGludG8gYSBsYXllci1iYWNrZWQgdmll
dy4KKyAgICBpZiAoV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IFtzZWxmIF93ZWJIVE1MRG9j
dW1lbnRWaWV3XSkgewogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgaWYgKFtbaHRtbERvY3Vt
ZW50VmlldyB3aW5kb3ddIGlzSW5TbmFwc2hvdHRpbmdQYWludF0pCi0gICAgICAgICAgICByZXR1
cm4gUGFpbnRCZWhhdmlvclNuYXBzaG90dGluZzsKKyAgICAgICAgcmV0dXJuIFtbZG9jdW1lbnRW
aWV3IHdpbmRvd10gaXNJblNuYXBzaG90dGluZ1BhaW50XSA/IFBhaW50QmVoYXZpb3JTbmFwc2hv
dHRpbmcgOiBQYWludEJlaGF2aW9yTm9ybWFsOwogI2VuZGlmCi0gICAgICAgIGlmIChbaHRtbERv
Y3VtZW50VmlldyBfd2ViX2lzRHJhd2luZ0ludG9MYXllcl0pCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBfd2ViX2lzRHJhd2luZ0ludG9MYXllcl0pCiAgICAg
ICAgICAgICByZXR1cm4gUGFpbnRCZWhhdmlvck5vcm1hbDsKKyNlbmRpZgogICAgIH0KICAgICAK
ICAgICByZXR1cm4gUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyB8IFBhaW50
QmVoYXZpb3JTbmFwc2hvdHRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQppbmRleCA4ZDBkNGQ5MjU0ODBjYjgzYzIwYWU4MTQ1NTQ1NDIzMDA3
NGE2OGRiLi4yNzRhMTY4NzA1NzQ1NDQxNGFiOTI5NzVhNWMwNDhjNjBlZTVhNThhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2LCAyMDA3IEdyYWhh
bSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NzIsNiArNzIsNyBAQAogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
VUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1N0eWxlRGVj
bGFyYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1hZ2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaD4KQEAgLTE0MSw3ICsxNDIsNyBAQAogI2ltcG9y
dCA8d3RmL1J1bkxvb3AuaD4KICNpbXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICNpbXBvcnQgIldlYk5TRXZlbnRFeHRy
YXMuaCIKICNpbXBvcnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgogI2ltcG9ydCA8QXBwS2l0
L05TQWNjZXNzaWJpbGl0eS5oPgpAQCAtMTUwLDggKzE1MSw2IEBACiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU01lbnVTUEkuaD4KICNlbmRpZgogCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmUuaD4KLQogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvS2V5RXZlbnRDb2Rlc0lPUy5oPgpAQCAtMTY4LDEzICsxNjcsNTQg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKICNp
ZiBQTEFURk9STShJT1MpCisKIEBpbnRlcmZhY2UgTlNPYmplY3QgKEFjY2Vzc2liaWxpdHkpCiAt
IChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludDsKIC0gKGlkKWFjY2Vzc2li
aWxpdHlGb2N1c2VkVUlFbGVtZW50OwogQGVuZAorCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQorCitAY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0OworCitA
aW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKCkKKy0gKEJPT0wpaXNTcGVha2luZzsKKy0gKHZvaWQp
c3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9pZClzdG9wU3BlYWtpbmc6KGlk
KXNlbmRlcjsKK0BlbmQKKworQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkKKy0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9j
dW1lbnQ6KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rp
b25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CitAZW5k
CisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKCkKKy0gKEJPT0wpaGFuZGxlTW91c2VFdmVudDooTlNF
dmVudCAqKWV2ZW50OworLSAoQk9PTCl3YW50c1RvSGFuZGxlTW91c2VFdmVudHM7CitAZW5kCisK
K0BpbnRlcmZhY2UgTlNSZXNwb25kZXIgKCkKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0
Q29udGV4dDsKK0BlbmQKKworQGludGVyZmFjZSBOU1ZpZXcgKCkKKy0gKEJPT0wpX2RyYXduQnlB
bmNlc3RvcjsKKy0gKHZvaWQpX2ludmFsaWRhdGVHU3RhdGVzRm9yVHJlZTsKKy0gKHZvaWQpX3dp
bmRvd0NoYW5nZWRLZXlTdGF0ZTsKK0BlbmQKKworQGludGVyZmFjZSBOU1dpbmRvdyAoKQorLSAo
aWQpX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmc7CitAZW5kCisKK0BpbnRlcmZhY2Ug
TlNXaW5kb3cgKFdlYkJvcmRlclZpZXdBY2Nlc3MpCistIChOU1ZpZXcgKilfd2ViX2JvcmRlclZp
ZXc7CitAZW5kCisKK3VzaW5nIFdlYkV2ZW50ID0gTlNFdmVudDsKK2NvbnN0IGF1dG8gV2ViRXZl
bnRNb3VzZURvd24gPSBOU0V2ZW50VHlwZUxlZnRNb3VzZURvd247CisKIEBpbnRlcmZhY2UgV2Vi
TWVudVRhcmdldCA6IE5TT2JqZWN0IHsKICAgICBXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xs
ZXIqIF9tZW51Q29udHJvbGxlcjsKIH0KQEAgLTU1MiwxNCArNTkyLDExIEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPE5TSW50ZWdlcj4gdG9UYWcoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQogICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBXZWJNZW51VGFyZ2V0KiB0YXJnZXQ7
Ci0KIEBpbXBsZW1lbnRhdGlvbiBXZWJNZW51VGFyZ2V0CiAKLSsgKFdlYk1lbnVUYXJnZXQqKXNo
YXJlZE1lbnVUYXJnZXQKKysgKFdlYk1lbnVUYXJnZXQgKilzaGFyZWRNZW51VGFyZ2V0CiB7Ci0g
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IFtbV2ViTWVudVRhcmdldCBhbGxvY10g
aW5pdF07CisgICAgc3RhdGljIFdlYk1lbnVUYXJnZXQgKnRhcmdldCA9IFtbV2ViTWVudVRhcmdl
dCBhbGxvY10gaW5pdF07CiAgICAgcmV0dXJuIHRhcmdldDsKIH0KIApAQCAtNTgxLDE1ICs2MTgs
MTMgQEAgLSAodm9pZClmb3J3YXJkQ29udGV4dE1lbnVBY3Rpb246KGlkKXNlbmRlcgogCiBAZW5k
CiAKLUBpbnRlcmZhY2UgTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3MpCi0tIChOU1ZpZXcqKV93
ZWJfYm9yZGVyVmlldzsKLUBlbmQKK0BpbXBsZW1lbnRhdGlvbiBOU1dpbmRvdyAoV2ViQm9yZGVy
Vmlld0FjY2VzcykKIAotQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNz
KQotLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZpZXcKKy0gKE5TVmlldyAqKV93ZWJfYm9yZGVyVmll
dwogewogICAgIHJldHVybiBfYm9yZGVyVmlldzsKIH0KKwogQGVuZAogCiBAaW50ZXJmYWNlIFdl
YlJlc3BvbmRlckNoYWluU2luayA6IE5TUmVzcG9uZGVyIHsKQEAgLTYwNSwxNyArNjQwLDIwIEBA
IEBpbnRlcmZhY2UgV2ViTGF5ZXJIb3N0aW5nRmxpcHBlZFZpZXcgOiBOU1ZpZXcKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdlYkxheWVySG9zdGluZ0ZsaXBwZWRWaWV3CisKIC0gKEJPT0wpaXNG
bGlwcGVkCiB7CiAgICAgcmV0dXJuIFlFUzsKIH0KKwogQGVuZAogCiBAaW50ZXJmYWNlIFdlYlJv
b3RMYXllciA6IENBTGF5ZXIKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlJvb3RMYXllcgot
LSAodm9pZClyZW5kZXJJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKKworLSAodm9pZClyZW5k
ZXJJbkNvbnRleHQ6KENHQ29udGV4dFJlZilncmFwaGljc0NvbnRleHQKIHsKICAgICAvLyBBcHBL
aXQgY2FsbHMgLVtDQUxheWVyIHJlbmRlckluQ29udGV4dDpdIHRvIHJlbmRlciBsYXllci1iYWNr
ZWQgdmlld3MKICAgICAvLyBpbnRvIGJpdG1hcCBjb250ZXh0cywgYnV0IHJlbmRlckluQ29udGV4
dDogZG9lc24ndCBjYXB0dXJlIG1hc2sgbGF5ZXJzCkBAIC02MjMsNiArNjYxLDcgQEAgLSAodm9p
ZClyZW5kZXJJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKICAgICAvLyBjb250ZW50cyB3aWxs
IGhhdmUgYWxyZWFkeSBiZWVuIHJlbmRlcmVkIGJ5IGRyYXdSZWN0Oiwgd2UgY2FuIHNhZmVseSBt
YWtlCiAgICAgLy8gdGhpcyBhIE5PT1AuCiB9CisKIEBlbmQKIAogLy8gaWYgWUVTLCBkbyB0aGUg
c3RhbmRhcmQgTlNWaWV3IGhpdCB0ZXN0ICh3aGljaCBjYW4ndCBnaXZlIHRoZSByaWdodCByZXN1
bHQgd2hlbiBIVE1MIG92ZXJsYXBzIGEgdmlldykKQEAgLTYzMSwxNiArNjcwLDggQEAgc3RhdGlj
IEJPT0wgZm9yY2VOU1ZpZXdIaXRUZXN0OwogLy8gaWYgWUVTLCBkbyB0aGUgInRvcCBXZWJIVE1M
VmlldyIgaGl0IHRlc3QgKHdoaWNoIHdlJ2QgbGlrZSB0byBkbyBhbGwgdGhlIHRpbWUgYnV0IGNh
bid0IGJlY2F1c2Ugb2YgSmF2YSByZXF1aXJlbWVudHMgW3NlZSBidWcgNDM0OTcyMV0pCiBzdGF0
aWMgQk9PTCBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdDsKIAotQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uICgpCi0tIChCT09MKWlzU3BlYWtpbmc7Ci0tICh2b2lkKXN0b3BTcGVha2luZzooaWQpc2Vu
ZGVyOwotQGVuZAotCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLQogc3RhdGljIFdlYkhUTUxW
aWV3ICpsYXN0SGl0VmlldzsKIAotI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgYm9vbCBuZWVk
c0N1cnNvclJlY3RzU3VwcG9ydEF0UG9pbnQoTlNXaW5kb3cqIHdpbmRvdywgTlNQb2ludCBwb2lu
dCkKIHsKICAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7CkBAIC02NjEsNyArNjkyLDYgQEAg
c3RhdGljIGJvb2wgbmVlZHNDdXJzb3JSZWN0c1N1cHBvcnRBdFBvaW50KE5TV2luZG93KiB3aW5k
b3csIE5TUG9pbnQgcG9pbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQogc3RhdGljIElNUCBv
bGRTZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uSU1QOwogCiAvLyBPdmVycmlkaW5nIGFuIGludGVy
bmFsIG1ldGhvZCBpcyBhIGhhY2s7IDxyZGFyOi8vcHJvYmxlbS83NjYyOTg3PiB0cmFja3MgZmlu
ZGluZyBhIGJldHRlciBzb2x1dGlvbi4KQEAgLTY3MSwxOCArNzAxLDEyIEBAIHN0YXRpYyB2b2lk
IHNldEN1cnNvcihOU1dpbmRvdyAqc2VsZiwgU0VMIGNtZCwgTlNQb2ludCBwb2ludCkKICAgICAg
ICAgd3RmQ2FsbElNUDxpZD4ob2xkU2V0Q3Vyc29yRm9yTW91c2VMb2NhdGlvbklNUCwgc2VsZiwg
Y21kLCBwb2ludCk7CiB9CiAKLSNlbmRpZgotCi1leHRlcm4gIkMiIHsKLQotLy8gTmVlZCB0byBk
ZWNsYXJlIHRoZXNlIGF0dHJpYnV0ZSBuYW1lcyBiZWNhdXNlIEFwcEtpdCBleHBvcnRzIHRoZW0g
YnV0IGRvZXMgbm90IG1ha2UgdGhlbSBhdmFpbGFibGUgaW4gQVBJIG9yIFNQSSBoZWFkZXJzLgor
Ly8gRklYTUU6IEdldCB0aGlzIGZyb20gPEFwcEtpdC9OU1RleHRJbnB1dENvbnRleHRfUHJpdmF0
ZS5oPiB1c2luZyBhIE5TVGV4dElucHV0Q29udGV4dFNQSS5oIGhlYWRlciBpbnN0ZWFkIG9mIGRl
ZmluaW5nIGl0IGhlcmUuCitleHRlcm4gIkMiIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxhY2Vt
ZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOwogCi1leHRlcm4gTlNTdHJpbmcgKk5TTWFya2VkQ2xhdXNl
U2VnbWVudEF0dHJpYnV0ZU5hbWU7Ci1leHRlcm4gTlNTdHJpbmcgKk5TVGV4dElucHV0UmVwbGFj
ZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi19Ci0K
LUBpbnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdEZXRhaWxzKQorQGludGVyZmFjZSBOU1ZpZXcg
KCkKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6
KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNp
YmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmll
dzsKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wp
bmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZpc1JlY3Q7CiAjaWYgUExBVEZPUk0oTUFD
KQpAQCAtNjk0LDE4ICs3MTgsMTMgQEAgLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2Ug
ZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdAogLSAodm9pZClf
cmVjdXJzaXZlOihCT09MKXJlY3Vyc2VYIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1Jl
Y3QpZGlzcGxheVJlY3QgaW5HcmFwaGljc0NvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopZ3Jh
cGhpY3NDb250ZXh0IENHQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eCB0b3BWaWV3OihCT09MKWlz
VG9wVmlldyBzaG91bGRDaGFuZ2VGb250UmVmZXJlbmNlQ29sb3I6KEJPT0wpc2hvdWxkQ2hhbmdl
Rm9udFJlZmVyZW5jZUNvbG9yOwogI2VuZGlmCiAjZW5kaWYKLS0gKE5TUmVjdClfZGlydHlSZWN0
OwogLSAodm9pZClfc2V0RHJhd3NPd25EZXNjZW5kYW50czooQk9PTClkcmF3c093bkRlc2NlbmRh
bnRzOwotLSAoQk9PTClfZHJhd25CeUFuY2VzdG9yOwotLSAodm9pZClfaW52YWxpZGF0ZUdTdGF0
ZXNGb3JUcmVlOwotLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3Jz
OwotLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOwogI2lmIFBMQVRGT1JNKElPUykKIC0g
KHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyOwogI2VuZGlmCiBA
ZW5kCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKIAogQGludGVyZmFj
ZSBOU1ZpZXcgKFdlYlNldE5lZWRzRGlzcGxheUluUmVjdCkKIC0gKHZvaWQpX3dlYl9zZXROZWVk
c0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClpbnZhbGlkUmVjdDsKQEAgLTc1MCwzMiArNzY5LDE1IEBA
IC0gKHZvaWQpX3dlYl9zZXROZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClpbnZhbGlkUmVjdAog
CiBAZW5kCiAKLUBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFp
bHMpCi0tICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKLUBlbmQKLQotQGlu
dGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQotLSAoaWQpX25ld0ZpcnN0UmVz
cG9uZGVyQWZ0ZXJSZXNpZ25pbmc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3Ry
aW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQotLSAoRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudDooRE9NRG9jdW1l
bnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Qgc3Vi
cmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKLUBlbmQKLQotQGludGVyZmFjZSBO
U1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxzKQotLSAodm9pZClsZWFybldv
cmQ6KE5TU3RyaW5nICopd29yZDsKLUBlbmQKLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdN
aW5pbXVtU2hyaW5rRmFjdG9yID0gUHJpbnRDb250ZXh0OjptaW5pbXVtU2hyaW5rRmFjdG9yKCk7
CiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgPSBQ
cmludENvbnRleHQ6Om1heGltdW1TaHJpbmtGYWN0b3IoKTsKIAotI2RlZmluZSBBVVRPU0NST0xM
X0lOVEVSVkFMICAgICAgICAgICAgIDAuMWYKLQogLy8gQW55IG5vbi16ZXJvIHZhbHVlIHdpbGwg
ZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVjb2duaXphYmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcg
c29tZSBkYXkuCiAjZGVmaW5lIFRSQUNLSU5HX1JFQ1RfVEFHIDB4QkFERkFDRQogCi0vLyBGSVhN
RTogVGhpcyBjb25zdGFudCBpcyBjb3BpZWQgZnJvbSBBcHBLaXQncyBfTlhTbWFydFBhc3RlIGNv
bnN0YW50LgorLy8gRklYTUU6IEZyb20gQXBwS2l0J3MgX05YU21hcnRQYXN0ZSBjb25zdGFudC4g
R2V0IHdpdGggYW4gU1BJIGhlYWRlciBpbnN0ZWFkPwogI2RlZmluZSBXZWJTbWFydFBhc3RlUGJv
YXJkVHlwZSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIgogCiAjZGVmaW5lIFNU
QU5EQVJEX1dFSUdIVCA1CkBAIC03ODUsNyArNzg3LDggQEAgY29uc3QgZmxvYXQgX1dlYkhUTUxW
aWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yID0gUHJpbnRDb250ZXh0OjptYXhpbXVtU2hy
aW4KIC8vIEZha2UgVVJMIHNjaGVtZS4KICNkZWZpbmUgV2ViRGF0YVByb3RvY29sU2NoZW1lIEAi
d2Via2l0LWZha2UtdXJsIgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIC8vIDxyZGFyOi8vcHJvYmxlbS80OTg1NTI0PiBSZWZlcmVuY2VzIHRvIFdlYkNvcmVTY3Jv
bGxWaWV3IGFzIGEgc3VidmlldyBvZiBhIFdlYkhUTUxWaWV3IG1heSBiZSBwcmVzZW50CiAvLyBp
biBzb21lIE5JQiBmaWxlcywgc28gTlNVbmFyY2hpdmVyIG11c3QgYmUgc3RpbGwgYWJsZSB0byBs
b29rIHVwIHRoaXMgbm93LXVudXNlZCBjbGFzcy4KIEBpbnRlcmZhY2UgV2ViQ29yZVNjcm9sbFZp
ZXcgOiBOU1Njcm9sbFZpZXcKQEAgLTc5Nyw5ICs4MDAsMTAgQEAgQGVuZAogLy8gV2UgbmVlZCB0
aGlzIHRvIGJlIGFibGUgdG8gc2FmZWx5IHJlZmVyZW5jZSB0aGUgQ2FjaGVkSW1hZ2UgZm9yIHRo
ZSBwcm9taXNlZCBkcmFnIGRhdGEKIHN0YXRpYyBDYWNoZWRJbWFnZUNsaWVudCYgcHJvbWlzZWRE
YXRhQ2xpZW50KCkKIHsKLSAgICBzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQqIHN0YXRpY0NhY2hl
ZFJlc291cmNlQ2xpZW50ID0gbmV3IENhY2hlZEltYWdlQ2xpZW50OwotICAgIHJldHVybiAqc3Rh
dGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hl
ZEltYWdlQ2xpZW50PiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAgICByZXR1cm4gc3Rh
dGljQ2FjaGVkUmVzb3VyY2VDbGllbnQuZ2V0KCk7CiB9CisKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQpAQCAtODA3LDggKzgxMSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYk1h
cmtlZFRleHRVcGRhdGVkTm90aWZpY2F0aW9uID0gQCJXZWJNYXJrZWRUZXh0VXBkYXRlCiAjZW5k
aWYKIAogQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0j
aWYgIVBMQVRGT1JNKElPUykKLS0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAq
KXBhdGhzOworI2lmIFBMQVRGT1JNKE1BQykKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGlu
Q29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxh
aW5UZXh0OwogLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQ7CiAtICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OwpA
QCAtODIxLDI2ICs4MjQsMjYgQEAgLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURv
Y3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZToKIC0gKEJPT0wpX3No
b3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFu
Z2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CiAtIChC
T09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZl
bkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CiAtIChET01SYW5nZSAqKV9zZWxl
Y3RlZFJhbmdlOwotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAtIChOU1ZpZXcgKilfaGl0
Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKV93cml0ZVNlbGVjdGlvbldp
dGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3Ry
aW5nICopYXR0cmlidXRlZFN0cmluZzsKICNlbmRpZgogLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRS
YW5nZTsKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5T
RXZlbnQgKilldmVudDsKLSNlbHNlCiAtICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooV2ViRXZl
bnQgKilldmVudDsKLSNlbmRpZgogLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7CiAtIChC
T09MKV9pc1RvcEhUTUxWaWV3OwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQogLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKIC0gKHZvaWQpX3dlYl9z
ZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZTsKIC0gKHZvaWQpX3dlYl9j
bGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKICNlbmRpZgorI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorLSAodm9pZClfd2ViX21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3Rv
cjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdDsKKyNlbmRpZgogQGVuZAogCisj
aWYgUExBVEZPUk0oTUFDKQorCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld1Rl
eHRDaGVja2luZ0ludGVybmFsKQogLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVs
OihpZClzZW5kZXI7CiAtIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKQEAgLTg2Myw0
OSArODY2LDI4IEBAIC0gKHZvaWQpc2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZDooQk9PTClmbGFnOwogLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
KGlkKXNlbmRlcjsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRm9yd2FyZERl
Y2xhcmF0aW9uKSAvLyBGSVhNRTogUHV0IHRoaXMgaW4gYSBub3JtYWwgY2F0ZWdvcnkgYW5kIHN0
b3AgZG9pbmcgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCi0tICh2b2lkKV9zZXRQcmlu
dGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFn
ZVdpZHRoIGxvZ2ljYWxIZWlnaHQ6KGZsb2F0KW1pblBhZ2VIZWlnaHQgb3JpZ2luYWxQYWdlV2lk
dGg6KGZsb2F0KXBhZ2VMb2dpY2FsV2lkdGggb3JpZ2luYWxQYWdlSGVpZ2h0OihmbG9hdClwYWdl
TG9naWNhbEhlaWdodCBtYXhpbXVtU2hyaW5rUmF0aW86KGZsb2F0KW1heGltdW1TaHJpbmtSYXRp
byBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZSBwYWdpbmF0ZVNjcmVlbkNvbnRl
bnQ6KEJPT0wpcGFnaW5hdGVTY3JlZW5Db250ZW50OwotI2lmICFQTEFURk9STShJT1MpCi0tICh2
b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwogI2VuZGlmCi1AZW5kCi0KLSNpZiAhUExBVEZP
Uk0oSU9TKQotQGNsYXNzIE5TVGV4dElucHV0Q29udGV4dDsKLUBpbnRlcmZhY2UgTlNSZXNwb25k
ZXIgKEFwcEtpdERldGFpbHMpCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7
Ci1AZW5kCiAKLUBpbnRlcmZhY2UgTlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMp
Ci0tIChCT09MKXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKLS0gKEJPT0wpaGFuZGxlTW91c2VF
dmVudDooTlNFdmVudCAqKWV2ZW50OworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRm9yd2Fy
ZERlY2xhcmF0aW9uKSAvLyBGSVhNRTogUHV0IHRoaXMgaW4gdGhlIFdlYkZpbGVJbnRlcm5hbCBj
YXRlZ29yeSBpbnN0ZWFkIG9mIGRvaW5nIHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uIHRyaWNrLgor
LSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VMb2dpY2FsV2lk
dGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBsb2dpY2FsSGVpZ2h0OihmbG9hdCltaW5QYWdlSGVpZ2h0
IG9yaWdpbmFsUGFnZVdpZHRoOihmbG9hdClwYWdlTG9naWNhbFdpZHRoIG9yaWdpbmFsUGFnZUhl
aWdodDooZmxvYXQpcGFnZUxvZ2ljYWxIZWlnaHQgbWF4aW11bVNocmlua1JhdGlvOihmbG9hdClt
YXhpbXVtU2hyaW5rUmF0aW8gYWRqdXN0Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUgcGFn
aW5hdGVTY3JlZW5Db250ZW50OihCT09MKXBhZ2luYXRlU2NyZWVuQ29udGVudDsKIEBlbmQKLSNl
bmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiBAaW50ZXJmYWNl
IFdlYkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpIDxOU1RleHRJbnB1dD4KICNlbHNl
CiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpCiAjZW5kaWYK
KyNpZiBQTEFURk9STShNQUMpCistICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwogLSAo
dm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyOworI2VuZGlmCiAjaWYgUExBVEZP
Uk0oSU9TKQogLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3I7CiAjZW5k
aWYKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRWRpdGluZ1N0eWxlU3VwcG9y
dCkKLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZTsKLSNpZiAhUExBVEZP
Uk0oSU9TKQotLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9yOwot
I2VuZGlmCi1AZW5kCi0KIEBpbnRlcmZhY2UgTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5h
bCkKLS0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRh
YmxlQXJyYXkgKikgYXJyYXk7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNNdXRhYmxlRGljdGlvbmFy
eSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0tICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3RO
aWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsKKy0gKHZvaWQpX3dlYl9hZGREZXNjZW5kZW50
V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKikgYXJyYXk7CiBAZW5kCiAKIHN0
cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgewpAQCAtOTIyLDM1
ICs5MDQsMzEgQEAgQHB1YmxpYwogICAgIEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7
CiAgICAgQk9PTCBwcmludGluZzsKICAgICBCT09MIHBhZ2luYXRlU2NyZWVuQ29udGVudDsKLSNp
ZiAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEJPT0wgb2JzZXJ2aW5n
U3VwZXJ2aWV3Tm90aWZpY2F0aW9uczsKICAgICBCT09MIG9ic2VydmluZ1dpbmRvd05vdGlmaWNh
dGlvbnM7Ci0gICAgCisKICAgICBpZCBzYXZlZFN1YnZpZXdzOwogICAgIEJPT0wgc3Vidmlld3NT
ZXRBc2lkZTsKICNlbmRpZgogCiAgICAgTlNWaWV3ICpsYXllckhvc3RpbmdWaWV3OworCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIEJPT0wgZHJhd2luZ0ludG9MYXllcjsKICAgICBCT09MIGRyYXdp
bmdJbnRvQWNjZWxlcmF0ZWRMYXllcjsKLQotI2lmICFQTEFURk9STShJT1MpCi0gICAgTlNFdmVu
dCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgotI2Vs
c2UKLSAgICBXZWJFdmVudCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcg
dGhlIGV2ZW50LgogI2VuZGlmCisKKyAgICBSZXRhaW5QdHI8V2ViRXZlbnQ+IG1vdXNlRG93bkV2
ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KICAgICBCT09MIGhhbmRsaW5n
TW91c2VEb3duRXZlbnQ7Ci0jaWYgIVBMQVRGT1JNKElPUykgICAgCi0gICAgTlNFdmVudCAqa2V5
RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLSNlbHNlCi0gICAg
V2ViRXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQu
Ci0jZW5kaWYKKyAgICBSZXRhaW5QdHI8V2ViRXZlbnQ+IGtleURvd25FdmVudDsgLy8gS2VwdCBh
ZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCiAKICAgICAvLyBBIFdlYkhUTUxWaWV3IGhhcyBhIHNp
bmdsZSBpbnB1dCBjb250ZXh0LCBidXQgd2UgcmV0dXJuIG5pbCB3aGVuIGluIG5vbi1lZGl0YWJs
ZSBjb250ZW50IHRvIGF2b2lkIG1ha2luZyBpbnB1dCBtZXRob2RzIGRvIHRoZWlyIHdvcmsuCiAg
ICAgLy8gVGhpcyBzdGF0ZSBpcyBzYXZlZCBlYWNoIHRpbWUgc2VsZWN0aW9uIGNoYW5nZXMsIGJl
Y2F1c2UgY29tcHV0aW5nIGl0IGNhdXNlcyBzdHlsZSByZWNhbGMsIHdoaWNoIGlzIG5vdCBhbHdh
eXMgc2FmZSB0byBkby4KICAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dDsKIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFRyYWNrIHdoZXRoZXIgdGhlIHZp
ZXcgaGFzIHNldCBhIHNlY3VyZSBpbnB1dCBzdGF0ZS4KICAgICBCT09MIGlzSW5TZWN1cmVJbnB1
dFN0YXRlOwogCkBAIC05NjAsNDkgKzkzOCw0MyBAQCBAcHVibGljCiAgICAgTlNQb2ludCBsYXN0
U2Nyb2xsUG9zaXRpb247CiAgICAgQk9PTCBpblNjcm9sbFBvc2l0aW9uQ2hhbmdlZDsKIAotICAg
IFdlYlBsdWdpbkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFdl
YlBsdWdpbkNvbnRyb2xsZXI+IHBsdWdpbkNvbnRyb2xsZXI7CiAgICAgCi0gICAgTlNTdHJpbmcg
KnRvb2xUaXA7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0
YWluUHRyPE5TU3RyaW5nPiB0b29sVGlwOwogICAgIE5TVG9vbFRpcFRhZyBsYXN0VG9vbFRpcFRh
ZzsKLSNlbmRpZgorCiAgICAgaWQgdHJhY2tpbmdSZWN0T3duZXI7Ci0gICAgdm9pZCAqdHJhY2tp
bmdSZWN0VXNlckRhdGE7CisgICAgdm9pZCogdHJhY2tpbmdSZWN0VXNlckRhdGE7CiAgICAgCi0g
ICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOwotI2lmICFQTEFURk9STShJT1MpICAgIAotICAg
IE5TRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7Ci0jZWxzZQotICAgIFdlYkV2ZW50ICph
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50OworICAgIFJldGFpblB0cjxOU1RpbWVyPiBhdXRvc2Nyb2xs
VGltZXI7CisgICAgUmV0YWluUHRyPE5TRXZlbnQ+IGF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7CiAj
ZW5kaWYKLSAgICAKLSAgICBOU0FycmF5ICpwYWdlUmVjdHM7CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQotICAgIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciAqY29tcGxldGlvbkNvbnRyb2xsZXI7
Ci0jZW5kaWYKLSAgICAKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFnZVJlY3RzOworCisjaWYg
UExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0cjxXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXI+
IGNvbXBsZXRpb25Db250cm9sbGVyOworCiAgICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91bmQ7
CisjZW5kaWYKIAogICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyog
aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKICAgICAKLSAgICBXZWJEYXRhU291cmNlICpk
YXRhU291cmNlOwotI2lmICFQTEFURk9STShJT1MpCisgICAgUmV0YWluUHRyPFdlYkRhdGFTb3Vy
Y2U+IGRhdGFTb3VyY2U7CisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgV2ViQ29yZTo6Q2FjaGVk
SW1hZ2UqIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwogI2VuZGlmCiAKICAgICBTRUwgc2Vs
ZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgQk9PTCBpbnN0YWxsZWRUcmFja2luZ0FyZWE7CiAgICAgaWQgZmxh
Z3NDaGFuZ2VkRXZlbnRNb25pdG9yOwogICAgIE5TUmFuZ2Ugc29mdFNwYWNlUmFuZ2U7CiAjZW5k
aWYKIAotI2lmbmRlZiBOREVCVUcKLSAgICBCT09MIGVudW1lcmF0aW5nU3Vidmlld3M7Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgIFJldGFpblB0cjxXZWJTaGFy
aW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXI+IGN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckNv
bnRyb2xsZXI7CiAjZW5kaWYKQEAgLTEwMTAsNyArOTgyLDggQEAgQHB1YmxpYwogLSAodm9pZClj
bGVhcjsKIEBlbmQKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBz
dGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNo
IChzdGF0ZSkgewpAQCAtMTAyNCwxOSArOTk3LDIyIEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVl
IGtpdChUcmlTdGF0ZSBzdGF0ZSkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gTlNPZmZTdGF0ZTsKIH0KKwogI2VuZGlmCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmll
d1ByaXZhdGUKIAorI2lmIFBMQVRGT1JNKE1BQykKKwogKyAodm9pZClpbml0aWFsaXplCiB7Ci0j
aWYgIVBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogU2hvdWxkbid0IGFsbCBvZiB0aGlzIG1v
dmUgaW50byArW1dlYkhUTUxWaWV3IGluaXRpYWxpemVdPworICAgIC8vIEFuZCBzb21lIG9mIHRo
aXMgd29yayBpcyBsaWtlbHkgcmVkdW5kYW50IHNpbmNlICtbV2ViSFRNTFZpZXcgaW5pdGlhbGl6
ZV0gaXMgZ3VhcmFudGVlZCB0byBydW4gZmlyc3QuCisKICAgICBKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVh
ZCgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwotI2VuZGlmCiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghb2xkU2V0Q3Vyc29yRm9yTW91c2VMb2NhdGlvbklN
UCkgewogICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VN
ZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKF9zZXRDdXJzb3JGb3JNb3VzZUxvY2F0
aW9uOikpOwogICAgICAgICBBU1NFUlQoc2V0Q3Vyc29yTWV0aG9kKTsKQEAgLTEwNDUsMzMgKzEw
MjEsMjEgQEAgKyAodm9pZClpbml0aWFsaXplCiAgICAgfQogCiAgICAgbWV0aG9kX2V4Y2hhbmdl
SW1wbGVtZW50YXRpb25zKGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1ZpZXcgY2xhc3NdLCBA
c2VsZWN0b3Ioc2V0TmVlZHNEaXNwbGF5SW5SZWN0OikpLCBjbGFzc19nZXRJbnN0YW5jZU1ldGhv
ZChbTlNWaWV3IGNsYXNzXSwgQHNlbGVjdG9yKF93ZWJfc2V0TmVlZHNEaXNwbGF5SW5SZWN0Oikp
KTsKLSNlbmRpZgogfQogCisjZW5kaWYKKwogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKFdl
YkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmlld1ByaXZh
dGUgY2xhc3NdLCBzZWxmKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIEFTU0VSVCghYXV0b3Njcm9sbFRpbWVyKTsKICAgICBBU1NFUlQoIWF1dG9zY3JvbGxUcmln
Z2VyRXZlbnQpOwotICAgIAotI2lmICFQTEFURk9STShJT1MpCi0gICAgW21vdXNlRG93bkV2ZW50
IHJlbGVhc2VdOwotICAgIFtrZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0jZWxzZQotICAgIGlmICht
b3VzZURvd25FdmVudCkKLSAgICAgICAgQ0ZSZWxlYXNlIChtb3VzZURvd25FdmVudCk7Ci0gICAg
aWYgKGtleURvd25FdmVudCkKLSAgICAgICAgQ0ZSZWxlYXNlKGtleURvd25FdmVudCk7CiAjZW5k
aWYKLSAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNl
XTsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFtjb21wbGV0aW9uQ29udHJvbGxlciByZWxlYXNl
XTsKLSNlbmRpZgotICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwotI2lmICFQTEFURk9STShJT1Mp
CisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNl
KQogICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21p
c2VkRGF0YUNsaWVudCgpKTsKIApAQCAtMTA4NiwyMiArMTA1MCw3IEBAIC0gKHZvaWQpZGVhbGxv
YwogCiAtICh2b2lkKWNsZWFyCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBbbW91c2VEb3du
RXZlbnQgcmVsZWFzZV07Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSNlbHNlCi0gICAg
aWYgKG1vdXNlRG93bkV2ZW50KQotICAgICAgICBDRlJlbGVhc2UobW91c2VEb3duRXZlbnQpOwot
ICAgIGlmIChrZXlEb3duRXZlbnQpCi0gICAgICAgIENGUmVsZWFzZShrZXlEb3duRXZlbnQpOwot
I2VuZGlmCi0gICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07Ci0gICAgW3Rvb2xUaXAgcmVs
ZWFzZV07Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVs
ZWFzZV07Ci0jZW5kaWYKLSAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UpCiAgICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJv
bWlzZWREYXRhQ2xpZW50KCkpOwogI2VuZGlmCkBAIC0xMTA5LDEzICsxMDU4LDEzIEBAIC0gKHZv
aWQpY2xlYXIKICAgICBtb3VzZURvd25FdmVudCA9IG5pbDsKICAgICBrZXlEb3duRXZlbnQgPSBu
aWw7CiAgICAgcGx1Z2luQ29udHJvbGxlciA9IG5pbDsKKyNpZiBQTEFURk9STShNQUMpCiAgICAg
dG9vbFRpcCA9IG5pbDsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIGNvbXBsZXRpb25Db250cm9s
bGVyID0gbmlsOwogI2VuZGlmCiAgICAgZGF0YVNvdXJjZSA9IG5pbDsKLSNpZiAhUExBVEZPUk0o
SU9TKQotICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gMDsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSBudWxscHRyOwogI2VuZGlmCiAK
ICAgICBsYXllckhvc3RpbmdWaWV3ID0gbmlsOwpAQCAtMTEzMCwyNSArMTA3OSw5IEBAIC0gKERP
TVJhbmdlICopX2RvY3VtZW50UmFuZ2UKICAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURv
Y3VtZW50XSBfZG9jdW1lbnRSYW5nZV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAoQk9P
TClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHMKLXsKLSAgICBOU0VudW1lcmF0
b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNTdHJpbmcg
KnBhdGg7Ci0gICAgCi0gICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0p
ICE9IG5pbCkgewotICAgICAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBbW05TVVJMRmlsZVR5cGVN
YXBwaW5ncyBzaGFyZWRNYXBwaW5nc10gTUlNRVR5cGVGb3JFeHRlbnNpb246W3BhdGggcGF0aEV4
dGVuc2lvbl1dOwotICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZVJlc291cmNlTUlNRVR5cGUoTUlNRVR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIE5POwotfQotI2VuZGlmCi0KIC0gKFdlYkRhdGFTb3VyY2Ug
KilfZGF0YVNvdXJjZQogewotICAgIHJldHVybiBfcHJpdmF0ZS0+ZGF0YVNvdXJjZTsKKyAgICBy
ZXR1cm4gX3ByaXZhdGUtPmRhdGFTb3VyY2UuZ2V0KCk7CiB9CiAKIC0gKFdlYlZpZXcgKilfd2Vi
VmlldwpAQCAtMTE2MSw1NyArMTA5NCw0MiBAQCAtIChXZWJGcmFtZVZpZXcgKilfZnJhbWVWaWV3
CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmlld107
CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aFBhdGhzOihOU0FycmF5ICopcGF0
aHMKIHsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudDsKLSAgICBOU0VudW1lcmF0
b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNNdXRhYmxl
QXJyYXkgKmRvbU5vZGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNT
dHJpbmcgKnBhdGg7Ci0gICAgCi0gICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9i
amVjdF0pICE9IG5pbCkgeworICAgIGF1dG8gdGV4dE5vZGVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICBmb3IgKE5TU3RyaW5nICpwYXRoIGluIHBhdGhz
KSB7CiAgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwKICAgICAgICAgLy8gYmUg
cGFzdGVkIGFzIHZpc2libGUgdGV4dC4KICAgICAgICAgTlNTdHJpbmcgKnVybCA9IFtbW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nhbm9uaWNhbGl6ZV0gX3dlYl91c2VyVmlz
aWJsZVN0cmluZ107Ci0gICAgICAgIFtkb21Ob2RlcyBhZGRPYmplY3Q6W1tbc2VsZiBfZnJhbWVd
IERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJsXV07CisgICAgICAgIFt0ZXh0Tm9kZXMg
YWRkT2JqZWN0OltbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gY3JlYXRlVGV4dE5vZGU6dXJs
XV07CiAgICAgfQotICAgIAotICAgIGZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50
RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKLSAgICAKLSAgICBbZG9t
Tm9kZXMgcmVsZWFzZV07Ci0gICAgCisKKyAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVu
dCA9IFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhz
OnRleHROb2Rlcy5nZXQoKV07CiAgICAgcmV0dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAhPSBu
aWwgPyBmcmFnbWVudCA6IG5pbDsKIH0KIAogKyAoTlNBcnJheSAqKV9leGNsdWRlZEVsZW1lbnRz
Rm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24KIHsKLSAgICBzdGF0aWMgTlNBcnJheSAqZWxl
bWVudHMgPSBuaWw7Ci0gICAgaWYgKGVsZW1lbnRzID09IG5pbCkgewotICAgICAgICBlbGVtZW50
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgLy8gT21p
dCBzdHlsZSBzaW5jZSB3ZSB3YW50IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQg
Y2FuIGJlIGVhc2lseSBpbnNlcnRlZC4KLSAgICAgICAgICAgIEAic3R5bGUiLAotICAgICAgICAg
ICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3QgWEhUTUwuCi0gICAgICAgICAgICBA
InhtbCIsIAotICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBwZWQg
d2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCi0gICAgICAgICAgICBAImRvY3R5
cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJvZHkiLAotICAgICAgICAgICAgLy8gT21pdCBkZXBy
ZWNhdGVkIHRhZ3MuCi0gICAgICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRl
ciIsIEAiZGlyIiwgQCJmb250IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAotICAg
ICAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50cyBhcmUgcGFydCBv
ZiB0aGUgZnJhZ21lbnQuCi0gICAgICAgICAgICBAIm9iamVjdCIsIG5pbF07Ci0gICAgICAgIENG
UmV0YWluKGVsZW1lbnRzKTsKLSAgICB9CisgICAgc3RhdGljIE5TQXJyYXkgKmVsZW1lbnRzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIC8vIE9taXQgc3R5bGUg
c2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBl
YXNpbHkgaW5zZXJ0ZWQuCisgICAgICAgIEAic3R5bGUiLAorICAgICAgICAvLyBPbWl0IHhtbCBz
byB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgQCJ4bWwiLAorICAgICAgICAvLyBP
bWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdt
ZW50IGFueXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5
IiwKKyAgICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisgICAgICAgIEAiYXBwbGV0Iiwg
QCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAIm1lbnUiLCBAInMiLCBA
InN0cmlrZSIsIEAidSIsCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNo
bWVudHMgYXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5pbF07
CiAgICAgcmV0dXJuIGVsZW1lbnRzOwogfQogCi1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhS
ZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkKK3N0YXRpYyBOU1VSTCAqdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQogewotICAgIENGVVVJ
RFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5T
U3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBO
U1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxh
dGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJM
OworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFtOU1VVSUQgVVVJRF0s
IHJlbGF0aXZlUGFydF1dOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZApAQCAtMTMw
MSw0MCArMTIxOSwzMiBAQCAtIChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogICAgIAogICAgIGlmIChbdHlwZXMgY29udGFpbnNP
YmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKICAgICAgICAgcmV0dXJuIFtbcGFzdGVib2FyZCBz
dHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ107Ci0gICAgCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nID0gbmlsOwotICAgIE5TU3RyaW5nICpzdHJpbmc7CiAKKyAgICBSZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nOwogICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFG
b3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBk
b2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0pOwogICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5p
bCAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0
cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpb
cGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRl
czpOVUxMXTsKLSAgICBpZiAoYXR0cmlidXRlZFN0cmluZyAhPSBuaWwpIHsKLSAgICAgICAgc3Ry
aW5nID0gW1thdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gY29weV07Ci0gICAgICAgIFthdHRyaWJ1
dGVkU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07
Ci0gICAgfQotICAgIAorICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0pOworICAgIGlmIChhdHRy
aWJ1dGVkU3RyaW5nKQorICAgICAgICByZXR1cm4gW1tbYXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
IGNvcHldIGF1dG9yZWxlYXNlXTsKKwogICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNG
aWxlbmFtZXNQYm9hcmRUeXBlXSkgewotICAgICAgICBzdHJpbmcgPSBbW3Bhc3RlYm9hcmQgcHJv
cGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdIGNvbXBvbmVudHNKb2luZWRC
eVN0cmluZzpAIlxuIl07Ci0gICAgICAgIGlmIChzdHJpbmcgIT0gbmlsKQorICAgICAgICBpZiAo
TlNTdHJpbmcgKnN0cmluZyA9IFtbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmls
ZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXSkKICAgICAg
ICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgfQotICAgIAotICAgIE5TVVJMICpVUkw7Ci0gICAg
Ci0gICAgaWYgKChVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0pKSB7
Ci0gICAgICAgIHN0cmluZyA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0gICAgICAg
IGlmIChbc3RyaW5nIGxlbmd0aF0gPiAwKQorCisgICAgaWYgKE5TVVJMICpVUkwgPSBbTlNVUkwg
VVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0pIHsKKyAgICAgICAgTlNTdHJpbmcgKnN0cmlu
ZyA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgICAgIGlmIChbc3RyaW5nIGxl
bmd0aF0pCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIH0KLSAgICAKKwogICAgIHJl
dHVybiBuaWw7CiB9CiAKIC0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQKIHsKLSAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOworICAgIGF1dG8g
d2ViVmlldyA9IHJldGFpblB0cihbc2VsZiBfd2ViVmlld10pOwogICAgIFt3ZWJWaWV3IF9zZXRJ
bnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwogCiAgICAgRE9NUmFuZ2UgKnJhbmdlID0g
W3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwpAQCAtMTM0NSwyMCArMTI1NSwxOCBAQCAtICh2b2lkKV9w
YXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5U
ZXh0OihCT09MKWFsbAogICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLnBhc3RlQXNGcmFnbWVu
dCgqY29yZShmcmFnbWVudCksIFtzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXSwgZmFsc2UpOwogCiAgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9h
cmQ6bmlsXTsKLSAgICBbd2ViVmlldyByZWxlYXNlXTsKIH0KIAogLSAodm9pZClfcGFzdGVBc1Bs
YWluVGV4dFdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIAogeyAKLSAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOyAKLSAgICBbd2Vi
VmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsgCisgICAgYXV0byB3ZWJW
aWV3ID0gcmV0YWluUHRyKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgW3dlYlZpZXcgX3NldEluc2Vy
dGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CiAKICAgICBOU1N0cmluZyAqdGV4dCA9IFtzZWxm
IF9wbGFpblRleHRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsgCiAgICAgaWYgKFtzZWxmIF9z
aG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4dCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5z
ZXJ0QWN0aW9uUGFzdGVkXSkgCiAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6dGV4dCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYg
X2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdXTsgCiAKICAgICBbd2Vi
VmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOyAKLSAgICBbd2ViVmlldyByZWxlYXNl
XTsKIH0KIAogLSAodm9pZClfcG9zdEZha2VNb3VzZU1vdmVkRXZlbnRGb3JGbGFnc0NoYW5nZWRF
dmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2ZW50CkBAIC0xMzY5LDcgKzEyNzcsNyBAQCAt
ICh2b2lkKV9wb3N0RmFrZU1vdXNlTW92ZWRFdmVudEZvckZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2
ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbgogICAgIFtzZWxmIG1vdXNlTW92ZWQ6ZmFrZUV2ZW50XTsK
IH0KIAotLy8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIHN1cHBvcnQgTWFjIE9TIFggc2Vydmlj
ZXMuCisvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtYWNPUyBzZXJ2aWNlcy4K
IC0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIAogeyAKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsg
CkBAIC0xMzg2LDE1ICsxMjk0LDE1IEBAIC0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVy
cwogewogICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdO
b3RpZmljYXRpb25zKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBOU1ZpZXcgKnN1cGVy
dmlldyA9IFtzZWxmIHN1cGVydmlld107CiAgICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdp
bmRvd10pCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVy
ICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl07CiAgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNW
aWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107CiAgICAgW25v
dGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3Qm91bmRzRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwotICAgIAorCiAgICAgX3ByaXZh
dGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKIH0KIApAQCAtMTQw
MiwyMSArMTMxMCwyMCBAQCAtICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNlcnZlcnMKIHsKICAgICBp
ZiAoIV9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zKQogICAgICAgICByZXR1
cm47Ci0gICAgCisKICAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKICAgICBp
ZiAoIXdpbmRvdykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgTlNOb3RpZmljYXRpb25D
ZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXTsKICAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBbbm90
aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2ln
bktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0
aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2
ZXI6c2VsZiBuYW1lOk5TV2luZG93V2lsbE9yZGVyT2ZmU2NyZWVuTm90aWZpY2F0aW9uIG9iamVj
dDp3aW5kb3ddOwogICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBu
YW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIAor
CiAgICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKIH0K
LSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAt
IChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdt
ZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJW
aWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgogewpAQCAtMTQ0NCwxMyArMTM1MSw4IEBAIC0gKERPTVJh
bmdlICopX3NlbGVjdGVkUmFuZ2UKICAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7CiB9CiAKLS0g
KEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPmVkaXRvcigpLnNob3VsZERlbGV0ZVJhbmdlKGNvcmUocmFuZ2UpKTsKLX0K
KyNpZiBQTEFURk9STShNQUMpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNWaWV3ICopX2hp
dFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgLy8gVXN1YWxseSwgd2UgaGFj
ayBBSydzIGhpdFRlc3QgbWV0aG9kIHRvIGNhdGNoIGFsbCBldmVudHMgYXQgdGhlIHRvcG1vc3Qg
V2ViSFRNTFZpZXcuICAKQEAgLTE0NjAsOSArMTM2Miw3IEBAIC0gKE5TVmlldyAqKV9oaXRWaWV3
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IE5POyAg
ICAKICAgICByZXR1cm4gaGl0VmlldzsKIH0KLSNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKElPUykK
IC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5
cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1
dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAgICAg
Ly8gUHV0IEhUTUwgb24gdGhlIHBhc3RlYm9hcmQuCkBAIC0xNDcyLDcgKzEzNzIsNyBAQCAtICh2
b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0
b1Bhc3RlYm9hcmQ6KE5TUGFzdAogICAgICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6
KE5TRGF0YSAqKWRhdGEuZ2V0KCkgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIG9u
IHRoZSBwYXN0ZWJvYXJkIChSVEYvUlRGRCBmb3JtYXQpLgogICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJp
bmcgPT0gbmlsKSB7CkBAIC0xNDg5LDQyICsxMzg5LDI4IEBAIC0gKHZvaWQpX3dyaXRlU2VsZWN0
aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQ
YXN0CiAgICAgICAgIE5TRGF0YSAqUlRGRGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkZyb21S
YW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0
dHJpYnV0ZXM6QHsgfV07CiAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRGF0YSBmb3JU
eXBlOk5TUlRGUGJvYXJkVHlwZV07CiAgICAgfQotICAgIAorCiAgICAgLy8gUHV0IHBsYWluIHN0
cmluZyBvbiB0aGUgcGFzdGVib2FyZC4KICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5T
U3RyaW5nUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9s
ZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJv
d3NlcnMgZG8gaXQsCi0gICAgICAgIC8vIGFuZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBk
byB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3byBzcGFjZXMgaW4gYSByb3cuCi0gICAgICAgIE5T
TXV0YWJsZVN0cmluZyAqcyA9IFtbc2VsZiBzZWxlY3RlZFN0cmluZ10gbXV0YWJsZUNvcHldOwot
ICAgICAgICBjb25zdCB1bmljaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwot
ICAgICAgICBOU1N0cmluZyAqTm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoQ2hhcmFjdGVyczomTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07Ci0g
ICAgICAgIFtzIHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOk5vbkJyZWFraW5nU3BhY2VTdHJp
bmcgd2l0aFN0cmluZzpAIiAiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbcyBsZW5n
dGhdKV07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQ
Ym9hcmRUeXBlXTsKLSAgICAgICAgW3MgcmVsZWFzZV07CisgICAgICAgIC8vIE1hcCAmbmJzcDsg
dG8gYSBwbGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNv
ZGUsIG90aGVyIGJyb3dzZXJzIGRvIGl0LCBhbmQKKyAgICAgICAgLy8gYmVjYXVzZSBIVE1MIGZv
cmNlcyBjb250ZW50IGNyZWF0b3JzIGFuZCBlZGl0b3JzIHRvIHVzZSB0aGlzIGNoYXJhY3RlciBh
bnkgdGltZSB0aGV5IHdhbnQgdHdvIHNwYWNlcyBpbiBhIHJvdy4KKyAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0U3RyaW5nOltbc2VsZiBzZWxlY3RlZFN0cmluZ10gc3RyaW5nQnlSZXBsYWNpbmdPY2N1
cnJlbmNlc09mU3RyaW5nOkAiXHUwMEEwIiB3aXRoU3RyaW5nOkAiICJdIGZvclR5cGU6TlNTdHJp
bmdQYm9hcmRUeXBlXTsKICAgICB9Ci0gICAgCi0gICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlP
ckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBl
XSkgeworCisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNv
bnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXSkKICAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Ci0gICAgfQog
fQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9p
ZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAotI2Vsc2UKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKIC0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihXZWJFdmVudCAqKWV2
ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUxlZnRNb3VzZURv
d24gfHwgW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50
IHR5cGVdID09IE5TRXZlbnRUeXBlT3RoZXJNb3VzZURvd24pOwogI2Vsc2UKICAgICBBU1NFUlQo
IWV2ZW50IHx8IGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRNb3VzZURvd24pOwogI2VuZGlmCiAKLSAg
ICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbZXZlbnQgcmV0YWluXTsKLSAgICBbX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50IHJl
bGVhc2VdOwogICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9IGV2ZW50OwogfQogCkBAIC0x
NTQyLDc2ICsxNDI4LDQ2IEBAIC0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKICAgICByZXR1cm4gc2Vs
ZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZv
aWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRp
bmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFs
UGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRq
dXN0Vmlld1NpemU6Tk8gcGFnaW5hdGVTY3JlZW5Db250ZW50OltzZWxmIF9pc0luU2NyZWVuUGFn
aW5hdGlvbk1vZGVdXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRp
bmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRh
bnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQotICAgIFtz
ZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhU
TUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdz
IGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAg
ICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5n
OllFUyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBh
Z2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVz
dFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2lu
YXRpb25Nb2RlXV07CisjaWYgUExBVEZPUk0oTUFDKQogCi0gICAgW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgcmVsZWFzZV07CistICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOihC
T09MKXByaW50aW5nIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmpl
Y3RzOnNlbGYsIG5pbF0pOworICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGVudFdlYkhUTUxWaWV3
c1RvQXJyYXk6YXJyYXkuZ2V0KCldOworICAgIGZvciAoV2ViSFRNTFZpZXcgKnZpZXcgaW4gYXJy
YXkuZ2V0KCkpCisgICAgICAgIFt2aWV3IF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFn
ZUxvZ2ljYWxXaWR0aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdp
bmFsUGFnZUhlaWdodDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOmFkanVz
dFZpZXdTaXplIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRp
b25Nb2RlXV07Cit9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5n
U3Vidmlld3MgPSBOTzsKLSNlbmRpZgorLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZQoreworICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOllFUyBhZGp1
c3RWaWV3U2l6ZTpOT107CiB9CiAKIC0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vy
c2l2ZQogewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0
aDowIGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdo
dDowIG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVu
Q29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQot
ICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1M
Vmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBv
YmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDow
IGxvZ2ljYWxIZWlnaHQ6MCBvcmlnaW5hbFBhZ2VXaWR0aDowIG9yaWdpbmFsUGFnZUhlaWdodDow
IG1heGltdW1TaHJpbmtSYXRpbzowIGFkanVzdFZpZXdTaXplOk5PIHBhZ2luYXRlU2NyZWVuQ29u
dGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSAgICBbZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+
ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCisgICAgW3NlbGYgX3dlYl9zZXRQcmlu
dGluZ01vZGVSZWN1cnNpdmU6Tk8gYWRqdXN0Vmlld1NpemU6Tk9dOwogfQogCiAtICh2b2lkKV93
ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKIHsKLSAgICBbc2Vs
ZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdo
dDowIG9yaWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlu
a1JhdGlvOjAgYWRqdXN0Vmlld1NpemU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBf
aXNJblNjcmVlblBhZ2luYXRpb25Nb2RlXV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZh
dGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFy
cmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF07CisgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU6WUVTIGFkanVzdFZp
ZXdTaXplOllFU107Cit9CiAKLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmll
d3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKIAotICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRd
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rl
c2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6WUVTIG1p
bmltdW1QYWdlTG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFsUGFnZVdpZHRo
OjAgb3JpZ2luYWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRqdXN0Vmlld1Np
emU6WUVTIHBhZ2luYXRlU2NyZWVuQ29udGVudDpbc2VsZiBfaXNJblNjcmVlblBhZ2luYXRpb25N
b2RlXV07CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKLSAgICBbZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQ
ZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3QKK3sKKyAg
ICAvLyBDb3B5IHN1YnZpZXdzIGJlY2F1c2UgW3NlbGYgc3Vidmlld3NdIHJldHVybnMgdGhlIHZp
ZXcncyBtdXRhYmxlIGludGVybmFsIGFycmF5LAorICAgIC8vIGFuZCB3ZSBtdXN0IGF2b2lkIG11
dGF0aW5nIHRoZSBhcnJheSB3aGlsZSBlbnVtZXJhdGluZyBpdC4KKyAgICBmb3IgKE5TVmlldyAq
dmlldyBpbiBhZG9wdE5TKFtbc2VsZiBzdWJ2aWV3c10gY29weV0pLmdldCgpKSB7CisgICAgICAg
IGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNz
XV0pCisgICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVj
dDpvYmplY3RdOworICAgIH0KK30KIAotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwogI2VuZGlmCi19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogQGVuZAogCkBAIC0xNjQzLDE1ICsxNDk5LDE3IEBAICsgKE5TQXJyYXkgKil1bnN1cHBv
cnRlZFRleHRNSU1FVHlwZXMKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKKwogLSAodm9pZCltb3Vz
ZU1vdmVkOihXZWJFdmVudCAqKWV2ZW50CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICBpZiAoZnJhbWUpCisgICAgaWYgKGF1dG8qIGZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQo
ZXZlbnQpOwogfQorCiAjZW5kaWYKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0o
TUFDKQorCiArICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0No
YW5nZWRFdmVudAogewogICAgIC8vIFRoaXMgaXMgb2Jzb2xldGUgU1BJIG5lZWRlZCBvbmx5IGZv
ciBvbGRlciB2ZXJzaW9ucyBvZiBTYWZhcmkKQEAgLTE2ODEsNyArMTUzOSw4IEBAIC0gKHZvaWQp
X3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQKIAogICAgIFtzZWxmIF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAog
ewpAQCAtMTY5OCw3ICsxNTU3LDcgQEAgLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJl
dmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAjZW5kaWYKICAgICAgICAgCkBAIC0xNzA5
LDcgKzE1NjgsNyBAQCAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAogCiAtICh2b2lkKV9z
ZXRBc2lkZVN1YnZpZXdzCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CiAgICAgQVNTRVJUKF9w
cml2YXRlLT5zYXZlZFN1YnZpZXdzID09IG5pbCk7CiAgICAgX3ByaXZhdGUtPnNhdmVkU3Vidmll
d3MgPSBfc3Vidmlld3M7CkBAIC0xNzI1LDcgKzE1ODQsNyBAQCAtICh2b2lkKV9zZXRBc2lkZVN1
YnZpZXdzCiAgCiAgLSAodm9pZClfcmVzdG9yZVN1YnZpZXdzCiAgewotI2lmICFQTEFURk9STShJ
T1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmlld3NTZXRB
c2lkZSk7CiAgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CiAgICAgICAgIFtf
c3Vidmlld3MgcmVsZWFzZV07CkBAIC0xNzM5LDIwICsxNTk4LDEwIEBAIC0gKHZvaWQpX3NldEFz
aWRlU3Vidmlld3MKICNlbmRpZgogfQogCi0jaWZuZGVmIE5ERUJVRwotCi0tICh2b2lkKWRpZEFk
ZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmVudW1lcmF0
aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyBh
ZGRlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1v
ZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWlnaHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcg
bGF5b3V0LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0jZW5k
aWYKLQotCiAtICh2b2lkKXZpZXdXaWxsRHJhdwogewotICAgIC8vIE9uIHdpbmRvdyBjbG9zZSB3
ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhlbiBoaXQgYW4g
YXNzZXJ0IGluIF90b3BIVE1MVmlldwotICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBkYXRhU291cmNl
IGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJl
IHJlbW92ZWQKKyAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgd2hlbiB0
aGUgZGF0YSBzb3VyY2UgaXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxWaWV3
CisgICAgLy8gU28gY2hlY2sgaWYgdGhlIGRhdGEgc291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGlu
ZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJlIHJlbW92ZWQKICAgICAvLyBvbmNl
IHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmlldyBpcyBmaXhlZC4KICAgICBpZiAoX3ByaXZhdGUt
PmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9wSFRNTFZpZXddKSB7CiAgICAgICAgIFtzZWxmIF93
ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZV07CkBAIC0xNzYyLDggKzE2
MTEsOCBAQCAtICh2b2lkKXZpZXdXaWxsRHJhdwogICAgIFtzdXBlciB2aWV3V2lsbERyYXddOwog
fQogCisjaWYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC8vIERvbid0IGxl
dCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KIC0gKHZv
aWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdCly
ZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZv
clZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldwogewpAQCAt
MTg4MSwxOSArMTczMCwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZVggZGlz
cGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdAogICAgIGlmIChkaWRT
ZXRBc2lkZVN1YnZpZXdzKQogICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKIH0KLSNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCi0tIChCT09MKV9pbnNpZGVBbm90aGVySFRNTFZpZXcK
LXsKLSAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRNTFZpZXddOwotfQogCi0jaWYgIVBM
QVRGT1JNKElPUykKIHN0YXRpYyBCT09MIGlzUXVpY2tMb29rRXZlbnQoTlNFdmVudCAqZXZlbnQp
CiB7CiAgICAgY29uc3QgaW50IGtDR1NFdmVudFN5c3RlbVN1YnR5cGVIb3RLZXlDb21iaW5hdGlv
blJlbGVhc2VkID0gOTsKICAgICByZXR1cm4gW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlU3lz
dGVtRGVmaW5lZCAmJiBbZXZlbnQgc3VidHlwZV0gPT0ga0NHU0V2ZW50U3lzdGVtU3VidHlwZUhv
dEtleUNvbWJpbmF0aW9uUmVsZWFzZWQgJiYgW2V2ZW50IGRhdGExXSA9PSAnbGt1cCc7CiB9CisK
ICNlbmRpZgogCiAtIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50CkBAIC0xOTU0LDEz
ICsxNzk3LDggQEAgLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAogICAgIHJldHVy
biBuaWw7CiB9CiAKLS0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYKLXsKLSAgICBpZiAo
bGFzdEhpdFZpZXcgPT0gc2VsZikKLSAgICAgICAgbGFzdEhpdFZpZXcgPSBuaWw7Ci19CisjaWYg
UExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TVHJhY2tpbmdSZWN0VGFn
KWFkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2
b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlCiB7CiAgICAgQVNTRVJU
KF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwpAQCAtMjA1MiwyMSArMTg5MCwx
OSBAQCAtICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZAogICAgICAgICB1c2VyRGF0YTpf
cHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOwogICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdS
ZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVudF07CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAodm9pZClfc2V0VG9vbFRpcDoo
TlNTdHJpbmcgKilzdHJpbmcKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJpbmcgbGVuZ3RoXSA9PSAwID8gbmlsIDog
c3RyaW5nOwotICAgIE5TU3RyaW5nICpvbGRUb29sVGlwID0gX3ByaXZhdGUtPnRvb2xUaXA7Ci0g
ICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29sVGlwID09IG5pbCkgPyB0b29sVGlwID09
IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRpcF0pIHsKKyAg
ICBOU1N0cmluZyAqb2xkVG9vbFRpcCA9IF9wcml2YXRlLT50b29sVGlwLmdldCgpOworICAgIGlm
ICh0b29sVGlwID09IG9sZFRvb2xUaXAgfHwgW3Rvb2xUaXAgaXNFcXVhbFRvU3RyaW5nOm9sZFRv
b2xUaXBdKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvbGRUb29sVGlwKSB7Cisg
ICAgaWYgKG9sZFRvb2xUaXApCiAgICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVk
XTsKLSAgICAgICAgW29sZFRvb2xUaXAgcmVsZWFzZV07Ci0gICAgfQotICAgIF9wcml2YXRlLT50
b29sVGlwID0gW3Rvb2xUaXAgY29weV07CisgICAgX3ByaXZhdGUtPnRvb2xUaXAgPSBhZG9wdE5T
KFt0b29sVGlwIGNvcHldKTsKICAgICBpZiAodG9vbFRpcCkgewogICAgICAgICAvLyBTZWUgcmFk
YXIgMzUwMDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwgdG9vbHRpcHMgcmF0aGVyIHRoYW4ganVz
dCB0aGUgc2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgogICAgICAgICBbc2VsZiByZW1vdmVBbGxUb29s
VGlwc107CkBAIC0yMDc3LDcgKzE5MTMsOCBAQCAtICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmlu
ZyAqKXN0cmluZwogI2VuZGlmCiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JN
KE1BQykKKwogLSAoTlNTdHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xU
aXA6KE5TVG9vbFRpcFRhZyl0YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQg
KilkYXRhCiB7CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3JlbGVh
c2VdOwpAQCAtMjE5MSwxOSArMjAyOCwxOCBAQCArIChOU0FycmF5ICopX3NlbGVjdGlvblBhc3Rl
Ym9hcmRUeXBlcwogCiAtICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKIHsKLSAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZTowXTsKKyAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTpudWxscHRyXTsK
IH0KIAogLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3Zp
ZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCiB7Ci0gICAgaWYgKFt0eXBlIGlzRXF1YWw6
TlNSVEZEUGJvYXJkVHlwZV0gJiYgW1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpX
ZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtb
V2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldl
YkFyY2hpdmVQYm9hcmRUeXBlXV07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9t
aXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZlIGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5
cGVzXSBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXV07Ci0gICAgICAgIFthcmNoaXZl
IHJlbGVhc2VdOwotICAgIH0gZWxzZSBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBl
XSAmJiBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKLSAgICAgICAgaWYgKElt
YWdlKiBpbWFnZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXS0+aW1hZ2UoKSkK
KyAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUlRGRFBib2FyZFR5cGVdICYmIFtbcGFz
dGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Cisg
ICAgICAgIGF1dG8gYXJjaGl2ZSA9IGFkb3B0TlMoW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0
aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdXSk7Cisg
ICAgICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNo
aXZlLmdldCgpIGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVj
dDpOU1RJRkZQYm9hcmRUeXBlXV07CisgICAgfSBlbHNlIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJp
bmc6TlNUSUZGUGJvYXJkVHlwZV0gJiYgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlKSB7CisgICAgICAgIGlmIChhdXRvKiBpbWFnZSA9IF9wcml2YXRlLT5wcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZS0+aW1hZ2UoKSkKICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6
KE5TRGF0YSAqKWltYWdlLT50aWZmUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5TVElGRlBib2Fy
ZFR5cGVdOwotICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsK
KyAgICAgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6bnVsbHB0cl07CiAg
ICAgfQogfQogCkBAIC0yMjExLDE1ICsyMDQ3LDEyIEBAIC0gKHZvaWQpX2hhbmRsZUF1dG9zY3Jv
bGxGb3JNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAogeyAKICAgICBbc2VsZiBhdXRvc2Ny
b2xsOmV2ZW50XTsgCiAgICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOmV2ZW50XTsgCi19
IAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KLS0gKFdlYlBsdWdpbkNvbnRyb2xsZXIgKilf
cGx1Z2luQ29udHJvbGxlcgotewotICAgIHJldHVybiBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxl
cjsKIH0KIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwogI2lmIFBMQVRGT1JNKElPUykKKwog
Ly8gV0FLVmlldyBvdmVycmlkZS4KIC0gKHZvaWQpbGF5b3V0SWZOZWVkZWQKIHsKQEAgLTIyNDIs
NyArMjA3NSw4IEBAIC0gKHZvaWQpc2V0U2NhbGU6KGZsb2F0KXNjYWxlCiAKICNlbmRpZgogCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX2xheW91dEZv
clByaW50aW5nCiB7CiAgICAgLy8gU2V0IHByaW50aW5nIG1vZGUgdGVtcG9yYXJpbHkgc28gd2Ug
Y2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3aWxsIGFsbG93CkBAIC0yMjUy
LDkgKzIwODYsNyBAQCAtICh2b2lkKV9sYXlvdXRGb3JQcmludGluZwogICAgIFtzZWxmIF93ZWJf
c2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemVdOwogICAgIFtzZWxmIF93
ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQogLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVT
dHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopcmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3Ry
aW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFm
dGVyU3RyaW5nCiB7CiAgICAgaWYgKCFwYXN0ZVN0cmluZyB8fCAhcmFuZ2VUb1JlcGxhY2UgfHwg
IVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkgewpAQCAtMjI3Mywx
NyArMjEwNSw3IEBAIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkCiAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJ
bnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0
OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKIH0KIAotLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xs
VGltZXI6KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKLSNlbHNlCi0tICh2b2lkKV9zdGFydEF1dG9z
Y3JvbGxUaW1lcjogKFdlYkV2ZW50ICopdHJpZ2dlckV2ZW50CiAjZW5kaWYKLXsKLSAgICBpZiAo
X3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9PSBuaWwpIHsKLSAgICAgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6
QVVUT1NDUk9MTF9JTlRFUlZBTAotICAgICAgICAgICAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdIHJldGFpbl07Ci0g
ICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gW3RyaWdnZXJFdmVudCBy
ZXRhaW5dOwotICAgIH0KLX0KIAogLy8gRklYTUU6IF9zZWxlY3Rpb25SZWN0IGlzIGRlcHJlY2F0
ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMgaW4gcHJvdG9jb2wgV2ViRG9j
dW1lbnRTZWxlY3Rpb24uCiAvLyBXZSBjYW4ndCByZW1vdmUgdGhpcyB5ZXQgYmVjYXVzZSBpdCdz
IHN0aWxsIGluIHVzZSBieSBNYWlsLgpAQCAtMjI5MiwzNiArMjExNCwxOCBAQCAtIChOU1JlY3Qp
X3NlbGVjdGlvblJlY3QKICAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07CiB9CiAKLS0g
KHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKLXsKLSAgICBOU1RpbWVyICp0aW1lciA9IF9wcml2
YXRlLT5hdXRvc2Nyb2xsVGltZXI7Ci0gICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5p
bDsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJF
dmVudCByZWxlYXNlXTsKLSNlbHNlCi0gICAgaWYgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dl
ckV2ZW50KQotICAgICAgICBDRlJlbGVhc2UgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2
ZW50KTsKLSNlbmRpZgotICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gbmls
OwotICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKLSAgICBbdGltZXIgcmVsZWFzZV07Ci19CisjaWYg
UExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9hdXRvc2Nyb2xsCiB7CiAgICAgLy8gR3VhcmFudGVl
IHRoYXQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0ZWQsIGV2ZW4gaWYgd2UgZG9u
J3QgcmVjZWl2ZQogICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCi0jaWYgIVBMQVRGT1JNKElPUykK
LSAgICBCT09MIGlzU3RpbGxEb3duID0gQ0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50
U291cmNlU3RhdGVDb21iaW5lZFNlc3Npb25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsgICAK
LSNlbHNlCi0gICAgQk9PTCBpc1N0aWxsRG93biA9IE5POwotI2VuZGlmCisgICAgQk9PTCBpc1N0
aWxsRG93biA9IENHRXZlbnRTb3VyY2VCdXR0b25TdGF0ZShrQ0dFdmVudFNvdXJjZVN0YXRlQ29t
YmluZWRTZXNzaW9uU3RhdGUsIGtDR01vdXNlQnV0dG9uTGVmdCk7CiAgICAgaWYgKCFpc1N0aWxs
RG93bil7CiAgICAgICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotI2lmICFQTEFURk9STShJT1MpCiAgICAgTlNFdmVudCAqZmFrZUV2ZW50
ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlTGVmdE1vdXNlRHJhZ2dl
ZAogICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XQogI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKQEAgLTIzMzUsOSArMjEzOSwxMCBAQCAtICh2b2lkKV9hdXRvc2Nyb2xsCiAgICAg
ICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwogCiAgICAgW3NlbGYg
bW91c2VEcmFnZ2VkOmZha2VFdmVudF07Ci0jZW5kaWYKIH0KIAorI2VuZGlmCisKIC0gKEJPT0wp
X2NhbkVkaXQKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
QEAgLTIzNzksNiArMjE4NCw4IEBAIC0gKEJPT0wpX2lzRWRpdGFibGUKICAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfdHJhbnNwYXJlbnRC
YWNrZ3JvdW5kCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91bmQ7
CkBAIC0yMzg5LDcgKzIxOTYsNiBAQCAtICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6
KEJPT0wpZgogICAgIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91bmQgPSBmOwogfQogCi0j
aWYgIVBMQVRGT1JNKElPUykKIC0gKE5TSW1hZ2UgKilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZQog
ewogICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCkBAIC0yNDExLDYgKzIyMTcsNyBAQCAt
IChOU1JlY3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAogICAgIC8vIE1haWwgY3VycmVudGx5IGNh
bGxzIHRoaXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdoZW4gTWFpbCBubyBsb25nZXIg
Y2FsbHMgaXQuCiAgICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOwogfQorCiAjZW5kaWYK
IAogLSAoRE9NTm9kZSAqKV9pbnNlcnRPcmRlcmVkTGlzdApAQCAtMjQ2Miw3ICsyMjY5LDggQEAg
LSAodm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKICAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS5kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwogfQogCi0jaWYgIVBMQVRGT1JN
KElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7CiAgICAgQVNTRVJUKFtzZWxmIF9o
YXNTZWxlY3Rpb25dKTsKQEAgLTI0NzAsMTcgKzIyNzgsMTcgQEAgLSAodm9pZClfd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKIAogICAgIC8vIERv
bid0IHdyaXRlIFJURkQgdG8gdGhlIHBhc3RlYm9hcmQgd2hlbiB0aGUgY29waWVkIGF0dHJpYnV0
ZWQgc3RyaW5nIGhhcyBubyBhdHRhY2htZW50cy4KICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgIE5T
TXV0YWJsZUFycmF5ICptdXRhYmxlVHlwZXMgPSBuaWw7CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBtdXRhYmxlVHlwZXM7CiAgICAgaWYgKCFbYXR0cmlidXRlZFN0cmluZyBjb250YWlu
c0F0dGFjaG1lbnRzXSkgewotICAgICAgICBtdXRhYmxlVHlwZXMgPSBbdHlwZXMgbXV0YWJsZUNv
cHldOworICAgICAgICBtdXRhYmxlVHlwZXMgPSBhZG9wdE5TKFt0eXBlcyBtdXRhYmxlQ29weV0p
OwogICAgICAgICBbbXV0YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpOU1JURkRQYm9hcmRUeXBlXTsK
LSAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXM7CisgICAgICAgIHR5cGVzID0gbXV0YWJsZVR5
cGVzLmdldCgpOwogICAgIH0KIAogICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBv
d25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKICAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25XaXRo
UGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0dHJp
YnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107Ci0gICAgW211dGFibGVUeXBlcyByZWxlYXNl
XTsKIH0KKwogI2VuZGlmCiAKIC0gKHZvaWQpY2xvc2UKQEAgLTI0OTIsMTQgKzIzMDAsMTggQEAg
LSAodm9pZCljbG9zZQogCiAgICAgX3ByaXZhdGUtPmNsb3NlZCA9IFlFUzsKIAotICAgIFtzZWxm
IF9jbGVhckxhc3RIaXRWaWV3SWZTZWxmXTsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAobGFzdEhpdFZpZXcgPT0gc2VsZikKKyAgICAgICAgbGFzdEhpdFZp
ZXcgPSBuaWw7CisKICAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKICAgICBbc2Vs
ZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKICNlbmRpZgorCiAgICAgW19wcml2YXRlLT5w
bHVnaW5Db250cm9sbGVyIGRlc3Ryb3lBbGxQbHVnaW5zXTsKICAgICBbX3ByaXZhdGUtPnBsdWdp
bkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpuaWxdOwotI2lmICFQTEFURk9STShJT1MpCisKKyNp
ZiBQTEFURk9STShNQUMpCiAgICAgLy8gcmVtb3ZlIHRvb2x0aXBzIGJlZm9yZSBjbGVhcmluZyBf
cHJpdmF0ZSBzbyByZW1vdmVUcmFja2luZ1JlY3Q6IHdpbGwgd29yayBjb3JyZWN0bHkKICAgICBb
c2VsZiByZW1vdmVBbGxUb29sVGlwc107CiAKQEAgLTI1MTIsMzMgKzIzMjQsMzIgQEAgLSAodm9p
ZCljbG9zZQogICAgIFtfcHJpdmF0ZSBjbGVhcl07CiB9CiAKLS0gKEJPT0wpX2hhc0hUTUxEb2N1
bWVudAorI2lmIFBMQVRGT1JNKE1BQykKKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV93ZWJf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
IHBhc3RlYm9hcmRUeXBlOihOU1N0cmluZyAqKXBhc3RlYm9hcmRUeXBlIGltYWdlTUlNRVR5cGU6
KE5TU3RyaW5nICopaW1hZ2VNSU1FVHlwZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gTk87
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIHJl
dHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKTsKKyAgICBhdXRvIGZp
bGVuYW1lID0gW2ltYWdlTUlNRVR5cGUgc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3Ry
aW5nOkAiLyIgd2l0aFN0cmluZzpAIi4iXTsKKyAgICBhdXRvIHJlc291cmNlID0gYWRvcHROUyhb
W1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
cGFzdGVib2FyZFR5cGVdCisgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KGZp
bGVuYW1lKSBNSU1FVHlwZTppbWFnZU1JTUVUeXBlIHRleHRFbmNvZGluZ05hbWU6bmlsIGZyYW1l
TmFtZTpuaWxdKTsKKyAgICByZXR1cm4gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFn
bWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlLmdldCgpXTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1MpCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlw
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRl
eHQ6KERPTVJhbmdlICopY29udGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzCiB7Ci0gICAg
aWYgKHBib2FyZFR5cGUgPT0gV2ViQXJjaGl2ZVBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViQXJj
aGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07CisgICAgaWYgKFtwYm9hcmRU
eXBlIGlzRXF1YWxUb1N0cmluZzpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgYXV0
byBhcmNoaXZlID0gYWRvcHROUyhbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFz
dGVib2FyZCBkYXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dKTsKICAgICAgICAgaWYg
KHN1YnJlc291cmNlcykKICAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBbYXJjaGl2ZSBzdWJy
ZXNvdXJjZXNdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2Vs
ZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlXTsKLSAg
ICAgICAgW2FyY2hpdmUgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAg
ICAgcmV0dXJuIFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoQXJjaGl2
ZTphcmNoaXZlLmdldCgpXTsKICAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlKQorCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU0Zp
bGVuYW1lc1Bib2FyZFR5cGVdKQogICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21l
bnRXaXRoUGF0aHM6W3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGVdXTsKLSAgICAgICAgCi0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNIVE1MUGJvYXJk
VHlwZSkgeworCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU0hUTUxQYm9h
cmRUeXBlXSkgewogICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJkIHN0
cmluZ0ZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZV07CiAgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNr
IHRvIG1ha2UgTWljcm9zb2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3Nzg3
ODUuCiAgICAgICAgIGlmIChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7CkBA
IC0yNTQ4LDc5ICsyMzU5LDUwIEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRG
cmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvCiAgICAgICAgIH0K
ICAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gPT0gMCkKICAgICAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50
RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOkhUTUxTdHJpbmcgYmFzZVVSTFN0cmluZzpuaWxdOwog
ICAgIH0KIAotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGUGJvYXJkVHlwZSB8fCBwYm9hcmRU
eXBlID09IE5TUlRGRFBib2FyZFR5cGUpIHsKLSAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpz
dHJpbmcgPSBuaWw7Ci0gICAgICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUp
Ci0gICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50
QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCi0gICAgICAgICAg
ICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3Rl
Ym9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVM
TF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQorICAgIGlmIChbcGJvYXJkVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6TlNSVEZQYm9hcmRUeXBlXSB8fCBbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJp
bmc6TlNSVEZEUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0
cmluZz4gc3RyaW5nOworICAgICAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOk5T
UlRGRFBib2FyZFR5cGVdKQorICAgICAgICAgICAgc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5T
UlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXSk7CisgICAgICAgIGlmICgh
c3RyaW5nKQorICAgICAgICAgICAgc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRU
eXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0pOworICAgICAgICBpZiAoIXN0cmluZykKICAg
ICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgTlNEaWN0aW9uYXJ5
ICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmpl
Y3RzQW5kS2V5czoKKworICAgICAgICBhdXRvIGRvY3VtZW50QXR0cmlidXRlcyA9IGFkb3B0TlMo
W1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAgICAg
ICBbW3NlbGYgY2xhc3NdIF9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZl
cnNpb25dLCBOU0V4Y2x1ZGVkRWxlbWVudHNEb2N1bWVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAg
IG5pbF07Ci0gICAgICAgIE5TQXJyYXkgKnM7Ci0gICAgICAgIAorICAgICAgICAgICAgbmlsXSk7
CisKICAgICAgICAgQk9PTCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBbW3NlbGYgX3dlYlZpZXdd
IGRlZmVyc0NhbGxiYWNrc107CiAgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQog
ICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6WUVTXTsKLSAg
ICAgICAgICAgIAotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzdHJp
bmcgX2RvY3VtZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jdW1lbnQ6W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVzOmRvY3VtZW50
QXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VicmVzb3VyY2VzOiZzXTsKKworICAgICAgICBOU0FycmF5ICpsb2NhbFN1YnJl
c291cmNlczsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5n
IF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3Vt
ZW50Oltbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XQorICAgICAgICAgICAgZG9jdW1lbnRBdHRy
aWJ1dGVzOmRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSBzdWJyZXNvdXJjZXM6JmxvY2FsU3VicmVz
b3VyY2VzXTsKKwogICAgICAgICBpZiAoc3VicmVzb3VyY2VzKQotICAgICAgICAgICAgKnN1YnJl
c291cmNlcyA9IHM7Ci0gICAgICAgIAotICAgICAgICBOU0VudW1lcmF0b3IgKmUgPSBbcyBvYmpl
Y3RFbnVtZXJhdG9yXTsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnI7Ci0gICAgICAgIHdoaWxlICgo
ciA9IFtlIG5leHRPYmplY3RdKSkKLSAgICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRk
U3VicmVzb3VyY2U6cl07Ci0gICAgICAgIAorICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IGxv
Y2FsU3VicmVzb3VyY2VzOworCisgICAgICAgIGZvciAoV2ViUmVzb3VyY2UgKnJlc291cmNlIGlu
IGxvY2FsU3VicmVzb3VyY2VzKQorICAgICAgICAgICAgW1tzZWxmIF9kYXRhU291cmNlXSBhZGRT
dWJyZXNvdXJjZTpyZXNvdXJjZV07CisKICAgICAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFj
a3MpCiAgICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpOT107
Ci0gICAgICAgIAotICAgICAgICBbZG9jdW1lbnRBdHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgICAg
ICBbc3RyaW5nIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAg
IGlmIChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViUmVzb3Vy
Y2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRo
UmVsYXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3RpZmYiIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGlu
Z05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpm
cmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VS
ZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1BERlBib2Fy
ZFR5cGUpIHsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBh
bGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlw
ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJhcHBsaWNhdGlvbi5wZGYi
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpu
aWxdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0
YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0g
ICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAg
IH0KIAotICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRU
eXBlUE5HXSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNl
IGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilr
VVRUeXBlUE5HXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBu
ZyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTpAImltYWdlL3BuZyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07
Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291
cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAg
ICAgW3Jlc291cmNlIHJlbGVhc2VdOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQot
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TVVJMUGJvYXJkVHlwZSkgeworCisgICAgaWYgKFtwYm9h
cmRUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1RJRkZQYm9hcmRUeXBlXSkKKyAgICAgICAgcmV0dXJu
IFtzZWxmIF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgcGFz
dGVib2FyZFR5cGU6TlNUSUZGUGJvYXJkVHlwZSBpbWFnZU1JTUVUeXBlOkAiaW1hZ2UvdGlmZiJd
OworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQREZQYm9hcmRUeXBlXSkK
KyAgICAgICAgcmV0dXJuIFtzZWxmIF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJk
OnBhc3RlYm9hcmQgcGFzdGVib2FyZFR5cGU6TlNQREZQYm9hcmRUeXBlIGltYWdlTUlNRVR5cGU6
QCJhcHBsaWNhdGlvbi9wZGYiXTsKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5n
OihOU1N0cmluZyAqKWtVVFR5cGVQTkddKQorICAgICAgICByZXR1cm4gW3NlbGYgX3dlYl9kb2N1
bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZTooTlNT
dHJpbmcgKilrVVRUeXBlUE5HIGltYWdlTUlNRVR5cGU6QCJpbWFnZS9wbmciXTsKKworICAgIGlm
IChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNVUkxQYm9hcmRUeXBlXSkgewogICAgICAg
ICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwogICAg
ICAgICBET01Eb2N1bWVudCogZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07
CiAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CkBAIC0yNjM4LDQzICsyNDIwLDMwIEBAIC0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvCiAgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3Jd
OwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09
IE5TU3RyaW5nUGJvYXJkVHlwZSkgeworCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0
cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7CiAgICAgICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dCgqY29yZShjb250ZXh0KSwgW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQ
Ym9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkucHRyKCkp
OwogICAgIH0KKwogICAgIHJldHVybiBuaWw7CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykK
KworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKSAKKwogLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAot
eyAKLSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCi0gICAgdW5zaWdu
ZWQgaW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAotICAgIHVuc2lnbmVkIGlu
dCBzdWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmll
d0luZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKLSAgICAgICAgTlNWaWV3
ICpzdWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCi0gICAg
ICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
IGNsYXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3Vi
dmlldyBzdG9wVGltZXJzXTsKLSAgICB9IAotfSAKLSNlbmRpZiAKK3sKKyAgICBbc2VsZiBfd2Vi
X21ha2VQbHVnaW5TdWJ2aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Ioc3RvcFRpbWVycykg
d2l0aE9iamVjdDpuaWxdOworfQorCistICh2b2lkKV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0
c2NhcGVQbHVnaW5zCit7CisgICAgW3NlbGYgX3dlYl9tYWtlUGx1Z2luU3Vidmlld3NQZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKHJlc3RhcnRUaW1lcnMpIHdpdGhPYmplY3Q6bmlsXTsKK30KIAot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKLS0gKHZvaWQpX3Jlc3VtZU51bGxFdmVu
dHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3Nl
bGYgc3Vidmlld3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdz
IGNvdW50XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9y
IChzdWJ2aWV3SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJ
bmRleCsrKSB7IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJ
bmRleDpzdWJ2aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgKilzdWJ2aWV3IHJlc3RhcnRUaW1lcnNdOyAKLSAgICB9IAot
fSAKICNlbmRpZiAKIAogLSAoQk9PTClfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcKQEAg
LTI4MDIsNDAgKzI1NzEsMjQgQEAgLSAoQ0dGbG9hdClfYWRqdXN0ZWRCb3R0b21PZlBhZ2VXaXRo
VG9wOihDR0Zsb2F0KXRvcCBib3R0b206KENHRmxvYXQpYm90dG9tIGxpbWkKIH0KIAogI2lmIFBM
QVRGT1JNKElPUykKKwogLSAoaWQpYWNjZXNzaWJpbGl0eVJvb3RFbGVtZW50CiB7CiAgICAgcmV0
dXJuIFtbc2VsZiBfZnJhbWVdIGFjY2Vzc2liaWxpdHlSb290XTsKIH0KKwogI2VuZGlmCiAKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCiAK
LS0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxl
QXJyYXkgKilhcnJheQorLSAodm9pZClfd2ViX2FkZERlc2NlbmRlbnRXZWJIVE1MVmlld3NUb0Fy
cmF5OihOU011dGFibGVBcnJheSAqKWFycmF5CiB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIE5T
QXJyYXkqIF9zdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsKLSNlbmRpZgotICAgIHVuc2lnbmVk
IGNvdW50ID0gW19zdWJ2aWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNWaWV3ICpjaGlsZCA9IFtfc3Vidmlld3Mgb2JqZWN0
QXRJbmRleDppXTsKKyAgICBmb3IgKE5TVmlldyAqY2hpbGQgaW4gW3NlbGYgc3Vidmlld3NdKSB7
CiAgICAgICAgIGlmIChbY2hpbGQgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkK
ICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6Y2hpbGRdOwotICAgICAgICBbY2hpbGQgX3dl
Yl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTphcnJheV07Ci0gICAgfQotfQotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0Zp
bGVJbnRlcm5hbCkKLQotLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90TmlsOihpZClvYmplY3Qg
Zm9yS2V5OihpZClrZXkKLXsKLSAgICBpZiAob2JqZWN0ID09IG5pbCkgewotICAgICAgICBbc2Vs
ZiByZW1vdmVPYmplY3RGb3JLZXk6a2V5XTsKLSAgICB9IGVsc2UgewotICAgICAgICBbc2VsZiBz
ZXRPYmplY3Q6b2JqZWN0IGZvcktleTprZXldOworICAgICAgICBbY2hpbGQgX3dlYl9hZGREZXNj
ZW5kZW50V2ViSFRNTFZpZXdzVG9BcnJheTphcnJheV07CiAgICAgfQogfQogCkBAIC0yODQzLDI0
ICsyNTk2LDI2IEBAIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3CiAKKyNpZiBQ
TEFURk9STShNQUMpCisKICsgKHZvaWQpaW5pdGlhbGl6ZQogewotI2lmICFQTEFURk9STShJT1Mp
Ci0gICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10g
X3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdXTsK
KyAgICBbTlNBcHAgcmVnaXN0ZXJTZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tzZWxmIGNsYXNzXSBf
c2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXSByZXR1cm5UeXBlczpbW3NlbGYgY2xhc3NdIF9pbnNl
cnRhYmxlUGFzdGVib2FyZFR5cGVzXV07CisKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZCgpOwog
ICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwotI2VuZGlmCiB9CiAKKyNlbmRp
ZgorCiAtIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKIHsKICAgICBzZWxmID0gW3N1
cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBb
c2VsZiBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZU5vbmVdOwogI2VuZGlmCiAgICAg
CkBAIC0yODY5LDEyICsyNjI0LDE1IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFt
ZQogICAgIAogICAgIF9wcml2YXRlID0gW1tXZWJIVE1MVmlld1ByaXZhdGUgYWxsb2NdIGluaXRd
OwogCi0gICAgX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgPSBbW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnRWaWV3OnNlbGZdOworICAgIF9wcml2YXRlLT5wbHVn
aW5Db250cm9sbGVyID0gYWRvcHROUyhbW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoRG9jdW1lbnRWaWV3OnNlbGZdKTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAogICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IobWFya2VkVGV4dFVwZGF0ZTopIAogICAgICAgICAgICAg
ICAgICAgIG5hbWU6V2ViTWFya2VkVGV4dFVwZGF0ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
Ci0jZWxzZQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCiAgICAgX3ByaXZhdGUtPnNvZnRT
cGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAjZW5kaWYKICAgICAKQEAg
LTI4OTYsNiArMjY1NCw3IEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIFtzZWxmIGNsb3NlXTsKICAg
ICBbX3ByaXZhdGUgcmVsZWFzZV07CiAgICAgX3ByaXZhdGUgPSBuaWw7CisKICAgICBbc3VwZXIg
ZGVhbGxvY107CiB9CiAKQEAgLTMwOTEsNyArMjg1MCw4IEBAIFdFQkNPUkVfQ09NTUFORCh0b2dn
bGVVbmRlcmxpbmUpCiAKICNkZWZpbmUgQ09NTUFORF9QUk9MT0dVRSBpZiAoW3NlbGYgY2FsbERl
bGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOl9jbWRdKSByZXR1cm47CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoSUJBY3Rpb24pdGFrZUZpbmRT
dHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xPR1VFCkBA
IC0zMTA0LDcgKzI4NjQsNyBAQCAtIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rp
b246KGlkKXNlbmRlcgogICAgIFtOU1Bhc3RlYm9hcmQgX3dlYl9zZXRGaW5kUGFzdGVib2FyZFN0
cmluZzpbc2VsZiBzZWxlY3RlZFN0cmluZ10gd2l0aE93bmVyOnNlbGZdOwogfQogCi0vLyBUaGlz
IG1ldGhvZCBpcyBuZWVkZWQgdG8gc3VwcG9ydCBNYWMgT1MgWCBzZXJ2aWNlcy4KKy8vIFRoaXMg
bWV0aG9kIGlzIG5lZWRlZCB0byBzdXBwb3J0IG1hY09TIHNlcnZpY2VzLgogLSAoQk9PTCl3cml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBlczoo
TlNBcnJheSAqKXR5cGVzCiB7CiAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93
bmVyOltzZWxmIF90b3BIVE1MVmlld11dOwpAQCAtMzEyNiw2ICsyODg2LDcgQEAgLSAoaWQpdmFs
aWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlwZSByZXR1cm5UeXBlOihO
U1N0cmluZyAqKXJldHUKICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgcmV0dXJuIFtbc2VsZiBu
ZXh0UmVzcG9uZGVyXSB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnNlbmRUeXBlIHJldHVyblR5
cGU6cmV0dXJuVHlwZV07CiB9CisKICNlbmRpZgogCiAvLyBqdW1wVG9TZWxlY3Rpb24gaXMgdGhl
IG9sZCBuYW1lIGZvciB3aGF0IEFwcEtpdCBub3cgY2FsbHMgY2VudGVyU2VsZWN0aW9uSW5WaXNp
YmxlQXJlYS4gU2FmYXJpCkBAIC0zMTQxLDcgKzI5MDIsOCBAQCAtICh2b2lkKWp1bXBUb1NlbGVj
dGlvbjooaWQpc2VuZGVyCiAgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucmV2ZWFsU2Vs
ZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGln
bkNlbnRlckFsd2F5cyk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKKwogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihp
ZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQogewogICAgIFNFTCBhY3Rpb24g
PSBbaXRlbSBhY3Rpb25dOwpAQCAtMzE0OSw3ICsyOTExLDcgQEAgLSAoQk9PTCl2YWxpZGF0ZVVz
ZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJm
YWNlSXQKIAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAKKwogICAg
IGlmIChEb2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKGRv
Yy0+aXNQbHVnaW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIE5POwpAQCAtMzE2OCw3
ICsyOTMwLDYgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVn
YXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXQKICAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0XTsKIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVs
OikpIHsKLSAgICAgICAgLy8gTWF0Y2ggT1MgWCBBcHBLaXQgYmVoYXZpb3IgZm9yIHBvc3QtVGln
ZXIuIERvbid0IGNoYW5nZSBUaWdlciBiZWhhdmlvci4KICAgICAgICAgTlNNZW51SXRlbSAqbWVu
dUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CiAgICAgICAgICAgICBCT09MIHBhbmVsU2hv
d2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5l
bF0gaXNWaXNpYmxlXTsKQEAgLTMyMTksMTIgKzI5ODAsMTIgQEAgLSAoQk9PTCl2YWxpZGF0ZVVz
ZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJm
YWNlSXQKICAgICAgICAgfQogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogICAgIH0g
Ci0gICAgCisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VBdHRyaWJ1dGVzOikK
ICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQ29sb3I6KSAgICAgICAg
CiAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUZvbnQ6KSkKICAgICAg
ICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikKICAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9
PSBAc2VsZWN0b3IobG93ZXJjYXNlV29yZDopCiAgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSkKQEAgLTMyMzQsMjUgKzI5OTUsMjUgQEAgLSAoQk9P
TCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0
ZWRVc2VySW50ZXJmYWNlSXQKICAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
anVtcFRvU2VsZWN0aW9uOikKICAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
Y29weUZvbnQ6KSkKICAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dIHx8IChbc2Vs
ZiBfaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2hhc0luc2VydGlvblBvaW50XSk7Ci0gICAgCisKICAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjop
KQogICAgICAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0VkaXRhYmxlXSAmJiBbc2VsZiBf
Y2FuRWRpdFJpY2hseV07Ci0gICAgCisKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfaWdu
b3JlU3BlbGxpbmdGcm9tTWVudTopCiAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KF9sZWFyblNwZWxsaW5nRnJvbU1lbnU6KQogICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxl
Y3Rvcih0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KSkKICAgICAgICAgcmV0dXJuIFtzZWxm
IF9oYXNTZWxlY3Rpb25dOwotICAgIAorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFz
dGU6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNQbGFpblRleHQ6KSkKICAgICAgICAg
cmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCkuY2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1l
LT5lZGl0b3IoKS5jYW5QYXN0ZSgpKTsKLSAgICAKKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKHBhc3RlQXNSaWNoVGV4dDopKQogICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5l
ZGl0b3IoKS5jYW5ESFRNTFBhc3RlKCkKICAgICAgICAgICAgIHx8IChmcmFtZS0+ZWRpdG9yKCku
Y2FuUGFzdGUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkpOwotICAgIAorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGVy
Zm9ybUZpbmRQYW5lbEFjdGlvbjopKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgCisKICAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KSkKICAg
ICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dOwogCkBAIC0zMjc5LDYgKzMwNDAsNyBA
QCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxO
U1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBbc2Vs
ZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0
aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCiAgICAg
Ly8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdl
IG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAogICAgIC8vIGNvZGUg
Y2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCkBAIC0zMjg4LDMwICszMDUwLDM1IEBAIC0gKEJP
T0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRh
dGVkVXNlckludGVyZmFjZUl0CiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYg
c21hcnRJbnNlcnREZWxldGVFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOikpIHsKICAgICAgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAgIGlmIChb
bWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQogICAgICAgICAgICAg
W21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFi
bGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwogICAgICAgICByZXR1cm4gW3NlbGYgX2Nh
bkVkaXRdOwogICAgIH0KKwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9t
YXRpY0xpbmtEZXRlY3Rpb246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pCiAgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYg
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRl
XTsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOikpIHsKICAg
ICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAg
IGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQogICAgICAg
ICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CiAgICAgICAgIHJldHVybiBbc2Vs
ZiBfY2FuRWRpdF07CiAgICAgfQorCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xl
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKICAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0
ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZD
bGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQogICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRl
OltzZWxmIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF0gPyBOU09uU3RhdGUgOiBO
U09mZlN0YXRlXTsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKICAgICB9CisKICAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b246KSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRl
bTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNz
XV0pCkBAIC0zMzE5LDcgKzMwODYsNyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0
ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdAogICAgICAg
ICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwogICAgIH0KIAotICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOmFjdGlvbl07CisgICAgYXV0byBj
b21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOmFjdGlvbl07CiAgICAgaWYgKGNv
bW1hbmQuaXNTdXBwb3J0ZWQoKSkgewogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKICAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pCkBAIC0zMzM5LDcgKzMxMDYsOCBAQCAtIChCT09MKXZhbGlkYXRl
VXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVt
CiAgICAgQk9PTCByZXN1bHQgPSBbc2VsZiB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91
dERlbGVnYXRlOml0ZW1dOwogICAgIHJldHVybiBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xl
YW4ocmVzdWx0LCBbc2VsZiBfd2ViVmlld10sIEBzZWxlY3Rvcih3ZWJWaWV3OnZhbGlkYXRlVXNl
ckludGVyZmFjZUl0ZW06ZGVmYXVsdFZhbGlkYXRpb246KSwgaXRlbSwgcmVzdWx0KTsKIH0KLSNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChC
T09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogewpAQCAtMzM0NywyMCArMzExNSwxNSBAQCAtIChC
T09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogICAgIC8vIFdlIGhhdmUgdG8gcGFzcyB0aGUgZXZl
bnQgZG93biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8gYmUgc3VyZSB3ZSBkb24ndCBoaXQgYSBz
dWJ2aWV3LgogICAgIC8vIERvIGFjY2VwdCBmaXJzdCByZXNwb25kZXIgYXQgYW55IG90aGVyIHRp
bWUsIGZvciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZlbnRzLAogICAgIC8vIG9yIGZyb20gY2Fs
bHMgYmFjayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdpbiBtb3VzZS1kb3duIGV2ZW50IGhhbmRs
aW5nLgotI2lmICFQTEFURk9STShJT1MpICAgICAgICAgICAgCi0gICAgTlNFdmVudCAqZXZlbnQg
PSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TRXZlbnRU
eXBlTGVmdE1vdXNlRG93bgotICAgICAgICAgICAgJiYgIV9wcml2YXRlLT5oYW5kbGluZ01vdXNl
RG93bkV2ZW50Ci0gICAgICAgICAgICAmJiBOU1BvaW50SW5SZWN0KFtldmVudCBsb2NhdGlvbklu
V2luZG93XSwgW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgdmlzaWJsZVJlY3RdIHRvVmlldzpuaWxd
KSkgewotICAgICAgICByZXR1cm4gTk87Ci0gICAgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBX
ZWJFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKICNlbHNlCiAgICAgV2ViRXZl
bnQgKmV2ZW50ID0gW1dBS1dpbmRvdyBjdXJyZW50RXZlbnRdOworI2VuZGlmCiAgICAgaWYgKGV2
ZW50ICYmIGV2ZW50LnR5cGUgPT0gV2ViRXZlbnRNb3VzZURvd24KICAgICAgICAgICAgICYmICFf
cHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudAogICAgICAgICAgICAgJiYgTlNQb2ludElu
UmVjdChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIHZp
c2libGVSZWN0XSB0b1ZpZXc6bmlsXSkpCiAgICAgICAgIHJldHVybiBOTzsKLSNlbmRpZgogICAg
IHJldHVybiBZRVM7CiB9CiAKQEAgLTM0MTQsNyArMzE3Nyw4IEBAIC0gKEJPT0wpbWFpbnRhaW5z
SW5hY3RpdmVTZWxlY3Rpb24KICNlbmRpZgogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQ
TEFURk9STShNQUMpCisKIC0gKHZvaWQpYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzCiB7CiAgICAgaWYg
KF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQpAQCAtMzQ1MCw4ICsz
MjE0LDYgQEAgLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnMKICAgICBOU05vdGlmaWNhdGlvbkNl
bnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdOwogICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3Iod2luZG93RGlkQmVjb21lS2V5OikgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtl
eU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZFJlc2lnbktleTopIG5hbWU6
TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dX
aWxsT3JkZXJPblNjcmVlbjopIG5hbWU6TlNXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNh
dGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxPcmRlck9mZlNjcmVlbjopIG5hbWU6
TlNXaW5kb3dXaWxsT3JkZXJPZmZTY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CiAg
ICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rv
cih3aW5kb3dXaWxsQ2xvc2U6KSBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9i
amVjdDp3aW5kb3ddOwogICAgIAogICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmlj
YXRpb25zID0gdHJ1ZTsKQEAgLTM0NzMsNyArMzIzNSw4IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVU
b1N1cGVydmlldwogICAgICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpfV2ViVmlld0RpZFN0YXJ0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ05vdGlmaWNhdGlvbiBvYmplY3Q6d2ViVmlldyB1c2VySW5mbzpuaWxdOwogICAgIH0K
IH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
CiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwogewpAQCAt
MzQ4NCw3ICszMjQ3LDcgQEAgLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
Kil3aW5kb3cKICAgICBpZiAoIV9wcml2YXRlKQogICAgICAgICByZXR1cm47CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBGSVhNRTogU29tZSBvZiB0aGVz
ZSBjYWxscyBtYXkgbm90IHdvcmsgYmVjYXVzZSB0aGlzIHZpZXcgbWF5IGJlIGFscmVhZHkgcmVt
b3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LgogICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZl
cnNdOwogICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwpAQCAtMzUwNyw3ICsz
MjcwLDcgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93CiAgICAgW3NlbGYgX3N0b3BBdXRv
c2Nyb2xsVGltZXJdOwogICAgIGlmIChbc2VsZiB3aW5kb3ddKSB7CiAgICAgICAgIF9wcml2YXRl
LT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgW3NlbGYgYWRk
V2luZG93T2JzZXJ2ZXJzXTsKICAgICAgICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsK
ICNlbmRpZgpAQCAtMzUxOCw3ICszMjgxLDcgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93
CiAKICAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IE5TWmVyb1BvaW50Owog
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmICghX3By
aXZhdGUtPmZsYWdzQ2hhbmdlZEV2ZW50TW9uaXRvcikgewogICAgICAgICAgICAgX19ibG9jayBX
ZWJIVE1MVmlldyAqd2Vha1NlbGYgPSBzZWxmOwogICAgICAgICAgICAgX3ByaXZhdGUtPmZsYWdz
Q2hhbmdlZEV2ZW50TW9uaXRvciA9IFtOU0V2ZW50IGFkZExvY2FsTW9uaXRvckZvckV2ZW50c01h
dGNoaW5nTWFzazpOU0V2ZW50TWFza0ZsYWdzQ2hhbmdlZCBoYW5kbGVyOl4oTlNFdmVudCAqZmxh
Z3NDaGFuZ2VkRXZlbnQpIHsKQEAgLTM1MzMsMzggKzMyOTYsMjAgQEAgLSAodm9pZCl2aWV3RGlk
TW92ZVRvV2luZG93CiAgICAgfQogfQogCi0tICh2b2lkKV93ZWJfbWFrZVBsdWdpblN1YnZpZXdz
UGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0Ci17Ci0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLy8gQ29weSBzdWJ2aWV3cyBiZWNh
dXNlIFtzZWxmIHN1YnZpZXdzXSByZXR1cm5zIHRoZSB2aWV3J3MgbXV0YWJsZSBpbnRlcm5hbCBh
cnJheSwKLSAgICAvLyBhbmQgd2UgbXVzdCBhdm9pZCBtdXRhdGluZyB0aGUgYXJyYXkgd2hpbGUg
ZW51bWVyYXRpbmcgaXQuCi0gICAgTlNBcnJheSAqc3Vidmlld3MgPSBbW3NlbGYgc3Vidmlld3Nd
IGNvcHldOwotICAgIAotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtzdWJ2aWV3cyBv
YmplY3RFbnVtZXJhdG9yXTsKLSAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXc7Ci0gICAg
d2hpbGUgKCh2aWV3ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkKLSAgICAgICAg
aWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3Nd
XSkKLSAgICAgICAgICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0
Om9iamVjdF07Ci0gICAgCi0gICAgW3N1YnZpZXdzIHJlbGVhc2VdOwotI2VuZGlmCi19Ci0KIC0g
KHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKIHsK
LSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAg
IFtzZWxmIF93ZWJfbWFrZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2
aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KSB3aXRoT2JqZWN0Omhvc3RXaW5kb3ddOwogI2VuZGlm
CiB9CiAKIC0gKHZvaWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKIHsKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFtzZWxmIF93ZWJfbWFr
ZVBsdWdpblN1YnZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9z
dFdpbmRvdykgd2l0aE9iamVjdDpuaWxdOwogI2VuZGlmCiB9CiAKLQogLSAodm9pZClhZGRTdWJ2
aWV3OihOU1ZpZXcgKil2aWV3CiB7CiAgICAgW3N1cGVyIGFkZFN1YnZpZXc6dmlld107CkBAIC0z
NTgyLDEzICszMzI3LDYgQEAgLSAodm9pZClhZGRTdWJ2aWV3OihOU1ZpZXcgKil2aWV3CiAKIC0g
KHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKIHsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgLy8gSGF2ZSB0byBudWxsLWNoZWNrIF9wcml2YXRlLCBzaW5jZSB0aGlzIGNhbiBi
ZSBjYWxsZWQgdmlhIC1kZWFsbG9jIHdoZW4KLSAgICAvLyBjbGVhbmluZyB1cCB0aGUgdGhlIGxh
eWVySG9zdGluZ1ZpZXcuCi0gICAgaWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzKQotICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgcmVt
b3ZlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1v
ZGUgY2hhbmdlLiBXZSB3aWxsIHN0aWxsIGRvIGxheW91dCBvciB0aGUgcHJpbnRpbmcgbW9kZSBj
aGFuZ2UgZXZlbiB0aG91Z2ggdGhpcyB2aWV3IGlzIG5vIGxvbmdlciBpbiB0aGUgdmlldyBoaWVy
YXJjaHkuIiwgb2JqZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKLSNlbmRpZgot
CiAgICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzpzdWJ2aWV3XSkKICAg
ICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95UGx1Z2luOnN1YnZpZXddOwog
CkBAIC0zNjYxLDcgKzMzOTksOCBAQCAtICh2b2lkKWxheW91dAogICAgIFtzZWxmIGxheW91dFRv
TWluaW11bVBhZ2VXaWR0aDowIGhlaWdodDowIG9yaWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2luYWxQ
YWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRqdXN0aW5nVmlld1NpemU6Tk9dOwog
fQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC8vIERlbGl2ZXIg
bW91c2V1cCBldmVudHMgdG8gdGhlIERPTSBmb3IgYnV0dG9uIDIuCiAtICh2b2lkKXJpZ2h0TW91
c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CkBAIC0zNzY5LDEwICszNTA4LDcgQEAgc3RhdGljIFJl
dGFpblB0cjxOU0FycmF5PiBmaXhNZW51c1JlY2VpdmVkRnJvbU9sZENsaWVudHMoTlNBcnJheSAq
ZGVsZWdhdGVTdXBwbGkKICAgICAgICAgcmV0dXJuIG5ld01lbnVJdGVtczsKICAgICAKICAgICAv
LyBSZXN0b3JlIHRoZSBtb2Rlcm4gdGFncyB0byB0aGUgbWVudSBpdGVtcyB3aG9zZSB0YWdzIHdl
IGFsdGVyZWQgaW4gZml4TWVudXNUb1NlbmRUb09sZENsaWVudHMuIAotICAgIHVuc2lnbmVkIG5l
d0l0ZW1zQ291bnQgPSBbbmV3TWVudUl0ZW1zIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbmV3SXRlbXNDb3VudDsgKytpKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKml0ZW0g
PSBbbmV3TWVudUl0ZW1zIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIAorICAgIGZvciAoTlNN
ZW51SXRlbSAqaXRlbSBpbiBuZXdNZW51SXRlbXMuZ2V0KCkpIHsKICAgICAgICAgaW50IHRhZyA9
IFtpdGVtIHRhZ107CiAgICAgICAgIGludCBtb2Rlcm5UYWcgPSB0YWc7CiAgICAgICAgIApAQCAt
NDA1Niw3ICszNzkyLDggQEAgLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZl
bnQKICAgICAKICAgICByZXR1cm4gbWVudS5hdXRvcmVsZWFzZSgpOwogfQotI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKEJPT0wpc2VhcmNo
Rm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0
aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcKIHsKQEAgLTQwODAsNyArMzgx
Nyw4IEBAIC0gKEJPT0wpaXNPcGFxdWUKICAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBkcmF3
c0JhY2tncm91bmRdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIC0gKHZvaWQpc2V0TGF5ZXI6KENBTGF5ZXIgKilsYXllcgogewogICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CkBAIC00MDkwLDYgKzM4MjgsNyBAQCAtICh2
b2lkKXNldExheWVyOihDQUxheWVyICopbGF5ZXIKIAogICAgIFtzdXBlciBzZXRMYXllcjpsYXll
cl07CiB9CisKICNlbmRpZgogCiAjaWYgIUxPR19ESVNBQkxFRApAQCAtNDE1MSwxNyArMzg5MCwx
NSBAQCAtICh2b2lkKXNldE5lZWRzVG9BcHBseVN0eWxlczogKEJPT0wpZmxhZwogCiAtICh2b2lk
KWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07
CiAgICAgTlNSZWN0Q2xpcChyZWN0KTsKICAgICAgICAgCiAgICAgQVNTRVJUKFtbc2VsZiBzdXBl
cnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pOwogCiAgICAgWyhXZWJD
bGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gc2V0QWRkaXRpb25hbENsaXA6cmVjdF07Ci0jZW5k
aWYKIAogICAgIEB0cnkgewotI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIGlmIChbc2VsZiBf
dHJhbnNwYXJlbnRCYWNrZ3JvdW5kXSkgewogICAgICAgICAgICAgW1tOU0NvbG9yIGNsZWFyQ29s
b3JdIHNldF07CiAgICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKQEAgLTQxNzAsNyArMzkw
Nyw3IEBAIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAgICAgW1tz
ZWxmIF9mcmFtZV0gX2RyYXdSZWN0OnJlY3QgY29udGVudHNPbmx5OllFU107CiAKLSNpZiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9
IFtzZWxmIF93ZWJWaWV3XTsKIAogICAgICAgICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8
cmRhcjovL3Byb2JsZW0vNTAyMzU0NT4uIFdlIGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVy
ZSBkcmF3UmVjdCB3aWxsIGJlCkBAIC00MTc5LDI2ICszOTE2LDIyIEBAIC0gKHZvaWQpZHJhd1Np
bmdsZVJlY3Q6KE5TUmVjdClyZWN0CiAgICAgICAgIHN0YXRpYyBCT09MIHZlcnNpb24zT3JMYXRl
ckNsaWVudCA9IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRI
T1VUX1FVSUNLQk9PS1NfUVVJUkspOwogICAgICAgICBpZiAodmVyc2lvbjNPckxhdGVyQ2xpZW50
KQogICAgICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcgZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpzZWxm
XV07CisgICAgICAgIC8vIENsaWVudHMgZG9uJ3QgbmVlZCBzdXBwb3J0IGZvciB0aGUgZGlkRHJh
d1JlY3QgZGVsZWdhdGUgbWV0aG9kIGFib3ZlIG9uIGlPUy4KKyAgICAgICAgLy8gQWxzbywgYSBs
b25nIHRpbWUgYWdvLCB3aGVuIGl0IHdhcyBzdXBwb3J0ZWQsIGl0IHdhcyBwYXJ0IG9mIGEgdGhy
ZWFkaW5nIHByb2JsZW0uCiAKICAgICAgICAgaWYgKFdlYk5vZGVIaWdobGlnaHQgKmN1cnJlbnRI
aWdobGlnaHQgPSBbd2ViVmlldyBjdXJyZW50Tm9kZUhpZ2hsaWdodF0pCiAgICAgICAgICAgICBb
Y3VycmVudEhpZ2hsaWdodCBzZXROZWVkc1VwZGF0ZUluVGFyZ2V0Vmlld1JlY3Q6W3NlbGYgY29u
dmVydFJlY3Q6cmVjdCB0b1ZpZXc6W2N1cnJlbnRIaWdobGlnaHQgdGFyZ2V0Vmlld11dXTsKLSNl
bHNlCi0gICAgICAgIC8vIERvbid0IHNlbmQgZGlkRHJhd1JlY3QsIGl0IGlzIG5vdCB1c2VkIGJ5
IGFueW9uZSBhbmQgaXQgaXMgY2F1c2luZyB0aHJlYWQgc3luY2hyb25pemF0aW9uIHByb2JsZW1z
LgotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBbKFdlYkNsaXBWaWV3ICop
W3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKLQogICAgICAgICBbTlNHcmFw
aGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwotI2VuZGlmCiAgICAgfSBAY2F0Y2gg
KE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgewotI2lmICFQTEFURk9STShJT1MpCiAgICAg
ICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25hbENsaXBd
OwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwotI2Vu
ZGlmCisKICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gY2F1Z2h0IHdoaWxlIGRyYXdpbmc6
ICVAIiwgbG9jYWxFeGNlcHRpb24pOwogICAgICAgICBbbG9jYWxFeGNlcHRpb24gcmFpc2VdOwog
ICAgIH0KKyNlbmRpZgogfQogCiAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdApAQCAtNDIw
Nyw3ICszOTQwLDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKICAgICAKICAgICBU
cmFjZVNjb3BlIHNjb3BlKFdlYkhUTUxWaWV3UGFpbnRTdGFydCwgV2ViSFRNTFZpZXdQYWludEVu
ZCk7CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBjb25zdCBO
U1JlY3QgKnJlY3RzOwogICAgIE5TSW50ZWdlciBjb3VudDsKICAgICBbc2VsZiBnZXRSZWN0c0Jl
aW5nRHJhd246JnJlY3RzIGNvdW50OiZjb3VudF07CkBAIC00MjIxLDcgKzM5NTQsNyBAQCAtICh2
b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRG
T1JNKE1BQykKICAgICAvLyBJZiBjb3VudCA9PSAwIGhlcmUsIHVzZSB0aGUgcmVjdCBwYXNzZWQg
aW4gZm9yIGRyYXdpbmcuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvcjogCiAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzM5MDgyODI+IFJFR1JFU1NJT04gKE1haWwpOiBObyBkcmFnIGltYWdlIGRyYWdn
aW5nIHNlbGVjdGVkIHRleHQgaW4gQmxvdCBhbmQgTWFpbCAKICAgICAvLyBUaGUgcmVhc29uIGZv
ciB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5
IGZyb20gdGhlIGNvZGUgCkBAIC00MjU3LDE0ICszOTkwLDE0IEBAIC0gKHZvaWQpZHJhd1JlY3Q6
KE5TUmVjdClyZWN0CiAgICAgTE9HKFRpbWluZywgIiVzIGRyYXcgc2Vjb25kcyA9ICVmIiwgd2lk
Z2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEoKSwgdGhpc1RpbWUpOwogI2VuZGlm
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoc3Vidmll
d3NXZXJlU2V0QXNpZGUpCiAgICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKICNlbmRp
ZgogCiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIE9ubHkgZG8gdGhlIHN5bmNocm9u
aXphdGlvbiBkYW5jZSBpZiB3ZSdyZSBkcmF3aW5nIGludG8gdGhlIHdpbmRvdywgb3RoZXJ3aXNl
CiAgICAgLy8gd2UgcmlzayBkaXNhYmxpbmcgc2NyZWVuIHVwZGF0ZXMgd2hlbiBubyBmbHVzaCBp
cyBwZW5kaW5nLgogICAgIGlmIChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdID09
IFtbc2VsZiB3aW5kb3ddIGdyYXBoaWNzQ29udGV4dF0gJiYgW3dlYlZpZXcgX25lZWRzT25lU2hv
dERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7CkBAIC00MjgzLDcgKzQwMTYsOCBAQCAtICh2b2lk
KWRyYXdSZWN0OihOU1JlY3QpcmVjdAogICAgICAgICBDYWxsVUlEZWxlZ2F0ZSh3ZWJWaWV3LCBA
c2VsZWN0b3Iod2ViVmlldzpkaWREcmF3RnJhbWU6KSwgW3NlbGYgX2ZyYW1lXSk7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLy8gVHVybiBvZmYgdGhlIGFk
ZGl0aW9uYWwgY2xpcCB3aGlsZSBjb21wdXRpbmcgb3VyIHZpc2libGVSZWN0LgogLSAoTlNSZWN0
KXZpc2libGVSZWN0CiB7CkBAIC00MjkyLDExICs0MDI2LDkgQEAgLSAoTlNSZWN0KXZpc2libGVS
ZWN0CiAKICAgICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAoV2ViQ2xpcFZpZXcgKilbc2VsZiBz
dXBlcnZpZXddOwogCi0gICAgQk9PTCBoYXNBZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBoYXNB
ZGRpdGlvbmFsQ2xpcF07Ci0gICAgaWYgKCFoYXNBZGRpdGlvbmFsQ2xpcCkgeworICAgIGlmICgh
W2NsaXBWaWV3IGhhc0FkZGl0aW9uYWxDbGlwXSkKICAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNp
YmxlUmVjdF07Ci0gICAgfQotICAgIAorCiAgICAgTlNSZWN0IGFkZGl0aW9uYWxDbGlwID0gW2Ns
aXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKICAgICBbY2xpcFZpZXcgcmVzZXRBZGRpdGlvbmFsQ2xp
cF07CiAgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW3N1cGVyIHZpc2libGVSZWN0XTsKQEAgLTQz
NDcsMjIgKzQwNzksNiBAQCAtICh2b2lkKXdpbmRvd0RpZFJlc2lnbktleTooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KICAgICB9CiB9CiAKLS0gKHZvaWQpd2luZG93V2lsbE9yZGVyT25T
Y3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFwdGhyZWFk
X21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6
X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLX0KLQotLSAodm9pZCl3aW5kb3dXaWxsT3JkZXJPZmZTY3JlZW46KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFwdGhyZWFkX21haW5fbnAo
KSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRo
T2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLX0KLQogLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCiB7CiAgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgewpAQCAtNDM3Myw1MSAr
NDA4OSw0NSBAQCAtICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGlu
Z0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBk
ZXN0cm95QWxsUGx1Z2luc107CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAotI2lmICFQ
TEFURk9STShJT1MpCi0tICh2b2lkKXNjcm9sbFdoZWVsOihOU0V2ZW50ICopZXZlbnQKLSNlbHNl
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKXNjcm9sbFdoZWVsOihXZWJFdmVu
dCAqKWV2ZW50Ci0jZW5kaWYKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1B
QykKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAogICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCiAgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgLy8gRklY
TUU6IFdoeSBub3QgZG8gdGhpcyBvbiBpT1MgdG9vPwogICAgIFtbZXZlbnQgcmV0YWluXSBhdXRv
cmVsZWFzZV07CiAjZW5kaWYKIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkud2hlZWxFdmVudChldmVudCkpCisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2
ZW50SGFuZGxlcigpLndoZWVsRXZlbnQoZXZlbnQpKSB7CisjaWYgUExBVEZPUk0oTUFDKQogICAg
ICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZlbnRdOwotCi0jZWxzZQotICAgIGlmIChmcmFtZSkK
LSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLndoZWVsRXZlbnQoZXZlbnQpOwogI2VuZGlm
CisgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFtbW3NlbGYgX3dlYlZpZXddIF9pbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyXSB3ZWJWaWV3OltzZWxmIF93ZWJWaWV3XSBkaWRIYW5kbGVT
Y3JvbGxXaGVlbDpldmVudF07CiAjZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi0tIChC
T09MKV9pc1NlbGVjdGlvbkV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBOU1BvaW50IHBv
aW50ID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdOwotICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hh
ZG93Q29udGVudDpZRVNdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9v
bFZhbHVlXTsKLX0KLSNlbHNlCiAtIChCT09MKV9pc1NlbGVjdGlvbkV2ZW50OihXZWJFdmVudCAq
KWV2ZW50CiB7Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpldmVudC5s
b2NhdGlvbkluV2luZG93IGZyb21WaWV3Om5pbF07Ci0gICAgcmV0dXJuIFtbW3NlbGYgZWxlbWVu
dEF0UG9pbnQ6cG9pbnRdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9v
bFZhbHVlXTsKLX0KKyNpZiBQTEFURk9STShNQUMpCisgICAgYm9vbCBhbGxvd1NoYWRvd0NvbnRl
bnQgPSB0cnVlOworI2Vsc2UKKyAgICBib29sIGFsbG93U2hhZG93Q29udGVudCA9IGZhbHNlOyAv
LyBGSVhNRTogV2h5IGRvZXMgdGhpcyBuZWVkIHRvIGJlIGZhbHNlIG9uIGlPUz8KICNlbmRpZgog
Ci0jaWYgIVBMQVRGT1JNKElPUykKKyAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBv
aW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOworICAgIHJldHVybiBb
W1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDphbGxvd1NoYWRv
d0NvbnRlbnRdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVl
XTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfaXNTY3JvbGxCYXJFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CiAgICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2lu
dDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKQEAgLTQ0ODMsMTcgKzQx
OTMsMTQgQEAgLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6KE5TRXZl
bnQgKilldmVudAogICAgIH0KICAgICByZXR1cm4gW2hpdFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dP
cmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi0j
aWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLSNl
bHNlCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKW1vdXNlRG93bjooV2ViRXZl
bnQgKilldmVudAotI2VuZGlmCiB7CiAgICAgW1tzZWxmIF93ZWJWaWV3XSBwcmVwYXJlRm9yTW91
c2VEb3duXTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
ICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KQEAgLTQ1MDEsNyArNDIwOCw4IEBA
IC0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKWV2ZW50CiAjZW5kaWYKIAogICAgIFJldGFp
blB0cjxXZWJIVE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKLSNpZiAhUExBVEZPUk0oSU9TKQor
CisjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmIChbW3NlbGYgaW5wdXRDb250ZXh0XSB3YW50c1Rv
SGFuZGxlTW91c2VFdmVudHNdICYmIFtbc2VsZiBpbnB1dENvbnRleHRdIGhhbmRsZU1vdXNlRXZl
bnQ6ZXZlbnRdKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTQ1NDksNiArNDI1Nyw3IEBA
IC0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKWV2ZW50CiB9CiAKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQorCiAtICh2b2lkKXRvdWNoOihXZWJFdmVudCAqKWV2ZW50CiB7CiAgICAgUmV0
YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxmOwpAQCAtNDU1OCw2ICs0MjY3LDcg
QEAgLSAodm9pZCl0b3VjaDooV2ViRXZlbnQgKilldmVudAogICAgIGlmIChGcmFtZSogY29yZWZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRs
ZXIoKS50b3VjaEV2ZW50KGV2ZW50KTsKIH0KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKSAmJiBQTEFURk9STShNQUMpCkBAIC00NjU0LDcgKzQzNjQsNyBAQCAtIChOU0FycmF5
ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9w
RGVzdGluYXRpb24KICAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOwogICAgIE5TVVJM
ICpkcmFnZ2luZ0VsZW1lbnRVUkwgPSBuaWw7CiAgICAgCi0gICAgaWYgKFdlYkNvcmU6OkNhY2hl
ZEltYWdlKiB0aWZmUmVzb3VyY2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0p
IHsKKyAgICBpZiAoYXV0byogdGlmZlJlc291cmNlID0gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlKSB7CiAgICAgICAgIGlmIChhdXRvKiBidWZmZXIgPSB0aWZmUmVzb3VyY2Ut
PnJlc291cmNlQnVmZmVyKCkpIHsKICAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNl
ID0gdGlmZlJlc291cmNlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKICAgICAgICAgICAg
IGRyYWdnaW5nRWxlbWVudFVSTCA9IFtyZXNwb25zZSBVUkxdOwpAQCAtNDc0MiwxNSArNDQ1Miwx
MSBAQCAtICh2b2lkKWRyYWdnaW5nU2Vzc2lvbjooTlNEcmFnZ2luZ1Nlc3Npb24gKilzZXNzaW9u
IGVuZGVkQXRQb2ludDooTlNQb2ludClzY3JlZQogCiAjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkgJiYgUExBVEZPUk0oTUFDKQogCi0jaWYgIVBMQVRGT1JNKElPUykKLS0gKHZvaWQpbW91
c2VVcDooTlNFdmVudCAqKWV2ZW50Ci0jZWxzZQogLSAodm9pZCltb3VzZVVwOihXZWJFdmVudCAq
KWV2ZW50Ci0jZW5kaWYKIHsKICAgICBbW3NlbGYgX3dlYlZpZXddIHByZXBhcmVGb3JNb3VzZVVw
XTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIFRoZXJl
J3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0
ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVs
ZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAv
LyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0g
aW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KQEAgLTQ3NTksNyArNDQ2NSw3IEBAIC0gKHZv
aWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAogCiAgICAgW3NlbGYgX3NldE1vdXNlRG93bkV2
ZW50Om5pbF07CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBOU0lucHV0TWFuYWdlciAqY3VycmVu
dElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKQEAg
LTQ3NjcsNiArNDQ3Myw3IEBAIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAogICAg
ICAgICByZXR1cm47CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKKwogICAg
IFtzZWxmIHJldGFpbl07CiAKICAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CkBAIC00
Nzc5LDE4ICs0NDg2LDIxIEBAIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAogI2Vu
ZGlmCiAgICAgICAgIH0KICAgICB9Ci0jaWYgIVBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JN
KE1BQykKICAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07CiAjZW5kaWYK
IAogICAgIFtzZWxmIHJlbGVhc2VdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCisKIC0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpldmVudF07CiB9CisKICNlbmRpZgogCiAt
ICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKQEAgLTQ4MDks
MTMgKzQ1MTksMTUgQEAgLSAodm9pZClwcmVzc3VyZUNoYW5nZVdpdGhFdmVudDooTlNFdmVudCAq
KWV2ZW50CiAjZW5kaWYKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQorCiAvLyByZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRob2QgaXMgdGhlIHdheSB3ZSB0ZWxs
IEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcKIC8vIHRvIGJlIGluIHRoZSBrZXkg
bG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMiIGlzIG5vdCBvbi4KIC0gKEJPT0wp
bmVlZHNQYW5lbFRvQmVjb21lS2V5CiB7CiAgICAgcmV0dXJuIFlFUzsKIH0KKwogI2VuZGlmCiAK
IC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiBhbnl0aGlu
ZyB0aHJvdWdoIHRoZSBOU1RleHRJbnB1dApAQCAtNDgyOCwxNiArNDU0MCwxOCBAQCBzdGF0aWMg
Qk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1lKQogICAgIHJldHVybiAhc2VsZWN0aW9u
LmlzTm9uZSgpICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCi0jaWYgIVBM
QVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBCT09MIGlzSW5QYXNzd29y
ZEZpZWxkKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CiB9CisK
ICNlbmRpZgogCiBzdGF0aWMgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGN1cnJlbnRLZXlib2FyZEV2
ZW50KEZyYW1lKiBjb3JlRnJhbWUpCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9S
TShNQUMpCiAgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTQ4NzIsNyArNDU4Niw3IEBA
IC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10g
X2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKICAgICAgICAgZGlyZWN0aW9uID0gW1tz
ZWxmIHdpbmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVjdGlvbl07CiAKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKICNl
bmRpZgogICAgIApAQCAtNDg4MCw3ICs0NTk0LDcgQEAgLSAoQk9PTCliZWNvbWVGaXJzdFJlc3Bv
bmRlcgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBZRVM7CiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dCA9
IGlzVGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBhc3N3b3JkRmllbGQoZnJhbWUpOwogICAgIGlm
IChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewog
ICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0
OwpAQCAtNDkxOCw3ICs0NjMyLDcgQEAgLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgogewog
ICAgIEJPT0wgcmVzaWduID0gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKICAgICBpZiAo
cmVzaWduKSB7Ci0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IGlmIChfcHJpdmF0ZS0+aXNJblNlY3VyZUlucHV0U3RhdGUpIHsKICAgICAgICAgICAgIERpc2Fi
bGVTZWN1cmVFdmVudElucHV0KCk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+aXNJblNlY3VyZUlu
cHV0U3RhdGUgPSBOTzsKQEAgLTQ5NDUsMTcgKzQ2NTksMTEgQEAgLSAoQk9PTClyZXNpZ25GaXJz
dFJlc3BvbmRlcgogICAgICAgICAgICAgICAgIFtzZWxmIGNsZWFyRm9jdXNdOwogICAgICAgICB9
CiAgICAgICAgIAotI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIGlkIG5leHRSZXNwb25kZXIg
PSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZ107CiAgICAg
ICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3ID0gW25leHRSZXNwb25kZXIgaXNLaW5k
T2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KICAgICAgICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlz
RGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XV07CiAg
ICAgICAgIGlmICghbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3KQogICAgICAgICAgICAgcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZChmYWxzZSk7Ci0jZWxzZQotICAgICAgICBOU1Zp
ZXcqIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJBZnRl
clJlc2lnbmluZ107Ci0gICAgICAgIGlmIChuZXh0UmVzcG9uZGVyICYmICFbbmV4dFJlc3BvbmRl
ciBpc0Rlc2NlbmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld11d
KQotICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZChmYWxzZSk7
Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIHJlc2lnbjsKIH0KQEAgLTQ5NjgsMTIgKzQ2NzYs
MTAgQEAgLSAodm9pZClzZXREYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQog
CiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKIAotICAgIFtkYXRhU291cmNlIHJldGFp
bl07Ci0gICAgW19wcml2YXRlLT5kYXRhU291cmNlIHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5k
YXRhU291cmNlID0gZGF0YVNvdXJjZTsKICAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIg
c2V0RGF0YVNvdXJjZTpkYXRhU291cmNlXTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmICghX3ByaXZhdGUtPmluc3RhbGxlZFRyYWNraW5nQXJlYSkgewog
ICAgICAgICBOU1RyYWNraW5nQXJlYU9wdGlvbnMgb3B0aW9ucyA9IE5TVHJhY2tpbmdNb3VzZU1v
dmVkIHwgTlNUcmFja2luZ01vdXNlRW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdJblZpc2li
bGVSZWN0IHwgTlNUcmFja2luZ0N1cnNvclVwZGF0ZTsKICAgICAgICAgaWYgKFdLUmVjb21tZW5k
ZWRTY3JvbGxlclN0eWxlKCkgPT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5CkBAIC00OTg1LDEwICs0
NjkxLDcgQEAgLSAodm9pZClzZXREYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJj
ZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvcHRpb25zIHw9IE5TVHJhY2tpbmdBY3RpdmVJ
bktleVdpbmRvdzsKIAotICAgICAgICBOU1RyYWNraW5nQXJlYSAqdHJhY2tpbmdBcmVhID0gW1tO
U1RyYWNraW5nQXJlYSBhbGxvY10gCi0gICAgICAgICAgICBpbml0V2l0aFJlY3Q6W3NlbGYgZnJh
bWVdIG9wdGlvbnM6b3B0aW9ucyBvd25lcjpzZWxmIHVzZXJJbmZvOm5pbF07Ci0gICAgICAgIFtz
ZWxmIGFkZFRyYWNraW5nQXJlYTp0cmFja2luZ0FyZWFdOwotICAgICAgICBbdHJhY2tpbmdBcmVh
IHJlbGVhc2VdOworICAgICAgICBbc2VsZiBhZGRUcmFja2luZ0FyZWE6YWRvcHROUyhbW05TVHJh
Y2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W3NlbGYgZnJhbWVdIG9wdGlvbnM6b3B0aW9u
cyBvd25lcjpzZWxmIHVzZXJJbmZvOm5pbF0pLmdldCgpXTsKICAgICAgICAgX3ByaXZhdGUtPmlu
c3RhbGxlZFRyYWNraW5nQXJlYSA9IFlFUzsKICAgICB9CiAjZW5kaWYKQEAgLTQ5OTgsMTMgKzQ3
MDEsMTUgQEAgLSAodm9pZClkYXRhU291cmNlVXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFT
b3VyY2UKIHsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi0vLyBUaGlzIGlzIGFuIG92ZXJyaWRl
IG9mIGFuIE5TQ29udHJvbCBtZXRob2QgdGhhdCB3YW50cyB0byByZXBhaW50IHRoZSBlbnRpcmUg
dmlldyB3aGVuIHRoZSB3aW5kb3cgcmVzaWducy9iZWNvbWVzCi0vLyBrZXkuICBXZWJIVE1MVmll
dyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUg
cGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQorI2lmIFBMQVRGT1JNKE1BQykKKworLy8g
VGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBOU0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8g
cmVwYWludCB0aGUgZW50aXJlIHZpZXcgd2hlbiB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcyBr
ZXkuCisvLyBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3Rz
IE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQogLy8gcmVu
ZGVyZXIgKGFuZCB0aG9zZSBjZWxscyBtdXN0IGJlIGhvc3RlZCBieSBhbiBlbmNsb3NpbmcgTlND
b250cm9sIGluIG9yZGVyIHRvIHBhaW50IHByb3Blcmx5KS4KLS0gKHZvaWQpdXBkYXRlQ2VsbDoo
TlNDZWxsKiljZWxsCistICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCAqKWNlbGwKIHsKIH0KKwog
I2VuZGlmCiAKIC8vIERvZXMgc2V0TmVlZHNEaXNwbGF5Ok5PIGFzIGEgc2lkZSBlZmZlY3Qgd2hl
biBwcmludGluZyBpcyBlbmRpbmcuCkBAIC01MDE0LDE5ICs0NzE5LDEzIEBAIC0gKHZvaWQpX3Nl
dFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlTG9naWNhbFdpZHRoOihmbG9hdClt
aW5QYWdlTG9naWNhCiAgICAgaWYgKHByaW50aW5nID09IF9wcml2YXRlLT5wcmludGluZyAmJiBw
YWdpbmF0ZVNjcmVlbkNvbnRlbnQgPT0gX3ByaXZhdGUtPnBhZ2luYXRlU2NyZWVuQ29udGVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsK
LSAgICBOU0FycmF5ICpzdWJmcmFtZXMgPSBbZnJhbWUgY2hpbGRGcmFtZXNdOwotICAgIHVuc2ln
bmVkIG4gPSBbc3ViZnJhbWVzIGNvdW50XTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9
IDA7IGkgIT0gbjsgKytpKSB7Ci0gICAgICAgIFdlYkZyYW1lICpzdWJmcmFtZSA9IFtzdWJmcmFt
ZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICBmb3IgKFdlYkZyYW1lICpzdWJmcmFtZSBpbiBbW3Nl
bGYgX2ZyYW1lXSBjaGlsZEZyYW1lc10pIHsKICAgICAgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZp
ZXcgPSBbc3ViZnJhbWUgZnJhbWVWaWV3XTsKICAgICAgICAgaWYgKFtbc3ViZnJhbWUgX2RhdGFT
b3VyY2VdIF9pc0RvY3VtZW50SFRNTF0pIHsKICAgICAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilb
ZnJhbWVWaWV3IGRvY3VtZW50Vmlld10gX3NldFByaW50aW5nOnByaW50aW5nIG1pbmltdW1QYWdl
TG9naWNhbFdpZHRoOjAgbG9naWNhbEhlaWdodDowIG9yaWdpbmFsUGFnZVdpZHRoOjAgb3JpZ2lu
YWxQYWdlSGVpZ2h0OjAgbWF4aW11bVNocmlua1JhdGlvOjAgYWRqdXN0Vmlld1NpemU6YWRqdXN0
Vmlld1NpemUgcGFnaW5hdGVTY3JlZW5Db250ZW50OnBhZ2luYXRlU2NyZWVuQ29udGVudF07CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKICAg
ICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gbmlsOwogICAgIF9wcml2YXRlLT5wcmludGluZyA9IHBy
aW50aW5nOwogICAgIF9wcml2YXRlLT5wYWdpbmF0ZVNjcmVlbkNvbnRlbnQgPSBwYWdpbmF0ZVNj
cmVlbkNvbnRlbnQ7CkBAIC01MDU0LDcgKzQ3NTMsOCBAQCAtICh2b2lkKV9zZXRQcmludGluZzoo
Qk9PTClwcmludGluZyBtaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDooZmxvYXQpbWluUGFnZUxvZ2lj
YQogICAgIH0KIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAt
IChCT09MKWNhblByaW50SGVhZGVyc0FuZEZvb3RlcnMKIHsKICAgICByZXR1cm4gWUVTOwpAQCAt
NTE4MCwyMyArNDg4MCwyMiBAQCAtIChCT09MKWtub3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRl
cilyYW5nZQogICAgIHJhbmdlLT5sb2NhdGlvbiA9IDE7CiAgICAgZmxvYXQgdG90YWxTY2FsZUZh
Y3RvciA9IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9u
XTsKICAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdl
U2V0dXBTY2FsZUZhY3Rvcl07Ci0gICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07CiAg
ICAgZmxvYXQgZnVsbFBhZ2VXaWR0aCA9IGZsb29yZihbcHJpbnRPcGVyYXRpb24gX3dlYl9hdmFp
bGFibGVQYXBlcldpZHRoXSAvIHRvdGFsU2NhbGVGYWN0b3IpOwogICAgIGZsb2F0IGZ1bGxQYWdl
SGVpZ2h0ID0gZmxvb3JmKFtwcmludE9wZXJhdGlvbiBfd2ViX2F2YWlsYWJsZVBhcGVySGVpZ2h0
XSAvIHRvdGFsU2NhbGVGYWN0b3IpOwogICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFt
ZV07CiAgICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0gW2ZyYW1lIF9jb21wdXRlUGFnZVJlY3Rz
V2l0aFByaW50U2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yIHBhZ2VTaXplOk5TTWFrZVNpemUo
ZnVsbFBhZ2VXaWR0aCwgZnVsbFBhZ2VIZWlnaHQpXTsKLSAgICAKKwogICAgIC8vIEFwcEtpdCBn
ZXRzIGFsbCBtZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6ZXJvLWxlbmd0aCBwYWdlIGNvdW50
IChzZWUgMzU3NjMzNCksIHNvIGlmIHdlCiAgICAgLy8gaGl0IHRoYXQgY2FzZSB3ZSdsbCBwYXNz
IGFsb25nIGEgZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0byBwcmludC4gVGhpcyB3aWxsIHBy
aW50CiAgICAgLy8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJlY3QtbG9va2luZyBoZWFkZXIgYW5k
IGZvb3RlciBpZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNoIG1hdGNoZXMKICAgICAvLyB0aGUg
YmVoYXZpb3Igb2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4KICAgICBpZiAoW25ld1BhZ2VSZWN0
cyBjb3VudF0gPT0gMCkKICAgICAgICAgbmV3UGFnZVJlY3RzID0gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV1dOwot
ICAgIAotICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBbbmV3UGFnZVJlY3RzIHJldGFpbl07Ci0g
ICAgCisKKyAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gbmV3UGFnZVJlY3RzOworCiAgICAgcmFu
Z2UtPmxlbmd0aCA9IFtfcHJpdmF0ZS0+cGFnZVJlY3RzIGNvdW50XTsKLSAgICAKKwogICAgIHJl
dHVybiBZRVM7CiB9CiAKQEAgLTUyMzQsMTUgKzQ5MzMsMTIgQEAgLSAodm9pZCllbmREb2N1bWVu
dAogICAgIC8vIE5vdGUgc2FkbHkgYXQgdGhpcyBwb2ludCBbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dIGlzIHN0aWxsIE5PIAogICAgIFtzZWxmIF9lbmRQ
cmludE1vZGVBbmRSZXN0b3JlV2luZG93QXV0b2Rpc3BsYXldOwogfQotI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAodm9pZClrZXlEb3duOihOU0V2ZW50
ICopZXZlbnQKLSNlbHNlCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKWtleURv
d246KFdlYkV2ZW50ICopZXZlbnQKLSNlbmRpZgogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRv
IHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCiAgICAgLy8gZmV0
Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFu
ZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0
aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4K
QEAgLTUyNTQsMTAgKzQ5NTAsOSBAQCAtICh2b2lkKWtleURvd246KFdlYkV2ZW50ICopZXZlbnQK
IAogICAgIEJPT0wgY2FsbFN1cGVyID0gTk87CiAKLSAgICBbX3ByaXZhdGUtPmtleURvd25FdmVu
dCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07
CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IGV2ZW50OwogCi0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9PTCBjb21wbGV0aW9uUG9wdXBXYXNPcGVuID0g
X3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyICYmIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNv
bnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmtleUV2ZW50KGV2ZW50KSkgewpAQCAt
NTI4MSwxMyArNDk3Niw5IEBAIC0gKHZvaWQpa2V5RG93bjooV2ViRXZlbnQgKilldmVudAogICAg
ICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107CiB9CiAKLSNpZiAh
UExBVEZPUk0oSU9TKQotLSAodm9pZClrZXlVcDooTlNFdmVudCAqKWV2ZW50Ci0jZWxzZQogLSAo
dm9pZClrZXlVcDooV2ViRXZlbnQgKilldmVudAotI2VuZGlmCiB7Ci0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3Bv
bmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKICAg
ICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRh
aW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHBy
ZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtp
dCBjb2RlLgpAQCAtNTMwNCw3ICs0OTk1LDggQEAgLSAodm9pZClrZXlVcDooV2ViRXZlbnQgKill
dmVudAogICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOwogfQogCi0jaWYgIVBMQVRGT1JNKElP
UykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICop
ZXZlbnQKIHsKICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlz
IGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZApAQCAtNTMzNiw2ICs1MDI4
LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmli
dXRlTmFtZQogICAgIH0KICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTphdHRyaWJ1dGVOYW1lXTsKIH0KKwogI2VuZGlmCiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlG
b2N1c2VkVUlFbGVtZW50CkBAIC01MzgyLDE1ICs1MDc1LDE0IEBAIC0gKHZvaWQpY2VudGVyU2Vs
ZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyCiAgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkucmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xs
QWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNEYXRhICopX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJp
YnV0ZXNBc1JURgogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIKLSAgICAgICAgYXR0cmlidXRlczpjb3JlRnJhbWUg
PyBjb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKS5n
ZXQoKSA6IG5pbF07Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07Ci0g
ICAgW3N0cmluZyByZWxlYXNlXTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICBhdXRvIHN0cmluZyA9
IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIK
KyAgICAgICAgYXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3JlRnJhbWUtPmVkaXRvcigpLmZvbnRB
dHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKS5nZXQoKSA6IG5pbF0pOworICAgIHJldHVybiBb
c3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3Vt
ZW50QXR0cmlidXRlczpAeyB9XTsKIH0KIAogLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRBdHRyaWJ1
dGVzRnJvbUZvbnRQYXN0ZWJvYXJkCkBAIC01NDEwLDYgKzUxMDIsNyBAQCAtIChOU0RpY3Rpb25h
cnkgKilfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmQKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICByZXR1cm4gW3N0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgMSldOwogfQorCiAjZW5kaWYKIAogLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0
eVN0eWxlCkBAIC01NDE3LDcgKzUxMTAsOCBAQCAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICop
X2VtcHR5U3R5bGUKICAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVh
dGVDU1NTdHlsZURlY2xhcmF0aW9uXTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExB
VEZPUk0oTUFDKQorCiAtIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29s
b3IKIHsKICAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFj
ZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKQEAgLTU1MTUsNyArNTIwOSw4IEBAIC0gKERP
TUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6KE5TRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnkKIAogICAgIHJldHVybiBzdHlsZTsKIH0KLSNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKV9hcHBseVN0
eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0Fj
dGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCiB7CkBAIC01NTMyLDcgKzUyMjcsOCBAQCAtICh2
b2lkKV9hcHBseUVkaXRpbmdTdHlsZVRvU2VsZWN0aW9uOihSZWY8RWRpdGluZ1N0eWxlPiYmKWVk
aXRpbmdTdHlsZSB3aXRoVW5kbwogICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5
bGVUb1NlbGVjdGlvbihXVEZNb3ZlKGVkaXRpbmdTdHlsZSksIHVuZG9BY3Rpb24pOwogfQogCi0j
aWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKEJPT0wpX2hhbmRsZVN0
eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtzZWxmIF93ZWJWaWV3XTsKQEAgLTU1NzEsOCArNTI2Nyw3IEBAIC0gKEJPT0wpcGVyZm9y
bUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAogICAgIEJPT0wgZXZlbnRXYXNTZW50VG9X
ZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwogICAgIEJPT0wgcmV0
ID0gTk87CiAKLSAgICBbX3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJp
dmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07CisgICAgX3ByaXZhdGUtPmtleURv
d25FdmVudCA9IGV2ZW50OwogICAgIAogICAgIFtzZWxmIHJldGFpbl07CiAKQEAgLTU3MzIsNyAr
NTQyNyw3IEBAIC0gKFJlZjxFZGl0aW5nU3R5bGU+KV9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZToo
aWQpc2VuZGVyCiB7CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBf
ZW1wdHlTdHlsZV07CiAKLSAgICBOU1NoYWRvdyAqc2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10g
aW5pdF07CisgICAgYXV0byBzaGFkb3cgPSBhZG9wdE5TKFtbTlNTaGFkb3cgYWxsb2NdIGluaXRd
KTsKICAgICBbc2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDEsIDEpXTsKIAogICAg
IE5TRGljdGlvbmFyeSAqb2EgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6CkBAIC01NzQyLDE0ICs1NDM3LDEyIEBAIC0gKFJlZjxFZGl0aW5nU3R5bGU+KV9zdHls
ZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2VuZGVyCiAgICAgICAgIFtOU0NvbG9yIGJsYWNrQ29s
b3JdLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCiAgICAgICAgIFtzZWxmIF9vcmln
aW5hbEZvbnRCXSwgTlNGb250QXR0cmlidXRlTmFtZSwKICAgICAgICAgW05TQ29sb3Igd2hpdGVD
b2xvcl0sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgc2hhZG93LCBO
U1NoYWRvd0F0dHJpYnV0ZU5hbWUsCisgICAgICAgIHNoYWRvdy5nZXQoKSwgTlNTaGFkb3dBdHRy
aWJ1dGVOYW1lLAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0
eWxlU2luZ2xlXSwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lLAogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXSwgTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWUsCiAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKICAgICAgICAgbmlsXTsKIAotICAgIFtzaGFk
b3cgcmVsZWFzZV07Ci0KICAgICBOU0RpY3Rpb25hcnkgKmEgPSBbc2VuZGVyIGNvbnZlcnRBdHRy
aWJ1dGVzOm9hXTsKICAgICBOU0RpY3Rpb25hcnkgKmIgPSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1
dGVzOm9iXTsKIApAQCAtNTg3Myw3ICs1NTY2LDggQEAgLSAodm9pZCljaGFuZ2VDb2xvcjooaWQp
c2VuZGVyCiAgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9t
Q29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29sb3I6KV0gCiAgICAgICAgICAg
ICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0Q29sb3JdOwogfQotI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKHZvaWQpX2No
YW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsKQEAgLTU5MDksNyArNTYw
Myw4IEBAIC0gKHZvaWQpY2FwaXRhbGl6ZVdvcmQ6KGlkKXNlbmRlcgogICAgIFtzZWxmIF9jaGFu
Z2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2FwaXRhbGl6ZWRTdHJpbmcpXTsKIH0K
IAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKWNvbXBs
ZXRlOihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xPR1VFCkBAIC01OTE3LDcgKzU2MTIs
NyBAQCAtICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKICAgICBpZiAoIVtzZWxmIF9jYW5FZGl0
XSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9s
bGVyKQotICAgICAgICBfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgPSBbW1dlYlRleHRD
b21wbGV0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OltzZWxmIF93ZWJWaWV3
XSBIVE1MVmlldzpzZWxmXTsKKyAgICAgICAgX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVy
ID0gYWRvcHROUyhbW1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OltzZWxmIF93ZWJWaWV3XSBIVE1MVmlldzpzZWxmXSk7CiAgICAgW19wcml2YXRlLT5j
b21wbGV0aW9uQ29udHJvbGxlciBkb0NvbXBsZXRpb25dOwogfQogCkBAIC02MDY0LDcgKzU3NTks
OCBAQCAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OihpZClzZW5k
ZXIKIAogICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0Rp
cmVjdGlvblJpZ2h0VG9MZWZ0XTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCiAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWw6KGlkKXNlbmRlcgogewpAQCAtNjA5NCw3ICs1NzkwLDYgQEAgLSAodm9pZCl0cmFuc3Bv
c2VXb3JkczooaWQpc2VuZGVyOwogCiAjZW5kaWYKIAotCiAvLyBPdmVycmlkZSB0aGlzIHNvIHRo
YXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFzIGtleSBkb3duIGV2ZW50cyBzbyB3
ZSBjYW4KIC8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5kaW5ncyBtZWNoYW5pc20uCiAt
IChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50CkBAIC02MTA4LDcg
KzU4MDMsOCBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50
CiAgICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKKwogLSAoQk9PTClfYXV0b21hdGljRm9jdXNSaW5nRGlzYWJsZWQK
IHsKICAgICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBmb3IgX2F1dG9tYXRpY0ZvY3VzUmluZ0Rpc2Fi
bGVkIGlzIE5PLCB3aGljaCBwcmV2ZW50cyBmb2N1cyByaW5ncwpAQCAtNjExNiw3ICs1ODEyLDYg
QEAgLSAoQk9PTClfYXV0b21hdGljRm9jdXNSaW5nRGlzYWJsZWQKICAgICAvLyBvZiBjaGFuZ2lu
ZyB0aGlzIHRvIFlFUywgc28ganVzdCByZXR1cm4gWUVTIGFsbCB0aGUgdGltZS4gPHJkYXI6Ly9w
cm9ibGVtLzEzNzgwMTIyPiwKICAgICByZXR1cm4gWUVTOwogfQotI2VuZGlmCiAKIC0gKHZvaWQp
X3VwZGF0ZUNvbnRyb2xUaW50cwogewpAQCAtNjEzNSwxOSArNTgzMCwxNCBAQCAtICh2b2lkKV91
cGRhdGVDb250cm9sVGludHMKIC8vIHRvIGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8vcHJvYmxl
bS81MTM2NzYwPgogLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlCiB7Ci0jaWYgIVBMQVRG
T1JNKElPUykKICAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCiAgICAgICAgIFtzZWxmIF91cGRh
dGVDb250cm9sVGludHNdOwogICAgIGVsc2UKICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
T25NYWluVGhyZWFkOkBzZWxlY3RvcihfdXBkYXRlQ29udHJvbFRpbnRzKSB3aXRoT2JqZWN0Om5p
bCB3YWl0VW50aWxEb25lOk5PXTsKLSNlbHNlCi0gICAgW3NlbGYgX3VwZGF0ZUNvbnRyb2xUaW50
c107Ci0jZW5kaWYKIAogICAgIFtzdXBlciBfd2luZG93Q2hhbmdlZEtleVN0YXRlXTsKIH0KIAot
I2lmICFQTEFURk9STShJT1MpCiAtICh2b2lkKW90aGVyTW91c2VEb3duOihOU0V2ZW50ICopZXZl
bnQKIHsKICAgICBpZiAoZXZlbnQuYnV0dG9uTnVtYmVyICE9IDIgfHwgW05TTWVudSBtZW51VHlw
ZUZvckV2ZW50OmV2ZW50XSA9PSBOU01lbnVUeXBlQ29udGV4dE1lbnUpIHsKQEAgLTYxNzMsNiAr
NTg2Myw3IEBAIC0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKICAgICBlbHNl
CiAgICAgICAgIFtzdXBlciBvdGhlck1vdXNlVXA6ZXZlbnRdOwogfQorCiAjZW5kaWYKIAogQGVu
ZApAQCAtNjE4MSw4ICs1ODcyLDggQEAgQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJJ
bnRlcm5hbCkKIAogLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAogeworI2lmIFBMQVRGT1JNKE1B
QykKICAgICBbc2VsZiBfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXTsKLSNpZiAhUExB
VEZPUk0oSU9TKQogICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwogICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewogICAgICAgICBpZiAoIWNvcmVGcmFt
ZS0+ZWRpdG9yKCkuaXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlKCkpCkBAIC02MTkxLDcgKzU4
ODIsOCBAQCAtICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCiAjZW5kaWYKIH0KIAotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtICh2b2lkKV91cGRhdGVGb250UGFuZWwK
IHsKICAgICAvLyBGSVhNRTogTlNUZXh0VmlldyBiYWlscyBvdXQgaWYgYmVjb21pbmcgb3IgcmVz
aWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9yIHdoaWNoIGl0IGhhcyBpdmFyIGZsYWdzLiBOb3QK
QEAgLTYyMjksNyArNTkyMSw4IEBAIC0gKHZvaWQpX3NldFNvZnRTcGFjZVJhbmdlOihOU1Jhbmdl
KXJhbmdlCiB7CiAgICAgX3ByaXZhdGUtPnNvZnRTcGFjZVJhbmdlID0gcmFuZ2U7CiB9Ci0jZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogLSAoQk9P
TClfY2FuU21hcnRDb3B5T3JEZWxldGUKIHsKQEAgLTYyMzksMTEgKzU5MzIsMTMgQEAgLSAoQk9P
TClfY2FuU21hcnRDb3B5T3JEZWxldGUKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNFdmVudCAqKV9tb3Vz
ZURvd25FdmVudAogewotICAgIHJldHVybiBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQ7CisgICAg
cmV0dXJuIF9wcml2YXRlLT5tb3VzZURvd25FdmVudC5nZXQoKTsKIH0KKwogI2VuZGlmCiAKIC0g
KFdlYkZyYW1lICopX2ZyYW1lCkBAIC02MjU3LDcgKzU5NTIsOCBAQCAtICh2b2lkKWNsb3NlSWZO
b3RDdXJyZW50VmlldwogICAgICAgICBbc2VsZiBjbG9zZV07CiB9CiAKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCopX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAogewog
ICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9h
cmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWluVGV4dDpOT107CkBAIC02NDE0LDExICs2MTEwLDE0
IEBAIC0gKHZvaWQpcXVpY2tMb29rV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKICAgICBbW3Nl
bGYgX3dlYlZpZXddIF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uOlRleHRJbmRpY2F0
b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZhZGVPdXRdOwogICAgIFtzdXBlciBxdWlja0xv
b2tXaXRoRXZlbnQ6ZXZlbnRdOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKKyN1bmRlZiBDT01NQU5EX1BST0xPR1VFCiAKIC0gKHZvaWQp
X2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKIHsKLSAgICBXZWJIVE1MVmlld0ludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVyczsKKyAgICBhdXRvKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CiAgICAgaWYgKCFwYXJhbWV0ZXJzIHx8IHBhcmFtZXRl
cnMtPmV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTY0NTAsNyArNjE0OSw4IEBAIC0gKHZvaWQpX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29t
bWFuZHMKICAgICBwYXJhbWV0ZXJzLT5leGVjdXRpbmdTYXZlZEtleXByZXNzQ29tbWFuZHMgPSBm
YWxzZTsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChC
T09MKV9pbnRlcnByZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2F2aW5nQ29tbWFu
ZHM6KEJPT0wpc2F2aW5nQ29tbWFuZHMKIHsKICAgICBBU1NFUlQoY29yZShbc2VsZiBfZnJhbWVd
KSA9PSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkpOwpAQCAt
NjUwNSw3ICs2MjA1LDcgQEAgLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KEtleWJvYXJkRXZl
bnQqKWV2ZW50IHNhdmluZ0NvbW1hbmRzOihCT09MKXNhdmluZ0NvbW0KICAgICAgICAgaWYgKCFo
YXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpDaGFyKQogICAgICAgICAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNz
Q29tbWFuZHNdOwogICAgIH0KLSAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IDA7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBu
dWxscHRyOwogCiAgICAgLy8gQW4gaW5wdXQgbWV0aG9kIG1heSBtYWtlIHNldmVyYWwgYWN0aW9u
cyBwZXIga2V5cHJlc3MuIEZvciBleGFtcGxlLCBwcmVzc2luZyBSZXR1cm4gd2l0aCBLb3JlYW4g
SU0gYm90aCBjb25maXJtcyBpdCBhbmQgc2VuZHMgYSBuZXdsaW5lLgogICAgIC8vIElNLWxpa2Ug
YWN0aW9ucyBhcmUgaGFuZGxlZCBpbW1lZGlhdGVseSAoc28gcGFyYW1ldGVycy5ldmVudEludGVy
cHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgaXMgdHJ1ZSksIGJ1dCB0aGVyZSBhcmUgc2F2ZWQgY29t
bWFuZHMgdGhhdApAQCAtNjUyMSw4ICs2MjIxLDkgQEAgLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZl
bnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNhdmluZ0NvbW1hbmRzOihCT09MKXNhdmluZ0NvbW0K
ICAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYWxsIGNvbW1hbmRzLCBkb24ndCBk
byBpdCBhZ2Fpbi4KICAgICByZXR1cm4gcGFyYW1ldGVycy5ldmVudEludGVycHJldGF0aW9uSGFk
U2lkZUVmZmVjdHM7CiB9Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLSAgICAKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICAKICNkZWZpbmUga1dl
YkVudGVyS2V5ICAgICAgICAgMHgwMDAzCkBAIC02NTc2LDExICs2Mjc3LDcgQEAgLSAoQk9PTClf
aGFuZGxlRWRpdGluZ0tleUV2ZW50OihLZXlib2FyZEV2ZW50ICopd2NFdmVudAogfQogI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKIAotI2lmICFQTEFURk9STShJT1MpCi0tIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZSopcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4gX3ByaXZh
dGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwotfQorI2lmIFBMQVRGT1JNKE1BQykKIAog
LSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1h
Z2UqKXNvdXJjZQogewpAQCAtNjU5MSwxMyArNjI4OCwxMiBAQCAtICh2b2lkKXNldFByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlOihXZWJDb3JlOjpDYWNoZWRJbWFnZSopc291cmNlCiAgICAgICAg
IF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21p
c2VkRGF0YUNsaWVudCgpKTsKICAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UgPSBzb3VyY2U7CiB9Ci0jZW5kaWYKIAotI3VuZGVmIENPTU1BTkRfUFJPTE9HVUUKKyNlbmRp
ZgogCiAtICh2b2lkKV9sYXlvdXRJZk5lZWRlZAogewotI2lmICFQTEFURk9STShJT1MpCisjaWYg
UExBVEZPUk0oTUFDKQogICAgIEFTU0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwog
I2VuZGlmCiAKQEAgLTY2MjMsMTYgKzYzMTksMTYgQEAgLSAoQk9PTClfbmVlZHNMYXlvdXQKICAg
ICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX25lZWRzTGF5b3V0XTsKIH0KIAotLSAodm9pZClhdHRh
Y2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVyCisjaWYgUExBVEZPUk0oTUFDKQorCistICh2b2lk
KWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciAqKWxheWVyCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoIV9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIE5TVmlldyog
aG9zdGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ0ZsaXBwZWRWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOltzZWxmIGJvdW5kc11dOworICAgICAgICBhdXRvIGhvc3RpbmdWaWV3ID0gYWRvcHRO
UyhbW1dlYkxheWVySG9zdGluZ0ZsaXBwZWRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxm
IGJvdW5kc11dKTsKICAgICAgICAgW2hvc3RpbmdWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KE5T
Vmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGUpXTsKLSAgICAgICAgW3NlbGYg
YWRkU3Vidmlldzpob3N0aW5nVmlld107Ci0gICAgICAgIFtob3N0aW5nVmlldyByZWxlYXNlXTsK
KyAgICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlldy5nZXQoKV07CiAgICAgICAgIC8v
IGhvc3RpbmdWaWV3IGlzIG93bmVkIGJ5IGJlaW5nIGEgc3VidmlldyBvZiBzZWxmCi0gICAgICAg
IF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXc7CisgICAgICAgIF9wcml2
YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXcuZ2V0KCk7CiAgICAgfQogCiAgICAg
Ly8gTWFrZSBhIGNvbnRhaW5lciBsYXllciwgd2hpY2ggd2lsbCBnZXQgc2l6ZWQvcG9zaXRpb25l
ZCBieSBBcHBLaXQgYW5kIENBLgpAQCAtNjY2MCwyMiArNjM1NiwxOCBAQCAtICh2b2lkKWF0dGFj
aFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIKIAogICAgIGlmIChXS0V4ZWN1dGFibGVXYXNMaW5r
ZWRPbk9yQmVmb3JlTGlvbigpKQogICAgICAgICBbdmlld0xheWVyIHNldEdlb21ldHJ5RmxpcHBl
ZDpZRVNdOwotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9CiAKIC0gKHZvaWQpZGV0YWNoUm9v
dExheWVyCiB7Ci0jaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcpIHsKICAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVy
Om5pbF07CiAgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVy
Ok5PXTsKICAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHJlbW92ZUZyb21TdXBl
cnZpZXddOwogICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IG5pbDsKICAgICB9
Ci0jZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpZHJhd0xheWVyOihDQUxh
eWVyICopbGF5ZXIgaW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4CiB7CiAgICAgaWYgKF9wcml2
YXRlKSB7CkBAIC02NjkxLDE1ICs2MzgzLDEwIEBAIC0gKHZvaWQpZHJhd0xheWVyOihDQUxheWVy
ICopbGF5ZXIgaW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4CiAgICAgICAgIF9wcml2YXRlLT5k
cmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXIgPSBOTzsKICAgICB9CiB9Ci0jZW5kaWYKIAogLSAo
Qk9PTClfd2ViX2lzRHJhd2luZ0ludG9MYXllcgogewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBy
ZXR1cm4gWUVTOwotI2Vsc2UKICAgICByZXR1cm4gX3ByaXZhdGUtPmRyYXdpbmdJbnRvTGF5ZXI7
Ci0jZW5kaWYKIH0KIAogLSAoQk9PTClfd2ViX2lzRHJhd2luZ0ludG9BY2NlbGVyYXRlZExheWVy
CkBAIC02NzA3LDcgKzYzOTQsNiBAQCAtIChCT09MKV93ZWJfaXNEcmF3aW5nSW50b0FjY2VsZXJh
dGVkTGF5ZXIKICAgICByZXR1cm4gX3ByaXZhdGUtPmRyYXdpbmdJbnRvQWNjZWxlcmF0ZWRMYXll
cjsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpX2NoYW5nZVNwZWxsaW5nVG9Xb3Jk
OihOU1N0cmluZyAqKW5ld1dvcmQKIHsKICAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKQEAgLTY3
MjUsMzQgKzY0MTEsNTEgQEAgLSAodm9pZClfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6KE5TU3RyaW5n
ICopbmV3V29yZAogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
Om5ld1dvcmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCiAgICAgICAg
IFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3V29yZCBzZWxlY3RS
ZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKIH0KKworLSAodm9pZClfc3RhcnRBdXRv
c2Nyb2xsVGltZXI6KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKK3sKKyAgICBpZiAoX3ByaXZhdGUt
PmF1dG9zY3JvbGxUaW1lcikKKyAgICAgICAgcmV0dXJuOworICAgIF9wcml2YXRlLT5hdXRvc2Ny
b2xsVGltZXIgPSBbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6MC4xIHRh
cmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXV0b3Njcm9sbCkgdXNlckluZm86bmlsIHJl
cGVhdHM6WUVTXTsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IHRyaWdn
ZXJFdmVudDsKK30KKworI2VuZGlmCisKKy0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKK3sK
KyNpZiBQTEFURk9STShNQUMpCisgICAgW19wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgaW52YWxp
ZGF0ZV07CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBfcHJpdmF0
ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IG5pbDsKICNlbmRpZgorfQorCistIChXZWJQbHVn
aW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUt
PnBsdWdpbkNvbnRyb2xsZXIuZ2V0KCk7Cit9CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdl
YkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtl
ZFRleHQKIHsKLSAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzOwotICAgIGlmICgh
dmFsaWRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHZhbGlkQXR0cmlidXRlcyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJp
YnV0ZU5hbWUsIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAgICAgTlNN
YXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwgTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJh
bmdlQXR0cmlidXRlTmFtZSwKKyAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgIE5TVW5kZXJsaW5lU3R5
bGVBdHRyaWJ1dGVOYW1lLAorICAgICAgICBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSwK
KyAgICAgICAgTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwKKyAgICAgICAgTlNU
ZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSwKICNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVGV4dEFsdGVybmF0
aXZlc0F0dHJpYnV0ZU5hbWUsCisgICAgICAgIE5TVGV4dEFsdGVybmF0aXZlc0F0dHJpYnV0ZU5h
bWUsCiAjZW5kaWYKICNpZiBVU0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJTkcpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBOU1RleHRJbnNlcnRpb25VbmRvYWJsZUF0dHJpYnV0ZU5hbWUsCisg
ICAgICAgIE5TVGV4dEluc2VydGlvblVuZG9hYmxlQXR0cmlidXRlTmFtZSwKICNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICAgICAgLy8gTlNUZXh0IGFsc28gc3Vw
cG9ydHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBidXQgaXQncwotICAgICAgICAvLyBoYXJk
IHRvIHRlbGwgd2hpY2ggYXJlIHJlYWxseSByZXF1aXJlZCBmb3IgdGV4dCBpbnB1dCB0bwotICAg
ICAgICAvLyB3b3JrIHdlbGw7IEkgaGF2ZSBub3Qgc2VlbiBhbnkgaW5wdXQgbWV0aG9kIG1ha2Ug
dXNlIG9mIHRoZW0geWV0LgotICAgICAgICAvLyAgICAgTlNGb250QXR0cmlidXRlTmFtZSwgTlNG
b3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAvLyAgICAgTlNCYWNrZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lLCBOU0xhbmd1YWdlQXR0cmlidXRlTmFtZS4KLSAgICAgICAgQ0ZS
ZXRhaW4odmFsaWRBdHRyaWJ1dGVzKTsKLSAgICB9CisgICAgICAgIG5pbF07CiAgICAgTE9HKFRl
eHRJbnB1dCwgInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQgLT4gKC4uLikiKTsKICAgICBy
ZXR1cm4gdmFsaWRBdHRyaWJ1dGVzOwogfQpAQCAtNjc3OCw3ICs2NDgxLDggQEAgLSAoTlNBdHRy
aWJ1dGVkU3RyaW5nICopdGV4dFN0b3JhZ2UKICAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhbiBl
bXB0eSBzdHJpbmcgcmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50IFRTTSBmcm9tIGNhbGxpbmcg
LXN0cmluZwogICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBbW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOwogfQotI2VuZGlmIC8v
ICFQTEFURk9STShJT1MpCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIC0gKE5TVUludGVn
ZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAogewpAQCAtNjg2NCw3
ICs2NTY4LDggQEAgLSAoTlNSYW5nZSltYXJrZWRSYW5nZQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1Jhbmdl
CiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwpAQCAtNjg5NCw2
ICs2NTk5LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zy
b21SYW5nZTooTlNSYW5nZSluc1JhbmdlCiAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRT
dWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwg
bnNSYW5nZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
KwogI2VuZGlmCiAKIC0gKE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCkBAIC02OTIz
LDcgKzY2MjksNyBAQCAtICh2b2lkKXVubWFya1RleHQKICAgICBMT0coVGV4dElucHV0LCAidW5t
YXJrVGV4dCIpOwogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2Vk
IHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIGF1dG8qIHBhcmFtZXRlcnMgPSBfcHJp
dmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKIAogICAgIGlmIChwYXJhbWV0ZXJz
KSB7CiAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0
cyA9IHRydWU7CkBAIC02OTM0LDcgKzY2NDAsOCBAQCAtICh2b2lkKXVubWFya1RleHQKICAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24oKTsKIH0KIAotI2lmICFQ
TEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCiBzdGF0aWMgdm9pZCBleHRyYWN0VW5k
ZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW5lPiYgcmVzdWx0KQogewogICAgIGludCBsZW5ndGggPSBbW3N0cmluZyBzdHJpbmddIGxl
bmd0aF07CkBAIC02OTU3LDEzICs2NjY0LDE0IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxp
bmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAg
ICAgICAgIGkgPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKICAgICB9CiB9CisKICNl
bmRpZgogCiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihO
U1JhbmdlKW5ld1NlbFJhbmdlCiB7CiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29t
bWFuZHNdOwogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMpCiAgICAgQk9P
TCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRl
ZFN0cmluZyBjbGFzc11dOwogICAgIEFTU0VSVChpc0F0dHJpYnV0ZWRTdHJpbmcgfHwgW3N0cmlu
ZyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKIApAQCAtNjk3MSw3ICs2Njc5LDcg
QEAgLSAodm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5n
ZSluZXdTZWxSYW5nZQogI2VuZGlmCiAKICAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1l
dGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0g
ICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0g
X3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgYXV0byogcGFyYW1l
dGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwogCiAgICAgaWYg
KHBhcmFtZXRlcnMpIHsKICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRJbnRlcnByZXRhdGlvbkhh
ZFNpZGVFZmZlY3RzID0gdHJ1ZTsKQEAgLTY5ODksNyArNjY5Nyw3IEBAIC0gKHZvaWQpc2V0TWFy
a2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKICAg
ICBOU1N0cmluZyAqdGV4dDsKICAgICBOU1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UgPSB7IE5TTm90
Rm91bmQsIDAgfTsKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAg
IGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGlnbm9yZSBt
b3N0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgc3RyaW5nLCBzbyBhbiBpbnB1dCBtZXRob2QgY2Fubm90
IHNwZWNpZnkgZS5nLiBhIGZvbnQgb3IgYSBnbHlwaCB2YXJpYXRpb24uCiAgICAgICAgIHRleHQg
PSBbc3RyaW5nIHN0cmluZ107CkBAIC03MDMwLDcgKzY3MzgsNyBAQCAtICh2b2lkKWRvQ29tbWFu
ZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgogCiAgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBh
cmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRz
LgogICAgIC8vIFRoZSBzYW1lIGNhbGwgdG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBkbyBtb3Jl
IHRoYW4gb25lIGNvbW1hbmQuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnM7CisgICAgYXV0byogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzOwogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBwYXJhbWV0ZXJzLT5jb25z
dW1lZEJ5SU0gPSBmYWxzZTsKIApAQCAtNzA1NiwxOCArNjc2NCwxNyBAQCAtICh2b2lkKWRvQ29t
bWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgogICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5k
IGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwogICAgICAg
ICAgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkKICAgICAgICAgICAgICAgICBldmVudFdh
c0hhbmRsZWQgPSBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOwotI2lmICFQTEFURk9STShJT1MpCisj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
SWYgV2ViS2l0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLCB3ZSBuZWVkIHRvIHBhc3Mg
dGhlIHNlbGVjdG9yIHRvIHN1cGVyLgogICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3Rv
ckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsKIAogICAgICAgICAgICAgICAgIC8v
IFRoZSBzaW5rIGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMgdXMgaWYgdGhlIHJlc3BvbmRlciB3
ZW50IHVuaGFuZGxlZCwgYW5kCiAgICAgICAgICAgICAgICAgLy8gMikgcHJldmVudHMgYW55IE5T
QmVlcDsgd2UgZG9uJ3QgZXZlciB3YW50IHRvIGJlZXAgaGVyZS4KLSAgICAgICAgICAgICAgICBX
ZWJSZXNwb25kZXJDaGFpblNpbmsgKnNpbmsgPSBbW1dlYlJlc3BvbmRlckNoYWluU2luayBhbGxv
Y10gaW5pdFdpdGhSZXNwb25kZXJDaGFpbjpzZWxmXTsKKyAgICAgICAgICAgICAgICBhdXRvIHNp
bmsgPSBhZG9wdE5TKFtbV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIGFsbG9jXSBpbml0V2l0aFJlc3Bv
bmRlckNoYWluOnNlbGZdKTsKICAgICAgICAgICAgICAgICBbc3VwZXIgZG9Db21tYW5kQnlTZWxl
Y3RvcjpzZWxlY3Rvcl07CiAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gIVtzaW5r
IHJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZF07CiAgICAgICAgICAgICAgICAgW3NpbmsgZGV0YWNo
XTsKLSAgICAgICAgICAgICAgICBbc2luayByZWxlYXNlXTsKIAogICAgICAgICAgICAgICAgIF9w
cml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOwogICAgICAgICAgICAg
fQpAQCAtNzA4MywxNCArNjc5MCwxNCBAQCAtICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNF
TClzZWxlY3RvcgogCiAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwogewotI2lmICFQTEFU
Rk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5n
ID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsKICAg
ICBBU1NFUlQoaXNBdHRyaWJ1dGVkU3RyaW5nIHx8IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7CiAKICAgICBMT0coVGV4dElucHV0LCAiaW5zZXJ0VGV4dDpcIiVAXCIi
LCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcpOwogI2VuZGlm
CiAKLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRl
cnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBhdXRvKiBw
YXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CiAgICAg
aWYgKHBhcmFtZXRlcnMpCiAgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IGZhbHNl
OwogCkBAIC03MTAzLDcgKzY4MTAsNyBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwog
I2VuZGlmCiAKICAgICBWZWN0b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+IGRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb25zOwotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQog
ICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFU
SVZFUykKICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4g
dGV4dEFsdGVybmF0aXZlczsKQEAgLTcxNTEsNyArNjg1OCw3IEBAIC0gKHZvaWQpaW5zZXJ0VGV4
dDooaWQpc3RyaW5nCiAgICAgICAgIG5lZWRUb1JlbW92ZVNvZnRTcGFjZSA9IFlFUzsKICAgICB9
CiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBfcHJp
dmF0ZS0+c29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICNlbmRp
ZgogCkBAIC03MTg5LDcgKzY4OTYsOCBAQCAtICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwog
ICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudEludGVycHJldGF0aW9uSGFkU2lkZUVmZmVjdHMgfD0g
ZXZlbnRIYW5kbGVkOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShNQUMp
CisKIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKIHsKICAgICBpZiAoIVtbc2VsZiB3
aW5kb3ddIGlzS2V5V2luZG93XSB8fCAoW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdICE9
IHNlbGYgJiYgIV9wcml2YXRlLT5fZm9yY2VVcGRhdGVTZWN1cmVJbnB1dFN0YXRlKSkgewpAQCAt
NzIyMCwxMSArNjkyOCw5IEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKICAgICAg
ICAgVFNNUmVtb3ZlRG9jdW1lbnRQcm9wZXJ0eSgwLCBrVFNNRG9jdW1lbnRFbmFibGVkSW5wdXRT
b3VyY2VzUHJvcGVydHlUYWcpOwogICAgIH0KIH0KLSNlbmRpZgogCiAtICh2b2lkKV91cGRhdGVT
ZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXIKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm47CkBAIC03MjU0LDIzICs2OTYwLDE3IEBAIC0gKHZvaWQpX3VwZGF0ZVNl
bGVjdGlvbkZvcklucHV0TWFuYWdlcgogICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2VsZl07CiAgICAgfQogI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAotI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBj
b2RlOgotICAgIC8vCi0gICAgLy8gICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmdldENv
bXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQotICAgIC8vICAgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9u
KCk7Ci0gICAgLy8KLSAgICAvLwotICAgIC8vIHdvdWxkIHdvcmsgaWYgZ2V0Q29tcG9zaXRpb25T
ZWxlY3Rpb24gcmV0dXJuZWQgZmFsc2Ugd2hlbiBjb21wb3NpdGlvbiAhPSBzZWxlY3Rpb24uCi0g
ICAgLy8gV2h5IGRvZXNuJ3QgaXQ/ICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY4MzcyNTI+IGZvciBx
dWVzdGlvbnMuCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogfQogCisjZW5kaWYKKwogI2lmIEhB
VkUoVE9VQ0hfQkFSKQorCiAtIChOU0NhbmRpZGF0ZUxpc3RUb3VjaEJhckl0ZW0gKiljYW5kaWRh
dGVMaXN0VG91Y2hCYXJJdGVtCiB7CiAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gY2FuZGlk
YXRlTGlzdF07CiB9CisKICNlbmRpZgogCiBAZW5kCkBAIC03MzA5LDYgKzcwMDksNyBAQCAtIChO
U1ZpZXcgKilzZWxlY3Rpb25WaWV3CiB9CiAKICNpZiBQTEFURk9STShJT1MpCisKIHN0YXRpYyBD
R0ltYWdlUmVmIGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBDR1JlY3QgcmVjdCkKIHsKICAg
ICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKQEAgLTczODUsOSArNzA4NiwxMCBAQCBzdGF0
aWMgQ0dJbWFnZVJlZiBzZWxlY3Rpb25JbWFnZShGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFj
a1RleHQpCiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9y
Tm9ybWFsKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0o
SU9TKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKE1BQykKIC0gKE5T
SW1hZ2UgKilzZWxlY3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1Rl
eHQKICNlbHNlCiAtIChDR0ltYWdlUmVmKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDoo
Qk9PTClmb3JjZUJsYWNrVGV4dApAQCAtNzQxNSwyMiArNzExNywyMyBAQCAtIChOU1JlY3Qpc2Vs
ZWN0aW9uSW1hZ2VSZWN0CiAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlv
bigpLnNlbGVjdGlvbkJvdW5kcygpOwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFU
Rk9STShNQUMpCisKIC0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KIHsK
ICAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSkgewogICAgICAgICBOU011dGFi
bGVBcnJheSAqdHlwZXMgPSBbW1tbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBl
c10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKICAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpX
ZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CiAgICAgICAgIHJldHVybiB0eXBlczsKLSAgICB9IGVs
c2UgewotICAgICAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5
cGVzXTsKICAgICB9CisgICAgcmV0dXJuIFtbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9h
cmRUeXBlc107CiB9CiAKIC0gKHZvaWQpd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVz
OihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
CiB7CiAgICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0
b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOm5pbF07CiB9CisK
ICNlbmRpZgogCiAtICh2b2lkKXNlbGVjdEFsbApAQCAtNzQ1Myw3ICs3MTU2LDggQEAgLSAoTlNT
dHJpbmcgKilzdHJpbmcKICAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3N0cmluZ0ZvclJhbmdl
OltzZWxmIF9kb2N1bWVudFJhbmdlXV07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorI2lmIFBM
QVRGT1JNKE1BQykKKwogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZWRTdHJpbmdG
cm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmc7CkBAIC03NDk2LDYgKzcyMDAsNyBAQCAtIChOU0F0dHJpYnV0ZWRT
dHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKICAgICB9CiAgICAgcmV0dXJuIGF0dHJp
YnV0ZWRTdHJpbmc7CiB9CisKICNlbmRpZgogCiAtIChOU1N0cmluZyAqKXNlbGVjdGVkU3RyaW5n
CkBAIC03NTkzLDIyICs3Mjk4LDE5IEBAIC0gKEJPT0wpX2ZpbmRTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMKIAogQGVuZAogCi0vLyBUaGlz
IGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVBy
b3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNlLgorLy8gVGhpcyBpcyB1c2VkIGJ5IEFw
cEtpdC9UZXh0S2l0IGFuZCBpcyBpbXBsZW1lbnRlZCBoZXJlIGluIHBhcnQgc28gdGhhdCBXZWJE
YXRhUHJvdG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVkIG9uY2UuCisvLyBGSVhNRTogUmVhbGx5
IHNob3VsZCBoYXZlIGFuIEBpbnRlcmZhY2UgZm9yIHRoaXMgc29tZXdoZXJlIGluIHRoaXMgZmls
ZSBvciBhbiBpbmNsdWRlLiBOb3Qgc3VyZSB3aHkgaXQgY29tcGlsZXMgd2l0aG91dCBvbmUuCiBA
aW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCiAKICsgKE5TVVJMICopX3dlYl91bmlx
dWVXZWJEYXRhVVJMCiB7Ci0gICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcg
KilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAg
Q0ZSZWxlYXNlKFVVSURSZWYpOwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRhUHJvdG9jb2xT
Y2hlbWUsIFVVSURTdHJpbmddXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0gICAgcmV0
dXJuIFVSTDsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBbTlNVVUlEIFVV
SURdXV07CiB9CiAKIEBlbmQKIAotI2lmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFD
KQorCiBAaW1wbGVtZW50YXRpb24gV2ViUmVzcG9uZGVyQ2hhaW5TaW5rCiAKIC0gKGlkKWluaXRX
aXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hhaW4KQEAgLTc2NDksNCArNzM1MSw1
IEBAIC0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6KGlkKW9iamVjdAogfQog
CiBAZW5kCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAppbmRleCBkZGMwMjE1MTM1MjYyMjI5YzQ5YmMyMjBi
YzE0ZGM4YzViNDg1N2FhLi4yMjAxYjIxODFkNTIwMTU1NzViNzc2ZGFlMjAyOTkzMjkwNmQzZDJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3SW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAKIEBjbGFzcyBD
QUxheWVyOwogQGNsYXNzIFdlYkZyYW1lOworQGNsYXNzIFdlYlBsdWdpbkNvbnRyb2xsZXI7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRJbWFnZTsKQEAgLTM5LDIwICs0
MCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIEBp
bnRlcmZhY2UgV2ViSFRNTFZpZXcgKCkgPE5TRHJhZ2dpbmdTb3VyY2U+CiBAZW5kCisKICNlbmRp
ZgogCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJJbnRlcm5hbCkKIC0gKHZvaWQpX3NlbGVj
dGlvbkNoYW5nZWQ7Ci0jaWYgIVBMQVRGT1JNKElPUykKKworI2lmIFBMQVRGT1JNKE1BQykKIC0g
KHZvaWQpX3VwZGF0ZUZvbnRQYW5lbDsKIC0gKHZvaWQpX3NldFNvZnRTcGFjZVJhbmdlOihOU1Jh
bmdlKXJhbmdlOwogI2VuZGlmCisKIC0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlOwogCiAt
IChXZWJGcmFtZSAqKV9mcmFtZTsKLSNpZiAhUExBVEZPUk0oSU9TKQorCisjaWYgUExBVEZPUk0o
TUFDKQogLSAodm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcjsKIC0g
KEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJDb3JlOjpLZXlib2FyZEV2ZW50ICopZXZlbnQg
c2F2aW5nQ29tbWFuZHM6KEJPT0wpc2F2aW5nQ29tbWFuZHM7CiAtIChET01Eb2N1bWVudEZyYWdt
ZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZDsKQEAgLTYwLDI2ICs2NiwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAtIChCT09M
KWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKIC0gKHZvaWQpc2V0R3JhbW1hckNoZWNraW5nRW5h
YmxlZDooQk9PTClmbGFnOwogLSAodm9pZCl0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KGlkKXNlbmRl
cjsKLS0gKFdlYkNvcmU6OkNhY2hlZEltYWdlKilwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsK
IC0gKHZvaWQpc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZElt
YWdlKilzb3VyY2U7Ci0jZWxzZQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCiAtIChCT09M
KV9oYW5kbGVFZGl0aW5nS2V5RXZlbnQ6KFdlYkNvcmU6OktleWJvYXJkRXZlbnQgKilldmVudDsK
ICNlbmRpZgorCiAtICh2b2lkKV93ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vy
c2l2ZTsKIC0gKHZvaWQpX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zOwogLSAoQk9PTClfbmVlZHNMYXlv
dXQ7CiAKLS0gKHZvaWQpYXR0YWNoUm9vdExheWVyOihDQUxheWVyKilsYXllcjsKKyNpZiBQTEFU
Rk9STShNQUMpCistICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FMYXllciAqKWxheWVyOwogLSAo
dm9pZClkZXRhY2hSb290TGF5ZXI7CisKIC0gKEJPT0wpX3dlYl9pc0RyYXdpbmdJbnRvTGF5ZXI7
CiAtIChCT09MKV93ZWJfaXNEcmF3aW5nSW50b0FjY2VsZXJhdGVkTGF5ZXI7CisjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPUykKIC0gKHZvaWQpX2xheW91dElmTmVlZGVkOwogI2VuZGlmCisKICNp
ZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV9jaGFuZ2VTcGVsbGluZ1RvV29yZDooTlNTdHJpbmcg
KiluZXdXb3JkOworLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6KE5TRXZlbnQgKilldmVu
dDsKICNlbmRpZgorCistICh2b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyOworCistIChXZWJQbHVn
aW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXI7CisKIEBlbmQKIAogQGludGVyZmFjZSBX
ZWJIVE1MVmlldyAoUmVtb3ZlZEFwcEtpdFN1cGVyY2xhc3NNZXRob2RzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmgKaW5kZXgg
YzQwYzc2ZGFhOWFjYTRlYjc1MzJhNGFjNDgyZmM0YWFiZDk2YzFkNS4uNzllYTI3MmUzNjk1NjRj
MmFjNzMzNDg2ZGI3YzUxYzYxZGEzNmVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCkBAIC0zNyw3ICszNyw2IEBACiBA
Y2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKIEBjbGFzcyBET01Ob2RlOwogQGNsYXNzIERPTVJh
bmdlOwotQGNsYXNzIFdlYlBsdWdpbkNvbnRyb2xsZXI7CiAKIGV4dGVybiBjb25zdCBmbG9hdCBf
V2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CiBleHRlcm4gY29uc3QgZmxv
YXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOwpAQCAtNTMsMjMgKzUy
LDIxIEBAIGV4dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJp
bmtGYWN0b3I7CiAtICh2b2lkKWNsb3NlOwogCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUKKwogLy8g
TW9kaWZpZXIgKGZsYWdzQ2hhbmdlZCkgdHJhY2tpbmcgU1BJCiArICh2b2lkKV9wb3N0RmxhZ3ND
aGFuZ2VkRXZlbnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudDsKIC0gKHZvaWQpX3VwZGF0
ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQ7CiAKIC0gKHZvaWQpX3NldEFzaWRlU3Vidmlld3M7CiAt
ICh2b2lkKV9yZXN0b3JlU3Vidmlld3M7Ci0jZW5kaWYKIAotLSAoQk9PTClfaW5zaWRlQW5vdGhl
ckhUTUxWaWV3OwotLSAodm9pZClfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZjsKLSNpZiAhVEFSR0VU
X09TX0lQSE9ORQogLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICop
ZXZlbnQ7CiAKICsgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlczsKICsgKE5T
U3RyaW5nICopX2R1bW15UGFzdGVib2FyZFR5cGU7CiArIChOU0FycmF5ICopX3NlbGVjdGlvblBh
c3RlYm9hcmRUeXBlczsKIC0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkOworCiAjZW5kaWYKIAogLSAodm9pZClfZnJhbWVPckJvdW5k
c0NoYW5nZWQ7CkBAIC03NywxOSArNzQsMTEgQEAgZXh0ZXJuIGNvbnN0IGZsb2F0IF9XZWJIVE1M
Vmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKICNpZiAhVEFSR0VUX09TX0lQSE9ORQog
LSAodm9pZClfaGFuZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
OwogI2VuZGlmCi0tIChXZWJQbHVnaW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXI7CiAK
IC8vIEZJWE1FOiBfc2VsZWN0aW9uUmVjdCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHNlbGVj
dGlvblJlY3QsIHdoaWNoIGlzIGluIHByb3RvY29sIFdlYkRvY3VtZW50U2VsZWN0aW9uLgogLy8g
V2UgY2FuJ3QgcmVtb3ZlIHRoaXMgeWV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB1c2UgYnkgTWFp
bC4KIC0gKE5TUmVjdClfc2VsZWN0aW9uUmVjdDsKIAotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0t
ICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjooTlNFdmVudCAqKWV2ZW50OwotI2Vsc2UKLS0g
KHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOihXZWJFdmVudCAqKWV2ZW50OwotI2VuZGlmCi0t
ICh2b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyOwotCiAtIChCT09MKV9jYW5FZGl0OwogLSAoQk9P
TClfY2FuRWRpdFJpY2hseTsKIC0gKEJPT0wpX2NhbkFsdGVyQ3VycmVudFNlbGVjdGlvbjsKQEAg
LTk3LDEyICs4NiwxNyBAQCBleHRlcm4gY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdN
YXhpbXVtU2hyaW5rRmFjdG9yOwogLSAoQk9PTClfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2lu
dDsKIC0gKEJPT0wpX2lzRWRpdGFibGU7CiAKKyNpZiAhVEFSR0VUX09TX0lQSE9ORQorCiAtIChC
T09MKV90cmFuc3BhcmVudEJhY2tncm91bmQ7CiAtICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tn
cm91bmQ6KEJPT0wpaXNCYWNrZ3JvdW5kVHJhbnNwYXJlbnQ7CiAKKyNlbmRpZgorCiAtICh2b2lk
KV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZzsKIAogI2lmICFUQVJHRVRfT1NfSVBIT05F
CisKIC8vIFNQSSB1c2VkIGJ5IE1haWwuCiAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGFsbCBiZSBt
b3ZlZCB0byBXZWJWaWV3OyB3ZSB3b24ndCBhbHdheXMgaGF2ZSBhIFdlYkhUTUxWaWV3LgogLSAo
TlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlOwpAQCAtMTE2LDYgKzExMCw3IEBAIGV4
dGVybiBjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7
CiAtIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkOwogLSAo
dm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWw7CiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCBmb3JUeXBlOihOU1N0cmluZyAqKXBib2FyZFR5cGUgaW5Db250ZXh0OihET01SYW5nZSAq
KWNvbnRleHQgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKKwogI2VuZGlm
CiAKICNpZiBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>