<?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>203398</bug_id>
          
          <creation_ts>2019-10-24 22:01:32 -0700</creation_ts>
          <short_desc>Add exclusion rules to text manipulation SPI</short_desc>
          <delta_ts>2019-10-25 13:41:18 -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>HTML Editing</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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jberlin</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mifenton</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1583661</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 22:01:32 -0700</bug_when>
    <thetext>We need a way to exclude certain set of elements from being manipulated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583662</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 22:01:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/56567256&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583667</commentid>
    <comment_count>2</comment_count>
      <attachid>381879</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 22:21:44 -0700</bug_when>
    <thetext>Created attachment 381879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583697</commentid>
    <comment_count>3</comment_count>
      <attachid>381889</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 23:58:23 -0700</bug_when>
    <thetext>Created attachment 381889
Yet another unified build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583936</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-25 11:47:01 -0700</bug_when>
    <thetext>ping reviewers.

wincairo &amp; mac-wk-1 failures are unrelated to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583949</commentid>
    <comment_count>5</comment_count>
      <attachid>381889</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-25 12:08:14 -0700</bug_when>
    <thetext>Comment on attachment 381889
Yet another unified build fixes

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.h:35
&gt; +@property (nonatomic) BOOL isExcluded;

Nit - in ObjC API, boolean properties like this are usually written with an “is”-prefixed getter and a property name without the ”is”. E.g.:

@property (nonatomic, getter=isExcluded) BOOL excluded;

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:184
&gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)YES forElement:@&quot;code&quot;],

Nit - these _WKTextManipulationExclusionRules will all leak (but maybe that’s fine for an API test since the process is recreated every time?)

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:221
&gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)YES forAttribute:@&quot;data-exclude&quot; value:@&quot;yes&quot;],
&gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)NO forAttribute:@&quot;data-exclude&quot; value:@&quot;no&quot;],

(Ditto)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583950</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-25 12:10:41 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #5)
&gt; Comment on attachment 381889 [details]
&gt; Yet another unified build fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381889&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.h:35
&gt; &gt; +@property (nonatomic) BOOL isExcluded;
&gt; 
&gt; Nit - in ObjC API, boolean properties like this are usually written with an
&gt; “is”-prefixed getter and a property name without the ”is”. E.g.:
&gt; 
&gt; @property (nonatomic, getter=isExcluded) BOOL excluded;

Was wondering about that. Will fix.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:184
&gt; &gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)YES forElement:@&quot;code&quot;],
&gt; 
&gt; Nit - these _WKTextManipulationExclusionRules will all leak (but maybe
&gt; that’s fine for an API test since the process is recreated every time?)

Oh oops, I meant to autorelease these.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:221
&gt; &gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)YES forAttribute:@&quot;data-exclude&quot; value:@&quot;yes&quot;],
&gt; &gt; +        [[_WKTextManipulationExclusionRule alloc] initExclusion:(BOOL)NO forAttribute:@&quot;data-exclude&quot; value:@&quot;no&quot;],
&gt; 
&gt; (Ditto)

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583994</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-25 13:41:18 -0700</bug_when>
    <thetext>Committed r251600: &lt;https://trac.webkit.org/changeset/251600&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381879</attachid>
            <date>2019-10-24 22:21:44 -0700</date>
            <delta_ts>2019-10-24 23:58:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203398-20191024222144.patch</filename>
            <type>text/plain</type>
            <size>60152</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE5LTEwLTI0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBleGNsdXNpb24gcnVsZXMg
dG8gdGV4dCBtYW5pcHVsYXRpb24gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDMzOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2NTY3MjU2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyB0aGUgYWJpbGl0eSB0byBkZWZpbmUgYSBvcmRlcmVkIHNldCBvZiBydWxlcyB0
byBleGNsdWRlIG9yIGluY2x1ZGUgY29udGVudCBhbiBlbGVtZW50IG9mCisgICAgICAgIGEgY2Vy
dGFpbiBuYW1lIG9yIG9uZSB3aXRoIGEgY2VydGFpbiBhdHRyaWJ1dGUgdmFsdWUuCisKKyAgICAg
ICAgQWxzbyBtYWRlIGNvbXBsZXRlTWFuaXB1bGF0aW9uIHJldHVybiBtb3JlIGRldGFpbGVkIGVy
cm9ycyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisgICAgICAgIFRlc3RzOiBUZXh0TWFuaXB1
bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkFwcGx5U2luZ2xlRXhjbHVpb25SdWxlRm9yRWxl
bWVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRNYW5pcHVsYXRp
b25BcHBseUluY2x1c2lvbkV4Y2x1c2lvblJ1bGVzRm9yQXR0cmlidXRlcworICAgICAgICAgICAg
ICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkV4Y2x1
c2lvbklzVmlvbGF0ZWQKKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OkV4Y2x1c2lvblJ1bGU6Om1hdGNoIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25SdWxlTWF0Y2hlcik6IEFkZGVkLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZv
ciBmaWd1cmluZyBvdXQgd2hldGhlciBhIGdpdmVuIG5vZGUKKyAgICAgICAgaXMgZXhjbHVkZWQg
b3IgaW5jbHVkZWQgaW4gdGhlIHRleHQgbWFuaXB1bGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUnVsZU1hdGNoZXI6OkV4Y2x1c2lvblJ1bGVNYXRjaGVyKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpFeGNsdXNpb25SdWxlTWF0Y2hlcjo6aXNFeGNsdWRlZCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUnVsZU1hdGNoZXI6OnR5cGVGb3JFbGVtZW50KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c3Rh
cnRPYnNlcnZpbmdQYXJhZ3JhcGhzKTogQWRkZWQgYSBWZWN0b3Igb2YgRXhjbHVzaW9uUnVsZSBh
cworICAgICAgICBhbiBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbjo6ZW5jb2RlIGNvbnN0KTogSW5jbHVkZSBpc0V4Y2x1ZGVkIGJvb2xlYW4uCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW46OmRlY29kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6OmRl
Y29kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OkV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlOjplbmNvZGUgY29uc3QpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
OjpFbGVtZW50UnVsZTo6ZGVjb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZTo6ZW5jb2Rl
IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZTo6ZGVjb2RlKTogQWRkZWQuCisKIDIw
MTktMTAtMjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgbW9yZSBpbmZvcm1hdGlvbiB0byBTUkkgZmFpbHVyZSBjb25zb2xlIG1lc3Nh
Z2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUxNTgyKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDI1ICsyNiw5MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAjaW5j
bHVkZSAiRWRpdGluZy5oIgorI2luY2x1ZGUgIkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
aW5saW5lIGJvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1h
dGNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3aXRjaE9u
KHJ1bGUsIFsmZWxlbWVudF0gKEVsZW1lbnRSdWxlIHJ1bGUpIHsKKyAgICAgICAgcmV0dXJuIHJ1
bGUubG9jYWxOYW1lID09IGVsZW1lbnQubG9jYWxOYW1lKCk7CisgICAgfSwgWyZlbGVtZW50XSAo
QXR0cmlidXRlUnVsZSBydWxlKSB7CisgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKHJ1bGUubmFtZSksIHJ1bGUudmFsdWUpOworICAgIH0p
OworfQorCitjbGFzcyBFeGNsdXNpb25SdWxlTWF0Y2hlciB7CitwdWJsaWM6CisgICAgdXNpbmcg
RXhjbHVzaW9uUnVsZSA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
OworICAgIHVzaW5nIFR5cGUgPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9u
UnVsZTo6VHlwZTsKKworICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyKGNvbnN0IFZlY3RvcjxFeGNs
dXNpb25SdWxlPiYgcnVsZXMpCisgICAgICAgIDogbV9ydWxlcyhydWxlcykKKyAgICB7IH0KKwor
ICAgIGJvb2wgaXNFeGNsdWRlZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2Rl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBz
dGFydGluZ0VsZW1lbnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFzdGFydGluZ0VsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVHlwZSB0eXBlID0gVHlw
ZTo6SW5jbHVkZTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1hdGNoaW5nRWxlbWVudDsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2Uoc3RhcnRpbmdFbGVtZW50
LmdldCgpKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdHlwZU9yTnVsbG9wdCA9IHR5cGVGb3JF
bGVtZW50KGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgdHlwZSA9ICp0eXBlT3JOdWxsb3B0
OworICAgICAgICAgICAgICAgIG1hdGNoaW5nRWxlbWVudCA9ICZlbGVtZW50OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2Uoc3RhcnRpbmdFbGVtZW50LmdldCgpKSkgewor
ICAgICAgICAgICAgbV9jYWNoZS5zZXQoZWxlbWVudCwgdHlwZSk7CisgICAgICAgICAgICBpZiAo
JmVsZW1lbnQgPT0gbWF0Y2hpbmdFbGVtZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gVHlwZTo6RXhjbHVkZTsKKyAgICB9CisK
KyAgICBPcHRpb25hbDxUeXBlPiB0eXBlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQorICAg
IHsKKyAgICAgICAgYXV0byBpdCA9IG1fY2FjaGUuZmluZChlbGVtZW50KTsKKyAgICAgICAgaWYg
KGl0ICE9IG1fY2FjaGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisg
ICAgICAgIGZvciAoYXV0byYgcnVsZSA6IG1fcnVsZXMpIHsKKyAgICAgICAgICAgIGlmIChydWxl
Lm1hdGNoKGVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnR5cGU7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBWZWN0b3I8RXhjbHVzaW9uUnVsZT4mIG1fcnVsZXM7CisgICAgSGFzaE1hcDxS
ZWY8RWxlbWVudD4sIEV4Y2x1c2lvblJ1bGU6OlR5cGU+IG1fY2FjaGU7Cit9OworCiBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCiB7CiB9
CiAKLXZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdy
YXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25J
dGVtQ2FsbGJhY2smJiBjYWxsYmFjaywgVmVjdG9yPEV4Y2x1c2lvblJ1bGU+JiYgZXhjbHVzaW9u
UnVsZXMpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5nZXQo
KSk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIG1fZXhjbHVzaW9uUnVsZXMgPSBXVEZNb3ZlKGV4
Y2x1c2lvblJ1bGVzKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IGZpcnN0UG9zaXRp
b25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGxh
c3RQb3NpdGlvbkluTm9kZShtX2RvY3VtZW50LmdldCgpKTsKQEAgLTUyLDYgKzEyMCw3IEBAIHZv
aWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2IKICAgICBpZiAoIWRvY3VtZW50
KQogICAgICAgICByZXR1cm47IC8vIFZpc2libGVQb3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBj
b25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0
cmFyeSBzY3JpcHRzLgogCisgICAgRXhjbHVzaW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1h
dGNoZXIobV9leGNsdXNpb25SdWxlcyk7CiAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0
b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CiAgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOwogICAgIHdoaWxlICghaXRlcmF0b3IuYXRF
bmQoKSkgewpAQCAtNjQsOCArMTMzLDggQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6c3RhcnRPYgogICAgICAgICBzaXplX3Qgb2Zmc2V0T2ZOZXh0TmV3TGluZSA9IDA7CiAgICAg
ICAgIHdoaWxlICgob2Zmc2V0T2ZOZXh0TmV3TGluZSA9IGN1cnJlbnRUZXh0LmZpbmQoJ1xuJywg
ZW5kT2ZMYXN0TmV3TGluZSkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoZW5kT2ZM
YXN0TmV3TGluZSA8IG9mZnNldE9mTmV4dE5ld0xpbmUpIHsKLSAgICAgICAgICAgICAgICB0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklk
ZW50aWZpZXIuZ2VuZXJhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQuc3Vi
c3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUsIG9mZnNldE9mTmV4dE5ld0xpbmUgLSBlbmRPZkxhc3RO
ZXdMaW5lKS50b1N0cmluZygpIH0pOworICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5nVW50aWxF
bmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoZW5kT2ZMYXN0TmV3TGluZSwgb2Zmc2V0
T2ZOZXh0TmV3TGluZSAtIGVuZE9mTGFzdE5ld0xpbmUpLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7
IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGlsRW5kT2ZMaW5lLCBleGNs
dXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGl0ZXJhdG9yLm5vZGUoKSkgfSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGFzdFJhbmdlID0gaXRlcmF0b3IucmFuZ2UoKTsK
QEAgLTgzLDcgKzE1Miw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0
T2IKIAogICAgICAgICBhdXRvIHJlbWFpbmluZ1RleHQgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmco
ZW5kT2ZMYXN0TmV3TGluZSk7CiAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0Lmxlbmd0aCgpKQot
ICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25U
b2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHJlbWFpbmluZ1RleHQudG9TdHJp
bmcoKSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFu
aXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCByZW1haW5pbmdU
ZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoaXRlcmF0b3Iu
bm9kZSgpKSB9KTsKIAogICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAgICAgfQpAQCAtOTks
MTQgKzE2OCwxNCBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtCiAg
ICAgbV9jYWxsYmFjaygqbV9kb2N1bWVudCwgcmVzdWx0Lml0ZXJhdG9yLT5rZXksIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudG9rZW5zKTsKIH0KIAotYm9vbCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIs
IGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mIHJlcGxhY2VtZW50VG9rZW5zKQorYXV0
byBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlk
ZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
IHJlcGxhY2VtZW50VG9rZW5zKSAtPiBNYW5pcHVsYXRpb25SZXN1bHQKIHsKICAgICBpZiAoIWl0
ZW1JZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBNYW5p
cHVsYXRpb25SZXN1bHQ6OkludmFsaWRJdGVtOwogCiAgICAgYXV0byBpdGVtSXRlcmF0b3IgPSBt
X2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOwogICAgIGlmIChpdGVtSXRlcmF0b3IgPT0gbV9p
dGVtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTWFuaXB1
bGF0aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAogICAgIGF1dG8gZGlkUmVwbGFjZSA9IHJlcGxh
Y2UoaXRlbUl0ZXJhdG9yLT52YWx1ZSwgcmVwbGFjZW1lbnRUb2tlbnMpOwogCkBAIC0xMTUsMzUg
KzE4NCw0OCBAQCBib29sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0CiAgICAg
cmV0dXJuIGRpZFJlcGxhY2U7CiB9CiAKLWJvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlw
dWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCitzdHJ1Y3QgRE9NQ2hhbmdlIHsKKyAg
ICBSZWY8Q2hhcmFjdGVyRGF0YT4gbm9kZTsKKyAgICBTdHJpbmcgbmV3RGF0YTsKK307CisKK2F1
dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9u
SXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRU
b2tlbnMpIC0+IE1hbmlwdWxhdGlvblJlc3VsdAogewogICAgIFRleHRJdGVyYXRvciBpdGVyYXRv
ciB7IGl0ZW0uc3RhcnQsIGl0ZW0uZW5kIH07CiAgICAgc2l6ZV90IGN1cnJlbnRUb2tlbkluZGV4
ID0gMDsKLSAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgUmVmPE5vZGU+PiB0b2tlblRvTm9k
ZTsKKyAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwg
Y29uc3QgTWFuaXB1bGF0aW9uVG9rZW4qPj4gdG9rZW5Ub05vZGVUb2tlblBhaXI7CisKICAgICB3
aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgYXV0byBzdHJpbmcgPSBpdGVyYXRv
ci50ZXh0KCkudG9TdHJpbmcoKTsKICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbkluZGV4ID49IGl0
ZW0udG9rZW5zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkNvbnRlbnRDaGFuZ2VkOwogICAgICAgICBhdXRv
JiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9rZW5JbmRleF07CiAgICAgICAg
IGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRva2VuLmNvbnRlbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRva2VuVG9Ob2RlLmFkZChjdXJyZW50VG9rZW4uaWRl
bnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uUmVzdWx0OjpDb250ZW50Q2hhbmdlZDsKKyAgICAgICAgdG9rZW5Ub05vZGVUb2tlblBhaXIu
c2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCBzdGQ6OnBhaXI8UmVmUHRyPE5vZGU+LCBjb25z
dCBNYW5pcHVsYXRpb25Ub2tlbio+IHsgaXRlcmF0b3Iubm9kZSgpLCAmY3VycmVudFRva2VuIH0p
OwogICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAgICAgICAgICsrY3VycmVudFRva2VuSW5k
ZXg7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBwcmVzZXZlIHRoZSBvcmRl
ciBvZiB0aGUgcmVwbGFjZW1lbnQgYXQgYWxsLgotICAgIGZvciAoYXV0byYgdG9rZW4gOiByZXBs
YWNlbWVudFRva2VucykgewotICAgICAgICBhdXRvKiBub2RlID0gdG9rZW5Ub05vZGUuZ2V0KHRv
a2VuLmlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghaXM8Q2hhcmFjdGVyRGF0YT4obm9kZSkpCisgICAgVmVjdG9y
PERPTUNoYW5nZT4gY2hhbmdlczsKKyAgICBmb3IgKGF1dG8mIG5ld1Rva2VuIDogcmVwbGFjZW1l
bnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byBpdCA9IHRva2VuVG9Ob2RlVG9rZW5QYWlyLmZpbmQo
bmV3VG9rZW4uaWRlbnRpZmllcik7CisgICAgICAgIGlmIChpdCA9PSB0b2tlblRvTm9kZVRva2Vu
UGFpci5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkludmFs
aWRUb2tlbjsKKyAgICAgICAgYXV0byYgb2xkVG9rZW4gPSAqaXQtPnZhbHVlLnNlY29uZDsKKyAg
ICAgICAgaWYgKG9sZFRva2VuLmlzRXhjbHVkZWQpCisgICAgICAgICAgICByZXR1cm4gTWFuaXB1
bGF0aW9uUmVzdWx0OjpFeGNsdXNpb25WaW9sYXRpb247CisgICAgICAgIGF1dG8qIG5vZGUgPSBp
dC0+dmFsdWUuZmlyc3QuZ2V0KCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhaXM8Q2hhcmFjdGVy
RGF0YT4oKm5vZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBzYWZlIHRvIHVwZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vu
cy4KLSAgICAgICAgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4u
Y29udGVudCk7CisgICAgICAgIGNoYW5nZXMuYXBwZW5kKHsgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4oKm5vZGUpLCBuZXdUb2tlbi5jb250ZW50IH0pOwogICAgIH0KIAotICAgIHJldHVybiB0cnVl
OworICAgIGZvciAoYXV0byYgY2hhbmdlIDogY2hhbmdlcykKKyAgICAgICAgY2hhbmdlLm5vZGUt
PnNldERhdGEoY2hhbmdlLm5ld0RhdGEpOworCisgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3Vs
dDo6U3VjY2VzczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMjUxNTgyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1
ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAt
NDYsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKICAg
ICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgICAgIFN0cmluZyBjb250ZW50
OworICAgICAgICBib29sIGlzRXhjbHVkZWQgeyBmYWxzZSB9OwogCiAgICAgICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuPiBk
ZWNvZGUoRGVjb2RlciYpOwpAQCAtNTQsMTAgKzU2LDQ0IEBAIHB1YmxpYzoKICAgICBlbnVtIEl0
ZW1JZGVudGlmaWVyVHlwZSB7IH07CiAgICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJ
ZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CiAKKyAgICBzdHJ1Y3QgRXhjbHVzaW9uUnVs
ZSB7CisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBFeGNsdWRlLCBJbmNsdWRl
IH07CisKKyAgICAgICAgc3RydWN0IEVsZW1lbnRSdWxlIHsKKyAgICAgICAgICAgIEF0b21TdHJp
bmcgbG9jYWxOYW1lOworCisgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8RWxlbWVudFJ1bGU+IGRlY29kZShEZWNvZGVyJik7CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IEF0dHJpYnV0ZVJ1bGUgeworICAgICAgICAgICAgQXRv
bVN0cmluZyBuYW1lOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8QXR0cmlidXRl
UnVsZT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgfTsKKworICAgICAgICBUeXBlIHR5cGU7
CisgICAgICAgIFdURjo6VmFyaWFudDxFbGVtZW50UnVsZSwgQXR0cmlidXRlUnVsZT4gcnVsZTsK
KworICAgICAgICBib29sIG1hdGNoKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKworICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxFeGNsdXNpb25SdWxl
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKICAgICB1c2luZyBNYW5pcHVsYXRpb25JdGVt
Q2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMoTWFuaXB1
bGF0aW9uSXRlbUNhbGxiYWNrJiYsIFZlY3RvcjxFeGNsdXNpb25SdWxlPiYmID0geyB9KTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlkZW50aWZp
ZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICBlbnVtIGNsYXNzIE1h
bmlwdWxhdGlvblJlc3VsdCA6IHVpbnQ4X3QgeworICAgICAgICBTdWNjZXNzLAorICAgICAgICBD
b250ZW50Q2hhbmdlZCwKKyAgICAgICAgSW52YWxpZEl0ZW0sCisgICAgICAgIEludmFsaWRUb2tl
biwKKyAgICAgICAgRXhjbHVzaW9uVmlvbGF0aW9uLAorICAgIH07CisgICAgV0VCQ09SRV9FWFBP
UlQgTWFuaXB1bGF0aW9uUmVzdWx0IGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVudGlmaWVy
LCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CiAKIHByaXZhdGU6CiAgICAgc3Ry
dWN0IE1hbmlwdWxhdGlvbkl0ZW0gewpAQCAtNjcsMTAgKzEwMywxMSBAQCBwcml2YXRlOgogICAg
IH07CiAKICAgICB2b2lkIGFkZEl0ZW0oY29uc3QgUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgs
IGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYmKTsKLSAgICBib29sIHJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZl
Y3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICBNYW5pcHVsYXRpb25SZXN1bHQgcmVwbGFj
ZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYpOwogCiAgICAgV2Vha1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBNYW5pcHVsYXRp
b25JdGVtQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUnVsZT4gbV9l
eGNsdXNpb25SdWxlczsKICAgICBIYXNoTWFwPEl0ZW1JZGVudGlmaWVyLCBNYW5pcHVsYXRpb25J
dGVtPiBtX2l0ZW1zOwogICAgIEl0ZW1JZGVudGlmaWVyIG1faXRlbUlkZW50aWZpZXI7CiAgICAg
VG9rZW5JZGVudGlmaWVyIG1fdG9rZW5JZGVudGlmaWVyOwpAQCAtNzksNyArMTE2LDcgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7Ci0gICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7CisgICAgZW5jb2RlciA8
PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQgPDwgaXNFeGNsdWRlZDsKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KQEAgLTkwLDcgKzEyNyw4MyBAQCBPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNFeGNsdWRlZCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lv
blJ1bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
dHlwZSA8PCBydWxlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBFeGNsdXNpb25SdWxlIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50
eXBlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5ydWxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbG9jYWxOYW1lOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OkV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6RXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIEVsZW1lbnRSdWxlIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5sb2NhbE5hbWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG5hbWUgPDwgdmFsdWU7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZT4gVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OkV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGU6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIEF0dHJpYnV0ZVJ1bGUgcmVzdWx0OworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm5hbWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpUeXBlPiB7CisgICAgdXNp
bmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpF
eGNsdXNpb25SdWxlOworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIEV4
Y2x1c2lvblJ1bGU6OlR5cGUsCisgICAgICAgIEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGUs
CisgICAgICAgIEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUKKyAgICA+OworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0PiB7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0
ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3Vs
dDsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBNYW5pcHVsYXRpb25S
ZXN1bHQsCisgICAgICAgIE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2VzcywKKyAgICAgICAgTWFu
aXB1bGF0aW9uUmVzdWx0OjpDb250ZW50Q2hhbmdlZCwKKyAgICAgICAgTWFuaXB1bGF0aW9uUmVz
dWx0OjpJbnZhbGlkSXRlbSwKKyAgICAgICAgTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkVG9r
ZW4sCisgICAgICAgIE1hbmlwdWxhdGlvblJlc3VsdDo6RXhjbHVzaW9uVmlvbGF0aW9uCisgICAg
PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU4
MikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDUgQEAKKzIwMTktMTAtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgQWRkIGV4Y2x1c2lvbiBydWxlcyB0byB0ZXh0IG1hbmlwdWxhdGlvbiBTUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzM5OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTY1NjcyNTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgU1BJIHRvIHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRp
b24gZm9yIHRoZSB0ZXh0IG1hbmlwdWxhdGlvbiAoc2VlIHIyNTE1NzQpLCBpbiBwYXJ0aWN1bGFy
LCB0aGUgc2V0IG9mIHJ1bGVzCisgICAgICAgIGdvdmVybmluZyB3aGljaCBjb250ZW50IHNob3Vs
ZCBiZSBleGNsdWRlZCBvciBpbmNsdWRlZCBpbiB0ZXh0IG1hbmlwdWxhdGlvbnMuCisKKyAgICAg
ICAgVGVzdDogVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRNYW5pcHVsYXRpb25FeGl0RWFybHlX
aXRob3V0RGVsZWdhdGUKKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6IFRh
a2VzIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uCisgICAgICAgIGFzIGFuIGFyZ3Vt
ZW50LiBBbHNvIGZpeGVkIGEgYnVnIHRoYXQgd2Ugd2VyZW4ndCBjYWxsaW5nIHRoZSBjb21wbGV0
aW9uIGhhbmRsZXIgd2hlbiB0aGUgZGVsZWdhdGUgd2FzIG5vdCBzZXQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxl
cjpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRp
b25Db25maWd1cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24ubW06IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaDogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhj
bHVzaW9uUnVsZS5tbTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlIGluaXRFeGNsdXNpb246Zm9yRWxlbWVudDpdKTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGluaXRFeGNsdXNpb246Zm9yQXR0cmli
dXRlOnZhbHVlOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1
c2lvblJ1bGUgZWxlbWVudE5hbWVdKTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVs
YXRpb25FeGNsdXNpb25SdWxlIGF0dHJpYnV0ZU5hbWVdKTogQWRkZWQuCisgICAgICAgICgtW19X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGF0dHJpYnV0ZVZhbHVlXSk6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmg6
IEFkZGVkIGlzRXhjbHVkZWQgYm9vbGVhbiBwcm9wZXJ0eS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTogUmVtb3ZlZCB0aGUgc3VwZXJm
bG91cyBpbXBvcnQgb2YgUmV0YWluUHRyLmgKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVs
YXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5p
cHVsYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wbGV0ZVRleHRN
YW5pcHVsYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTkt
MTAtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlm
eSBQcm9jZXNzVGhyb3R0bGVyIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CShyZXZpc2lvbiAyNTE1ODIpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsOCBAQCBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlnCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3Bl
Y3RvclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1Nlc3Npb25TdGF0
ZS5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0SW5wdXRDb250ZXh0Lm1tCitVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1tCitVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLm1tCiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tU
aHVtYm5haWxWaWV3Lm1tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAJKHJldmlzaW9uIDI1MTU4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MTksMTQgKzk0MTksMTUgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNldE1vY2tXZWJBdXRoZW50aWNhdAogfQogI2VuZGlmCiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVsYXRpb25zKFRleHRNYW5pcHVsYXRpb25JdGVtQ2Fs
bGJhY2smJiBjYWxsYmFjaywgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lv
blJ1bGU+JiBleGNsdXNpb25SdWxlcywKKyAgICBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNr
JiYgY2FsbGJhY2ssIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fdGV4dE1hbmlw
dWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0
VGV4dE1hbmlwdWxhdGlvbnMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFn
ZUlEKTsKKyAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELApAQCAtOTQzOCwxMCArOTQz
OSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFRleHRNYW5pcHVsYXRpCiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKLSAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYgdG9rZW5zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucywgV1RGOjpGdW5jdGlvbjx2b2lk
IChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0
IHJlc3VsdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblJlc3VsdDo6SW52YWxpZEl0ZW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucyksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNTgyKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MTQsMTAgKzE2MTQs
MTAgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB1c2luZyBUZXh0TWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+Jik+OwotICAgIHZvaWQgc3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYsIFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNs
dXNpb25SdWxlPiYsIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGlkRmluZFRleHRNYW5pcHVsYXRpb25J
dGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4mKTsKLSAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiYmKTsKKyAgICB2
b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiwKKyAgICAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uUmVzdWx0KT4mJik7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQm
LCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJl
dmlzaW9uIDI1MTU4MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDkgQEAKICNpbXBvcnQgIl9XS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Npb25TdGF0ZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIl9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJfV0tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlLmgiCiAjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgogI2ltcG9y
dCAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0
b3JlSW50ZXJuYWwuaCIKQEAgLTc0NzcsMTMgKzc0NzksMjcgQEAgLSAodm9pZClfc2V0VGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlOihpZAogICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKIH0KIAotLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0
aW9uSGFuZGxlcjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25m
aWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIV9wYWdlKQorICAgIHVzaW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTsKKworICAgIGlm
ICghX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSB8fCAhX3BhZ2UpIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5zdGFydFRleHRNYW5p
cHVsYXRpb25zKFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAor
ICAgIH0KKworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
RXhjbHVzaW9uUnVsZT4gZXhjbHVzaW9uUnVsZXM7CisgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSAqd2tSdWxlIGlu
IGNvbmZpZ3VyYXRpb24uZXhjbHVzaW9uUnVsZXMpIHsKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9
IHdrUnVsZS5pc0V4Y2x1c2lvbiA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUgOiBFeGNs
dXNpb25SdWxlOjpUeXBlOjpJbmNsdWRlOworICAgICAgICAgICAgaWYgKHdrUnVsZS5hdHRyaWJ1
dGVOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhj
bHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1dGVOYW1lLCB3a1J1bGUu
YXR0cmlidXRlVmFsdWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBl
eGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsg
d2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcGFnZS0+
c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09i
akNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMp
IHsKICAgICAgICAgaWYgKCF3ZWFrU2VsZikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc0OTgs
NiArNzUxNCw3IEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGwKICAg
ICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4gYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3Ry
aW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07CiAgICAgICAgICAgICBb
d2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAgICAgICAgW3drVG9rZW4g
c2V0SXNFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsKICAgICAgICAgICAgIFt3a1Rva2VucyBh
ZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07CiAgICAgICAgIH0KIApAQCAtNzUxMCw2ICs3NTI3LDgg
QEAgLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbAogCiAtICh2b2lkKV9j
b21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBj
b21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsKKyAg
ICB1c2luZyBNYW5pcHVsYXRpb25SZXN1bHQgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0OworCiAgICAgaWYgKCFfcGFnZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03NTIxLDggKzc1NDAsOCBAQCAtICh2b2lkKV9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb246KF9XS1RlCiAgICAgICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5j
b250ZW50IH0pOwogICAgIH0KIAotICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24o
aXRlbUlELCB0b2tlbnMsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIChib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2soc3VjY2Vzcyk7CisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bihpdGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKKyAgICAg
ICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6
U3VjY2Vzcyk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjUxNTgyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJ
bnRlZ2VyLCBfV0tSZWN0RWQKIEBjbGFzcyBfV0tTYWZlQnJvd3NpbmdXYXJuaW5nOwogQGNsYXNz
IF9XS1Nlc3Npb25TdGF0ZTsKIEBjbGFzcyBfV0tUZXh0SW5wdXRDb250ZXh0OworQGNsYXNzIF9X
S1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uOwogQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtOwogQGNsYXNzIF9XS1RodW1ibmFpbFZpZXc7CiBAY2xhc3MgX1dLV2Vic2l0ZVBvbGlj
aWVzOwpAQCAtNTc4LDcgKzU3OSw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUg
Kl9tYWluRnJhbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsK
IAogQHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlOikgaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2Vz
cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Ny
b2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNE
aXNhYmxlZEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlv
bi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAY2xhc3MgX1dLVGV4dE1hbmlw
dWxhdGlvbkV4Y2x1c2lvblJ1bGU7CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0aW9uQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5PF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICo+ICpleGNsdXNpb25SdWxlczsK
KworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRN
YW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5tbQko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aW9uCitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uRXhjbHVzaW9uUnVsZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tG
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgOiBOU09iamVjdAorCistIChp
bnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0RXhj
bHVzaW9uOihCT09MKWV4Y2x1c2lvbiBmb3JFbGVtZW50OihOU1N0cmluZyAqKWxvY2FsTmFtZTsK
Ky0gKGluc3RhbmNldHlwZSlpbml0RXhjbHVzaW9uOihCT09MKWV4Y2x1c2lvbiBmb3JBdHRyaWJ1
dGU6KE5TU3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzRXhjbHVzaW9uOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqZWxlbWVudE5hbWU7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICphdHRyaWJ1dGVOYW1lOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqYXR0cmlidXRlVmFsdWU7CisKK0BlbmQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhj
bHVzaW9uUnVsZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUubW0JKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSB7CisgICAgQk9PTCBfaXNFeGNs
dXNpb247CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfZWxlbWVudE5hbWU7CisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBfYXR0cmlidXRlTmFtZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9h
dHRyaWJ1dGVWYWx1ZTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRFeGNsdXNpb246KEJPT0wp
ZXhjbHVzaW9uIGZvckVsZW1lbnQ6KE5TU3RyaW5nICopbG9jYWxOYW1lCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfaXNFeGNs
dXNpb24gPSBleGNsdXNpb247CisgICAgX2VsZW1lbnROYW1lID0gbG9jYWxOYW1lOworICAgIAor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdEV4Y2x1c2lvbjooQk9P
TClleGNsdXNpb24gZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKW5hbWUgdmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIF9pc0V4Y2x1c2lvbiA9IGV4Y2x1c2lvbjsKKyAgICBfYXR0cmlidXRl
TmFtZSA9IG5hbWU7CisgICAgX2F0dHJpYnV0ZVZhbHVlID0gdmFsdWU7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoTlNTdHJpbmcgKillbGVtZW50TmFtZQoreworICAgIHJldHVybiBfZWxl
bWVudE5hbWUuZ2V0KCk7Cit9CisKKy0gKE5TU3RyaW5nICopYXR0cmlidXRlTmFtZQoreworICAg
IHJldHVybiBfYXR0cmlidXRlTmFtZS5nZXQoKTsKK30KKworLSAoTlNTdHJpbmcgKilhdHRyaWJ1
dGVWYWx1ZQoreworICAgIHJldHVybiBfYXR0cmlidXRlVmFsdWUuZ2V0KCk7Cit9CisKK0BlbmQK
KwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkocmV2aXNpb24gMjUxNTgyKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1ICszMiw2IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW8KIAogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5n
ICppZGVudGlmaWVyOwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpjb250
ZW50OworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgaXNFeGNsdWRlZDsKIAogQGVuZApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCShyZXZpc2lvbiAyNTE1ODIpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw1IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIgogCi0jaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+Ci0KIEBpbXBsZW1lbnRhdGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4KIEBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjUxNTgyKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMzNyw2ICsxMzM3LDggQEAKIAkJOUIwMkUw
Q0IyMzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYy
RDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMDJFMENDMjM1RUI5NTcwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOUIwMkUwRDcyMzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCNTQ5
OUFEMjM2MkE2RjkwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1NDk5QUMy
MzYyQTZGNjAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUI1NDk5QjIy
MzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU0OTlCMDIzNjJB
N0VDMDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkI1RjM5NTE2OUU2
QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdL
Q29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBMTAyQTcwODFFQzBFRUU5MDBEODFEODIgLyogY29tLm1hY3JvbWVkaWEu
Rmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmls
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1RTM5NDkxRDVCRDhBNzAw
QjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovOyB9
OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1
RDggLyogV0tQREZWaWV3LmggKi87IH07CkBAIC00MDU3LDYgKzQwNTksMTAgQEAKIAkJOUIwMkUw
Q0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIy
IC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlC
NTQ5OUFDMjM2MkE2RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjU0OTlBRTIzNjJBN0E3MDBERjhCQTUgLyog
X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOUI1NDk5QjAyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRp
b25FeGNsdXNpb25SdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNTQ5OUIxMjM2MkE3
RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkM1OUQ2QzFFRkNDQ0I2MDAxRThEMDkgLyogQ2Fs
bGJhY2tJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja0lELmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzU5RDZEMUVGQ0RDNkQwMDFFOEQwOSAv
KiBPcHRpb25hbENhbGxiYWNrSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3B0aW9uYWxDYWxsYmFja0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNTRG
ODhFMTY0ODhFODcwMDdERjgxQSAvKiBBdXhpbGlhcnlQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzNTYsNyArNjM2MiwxMSBAQAogCQkJCTJERTlC
MTM4MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0LmggKi8sCiAJCQkJMkRF
OUIxMzcyMjMxRjYxQzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHQubW0gKi8sCiAJCQkJ
MkRFOUIxM0IyMjMxRjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5o
ICovLAorCQkJCTlCNTQ5OUFDMjM2MkE2RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9u
Q29uZmlndXJhdGlvbi5oICovLAorCQkJCTlCNTQ5OUFFMjM2MkE3QTcwMERGOEJBNSAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5tbSAqLywKIAkJCQk5QjAyRTBDOTIzNUVCNjJE
MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJOUI1NDk5
QjAyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmgg
Ki8sCisJCQkJOUI1NDk5QjEyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlLm1tICovLAogCQkJCTlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovLAogCQkJCTlCMDJFMEQwMjM1RUJDQ0EwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSAqLywKIAkJCQk5QjAyRTBDRDIzNUVCOTY3MDA0
MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8sCkBAIC05MzMwLDcgKzkzNDAs
OSBAQAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFOUIxM0EyMjMxRjYxQzAwNTI4N0I3IC8qIF9X
S1RleHRJbnB1dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTlCMTNDMjIzMUY3N0Mw
MDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTlCNTQ5OUFEMjM2MkE2RjkwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUI1NDk5
QjIyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
NkIzNzFCMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CShyZXZpc2lvbiAyNTE1ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgzNiw3ICs2ODM2LDcgQEAgT3B0aW9uYWw8
V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IFdlYlBhZwogICAgIHJldHVybiBXZWJDb3JlOjpFbGVt
ZW50Q29udGV4dCB7IGVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGVsZW1lbnQsICpm
cmFtZSksIG1faWRlbnRpZmllciwgZG9jdW1lbnQuaWRlbnRpZmllcigpLCBkb2N1bWVudC5pZGVu
dGlmaWVyRm9yRWxlbWVudChlbGVtZW50KSB9OwogfQogCi12b2lkIFdlYlBhZ2U6OnN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBXZWJQYWdlOjpzdGFydFRleHRNYW5pcHVsYXRpb25zKFZlY3RvcjxXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZT4mJiBleGNsdXNpb25S
dWxlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CkBAIC02ODU2LDI1ICs2ODU2LDI2IEBA
IHZvaWQgV2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb20KICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShpdGVtSWRlbnRpZmllciwgdG9rZW5zKSk7Ci0gICAg
fSk7CisgICAgfSwgV1RGTW92ZShleGNsdXNpb25SdWxlcykpOwogICAgIC8vIEZvciBub3csIHdl
IGFzc3VtZSBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMgZmluZCBhbGwgcGFyYWdyYXBocyBzeW5j
aHJvbm91c2x5IGF0IG9uY2UuCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKLSAgICBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9r
ZW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFu
aXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3VsdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0ID0gV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3VsdDsKICAgICBhdXRv
IGNvbXBsZXRlTWFuaXB1bGF0aW9uID0gWyZdIHsKICAgICAgICAgaWYgKCFtX3BhZ2UpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uUmVz
dWx0OjpJbnZhbGlkSXRlbTsKIAogICAgICAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQ
dHIobV9wYWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKCFtYWluRG9j
dW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTWFu
aXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAogICAgICAgICBhdXRvKiBjb250cm9sbGVy
ID0gbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3RzKCk7CiAg
ICAgICAgIGlmICghY29udHJvbGxlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkludmFsaWRJdGVtOwogCiAgICAgICAg
IHJldHVybiBjb250cm9sbGVyLT5jb21wbGV0ZU1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vucyk7
CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDI1MTU4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5Nyw5ICsxMTk3LDEwIEBAIHB1YmxpYzoK
ICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50Rm9yQ29udGV4dChjb25zdCBXZWJDb3JlOjpF
bGVtZW50Q29udGV4dCYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRDb250
ZXh0PiBjb250ZXh0Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7CiAKLSAgICB2
b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
KyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwKLSAgICAgICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbj4mLAorICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQpPiYmKTsKIAogI2lmIEVOQUJM
RShBUFBMRV9QQVkpCiAgICAgV2ViUGF5bWVudENvb3JkaW5hdG9yKiBwYXltZW50Q29vcmRpbmF0
b3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNTgyKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTgzLDYgKzU4Myw2IEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW4K
ICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uV2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVz
ZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAtPiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVw
bHlNZXNzYWdlKSBBc3luYwogI2VuZGlmCiAKLSAgICBTdGFydFRleHRNYW5pcHVsYXRpb25zKCkg
LT4gKCkgQXN5bmMKLSAgICBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5z
KSAtPiAoYm9vbCBzdWNjZXNzKSBBc3luYworICAgIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVmVj
dG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBl
eGNsdXNpb25SdWxlcykgLT4gKCkgQXN5bmMKKyAgICBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24o
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1J
RCwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4gdG9rZW5zKSAtPiAoZW51bTp1aW50OF90IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQgcmVzdWx0KSBBc3luYwogfQpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjUxNTgyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTktMTAtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgQWRkIGV4Y2x1c2lvbiBydWxlcyB0byB0ZXh0IG1hbmlwdWxhdGlvbiBTUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzM5OAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTY1NjcyNTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGluY2x1ZGluZyAmIGV4Y2x1ZGluZyBj
b250ZW50IGJhc2VkIG9uIGVsZW1lbnQgbmFtZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKyAg
ICAgICAgQWxzbyBhZGRlZCBhIHRlc3QgdG8gbWFrZSBzdXJlIF9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbmZpZ3VyYXRpb24gY2FsbHMgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorICAgICAg
ICBldmVuIHdoZW4gdGhlIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBpc24ndCBzZXQuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRp
b24ubW06CisKIDIwMTktMTAtMjQgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBhIHRlc3QgZml4IGFmdGVyIHIyNTE0OTgKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRN
YW5pcHVsYXRpb24ubW0JKHJldmlzaW9uIDI1MTU4MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksOSBAQAogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5o
IgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9f
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVs
YXRpb25FeGNsdXNpb25SdWxlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaD4KICNp
bXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpAQCAtNzEsNiArNzMsMjMgQEAgLSAoTlNBcnJheTxfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbSAqPiAqKQogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
K1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRXhpdEVhcmx5V2l0
aG91dERlbGVnYXRlKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0
MDAsIDQwMCldKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpA
IjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRp
dj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9odG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAg
IFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNv
bXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEVYUEVDVF9FUShbZGVsZWdhdGUgaXRlbXNd
LmNvdW50LCAwVUwpOworfQorCiBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlw
dWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQogewogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CkBAIC04MSw3ICsx
MDAsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhCiAgICAgICAg
ICI8aHRtbD48Ym9keT5oZWxsbzxicj53b3JsZDxkaXY+V2ViS2l0PC9kaXY+PC9ib2R5PjwvaHRt
bD4iXTsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRN
YW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKICAgICAgICAg
ZG9uZSA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKQEAgLTEwOCw3ICsxMjcsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1h
bmlwdWxhCiAgICAgICAgICI8aHRtbD48Ym9keT48cHJlPmhlbGxvXG53b3JsZFxuV2ViS2l0PC9w
cmU+PC9ib2R5PjwvaHRtbD4iXTsKIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgIFt3ZWJW
aWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRp
b246XnsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKQEAgLTEzNSw3ICsxNTQsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRp
b24sIFN0YXJ0VGV4dE1hbmlwdWxhCiAgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywgIDxiPndv
cmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOwogICAgIAogICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgIFt3ZWJWaWV3IF9zdGFy
dFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKICAg
ICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKQEAgLTE1MSw2ICsxNzAsNzIgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFy
dFRleHRNYW5pcHVsYQogICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRU
ZXh0TWFuaXB1bGF0aW9uQXBwbHlTaW5nbGVFeGNsdWlvblJ1bGVGb3JFbGVtZW50KQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIK
KyAgICAgICAgIjxodG1sPjxib2R5PkhlcmUncyBzb21lIGNvZGU6PGNvZGU+ZnVuY3Rpb24gPHNw
YW4+Rjwvc3Bhbj4oKSB7IH08L2NvZGU+LjwvYm9keT48L2h0bWw+Il07CisKKyAgICBSZXRhaW5Q
dHI8X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAg
ICBbY29uZmlndXJhdGlvbiBzZXRFeGNsdXNpb25SdWxlczpAWworICAgICAgICBbW19XS1RleHRN
YW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGFsbG9jXSBpbml0RXhjbHVzaW9uOihCT09MKVlFUyBm
b3JFbGVtZW50OkAiY29kZSJdLAorICAgIF1dOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3
ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKSBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9
IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAg
IEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDVVTCk7CisgICAgYXV0byogdG9rZW5z
ID0gaXRlbXNbMF0udG9rZW5zOworICAgIEVYUEVDVF9TVFJFUSgiSGVyZSdzIHNvbWUgY29kZToi
LCB0b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRkFMU0UodG9rZW5z
WzBdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9TVFJFUSgiZnVuY3Rpb24gIiwgdG9rZW5zWzFd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUodG9rZW5zWzFdLmlzRXhjbHVk
ZWQpOworICAgIEVYUEVDVF9TVFJFUSgiRiIsIHRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcp
OworICAgIEVYUEVDVF9UUlVFKHRva2Vuc1syXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIigpIHsgfSIsIHRva2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9U
UlVFKHRva2Vuc1szXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEoIi4iLCB0b2tlbnNb
NF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfRkFMU0UodG9rZW5zWzRdLmlzRXhj
bHVkZWQpOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlv
bkFwcGx5SW5jbHVzaW9uRXhjbHVzaW9uUnVsZXNGb3JBdHRyaWJ1dGVzKQoreworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBf
c2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAg
ICAgIjxodG1sPjxib2R5PjxzcGFuIGRhdGEtZXhjbHVkZT1ZZXM+PGI+aGVsbG8sIDwvYj48c3Bh
biBkYXRhLWV4Y2x1ZGU9Tk8+d29ybGQ8L3NwYW4+PC9zcGFuPjwvYm9keT48L2h0bWw+Il07CisK
KyAgICBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRFeGNsdXNpb25SdWxlczpAWworICAgICAg
ICBbW19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGFsbG9jXSBpbml0RXhjbHVzaW9u
OihCT09MKVlFUyBmb3JBdHRyaWJ1dGU6QCJkYXRhLWV4Y2x1ZGUiIHZhbHVlOkAieWVzIl0sCisg
ICAgICAgIFtbX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgYWxsb2NdIGluaXRFeGNs
dXNpb246KEJPT0wpTk8gZm9yQXR0cmlidXRlOkAiZGF0YS1leGNsdWRlIiB2YWx1ZTpAIm5vIl0s
CisgICAgXV07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGNvbXBsZXRp
b246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsK
KyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBd
LnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRShpdGVtc1sw
XS50b2tlbnNbMF0uaXNFeGNsdWRlZCk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1z
WzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9GQUxTRShpdGVt
c1swXS50b2tlbnNbMV0uaXNFeGNsdWRlZCk7Cit9CisKIHN0cnVjdCBUb2tlbiB7CiAgICAgTlNT
dHJpbmcgKmlkZW50aWZpZXI7CiAgICAgTlNTdHJpbmcgKmNvbnRlbnQ7CkBAIC0xNjksNyArMjU0
LDcgQEAgc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbQogICAgIHJldHVy
biBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRp
ZmllcjppdGVtSWRlbnRpZmllciB0b2tlbnM6d2tUb2tlbnMuZ2V0KCldKTsKIH0KIAotVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2lt
cGxlUGFyYWdyYXBoQ29udGVudCkKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uUmVwbGFjZVNpbXBsZVBhcmFncmFwaENvbnRlbnQpCiB7CiAgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwpAQCAtMTc5LDcgKzI2NCw3
IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICAgICAgIjxo
dG1sPjxib2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMg
PGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+Il07CiAKICAgICBkb25lID0gZmFsc2U7
Ci0gICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0
aW9uOm5pbCBjb21wbGV0aW9uOl57CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CkBAIC0yMjEsNyArMzA2LDcgQEAgVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcAogICAgICAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7
CiB9CiAKLVRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hv
dWxkRmFpbFdoZW5Db250ZW50SXNDaGFuZ2VkKQorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCiB7CiAgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwpAQCAtMjMxLDcgKzMx
Niw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICAgICAg
IjxodG1sPjxib2R5PjxwPiB3aGF0IDxlbT50aW1lPC9lbT4gYXJlIHRoZXkgbm93PzwvcD48L2Jv
ZHk+PC9odG1sPiJdOwogCiAgICAgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IF9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgW3dlYlZpZXcgX3N0
YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeewog
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwpAQCAtMjU5LDcgKzM0NCw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29t
cGxldGVUZXh0TWFuaXAKICAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOwogfQogCi1URVNUKFRleHRNYW5pcHVs
YXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZEZhaWxXaGVuRG9jdW1lbnRIYXNC
ZWVuTmF2aWdhdGVkQXdheSkKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQogewogICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKQEAgLTI2OSw3ICsz
NTQsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwCiAgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MID0gJzxwPmhleSwgPGVtPmVhcnRoPC9lbT48L3A+JyJdOwogCiAgICAgZG9uZSA9IGZhbHNl
OwotICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5k
bGVyOl57CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJh
dGlvbjpuaWwgY29tcGxldGlvbjpeewogICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpAQCAtMjg0LDcgKzM2OSw3IEBAIFRF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+
aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4nIl07CiAKICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dl
YlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAg
ICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBj
b21wbGV0aW9uOl57CiAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CkBAIC0zMDEsNSArMzg2LDQzIEBAIFRFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbkZhaWxXaGVuRXhjbHVzaW9uSXNWaW9sYXRlZCkKK3sKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+
aGksIDxlbT5XZWJLaXR0ZW48L2VtPjwvcD4nIl07CisKKyAgICBSZXRhaW5QdHI8X1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRFeGNsdXNpb25SdWxlczpAWworICAgICAgICBbW19XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlIGFsbG9jXSBpbml0RXhjbHVzaW9uOihCT09MKVlFUyBmb3JFbGVtZW50OkAi
cCJdLAorICAgIF1dOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21w
bGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVt
c107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVt
c1swXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoaSwgIiwgaXRlbXNb
MF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJL
aXR0ZW4iLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgewor
ICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIldlYktpdCIgfSwKKyAg
ICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9G
QUxTRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGks
IDxlbT5XZWJLaXR0ZW48L2VtPjwvcD4iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381889</attachid>
            <date>2019-10-24 23:58:23 -0700</date>
            <delta_ts>2019-10-25 12:08:14 -0700</delta_ts>
            <desc>Yet another unified build fixes</desc>
            <filename>bug-203398-20191024235821.patch</filename>
            <type>text/plain</type>
            <size>61268</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE5LTEwLTI0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBleGNsdXNpb24gcnVsZXMg
dG8gdGV4dCBtYW5pcHVsYXRpb24gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDMzOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2NTY3MjU2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyB0aGUgYWJpbGl0eSB0byBkZWZpbmUgYSBvcmRlcmVkIHNldCBvZiBydWxlcyB0
byBleGNsdWRlIG9yIGluY2x1ZGUgY29udGVudCBhbiBlbGVtZW50IG9mCisgICAgICAgIGEgY2Vy
dGFpbiBuYW1lIG9yIG9uZSB3aXRoIGEgY2VydGFpbiBhdHRyaWJ1dGUgdmFsdWUuCisKKyAgICAg
ICAgQWxzbyBtYWRlIGNvbXBsZXRlTWFuaXB1bGF0aW9uIHJldHVybiBtb3JlIGRldGFpbGVkIGVy
cm9ycyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisgICAgICAgIFRlc3RzOiBUZXh0TWFuaXB1
bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkFwcGx5U2luZ2xlRXhjbHVpb25SdWxlRm9yRWxl
bWVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRNYW5pcHVsYXRp
b25BcHBseUluY2x1c2lvbkV4Y2x1c2lvblJ1bGVzRm9yQXR0cmlidXRlcworICAgICAgICAgICAg
ICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25GYWlsV2hlbkV4Y2x1
c2lvbklzVmlvbGF0ZWQKKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OkV4Y2x1c2lvblJ1bGU6Om1hdGNoIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
eGNsdXNpb25SdWxlTWF0Y2hlcik6IEFkZGVkLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZv
ciBmaWd1cmluZyBvdXQgd2hldGhlciBhIGdpdmVuIG5vZGUKKyAgICAgICAgaXMgZXhjbHVkZWQg
b3IgaW5jbHVkZWQgaW4gdGhlIHRleHQgbWFuaXB1bGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUnVsZU1hdGNoZXI6OkV4Y2x1c2lvblJ1bGVNYXRjaGVyKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpFeGNsdXNpb25SdWxlTWF0Y2hlcjo6aXNFeGNsdWRlZCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUnVsZU1hdGNoZXI6OnR5cGVGb3JFbGVtZW50KTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c3Rh
cnRPYnNlcnZpbmdQYXJhZ3JhcGhzKTogQWRkZWQgYSBWZWN0b3Igb2YgRXhjbHVzaW9uUnVsZSBh
cworICAgICAgICBhbiBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25SZXN1bHQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbjo6ZW5jb2RlIGNvbnN0KTogSW5jbHVkZSBpc0V4Y2x1ZGVkIGJvb2xlYW4uCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW46OmRlY29kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6OmRl
Y29kZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OkV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlOjplbmNvZGUgY29uc3QpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
OjpFbGVtZW50UnVsZTo6ZGVjb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZTo6ZW5jb2Rl
IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZTo6ZGVjb2RlKTogQWRkZWQuCisKIDIw
MTktMTAtMjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgbW9yZSBpbmZvcm1hdGlvbiB0byBTUkkgZmFpbHVyZSBjb25zb2xlIG1lc3Nh
Z2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUxNTgzKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDI1ICsyNiw5MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAjaW5j
bHVkZSAiRWRpdGluZy5oIgorI2luY2x1ZGUgIkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
aW5saW5lIGJvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1h
dGNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3aXRjaE9u
KHJ1bGUsIFsmZWxlbWVudF0gKEVsZW1lbnRSdWxlIHJ1bGUpIHsKKyAgICAgICAgcmV0dXJuIHJ1
bGUubG9jYWxOYW1lID09IGVsZW1lbnQubG9jYWxOYW1lKCk7CisgICAgfSwgWyZlbGVtZW50XSAo
QXR0cmlidXRlUnVsZSBydWxlKSB7CisgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKHJ1bGUubmFtZSksIHJ1bGUudmFsdWUpOworICAgIH0p
OworfQorCitjbGFzcyBFeGNsdXNpb25SdWxlTWF0Y2hlciB7CitwdWJsaWM6CisgICAgdXNpbmcg
RXhjbHVzaW9uUnVsZSA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxl
OworICAgIHVzaW5nIFR5cGUgPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9u
UnVsZTo6VHlwZTsKKworICAgIEV4Y2x1c2lvblJ1bGVNYXRjaGVyKGNvbnN0IFZlY3RvcjxFeGNs
dXNpb25SdWxlPiYgcnVsZXMpCisgICAgICAgIDogbV9ydWxlcyhydWxlcykKKyAgICB7IH0KKwor
ICAgIGJvb2wgaXNFeGNsdWRlZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2Rl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBz
dGFydGluZ0VsZW1lbnQgPSBpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFzdGFydGluZ0VsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVHlwZSB0eXBlID0gVHlw
ZTo6SW5jbHVkZTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1hdGNoaW5nRWxlbWVudDsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2Uoc3RhcnRpbmdFbGVtZW50
LmdldCgpKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdHlwZU9yTnVsbG9wdCA9IHR5cGVGb3JF
bGVtZW50KGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgdHlwZSA9ICp0eXBlT3JOdWxsb3B0
OworICAgICAgICAgICAgICAgIG1hdGNoaW5nRWxlbWVudCA9ICZlbGVtZW50OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2Uoc3RhcnRpbmdFbGVtZW50LmdldCgpKSkgewor
ICAgICAgICAgICAgbV9jYWNoZS5zZXQoZWxlbWVudCwgdHlwZSk7CisgICAgICAgICAgICBpZiAo
JmVsZW1lbnQgPT0gbWF0Y2hpbmdFbGVtZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gVHlwZTo6RXhjbHVkZTsKKyAgICB9CisK
KyAgICBPcHRpb25hbDxUeXBlPiB0eXBlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQorICAg
IHsKKyAgICAgICAgYXV0byBpdCA9IG1fY2FjaGUuZmluZChlbGVtZW50KTsKKyAgICAgICAgaWYg
KGl0ICE9IG1fY2FjaGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisg
ICAgICAgIGZvciAoYXV0byYgcnVsZSA6IG1fcnVsZXMpIHsKKyAgICAgICAgICAgIGlmIChydWxl
Lm1hdGNoKGVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnR5cGU7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBWZWN0b3I8RXhjbHVzaW9uUnVsZT4mIG1fcnVsZXM7CisgICAgSGFzaE1hcDxS
ZWY8RWxlbWVudD4sIEV4Y2x1c2lvblJ1bGU6OlR5cGU+IG1fY2FjaGU7Cit9OworCiBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCiB7CiB9
CiAKLXZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdy
YXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25J
dGVtQ2FsbGJhY2smJiBjYWxsYmFjaywgVmVjdG9yPEV4Y2x1c2lvblJ1bGU+JiYgZXhjbHVzaW9u
UnVsZXMpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVudC5nZXQo
KSk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIG1fZXhjbHVzaW9uUnVsZXMgPSBXVEZNb3ZlKGV4
Y2x1c2lvblJ1bGVzKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IGZpcnN0UG9zaXRp
b25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGxh
c3RQb3NpdGlvbkluTm9kZShtX2RvY3VtZW50LmdldCgpKTsKQEAgLTUyLDYgKzEyMCw3IEBAIHZv
aWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2IKICAgICBpZiAoIWRvY3VtZW50
KQogICAgICAgICByZXR1cm47IC8vIFZpc2libGVQb3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBj
b25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0
cmFyeSBzY3JpcHRzLgogCisgICAgRXhjbHVzaW9uUnVsZU1hdGNoZXIgZXhjbHVzaW9uUnVsZU1h
dGNoZXIobV9leGNsdXNpb25SdWxlcyk7CiAgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0
b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CiAgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOwogICAgIHdoaWxlICghaXRlcmF0b3IuYXRF
bmQoKSkgewpAQCAtNjQsOCArMTMzLDggQEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6c3RhcnRPYgogICAgICAgICBzaXplX3Qgb2Zmc2V0T2ZOZXh0TmV3TGluZSA9IDA7CiAgICAg
ICAgIHdoaWxlICgob2Zmc2V0T2ZOZXh0TmV3TGluZSA9IGN1cnJlbnRUZXh0LmZpbmQoJ1xuJywg
ZW5kT2ZMYXN0TmV3TGluZSkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoZW5kT2ZM
YXN0TmV3TGluZSA8IG9mZnNldE9mTmV4dE5ld0xpbmUpIHsKLSAgICAgICAgICAgICAgICB0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklk
ZW50aWZpZXIuZ2VuZXJhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQuc3Vi
c3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUsIG9mZnNldE9mTmV4dE5ld0xpbmUgLSBlbmRPZkxhc3RO
ZXdMaW5lKS50b1N0cmluZygpIH0pOworICAgICAgICAgICAgICAgIGF1dG8gc3RyaW5nVW50aWxF
bmRPZkxpbmUgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmcoZW5kT2ZMYXN0TmV3TGluZSwgb2Zmc2V0
T2ZOZXh0TmV3TGluZSAtIGVuZE9mTGFzdE5ld0xpbmUpLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7
IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGlsRW5kT2ZMaW5lLCBleGNs
dXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGl0ZXJhdG9yLm5vZGUoKSkgfSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGFzdFJhbmdlID0gaXRlcmF0b3IucmFuZ2UoKTsK
QEAgLTgzLDcgKzE1Miw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0
T2IKIAogICAgICAgICBhdXRvIHJlbWFpbmluZ1RleHQgPSBjdXJyZW50VGV4dC5zdWJzdHJpbmco
ZW5kT2ZMYXN0TmV3TGluZSk7CiAgICAgICAgIGlmIChyZW1haW5pbmdUZXh0Lmxlbmd0aCgpKQot
ICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25U
b2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHJlbWFpbmluZ1RleHQudG9TdHJp
bmcoKSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFu
aXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCByZW1haW5pbmdU
ZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoaXRlcmF0b3Iu
bm9kZSgpKSB9KTsKIAogICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAgICAgfQpAQCAtOTks
MTQgKzE2OCwxNCBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtCiAg
ICAgbV9jYWxsYmFjaygqbV9kb2N1bWVudCwgcmVzdWx0Lml0ZXJhdG9yLT5rZXksIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudG9rZW5zKTsKIH0KIAotYm9vbCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIs
IGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mIHJlcGxhY2VtZW50VG9rZW5zKQorYXV0
byBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlk
ZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
IHJlcGxhY2VtZW50VG9rZW5zKSAtPiBNYW5pcHVsYXRpb25SZXN1bHQKIHsKICAgICBpZiAoIWl0
ZW1JZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBNYW5p
cHVsYXRpb25SZXN1bHQ6OkludmFsaWRJdGVtOwogCiAgICAgYXV0byBpdGVtSXRlcmF0b3IgPSBt
X2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOwogICAgIGlmIChpdGVtSXRlcmF0b3IgPT0gbV9p
dGVtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTWFuaXB1
bGF0aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAogICAgIGF1dG8gZGlkUmVwbGFjZSA9IHJlcGxh
Y2UoaXRlbUl0ZXJhdG9yLT52YWx1ZSwgcmVwbGFjZW1lbnRUb2tlbnMpOwogCkBAIC0xMTUsMzUg
KzE4NCw0OCBAQCBib29sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0CiAgICAg
cmV0dXJuIGRpZFJlcGxhY2U7CiB9CiAKLWJvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlw
dWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCitzdHJ1Y3QgRE9NQ2hhbmdlIHsKKyAg
ICBSZWY8Q2hhcmFjdGVyRGF0YT4gbm9kZTsKKyAgICBTdHJpbmcgbmV3RGF0YTsKK307CisKK2F1
dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9u
SXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRU
b2tlbnMpIC0+IE1hbmlwdWxhdGlvblJlc3VsdAogewogICAgIFRleHRJdGVyYXRvciBpdGVyYXRv
ciB7IGl0ZW0uc3RhcnQsIGl0ZW0uZW5kIH07CiAgICAgc2l6ZV90IGN1cnJlbnRUb2tlbkluZGV4
ID0gMDsKLSAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgUmVmPE5vZGU+PiB0b2tlblRvTm9k
ZTsKKyAgICBIYXNoTWFwPFRva2VuSWRlbnRpZmllciwgc3RkOjpwYWlyPFJlZlB0cjxOb2RlPiwg
Y29uc3QgTWFuaXB1bGF0aW9uVG9rZW4qPj4gdG9rZW5Ub05vZGVUb2tlblBhaXI7CisKICAgICB3
aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgYXV0byBzdHJpbmcgPSBpdGVyYXRv
ci50ZXh0KCkudG9TdHJpbmcoKTsKICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbkluZGV4ID49IGl0
ZW0udG9rZW5zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkNvbnRlbnRDaGFuZ2VkOwogICAgICAgICBhdXRv
JiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9rZW5JbmRleF07CiAgICAgICAg
IGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRva2VuLmNvbnRlbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRva2VuVG9Ob2RlLmFkZChjdXJyZW50VG9rZW4uaWRl
bnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0
aW9uUmVzdWx0OjpDb250ZW50Q2hhbmdlZDsKKyAgICAgICAgdG9rZW5Ub05vZGVUb2tlblBhaXIu
c2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCBzdGQ6OnBhaXI8UmVmUHRyPE5vZGU+LCBjb25z
dCBNYW5pcHVsYXRpb25Ub2tlbio+IHsgaXRlcmF0b3Iubm9kZSgpLCAmY3VycmVudFRva2VuIH0p
OwogICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CiAgICAgICAgICsrY3VycmVudFRva2VuSW5k
ZXg7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBwcmVzZXZlIHRoZSBvcmRl
ciBvZiB0aGUgcmVwbGFjZW1lbnQgYXQgYWxsLgotICAgIGZvciAoYXV0byYgdG9rZW4gOiByZXBs
YWNlbWVudFRva2VucykgewotICAgICAgICBhdXRvKiBub2RlID0gdG9rZW5Ub05vZGUuZ2V0KHRv
a2VuLmlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghaXM8Q2hhcmFjdGVyRGF0YT4obm9kZSkpCisgICAgVmVjdG9y
PERPTUNoYW5nZT4gY2hhbmdlczsKKyAgICBmb3IgKGF1dG8mIG5ld1Rva2VuIDogcmVwbGFjZW1l
bnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byBpdCA9IHRva2VuVG9Ob2RlVG9rZW5QYWlyLmZpbmQo
bmV3VG9rZW4uaWRlbnRpZmllcik7CisgICAgICAgIGlmIChpdCA9PSB0b2tlblRvTm9kZVRva2Vu
UGFpci5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25SZXN1bHQ6OkludmFs
aWRUb2tlbjsKKyAgICAgICAgYXV0byYgb2xkVG9rZW4gPSAqaXQtPnZhbHVlLnNlY29uZDsKKyAg
ICAgICAgaWYgKG9sZFRva2VuLmlzRXhjbHVkZWQpCisgICAgICAgICAgICByZXR1cm4gTWFuaXB1
bGF0aW9uUmVzdWx0OjpFeGNsdXNpb25WaW9sYXRpb247CisgICAgICAgIGF1dG8qIG5vZGUgPSBp
dC0+dmFsdWUuZmlyc3QuZ2V0KCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhaXM8Q2hhcmFjdGVy
RGF0YT4oKm5vZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBzYWZlIHRvIHVwZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vu
cy4KLSAgICAgICAgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4u
Y29udGVudCk7CisgICAgICAgIGNoYW5nZXMuYXBwZW5kKHsgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4oKm5vZGUpLCBuZXdUb2tlbi5jb250ZW50IH0pOwogICAgIH0KIAotICAgIHJldHVybiB0cnVl
OworICAgIGZvciAoYXV0byYgY2hhbmdlIDogY2hhbmdlcykKKyAgICAgICAgY2hhbmdlLm5vZGUt
PnNldERhdGEoY2hhbmdlLm5ld0RhdGEpOworCisgICAgcmV0dXJuIE1hbmlwdWxhdGlvblJlc3Vs
dDo6U3VjY2VzczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMjUxNTgzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1
ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAt
NDYsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKICAg
ICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgICAgIFN0cmluZyBjb250ZW50
OworICAgICAgICBib29sIGlzRXhjbHVkZWQgeyBmYWxzZSB9OwogCiAgICAgICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuPiBk
ZWNvZGUoRGVjb2RlciYpOwpAQCAtNTQsMTAgKzU2LDQ0IEBAIHB1YmxpYzoKICAgICBlbnVtIEl0
ZW1JZGVudGlmaWVyVHlwZSB7IH07CiAgICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJ
ZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CiAKKyAgICBzdHJ1Y3QgRXhjbHVzaW9uUnVs
ZSB7CisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBFeGNsdWRlLCBJbmNsdWRl
IH07CisKKyAgICAgICAgc3RydWN0IEVsZW1lbnRSdWxlIHsKKyAgICAgICAgICAgIEF0b21TdHJp
bmcgbG9jYWxOYW1lOworCisgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8RWxlbWVudFJ1bGU+IGRlY29kZShEZWNvZGVyJik7CisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IEF0dHJpYnV0ZVJ1bGUgeworICAgICAgICAgICAgQXRv
bVN0cmluZyBuYW1lOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8QXR0cmlidXRl
UnVsZT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgfTsKKworICAgICAgICBUeXBlIHR5cGU7
CisgICAgICAgIFdURjo6VmFyaWFudDxFbGVtZW50UnVsZSwgQXR0cmlidXRlUnVsZT4gcnVsZTsK
KworICAgICAgICBib29sIG1hdGNoKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKworICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxFeGNsdXNpb25SdWxl
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKICAgICB1c2luZyBNYW5pcHVsYXRpb25JdGVt
Q2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMoTWFuaXB1
bGF0aW9uSXRlbUNhbGxiYWNrJiYsIFZlY3RvcjxFeGNsdXNpb25SdWxlPiYmID0geyB9KTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVNYW5pcHVsYXRpb24oSXRlbUlkZW50aWZp
ZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICBlbnVtIGNsYXNzIE1h
bmlwdWxhdGlvblJlc3VsdCA6IHVpbnQ4X3QgeworICAgICAgICBTdWNjZXNzLAorICAgICAgICBD
b250ZW50Q2hhbmdlZCwKKyAgICAgICAgSW52YWxpZEl0ZW0sCisgICAgICAgIEludmFsaWRUb2tl
biwKKyAgICAgICAgRXhjbHVzaW9uVmlvbGF0aW9uLAorICAgIH07CisgICAgV0VCQ09SRV9FWFBP
UlQgTWFuaXB1bGF0aW9uUmVzdWx0IGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVudGlmaWVy
LCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CiAKIHByaXZhdGU6CiAgICAgc3Ry
dWN0IE1hbmlwdWxhdGlvbkl0ZW0gewpAQCAtNjcsMTAgKzEwMywxMSBAQCBwcml2YXRlOgogICAg
IH07CiAKICAgICB2b2lkIGFkZEl0ZW0oY29uc3QgUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgs
IGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYmKTsKLSAgICBib29sIHJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZl
Y3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICBNYW5pcHVsYXRpb25SZXN1bHQgcmVwbGFj
ZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYpOwogCiAgICAgV2Vha1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBNYW5pcHVsYXRp
b25JdGVtQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8RXhjbHVzaW9uUnVsZT4gbV9l
eGNsdXNpb25SdWxlczsKICAgICBIYXNoTWFwPEl0ZW1JZGVudGlmaWVyLCBNYW5pcHVsYXRpb25J
dGVtPiBtX2l0ZW1zOwogICAgIEl0ZW1JZGVudGlmaWVyIG1faXRlbUlkZW50aWZpZXI7CiAgICAg
VG9rZW5JZGVudGlmaWVyIG1fdG9rZW5JZGVudGlmaWVyOwpAQCAtNzksNyArMTE2LDcgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7Ci0gICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7CisgICAgZW5jb2RlciA8
PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQgPDwgaXNFeGNsdWRlZDsKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KQEAgLTkwLDcgKzEyNyw4MyBAQCBPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNFeGNsdWRlZCkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lv
blJ1bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
dHlwZSA8PCBydWxlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU+IFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBFeGNsdXNpb25SdWxlIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50
eXBlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5ydWxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbG9jYWxOYW1lOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OkV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6RXhjbHVzaW9uUnVsZTo6RWxlbWVudFJ1bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIEVsZW1lbnRSdWxlIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5sb2NhbE5hbWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpBdHRyaWJ1dGVSdWxlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG5hbWUgPDwgdmFsdWU7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6RXhjbHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZT4gVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OkV4Y2x1c2lvblJ1bGU6OkF0dHJpYnV0ZVJ1bGU6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIEF0dHJpYnV0ZVJ1bGUgcmVzdWx0OworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm5hbWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjpUeXBlPiB7CisgICAgdXNp
bmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpF
eGNsdXNpb25SdWxlOworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIEV4
Y2x1c2lvblJ1bGU6OlR5cGUsCisgICAgICAgIEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkluY2x1ZGUs
CisgICAgICAgIEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUKKyAgICA+OworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0PiB7CisgICAgdXNpbmcgTWFuaXB1bGF0aW9uUmVzdWx0
ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJlc3Vs
dDsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBNYW5pcHVsYXRpb25S
ZXN1bHQsCisgICAgICAgIE1hbmlwdWxhdGlvblJlc3VsdDo6U3VjY2VzcywKKyAgICAgICAgTWFu
aXB1bGF0aW9uUmVzdWx0OjpDb250ZW50Q2hhbmdlZCwKKyAgICAgICAgTWFuaXB1bGF0aW9uUmVz
dWx0OjpJbnZhbGlkSXRlbSwKKyAgICAgICAgTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkVG9r
ZW4sCisgICAgICAgIE1hbmlwdWxhdGlvblJlc3VsdDo6RXhjbHVzaW9uVmlvbGF0aW9uCisgICAg
PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU4
MykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDUgQEAKKzIwMTktMTAtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgQWRkIGV4Y2x1c2lvbiBydWxlcyB0byB0ZXh0IG1hbmlwdWxhdGlvbiBTUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzM5OAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTY1NjcyNTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgU1BJIHRvIHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRp
b24gZm9yIHRoZSB0ZXh0IG1hbmlwdWxhdGlvbiAoc2VlIHIyNTE1NzQpLCBpbiBwYXJ0aWN1bGFy
LCB0aGUgc2V0IG9mIHJ1bGVzCisgICAgICAgIGdvdmVybmluZyB3aGljaCBjb250ZW50IHNob3Vs
ZCBiZSBleGNsdWRlZCBvciBpbmNsdWRlZCBpbiB0ZXh0IG1hbmlwdWxhdGlvbnMuCisKKyAgICAg
ICAgVGVzdDogVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRNYW5pcHVsYXRpb25FeGl0RWFybHlX
aXRob3V0RGVsZWdhdGUKKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBf
c3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6IFRh
a2VzIF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uCisgICAgICAgIGFzIGFuIGFyZ3Vt
ZW50LiBBbHNvIGZpeGVkIGEgYnVnIHRoYXQgd2Ugd2VyZW4ndCBjYWxsaW5nIHRoZSBjb21wbGV0
aW9uIGhhbmRsZXIgd2hlbiB0aGUgZGVsZWdhdGUgd2FzIG5vdCBzZXQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxl
cjpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRp
b25Db25maWd1cmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24ubW06IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaDogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhj
bHVzaW9uUnVsZS5tbTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlIGluaXRFeGNsdXNpb246Zm9yRWxlbWVudDpdKTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGluaXRFeGNsdXNpb246Zm9yQXR0cmli
dXRlOnZhbHVlOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1
c2lvblJ1bGUgZWxlbWVudE5hbWVdKTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVs
YXRpb25FeGNsdXNpb25SdWxlIGF0dHJpYnV0ZU5hbWVdKTogQWRkZWQuCisgICAgICAgICgtW19X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGF0dHJpYnV0ZVZhbHVlXSk6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmg6
IEFkZGVkIGlzRXhjbHVkZWQgYm9vbGVhbiBwcm9wZXJ0eS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTogUmVtb3ZlZCB0aGUgc3VwZXJm
bG91cyBpbXBvcnQgb2YgUmV0YWluUHRyLmgKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVs
YXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5p
cHVsYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wbGV0ZVRleHRN
YW5pcHVsYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTkt
MTAtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlm
eSBQcm9jZXNzVGhyb3R0bGVyIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CShyZXZpc2lvbiAyNTE1ODMpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsOCBAQCBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlnCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3Bl
Y3RvclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1Nlc3Npb25TdGF0
ZS5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0SW5wdXRDb250ZXh0Lm1tCitVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1tCitVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLm1tCiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tU
aHVtYm5haWxWaWV3Lm1tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAJKHJldmlzaW9uIDI1MTU4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MTksMTQgKzk0MTksMTUgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNldE1vY2tXZWJBdXRoZW50aWNhdAogfQogI2VuZGlmCiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVsYXRpb25zKFRleHRNYW5pcHVsYXRpb25JdGVtQ2Fs
bGJhY2smJiBjYWxsYmFjaywgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lv
blJ1bGU+JiBleGNsdXNpb25SdWxlcywKKyAgICBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNr
JiYgY2FsbGJhY2ssIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fdGV4dE1hbmlw
dWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0
VGV4dE1hbmlwdWxhdGlvbnMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFn
ZUlEKTsKKyAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELApAQCAtOTQzOCwxMCArOTQz
OSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFRleHRNYW5pcHVsYXRpCiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKLSAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYgdG9rZW5zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucywgV1RGOjpGdW5jdGlvbjx2b2lk
IChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0
IHJlc3VsdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblJlc3VsdDo6SW52YWxpZEl0ZW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucyksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNTgzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MTQsMTAgKzE2MTQs
MTAgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB1c2luZyBUZXh0TWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+Jik+OwotICAgIHZvaWQgc3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYsIFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNs
dXNpb25SdWxlPiYsIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGlkRmluZFRleHRNYW5pcHVsYXRpb25J
dGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4mKTsKLSAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiYmKTsKKyAgICB2
b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiwKKyAgICAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uUmVzdWx0KT4mJik7CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQm
LCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJl
dmlzaW9uIDI1MTU4MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDkgQEAKICNpbXBvcnQgIl9XS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Npb25TdGF0ZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIl9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJfV0tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlLmgiCiAjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgogI2ltcG9y
dCAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0
b3JlSW50ZXJuYWwuaCIKQEAgLTc0NzcsMTMgKzc0NzksMjcgQEAgLSAodm9pZClfc2V0VGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlOihpZAogICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBk
ZWxlZ2F0ZTsKIH0KIAotLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0
aW9uSGFuZGxlcjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25m
aWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIV9wYWdlKQorICAgIHVzaW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTsKKworICAgIGlm
ICghX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSB8fCAhX3BhZ2UpIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwotICAgIF9wYWdlLT5zdGFydFRleHRNYW5p
cHVsYXRpb25zKFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAor
ICAgIH0KKworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
RXhjbHVzaW9uUnVsZT4gZXhjbHVzaW9uUnVsZXM7CisgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSAqd2tSdWxlIGlu
IGNvbmZpZ3VyYXRpb24uZXhjbHVzaW9uUnVsZXMpIHsKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9
IHdrUnVsZS5pc0V4Y2x1c2lvbiA/IEV4Y2x1c2lvblJ1bGU6OlR5cGU6OkV4Y2x1ZGUgOiBFeGNs
dXNpb25SdWxlOjpUeXBlOjpJbmNsdWRlOworICAgICAgICAgICAgaWYgKHdrUnVsZS5hdHRyaWJ1
dGVOYW1lKQorICAgICAgICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhj
bHVzaW9uUnVsZTo6QXR0cmlidXRlUnVsZSB7IHdrUnVsZS5hdHRyaWJ1dGVOYW1lLCB3a1J1bGUu
YXR0cmlidXRlVmFsdWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBl
eGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6OkVsZW1lbnRSdWxlIHsg
d2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfcGFnZS0+
c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcywgW3dlYWtTZWxmID0gV2Vha09i
akNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMp
IHsKICAgICAgICAgaWYgKCF3ZWFrU2VsZikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc0OTgs
NiArNzUxNCw3IEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGwKICAg
ICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4gYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3Ry
aW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07CiAgICAgICAgICAgICBb
d2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAgICAgICAgW3drVG9rZW4g
c2V0SXNFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsKICAgICAgICAgICAgIFt3a1Rva2VucyBh
ZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07CiAgICAgICAgIH0KIApAQCAtNzUxMCw2ICs3NTI3LDgg
QEAgLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbAogCiAtICh2b2lkKV9j
b21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBj
b21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsKKyAg
ICB1c2luZyBNYW5pcHVsYXRpb25SZXN1bHQgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0OworCiAgICAgaWYgKCFfcGFnZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03NTIxLDggKzc1NDAsOCBAQCAtICh2b2lkKV9jb21wbGV0ZVRleHRNYW5p
cHVsYXRpb246KF9XS1RlCiAgICAgICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5j
b250ZW50IH0pOwogICAgIH0KIAotICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24o
aXRlbUlELCB0b2tlbnMsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uSGFuZGxlcildIChib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgY2FwdHVyZWRDb21w
bGV0aW9uQmxvY2soc3VjY2Vzcyk7CisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bihpdGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKKyAgICAg
ICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6
U3VjY2Vzcyk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjUxNTgzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJ
bnRlZ2VyLCBfV0tSZWN0RWQKIEBjbGFzcyBfV0tTYWZlQnJvd3NpbmdXYXJuaW5nOwogQGNsYXNz
IF9XS1Nlc3Npb25TdGF0ZTsKIEBjbGFzcyBfV0tUZXh0SW5wdXRDb250ZXh0OworQGNsYXNzIF9X
S1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uOwogQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtOwogQGNsYXNzIF9XS1RodW1ibmFpbFZpZXc7CiBAY2xhc3MgX1dLV2Vic2l0ZVBvbGlj
aWVzOwpAQCAtNTc4LDcgKzU3OSw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUg
Kl9tYWluRnJhbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsK
IAogQHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlOikgaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2Vz
cykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Ny
b2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNE
aXNhYmxlZEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlv
bi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAY2xhc3MgX1dLVGV4dE1hbmlw
dWxhdGlvbkV4Y2x1c2lvblJ1bGU7CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0aW9uQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5PF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICo+ICpleGNsdXNpb25SdWxlczsK
KworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRN
YW5pcHVsYXRpb25Db25maWd1cmF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5tbQko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24uaCIKKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aW9uCitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uRXhjbHVzaW9uUnVsZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tG
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRl
cmZhY2UgX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgOiBOU09iamVjdAorCistIChp
bnN0YW5jZXR5cGUpaW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0RXhj
bHVzaW9uOihCT09MKWV4Y2x1c2lvbiBmb3JFbGVtZW50OihOU1N0cmluZyAqKWxvY2FsTmFtZTsK
Ky0gKGluc3RhbmNldHlwZSlpbml0RXhjbHVzaW9uOihCT09MKWV4Y2x1c2lvbiBmb3JBdHRyaWJ1
dGU6KE5TU3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzRXhjbHVzaW9uOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqZWxlbWVudE5hbWU7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICphdHRyaWJ1dGVOYW1lOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqYXR0cmlidXRlVmFsdWU7CisKK0BlbmQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRXhj
bHVzaW9uUnVsZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUubW0JKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25FeGNs
dXNpb25SdWxlLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRh
dGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uRXhjbHVzaW9uUnVsZSB7CisgICAgQk9PTCBfaXNFeGNs
dXNpb247CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfZWxlbWVudE5hbWU7CisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBfYXR0cmlidXRlTmFtZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9h
dHRyaWJ1dGVWYWx1ZTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRFeGNsdXNpb246KEJPT0wp
ZXhjbHVzaW9uIGZvckVsZW1lbnQ6KE5TU3RyaW5nICopbG9jYWxOYW1lCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfaXNFeGNs
dXNpb24gPSBleGNsdXNpb247CisgICAgX2VsZW1lbnROYW1lID0gbG9jYWxOYW1lOworICAgIAor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdEV4Y2x1c2lvbjooQk9P
TClleGNsdXNpb24gZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKW5hbWUgdmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIF9pc0V4Y2x1c2lvbiA9IGV4Y2x1c2lvbjsKKyAgICBfYXR0cmlidXRl
TmFtZSA9IG5hbWU7CisgICAgX2F0dHJpYnV0ZVZhbHVlID0gdmFsdWU7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoTlNTdHJpbmcgKillbGVtZW50TmFtZQoreworICAgIHJldHVybiBfZWxl
bWVudE5hbWUuZ2V0KCk7Cit9CisKKy0gKE5TU3RyaW5nICopYXR0cmlidXRlTmFtZQoreworICAg
IHJldHVybiBfYXR0cmlidXRlTmFtZS5nZXQoKTsKK30KKworLSAoTlNTdHJpbmcgKilhdHRyaWJ1
dGVWYWx1ZQoreworICAgIHJldHVybiBfYXR0cmlidXRlVmFsdWUuZ2V0KCk7Cit9CisKK0BlbmQK
KwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkocmV2aXNpb24gMjUxNTgzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1ICszMiw2IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW8KIAogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5n
ICppZGVudGlmaWVyOwogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpjb250
ZW50OworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgaXNFeGNsdWRlZDsKIAogQGVuZApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCShyZXZpc2lvbiAyNTE1ODMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw1IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIgogCi0jaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+Ci0KIEBpbXBsZW1lbnRhdGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4KIEBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVj
dFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbQkocmV2aXNpb24gMjUxNTgzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOSBAQAogCiAjaWYgSEFWRShBUFBfU1NPKQogCisjaW1w
b3J0ICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
U09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0JKHJldmlzaW9uIDI1MTU4MykKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25D
b29yZGluYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEhBVkUo
QVBQX1NTTykKIAogI2ltcG9ydCAiQVBJRnJhbWVIYW5kbGUuaCIKKyNpbXBvcnQgIkFQSU5hdmln
YXRpb25BY3Rpb24uaCIKICNpbXBvcnQgIlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIgog
I2ltcG9ydCAiUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmgiCiAjaW1wb3J0ICJTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTgzKQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTMzNyw2ICsxMzM3LDggQEAKIAkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUIwMkUwRDcy
MzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2NzAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCNTQ5OUFEMjM2MkE2RjkwMERGOEJBNSAvKiBf
V0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI1NDk5QUMyMzYyQTZGNjAwREY4QkE1IC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUI1NDk5QjIyMzYyQTdFQzAwREY4QkE1IC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU0OTlCMDIzNjJBN0VDMDBERjhCQTUgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0
UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTAyQTcwODFF
QzBFRUU5MDBEODFEODIgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4u
c2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E1RTM5NDkxRDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5tYWNyb21lZGlh
LkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovOyB9OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBG
MEM1RDggLyogV0tQREZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggKi87IH07
CkBAIC00MDU3LDYgKzQwNTksMTAgQEAKIAkJOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwMkUwQ0UyMzVFQkIx
NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCNTQ5OUFDMjM2MkE2RjYwMERGOEJBNSAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tU
ZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5QjU0OTlBRTIzNjJBN0E3MDBERjhCQTUgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZp
Z3VyYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uQ29u
ZmlndXJhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUI1NDk5QjAyMzYy
QTdFQzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTlCNTQ5OUIxMjM2MkE3RUMwMERGOEJBNSAvKiBfV0tUZXh0TWFu
aXB1bGF0aW9uRXhjbHVzaW9uUnVsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRN
YW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QkM1OUQ2QzFFRkNDQ0I2MDAxRThEMDkgLyogQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlCQzU5RDZEMUVGQ0RDNkQwMDFFOEQwOSAvKiBPcHRpb25hbENhbGxiYWNrSUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9uYWxDYWxsYmFja0lELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBB
dXhpbGlhcnlQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYzNTYsNyArNjM2MiwxMSBAQAogCQkJCTJERTlCMTM4MjIzMUY2MUMwMDUyODdCNyAvKiBf
V0tUZXh0SW5wdXRDb250ZXh0LmggKi8sCiAJCQkJMkRFOUIxMzcyMjMxRjYxQzAwNTI4N0I3IC8q
IF9XS1RleHRJbnB1dENvbnRleHQubW0gKi8sCiAJCQkJMkRFOUIxM0IyMjMxRjc3QzAwNTI4N0I3
IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oICovLAorCQkJCTlCNTQ5OUFDMjM2MkE2
RjYwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oICovLAorCQkJ
CTlCNTQ5OUFFMjM2MkE3QTcwMERGOEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJh
dGlvbi5tbSAqLywKIAkJCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJOUI1NDk5QjAyMzYyQTdFQzAwREY4QkE1IC8qIF9X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggKi8sCisJCQkJOUI1NDk5QjEyMzYyQTdF
QzAwREY4QkE1IC8qIF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLm1tICovLAogCQkJ
CTlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICov
LAogCQkJCTlCMDJFMEQwMjM1RUJDQ0EwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bS5tbSAqLywKIAkJCQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuLmggKi8sCkBAIC05MzMwLDcgKzkzNDAsOSBAQAogCQkJCTFBMDAyRDQzMTk2QjMz
NzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkRFOUIxM0EyMjMxRjYxQzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJERTlCMTNDMjIzMUY3N0MwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRD
b250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCNTQ5OUFEMjM2MkE2RjkwMERG
OEJBNSAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUI1NDk5QjIyMzYyQTdFQzAwREY4QkE1IC8qIF9X
S1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjAy
RTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIzNzFCMThBOTY3QUQwMDQyQUU4MCAv
KiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNTE1ODMpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgzNiw3ICs2ODM2LDcgQEAgT3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+
IFdlYlBhZwogICAgIHJldHVybiBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCB7IGVsZW1lbnRSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGVsZW1lbnQsICpmcmFtZSksIG1faWRlbnRpZmllciwgZG9j
dW1lbnQuaWRlbnRpZmllcigpLCBkb2N1bWVudC5pZGVudGlmaWVyRm9yRWxlbWVudChlbGVtZW50
KSB9OwogfQogCi12b2lkIFdlYlBhZ2U6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYWdlOjpzdGFy
dFRleHRNYW5pcHVsYXRpb25zKFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6RXhjbHVzaW9uUnVsZT4mJiBleGNsdXNpb25SdWxlcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV9wYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC02ODU2LDI1ICs2ODU2LDI2IEBAIHZvaWQgV2ViUGFnZTo6c3RhcnRUZXh0
TWFuaXB1bGF0aW9ucyhDb20KICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRl
bShpdGVtSWRlbnRpZmllciwgdG9rZW5zKSk7Ci0gICAgfSk7CisgICAgfSwgV1RGTW92ZShleGNs
dXNpb25SdWxlcykpOwogICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSBzdGFydE9ic2VydmluZ1Bh
cmFncmFwaHMgZmluZCBhbGwgcGFyYWdyYXBocyBzeW5jaHJvbm91c2x5IGF0IG9uY2UuCiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjb21wbGV0ZVRleHRNYW5p
cHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlm
aWVyIGl0ZW1JRCwKLSAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Ok1hbmlwdWxhdGlvblJlc3VsdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgdXNp
bmcgTWFuaXB1bGF0aW9uUmVzdWx0ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Ok1hbmlwdWxhdGlvblJlc3VsdDsKICAgICBhdXRvIGNvbXBsZXRlTWFuaXB1bGF0aW9uID0g
WyZdIHsKICAgICAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkSXRlbTsKIAogICAg
ICAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobV9wYWdlLT5tYWluRnJhbWUoKS5k
b2N1bWVudCgpKTsKICAgICAgICAgaWYgKCFtYWluRG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlk
SXRlbTsKIAogICAgICAgICBhdXRvKiBjb250cm9sbGVyID0gbWFpbkRvY3VtZW50LT50ZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3RzKCk7CiAgICAgICAgIGlmICghY29udHJvbGxlcikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRp
b25SZXN1bHQ6OkludmFsaWRJdGVtOwogCiAgICAgICAgIHJldHVybiBjb250cm9sbGVyLT5jb21w
bGV0ZU1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vucyk7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI1MTU4MykKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE5Nyw5ICsxMTk3LDEwIEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpFbGVtZW50KiBl
bGVtZW50Rm9yQ29udGV4dChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYpIGNvbnN0Owog
ICAgIE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0PiBjb250ZXh0Rm9yRWxlbWVudChX
ZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlw
dWxhdGlvbnMoVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNs
dXNpb25SdWxlPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpJdGVtSWRlbnRpZmllciwKLSAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mLAorICAgICAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25SZXN1bHQpPiYmKTsKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCiAgICAgV2ViUGF5
bWVudENvb3JkaW5hdG9yKiBwYXltZW50Q29vcmRpbmF0b3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjUxNTgzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTgzLDYgKzU4Myw2IEBAIEdlbmVyYXRl
U3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW4KICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0
ZW5zaW9uV2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAt
PiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2VuZGlm
CiAKLSAgICBTdGFydFRleHRNYW5pcHVsYXRpb25zKCkgLT4gKCkgQXN5bmMKLSAgICBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0
ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKSAtPiAoYm9vbCBzdWNjZXNzKSBBc3lu
YworICAgIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlPiBleGNsdXNpb25SdWxlcykgLT4gKCkgQXN5
bmMKKyAgICBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKSAtPiAoZW51
bTp1aW50OF90IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25SZXN1bHQgcmVzdWx0KSBBc3luYwogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUxNTgzKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMTAtMjQgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGV4Y2x1c2lvbiBydWxlcyB0
byB0ZXh0IG1hbmlwdWxhdGlvbiBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzM5OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY1NjcyNTY+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
dGVzdHMgZm9yIGluY2x1ZGluZyAmIGV4Y2x1ZGluZyBjb250ZW50IGJhc2VkIG9uIGVsZW1lbnQg
bmFtZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKyAgICAgICAgQWxzbyBhZGRlZCBhIHRlc3Qg
dG8gbWFrZSBzdXJlIF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb24gY2Fs
bHMgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorICAgICAgICBldmVuIHdoZW4gdGhlIF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZSBpc24ndCBzZXQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisKIDIwMTktMTAtMjQgIEpp
ZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBh
IHRlc3QgZml4IGFmdGVyIHIyNTE0OTgKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKHJldmlzaW9u
IDI1MTU4MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1h
bmlwdWxhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAogI2ltcG9ydCAi
VGVzdC5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpA
QCAtNzEsNiArNzMsMjMgQEAgLSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqPiAq
KQogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwg
U3RhcnRUZXh0TWFuaXB1bGF0aW9uRXhpdEVhcmx5V2l0aG91dERlbGVnYXRlKQoreworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAg
ICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KworICAgIEVYUEVDVF9FUShbZGVsZWdhdGUgaXRlbXNdLmNvdW50LCAwVUwpOworfQorCiBURVNU
KFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3Jh
cGhzKQogewogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CkBAIC04MSw3ICsxMDAsNyBAQCBURVNUKFRleHRNYW5pcHVs
YXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhCiAgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbzxicj53
b3JsZDxkaXY+V2ViS2l0PC9kaXY+PC9ib2R5PjwvaHRtbD4iXTsKIAogICAgIGRvbmUgPSBmYWxz
ZTsKLSAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjpeeworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3Vy
YXRpb246bmlsIGNvbXBsZXRpb246XnsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgfV07CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKQEAgLTEwOCw3ICsxMjcsNyBAQCBU
RVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhCiAgICAgICAgICI8aHRtbD48
Ym9keT48cHJlPmhlbGxvXG53b3JsZFxuV2ViS2l0PC9wcmU+PC9ib2R5PjwvaHRtbD4iXTsKIAog
ICAgIGRvbmUgPSBmYWxzZTsKLSAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dp
dGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKICAgICAgICAgZG9uZSA9IHRy
dWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKQEAgLTEz
NSw3ICsxNTQsNyBAQCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhCiAg
ICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywgIDxiPndvcmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+
V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2JvZHk+PC9odG1sPiJdOwogICAgIAogICAgIGRvbmUg
PSBmYWxzZTsKLSAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0
aW9uSGFuZGxlcjpeeworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENv
bmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAg
fV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKQEAgLTE1MSw2ICsxNzAs
NzIgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYQogICAgIEVYUEVD
VF9TVFJFUSgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiB9
CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uQXBwbHlTaW5n
bGVFeGNsdWlvblJ1bGVGb3JFbGVtZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5Pkhl
cmUncyBzb21lIGNvZGU6PGNvZGU+ZnVuY3Rpb24gPHNwYW4+Rjwvc3Bhbj4oKSB7IH08L2NvZGU+
LjwvYm9keT48L2h0bWw+Il07CisKKyAgICBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxhdGlvbkNv
bmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlv
bkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRFeGNs
dXNpb25SdWxlczpAWworICAgICAgICBbW19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxl
IGFsbG9jXSBpbml0RXhjbHVzaW9uOihCT09MKVlFUyBmb3JFbGVtZW50OkAiY29kZSJdLAorICAg
IF1dOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVs
YXRpb25zV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uOl57
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAg
RVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tl
bnMuY291bnQsIDVVTCk7CisgICAgYXV0byogdG9rZW5zID0gaXRlbXNbMF0udG9rZW5zOworICAg
IEVYUEVDVF9TVFJFUSgiSGVyZSdzIHNvbWUgY29kZToiLCB0b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfRkFMU0UodG9rZW5zWzBdLmlzRXhjbHVkZWQpOworICAgIEVY
UEVDVF9TVFJFUSgiZnVuY3Rpb24gIiwgdG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cisg
ICAgRVhQRUNUX1RSVUUodG9rZW5zWzFdLmlzRXhjbHVkZWQpOworICAgIEVYUEVDVF9TVFJFUSgi
RiIsIHRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKHRva2Vu
c1syXS5pc0V4Y2x1ZGVkKTsKKyAgICBFWFBFQ1RfU1RSRVEoIigpIHsgfSIsIHRva2Vuc1szXS5j
b250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKHRva2Vuc1szXS5pc0V4Y2x1ZGVk
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIi4iLCB0b2tlbnNbNF0uY29udGVudC5VVEY4U3RyaW5nKTsK
KyAgICBFWFBFQ1RfRkFMU0UodG9rZW5zWzRdLmlzRXhjbHVkZWQpOworfQorCitURVNUKFRleHRN
YW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkFwcGx5SW5jbHVzaW9uRXhjbHVzaW9u
UnVsZXNGb3JBdHRyaWJ1dGVzKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5PjxzcGFuIGRh
dGEtZXhjbHVkZT1ZZXM+PGI+aGVsbG8sIDwvYj48c3BhbiBkYXRhLWV4Y2x1ZGU9Tk8+d29ybGQ8
L3NwYW4+PC9zcGFuPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBSZXRhaW5QdHI8X1dLVGV4dE1h
bmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4
dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRFeGNsdXNpb25SdWxlczpAWworICAgICAgICBbW19XS1RleHRNYW5pcHVsYXRpb25F
eGNsdXNpb25SdWxlIGFsbG9jXSBpbml0RXhjbHVzaW9uOihCT09MKVlFUyBmb3JBdHRyaWJ1dGU6
QCJkYXRhLWV4Y2x1ZGUiIHZhbHVlOkAieWVzIl0sCisgICAgICAgIFtbX1dLVGV4dE1hbmlwdWxh
dGlvbkV4Y2x1c2lvblJ1bGUgYWxsb2NdIGluaXRFeGNsdXNpb246KEJPT0wpTk8gZm9yQXR0cmli
dXRlOkAiZGF0YS1leGNsdWRlIiB2YWx1ZTpAIm5vIl0sCisgICAgXV07CisKKyAgICBkb25lID0g
ZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAg
IGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291
bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4
U3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRShpdGVtc1swXS50b2tlbnNbMF0uaXNFeGNsdWRlZCk7
CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVU
RjhTdHJpbmcpOworICAgIEVYUEVDVF9GQUxTRShpdGVtc1swXS50b2tlbnNbMV0uaXNFeGNsdWRl
ZCk7Cit9CisKIHN0cnVjdCBUb2tlbiB7CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CiAgICAg
TlNTdHJpbmcgKmNvbnRlbnQ7CkBAIC0xNjksNyArMjU0LDcgQEAgc3RhdGljIFJldGFpblB0cjxf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbQogICAgIHJldHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjppdGVtSWRlbnRpZmllciB0b2tl
bnM6d2tUb2tlbnMuZ2V0KCldKTsKIH0KIAotVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBoQ29udGVudCkKK1RF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUmVwbGFjZVNpbXBs
ZVBhcmFncmFwaENvbnRlbnQpCiB7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDQwMCwgNDAwKV0pOwpAQCAtMTc5LDcgKzI2NCw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlv
biwgQ29tcGxldGVUZXh0TWFuaXAKICAgICAgICAgIjxodG1sPjxib2R5PjxwPmhlbGxsbywgd29v
b3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMgPGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9k
eT48L2h0bWw+Il07CiAKICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgX3N0YXJ0VGV4
dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICBbd2ViVmlldyBfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CiAg
ICAgICAgIGRvbmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CkBAIC0yMjEsNyArMzA2LDcgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21w
bGV0ZVRleHRNYW5pcAogICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7CiB9CiAKLVRFU1QoVGV4dE1hbmlwdWxh
dGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Db250ZW50SXNDaGFu
Z2VkKQorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25GYWls
V2hlbkNvbnRlbnRJc0NoYW5nZWQpCiB7CiAgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDQwMCwgNDAwKV0pOwpAQCAtMjMxLDcgKzMxNiw3IEBAIFRFU1QoVGV4dE1hbmlwdWxh
dGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICAgICAgIjxodG1sPjxib2R5PjxwPiB3aGF0IDxl
bT50aW1lPC9lbT4gYXJlIHRoZXkgbm93PzwvcD48L2JvZHk+PC9odG1sPiJdOwogCiAgICAgZG9u
ZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBs
ZXRpb25IYW5kbGVyOl57CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRo
Q29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeewogICAgICAgICBkb25lID0gdHJ1ZTsKICAg
ICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpAQCAtMjU5LDcgKzM0
NCw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXAKICAgICAgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MIl0pOwogfQogCi1URVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvblNob3VsZEZhaWxXaGVuRG9jdW1lbnRIYXNCZWVuTmF2aWdhdGVkQXdheSkKK1RFU1Qo
VGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRmFpbFdoZW5Eb2N1bWVu
dEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQogewogICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA0MDAsIDQwMCldKTsKQEAgLTI2OSw3ICszNTQsNyBAQCBURVNUKFRleHRNYW5pcHVs
YXRpb24sIENvbXBsZXRlVGV4dE1hbmlwCiAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxwPmhleSwgPGVtPmVhcnRo
PC9lbT48L3A+JyJdOwogCiAgICAgZG9uZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IF9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgW3dlYlZpZXcgX3N0
YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpuaWwgY29tcGxldGlvbjpeewog
ICAgICAgICBkb25lID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwpAQCAtMjg0LDcgKzM2OSw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29t
cGxldGVUZXh0TWFuaXAKICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4n
Il07CiAKICAgICBkb25lID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxh
dGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFu
aXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CiAgICAgICAgIGRv
bmUgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CkBAIC0zMDEsNSArMzg2LDQzIEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0
TWFuaXAKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogfQogCitURVNUKFRl
eHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZhaWxXaGVuRXhjbHVzaW9u
SXNWaW9sYXRlZCkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAw
LCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6QCJzaW1wbGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+aGksIDxlbT5XZWJLaXR0ZW48L2VtPjwv
cD4nIl07CisKKyAgICBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24+
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRFeGNsdXNpb25SdWxlczpA
WworICAgICAgICBbW19XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlIGFsbG9jXSBpbml0
RXhjbHVzaW9uOihCT09MKVlFUyBmb3JFbGVtZW50OkAicCJdLAorICAgIF1dOworCisgICAgZG9u
ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1z
LmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7
CisgICAgRVhQRUNUX1NUUkVRKCJoaSwgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJLaXR0ZW4iLCBpdGVtc1swXS50b2tlbnNb
MV0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vu
c1sxXS5pZGVudGlmaWVyLCBAIldlYktpdCIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4o
Qk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+aGksIDxlbT5XZWJLaXR0ZW48L2VtPjwvcD4i
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUwiXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAo=
</data>
<flag name="review"
          id="397623"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>