<?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>231158</bug_id>
          
          <creation_ts>2021-10-04 01:41:33 -0700</creation_ts>
          <short_desc>Make RuleSetBuilder a class</short_desc>
          <delta_ts>2021-10-05 12:50:12 -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>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799991</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 01:41:33 -0700</bug_when>
    <thetext>improve encapsulation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799992</commentid>
    <comment_count>1</comment_count>
      <attachid>440039</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 01:45:02 -0700</bug_when>
    <thetext>Created attachment 440039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799994</commentid>
    <comment_count>2</comment_count>
      <attachid>440041</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 01:51:46 -0700</bug_when>
    <thetext>Created attachment 440041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799995</commentid>
    <comment_count>3</comment_count>
      <attachid>440042</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 02:10:31 -0700</bug_when>
    <thetext>Created attachment 440042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800036</commentid>
    <comment_count>4</comment_count>
      <attachid>440055</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 06:19:56 -0700</bug_when>
    <thetext>Created attachment 440055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800040</commentid>
    <comment_count>5</comment_count>
      <attachid>440058</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 06:53:50 -0700</bug_when>
    <thetext>Created attachment 440058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800050</commentid>
    <comment_count>6</comment_count>
      <attachid>440060</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 07:45:25 -0700</bug_when>
    <thetext>Created attachment 440060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800051</commentid>
    <comment_count>7</comment_count>
      <attachid>440061</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 07:49:18 -0700</bug_when>
    <thetext>Created attachment 440061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800052</commentid>
    <comment_count>8</comment_count>
      <attachid>440062</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 07:52:22 -0700</bug_when>
    <thetext>Created attachment 440062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800172</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-04 12:34:12 -0700</bug_when>
    <thetext>Committed r283508 (242476@main): &lt;https://commits.webkit.org/242476@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 440062.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800174</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-04 12:35:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/83849661&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800198</commentid>
    <comment_count>11</comment_count>
      <attachid>440062</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-04 13:21:11 -0700</bug_when>
    <thetext>Comment on attachment 440062
Patch

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

Noticed one small stylistic thing.

&gt; Source/WebCore/style/RuleSetBuilder.h:59
&gt; +            Vector&lt;size_t&gt; affectedRulePositions { };
&gt; +            RuleFeatureVector ruleFeatures { };

These braces aren’t needed.

&gt; Source/WebCore/style/RuleSetBuilder.h:63
&gt; +        Vector&lt;DynamicContext&gt; dynamicContextStack { };
&gt; +
&gt; +        Vector&lt;RuleSet::DynamicMediaQueryRules&gt; dynamicMediaQueryRules { };

These braces aren’t needed.

&gt; Source/WebCore/style/RuleSetBuilder.h:75
&gt; +    CascadeLayerName m_resolvedCascadeLayerName { };
&gt; +    HashMap&lt;CascadeLayerName, RuleSet::CascadeLayerIdentifier&gt; m_cascadeLayerIdentifierMap { };

These braces aren’t needed.

&gt; Source/WebCore/style/RuleSetBuilder.h:77
&gt; +    Vector&lt;RuleSet::ResolverMutatingRule&gt; m_collectedResolverMutatingRules { };

These braces aren’t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800418</commentid>
    <comment_count>12</comment_count>
      <attachid>440062</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-04 23:59:13 -0700</bug_when>
    <thetext>Comment on attachment 440062
Patch

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

&gt;&gt; Source/WebCore/style/RuleSetBuilder.h:59
&gt;&gt; +        struct DynamicContext {
&gt;&gt; +            Ref&lt;const MediaQuerySet&gt; set;
&gt;&gt; +            Vector&lt;size_t&gt; affectedRulePositions { };
&gt;&gt; +            RuleFeatureVector ruleFeatures { };
&gt; 
&gt; These braces aren’t needed.

Some of the compilers in bots have failed in the past if all fields are not initialized explicitly when the struct is brace-initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800601</commentid>
    <comment_count>13</comment_count>
      <attachid>440062</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-05 09:49:39 -0700</bug_when>
    <thetext>Comment on attachment 440062
Patch

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

&gt;&gt;&gt; Source/WebCore/style/RuleSetBuilder.h:59
&gt;&gt;&gt; +            RuleFeatureVector ruleFeatures { };
&gt;&gt; 
&gt;&gt; These braces aren’t needed.
&gt; 
&gt; Some of the compilers in bots have failed in the past if all fields are not initialized explicitly when the struct is brace-initialized.

Does that really apply here or not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800683</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-05 11:44:15 -0700</bug_when>
    <thetext>&gt; Does that really apply here or not?

Seems so, see https://bugs.webkit.org/show_bug.cgi?id=231236

(class members here don&apos;t need them)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800714</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-05 12:50:12 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #14)
&gt; &gt; Does that really apply here or not?
&gt; 
&gt; Seems so, see https://bugs.webkit.org/show_bug.cgi?id=231236
&gt; 
&gt; (class members here don&apos;t need them)

Thanks! I appreciate learning about this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440039</attachid>
            <date>2021-10-04 01:45:02 -0700</date>
            <delta_ts>2021-10-04 01:51:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004114501.patch</filename>
            <type>text/plain</type>
            <size>37098</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uOGQyMTZmYjQ5NmQyZWI5OWViOTY3NTU1YmQxNzg2
OTExN2VmMThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFr
ZXMgY2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13
YXkgZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVy
LgorCisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6
c2hyaW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5h
bWljUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2Fk
ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6cG9wQ2Fz
Y2FkZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6dXBk
YXRlQ2FzY2FkZUxheWVyT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRC
dWlsZGVyOjphZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlD
b2xsZWN0b3I6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6
Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmRpZE11dGF0ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6cHVzaEFuZEV2YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOiBEZWxldGVkLgorCisgICAgICAgIE1lZGlhUXVl
cnlDb2xsZWN0b3IgaXMgbm93IGEgcHJpdmF0ZSBpbm5lciBzdHJ1Y3Qgb2YgUnVsZVNldEJ1aWxk
ZXIuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5oOgorICAgICAgICAqIHN0eWxl
L1N0eWxlSW52YWxpZGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1fZGlydGll
c0FsbFN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZUlmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29w
ZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyk6CisgICAgICAgICogc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlVzZXJBZ2VudFN0eWxlOjphZGRUb0RlZmF1bHRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmluaXREZWZhdWx0U3R5bGVTaGVldCk6CisK
IDIwMjEtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgUnVsZVNldCBidWlsZGVyIHRvIGEgZmlsZSBvZiBpdHMgb3duCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVTZXQuY3BwCmluZGV4IDY4ZWRjZjFlM2U1NjJhNjVhZTYwZWIyNzI2MWEzYjlkMzZmNjA5Mjcu
LmZhNWFhMDdhNjI4NTc5NzdhOWFjMDVkYzk3MzljM2QzYzNhZjE4MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgotI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZp
bHRlci5oIgpAQCAtODQsOSArODMsMTUgQEAgc3RhdGljIGJvb2wgaXNIb3N0U2VsZWN0b3JNYXRj
aGluZ0luU2hhZG93VHJlZShjb25zdCBDU1NTZWxlY3RvciYgc3RhcnRTZWxlY3RvcikKICAgICBy
ZXR1cm4gbGVmdG1vc3RTZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MgJiYgbGVmdG1vc3RTZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzSG9zdDsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKGNvbnN0IFN0eWxl
UnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0
SW5kZXgsIHVuc2lnbmVkIGNhc2NhZGVMYXllcklkZW50aWZpZXIsIFJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yKiBtZWRpYVF1ZXJ5Q29sbGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKGNv
bnN0IFN0eWxlUnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2Vs
ZWN0b3JMaXN0SW5kZXgpCiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJ
bmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KyspOworICAgIFJ1bGVEYXRhIHJ1
bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIHNlbGVjdG9yTGlzdEluZGV4LCBtX3J1bGVDb3Vu
dCk7CisgICAgYWRkUnVsZShXVEZNb3ZlKHJ1bGVEYXRhKSwgMCk7Cit9CisKK3ZvaWQgUnVsZVNl
dDo6YWRkUnVsZShSdWxlRGF0YSYmIHJ1bGVEYXRhLCBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGNh
c2NhZGVMYXllcklkZW50aWZpZXIpCit7CisgICAgKyttX3J1bGVDb3VudDsKIAogICAgIGlmIChj
YXNjYWRlTGF5ZXJJZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8gb2xkU2l6ZSA9IG1fY2FzY2Fk
ZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5zaXplKCk7CkBAIC05Nyw5ICsxMDIsNiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZQogCiAgICAgbV9mZWF0dXJlcy5jb2xsZWN0RmVhdHVy
ZXMocnVsZURhdGEpOwogCi0gICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IpCi0gICAgICAgIG1l
ZGlhUXVlcnlDb2xsZWN0b3ItPmFkZFJ1bGVJZk5lZWRlZChydWxlRGF0YSk7Ci0KICAgICB1bnNp
Z25lZCBjbGFzc0J1Y2tldFNpemUgPSAwOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBpZFNlbGVj
dG9yID0gbnVsbHB0cjsKICAgICBjb25zdCBDU1NTZWxlY3RvciogdGFnU2VsZWN0b3IgPSBudWxs
cHRyOwpAQCAtMjcyLDQ1ICsyNzQsNiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxl
UnVsZVBhZ2UmIHJ1bGUpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKCZydWxlKTsKIH0KIAotdm9p
ZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IpCi17Ci0gICAgUnVsZVNl
dEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2
YWx1YXRvciB9IH07Ci0gICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0KLSAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwot
fQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnksIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvciwgU3R5bGU6OlJlc29sdmVyJiByZXNvbHZlcikKLXsK
LSAgICBhdXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7Ci0gICAg
ICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIgeyAqdGhpcywgUnVsZVNldE1lZGlhUXVlcnlDb2xs
ZWN0b3IgeyBldmFsdWF0b3IsIHRydWUgfSwgbnVsbHB0ciwgUnVsZVNldEJ1aWxkZXI6Ok1vZGU6
OlJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0gICAgICAgIGlmIChidWlsZGVyLm1lZGlhUXVlcnlD
b2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQotICAgICAgICAgICAgYnVpbGRl
ci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNv
bGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7Ci0gICAgICAgIHJldHVybiAhYnVpbGRlci5tZWRpYVF1
ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnk7Ci0g
ICAgfSgpOwotCi0gICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVk
aWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNv
bHV0aW9uIH0sICZyZXNvbHZlciB9OwotCi0gICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxl
Y3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVyeSkpCi0gICAgICAgIGJ1aWxkZXIuYWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQpOwotICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Ao
c2hlZXRRdWVyeSk7Ci0KLSAgICBtX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0g
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
aWVzOwotCi0gICAgaWYgKCFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1pY01lZGlh
UXVlcnlSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBmaXJzdE5ld0luZGV4ID0gbV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKLSAgICAgICAgbV9keW5hbWljTWVkaWFRdWVy
eVJ1bGVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzKSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBpbml0aWFsIHZh
bHVlcy4KLSAgICAgICAgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGV2YWx1YXRvciwg
Zmlyc3ROZXdJbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+CiB2b2lkIFJ1bGVTZXQ6OnRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYgZnVuY3Rpb24p
CiB7CkBAIC00MTQsMTQgKzM3Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKICAgICAgICAgdmVjdG9yLT5zaHJp
bmtUb0ZpdCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rRHluYW1pY1J1bGVzKFZl
Y3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiYgZHluYW1pY1J1bGVzKQotewot
ICAgIGZvciAoYXV0byYgcnVsZSA6IGR5bmFtaWNSdWxlcykKLSAgICAgICAgcnVsZS5zaHJpbmtU
b0ZpdCgpOwotCi0gICAgZHluYW1pY1J1bGVzLnNocmlua1RvRml0KCk7Ci19Ci0KIHZvaWQgUnVs
ZVNldDo6c2hyaW5rVG9GaXQoKQogewogICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVs
ZXMpOwpAQCAtNDQzLDcgKzM5OCw5IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogICAg
IG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9mZWF0dXJlcy5zaHJpbmtUb0ZpdCgp
OwogCi0gICAgc2hyaW5rRHluYW1pY1J1bGVzKG1fZHluYW1pY01lZGlhUXVlcnlSdWxlcyk7Cisg
ICAgZm9yIChhdXRvJiBydWxlIDogbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzKQorICAgICAgICBy
dWxlLnNocmlua1RvRml0KCk7CisgICAgbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNocmlua1Rv
Rml0KCk7CiAKICAgICBtX2Nhc2NhZGVMYXllcnMuc2hyaW5rVG9GaXQoKTsKICAgICBtX2Nhc2Nh
ZGVMYXllcklkZW50aWZpZXJGb3JSdWxlUG9zaXRpb24uc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuaAppbmRleCA4YTcxM2U2NWE5OGY4ZDRiY2Q3ZWQyNjM0MjMxMTFlZDgyNjNjNzhh
Li41ODVmMDRiYWRjZGExZDdiZTNmNjMwZmVlYWQ4OGZiMzc0M2NmYjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZVNldC5oCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiAKIGNsYXNzIFJl
c29sdmVyOwogY2xhc3MgUnVsZVNldDsKLXN0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjsKIAogdXNpbmcgSW52YWxpZGF0aW9uUnVsZVNldFZlY3RvciA9IFZlY3RvcjxSZWZQdHI8Y29u
c3QgUnVsZVNldD4sIDE+OwogCkBAIC03MSwyNSArNzAsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBWZWN0b3I8UnVsZURhdGEsIDE+IFJ1bGVEYXRhVmVjdG9yOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9tU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8UnVsZURhdGFWZWN0b3I+PiBBdG9tUnVsZU1h
cDsKIAotICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKLSAgICAgICAgVmVjdG9y
PFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Ci0gICAgICAgIFZlY3Rv
cjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0
b3IgcnVsZUZlYXR1cmVzOwotICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJlc2V0IHsgZmFsc2Ug
fTsKLSAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07Ci0KLSAgICAgICAgdm9pZCBzaHJpbmtU
b0ZpdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOwotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVy
eSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlOjpSZXNvbHZlciYpOwotCi0gICAg
dm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4LCB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlciA9IDAs
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKiA9IG51bGxwdHIpOworICAgIHZvaWQgYWRkUnVs
ZShjb25zdCBTdHlsZVJ1bGUmLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxl
Y3Rvckxpc3RJbmRleCk7CiAgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJik7CiAK
ICAgICB2b2lkIGFkZFRvUnVsZVNldChjb25zdCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFw
JiwgY29uc3QgUnVsZURhdGEmKTsKQEAgLTEyNiwxMiArMTA3LDE0IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlckZvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBzdHJ1Y3QgUnVsZVNldEJ1aWxkZXI7CisgICAgZnJpZW5kIGNs
YXNzIFJ1bGVTZXRCdWlsZGVyOwogCiAgICAgUnVsZVNldCgpOwogCiAgICAgdXNpbmcgQ2FzY2Fk
ZUxheWVySWRlbnRpZmllciA9IHVuc2lnbmVkOwogCisgICAgdm9pZCBhZGRSdWxlKFJ1bGVEYXRh
JiYsIENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCiAgICAgc3RydWN0IFJlc29sdmVyTXV0YXRp
bmdSdWxlIHsKICAgICAgICAgUmVmPFN0eWxlUnVsZUJhc2U+IHJ1bGU7CiAgICAgICAgIENhc2Nh
ZGVMYXllcklkZW50aWZpZXIgbGF5ZXJJZGVudGlmaWVyOwpAQCAtMTU1LDYgKzEzOCwyMSBAQCBw
cml2YXRlOgogICAgIGNvbnN0IENhc2NhZGVMYXllciYgY2FzY2FkZUxheWVyRm9ySWRlbnRpZmll
cihDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2Fz
Y2FkZUxheWVyc1tpZGVudGlmaWVyIC0gMV07IH0KICAgICB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJP
cmRlckZvcklkZW50aWZpZXIoQ2FzY2FkZUxheWVySWRlbnRpZmllcikgY29uc3Q7CiAKKyAgICBz
dHJ1Y3QgRHluYW1pY01lZGlhUXVlcnlSdWxlcyB7CisgICAgICAgIFZlY3RvcjxSZWY8Y29uc3Qg
TWVkaWFRdWVyeVNldD4+IG1lZGlhUXVlcnlTZXRzOworICAgICAgICBWZWN0b3I8c2l6ZV90PiBh
ZmZlY3RlZFJ1bGVQb3NpdGlvbnM7CisgICAgICAgIFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0
dXJlczsKKyAgICAgICAgYm9vbCByZXF1aXJlc0Z1bGxSZXNldCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgcmVzdWx0IHsgdHJ1ZSB9OworCisgICAgICAgIHZvaWQgc2hyaW5rVG9GaXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtZWRpYVF1ZXJ5U2V0cy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICAgICAgYWZmZWN0ZWRSdWxlUG9zaXRpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBy
dWxlRmVhdHVyZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBBdG9t
UnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwogICAgIEF0
b21SdWxlTWFwIG1fdGFnTG9jYWxOYW1lUnVsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKaW5kZXggYTAxZmUxOTJkOGIzNDg0YjY3YTA4NWI3M2I5MTM4ODZjMGE0OWU3
OC4uYTczZDI0NjY3MDg5YzM4OWM2Y2EyNmYxMGU5NjAzNzAzMTY3YWI2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzIsMzYgKzMyLDg3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCitSdWxlU2V0QnVpbGRlcjo6UnVsZVNl
dEJ1aWxkZXIoUnVsZVNldCYgcnVsZVNldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZh
bHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCisgICAgOiBtX3J1bGVTZXQocnVsZVNldCkKKyAg
ICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciB9KQorICAgICwgbV9yZXNvbHZl
cihyZXNvbHZlcikKK3sKK30KKworCiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkK
IHsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAo
bV9tb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKQogICAgICAgICByZXR1cm47CiAK
ICAgICB1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigpOwogICAgIGFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKCk7CiB9CiAKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0V2l0
aFN0YXRpY0V2YWx1YXRpb24oY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3sKKyAg
ICBhZGRSdWxlc0Zyb21TaGVldChzaGVldCk7CisKKyAgICBpZiAobV9ydWxlU2V0LT5tX2F1dG9T
aHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIG1fcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKK30K
Kwordm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVl
dENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVyeSkKK3sKKyAg
ICBhdXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7CisgICAgICAg
IFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5lcihtX3J1bGVTZXQuZ2V0KCksIG1fbWVkaWFR
dWVyeUNvbGxlY3Rvci5ldmFsdWF0b3IpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tb2Rl
ID0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW47CisgICAgICAgIG11dGF0aW9uU2Nhbm5lci5t
X21lZGlhUXVlcnlDb2xsZWN0b3IuY29sbGVjdER5bmFtaWMgPSB0cnVlOworCisgICAgICAgIGlm
IChtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShz
aGVldFF1ZXJ5KSkKKyAgICAgICAgICAgIG11dGF0aW9uU2Nhbm5lci5hZGRSdWxlc0Zyb21TaGVl
dChzaGVldCk7CisgICAgICAgIG11dGF0aW9uU2Nhbm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3Iu
cG9wKHNoZWV0UXVlcnkpOworCisgICAgICAgIHJldHVybiAhbXV0YXRpb25TY2FubmVyLm1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5
OworICAgIH07CisKKyAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuY29sbGVjdER5bmFtaWMgPSBj
YW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24oKTsKKworICAgIGlmIChtX21lZGlhUXVl
cnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQorICAgICAgICBhZGRSdWxl
c0Zyb21TaGVldChzaGVldCk7CisgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1
ZXJ5KTsKKworICAgIG1fcnVsZVNldC0+bV9oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmll
cyA9IG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmll
czsKKworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVs
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNldC0+
bV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5tX2R5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5Q29s
bGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhlIGlu
aXRpYWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVl
cnlSdWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsK
KyAgICB9CisKKyAgICBpZiAobV9ydWxlU2V0LT5tX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisg
ICAgICAgIG1fcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKK30KKworCiB2b2lkIFJ1bGVTZXRCdWls
ZGVyOjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBy
dWxlcykKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgewotICAgICAgICBpZiAobW9k
ZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRp
ZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCisgICAgICAgIGlmIChtX21v
ZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gJiYgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9y
LmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkpIHsKLSAgICAgICAgICAg
IGlmIChtb2RlID09IE1vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQogICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxTdHlsZVJ1
bGU+KCpydWxlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaXM8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBN
b2RlOjpOb3JtYWwpCi0gICAgICAgICAgICAgICAgcnVsZVNldC0+YWRkUGFnZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKKyAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpOwotICAg
ICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKCZtZWRpYVJ1
bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rv
ci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAgICAgICAgICAg
ICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAgICAgICAgICAg
IG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAg
ICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1lZGlhUXVlcmll
cygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTI5LDEyIEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVW
YWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgewotICAgICAg
ICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsKLSAgICAgICAg
ICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAg
ICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKSB7CisgICAgICAg
ICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVz
b2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzLmFw
cGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAgICAgICAg
ICAgIGlmIChtX3Jlc29sdmVyKQorICAgICAgICAgICAgICAgIG1fY29sbGVjdGVkUmVzb2x2ZXJN
dXRhdGluZ1J1bGVzLmFwcGVuZCh7ICpydWxlLCBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlm
aWVyIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlz
PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+
KCpydWxlKS5jb25kaXRpb25Jc1N1cHBvcnRlZCgpKSB7CkBAIC0xMDIsNyArMTUzLDcgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJiBzaGVldCkKICAgICAgICAgaWYgKCFydWxlLT5zdHlsZVNoZWV0KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUocnVsZS0+bWVkaWFRdWVyaWVzKCkpKSB7CisgICAgICAgIGlmIChtX21lZGlhUXVlcnlD
b2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHJ1bGUtPm1lZGlhUXVlcmllcygpKSkgewogICAgICAg
ICAgICAgYXV0byYgY2FzY2FkZUxheWVyTmFtZSA9IHJ1bGUtPmNhc2NhZGVMYXllck5hbWUoKTsK
ICAgICAgICAgICAgIGlmIChjYXNjYWRlTGF5ZXJOYW1lKQogICAgICAgICAgICAgICAgIHB1c2hD
YXNjYWRlTGF5ZXIoKmNhc2NhZGVMYXllck5hbWUpOwpAQCAtMTEyLDEwICsxNjMsMTMgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJiBzaGVldCkKICAgICAgICAgICAgIGlmIChjYXNjYWRlTGF5ZXJOYW1lKQogICAgICAgICAg
ICAgICAgIHBvcENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOworICAg
ICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHJ1bGUtPm1lZGlhUXVlcmllcygpKTsKICAg
ICB9CiAKICAgICBhZGRDaGlsZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSk7CisKKyAgICBpZiAo
bV9ydWxlU2V0LT5tX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIG1fcnVsZVNldC0+
c2hyaW5rVG9GaXQoKTsKIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNv
bnN0IFN0eWxlUnVsZSYgcnVsZSkKQEAgLTEyNCw4ICsxNzgsMTEgQEAgdm9pZCBSdWxlU2V0QnVp
bGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkKICAgICBpZiAoc2VsZWN0
b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIHNlbGVjdG9y
TGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0
b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9m
TmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1
bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgrKywgY3VycmVudENhc2Nh
ZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsKKyAgICBmb3IgKHNpemVf
dCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJ
bmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRl
eCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgc2Vs
ZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50KCkpOworICAgICAgICBtX21lZGlh
UXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVEYXRhKTsKKyAgICAgICAgbV9ydWxl
U2V0LT5hZGRSdWxlKFdURk1vdmUocnVsZURhdGEpLCBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyKTsKKyAgICB9CiB9CiAKIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnJlZ2lzdGVyTGF5ZXJz
KGNvbnN0IFZlY3RvcjxDYXNjYWRlTGF5ZXJOYW1lPiYgbmFtZXMpCkBAIC0xMzgsMTQgKzE5NSwx
NCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2Fz
Y2FkZUxheWVyTmFtZT4mIG5hbWVzKQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2Fk
ZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmIG5hbWUpCiB7Ci0gICAgaWYgKG1vZGUgIT0g
TW9kZTo6Tm9ybWFsKQorICAgIGlmIChtX21vZGUgIT0gTW9kZTo6Tm9ybWFsKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkgJiYg
IXJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSAmJiAhbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXll
cnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZvciBpbmNyZW1lbnRhbCBidWlsZCwgcmVjb25z
dHJ1Y3QgdGhlIG5hbWUtPmlkZW50aWZpZXIgbWFwLgogICAgICAgICBSdWxlU2V0OjpDYXNjYWRl
TGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGxheWVy
IDogcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQotICAgICAgICAgICAgY2FzY2FkZUxheWVySWRl
bnRpZmllck1hcC5hZGQobGF5ZXIucmVzb2x2ZWROYW1lLCArK2lkZW50aWZpZXIpOworICAgICAg
ICBmb3IgKGF1dG8mIGxheWVyIDogbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMpCisgICAgICAg
ICAgICBtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVyLnJlc29sdmVkTmFtZSwg
KytpZGVudGlmaWVyKTsKICAgICB9CiAKICAgICBhdXRvIG5hbWVSZXNvbHZpbmdBbm9ueW1vdXMg
PSBbJl0gewpAQCAtMTU5LDI5ICsyMTYsMjkgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6cHVzaENh
c2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQogCiAgICAgLy8gRm9yIGhp
ZXJhcmNoaWNhbCBuYW1lcyB3ZSByZWdpc3RlciB0aGUgY29udGFpbmluZyBsYXllcnMgaW5kaXZp
ZHVhbGx5IGZpcnN0LgogICAgIGZvciAoYXV0byYgbmFtZVNlZ21lbnQgOiBuYW1lUmVzb2x2aW5n
QW5vbnltb3VzKCkpIHsKLSAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLmFwcGVuZChu
YW1lU2VnbWVudCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gY2Fz
Y2FkZUxheWVySWRlbnRpZmllck1hcC5lbnN1cmUocmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLCBb
Jl0geworICAgICAgICBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5hcHBlbmQobmFtZVNlZ21l
bnQpOworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gbV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmVuc3VyZShtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgWyZd
IHsKICAgICAgICAgICAgIC8vIFByZXZpb3VzbHkgdW5zZWVuIGxheWVyLgotICAgICAgICAgICAg
cnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IHJlc29sdmVkQ2FzY2FkZUxheWVyTmFt
ZSwgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7Ci0gICAgICAgICAgICByZXR1cm4g
cnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKKyAgICAgICAgICAgIG1fcnVsZVNldC0+
bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IG1fcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLCBtX2N1
cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIH0pOworICAgICAgICAgICAgcmV0dXJuIG1fcnVs
ZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
OwogICAgIH0KIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cG9wQ2FzY2FkZUxheWVyKGNvbnN0
IENhc2NhZGVMYXllck5hbWUmIG5hbWUpCiB7Ci0gICAgaWYgKG1vZGUgIT0gTW9kZTo6Tm9ybWFs
KQorICAgIGlmIChtX21vZGUgIT0gTW9kZTo6Tm9ybWFsKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKGF1dG8gc2l6ZSA9IG5hbWUuaXNFbXB0eSgpID8gMSA6IG5hbWUuc2l6ZSgpOyBzaXpl
LS07KSB7Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5yZW1vdmVMYXN0KCk7Ci0g
ICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gcnVsZVNldC0+Y2FzY2FkZUxh
eWVyRm9ySWRlbnRpZmllcihjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllcikucGFyZW50SWRl
bnRpZmllcjsKKyAgICAgICAgbV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUucmVtb3ZlTGFzdCgp
OworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gbV9ydWxlU2V0LT5j
YXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIp
LnBhcmVudElkZW50aWZpZXI7CiAgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRh
dGVDYXNjYWRlTGF5ZXJPcmRlcigpCiB7Ci0gICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXJN
YXAuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNvbXBhcmUgPSBbJl0oYXV0byBhLCBh
dXRvIGIpIHsKQEAgLTE4OSw4ICsyNDYsOCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVD
YXNjYWRlTGF5ZXJPcmRlcigpCiAgICAgICAgICAgICAvLyBJZGVudGlmaWVycyBhcmUgaW4gcGFy
c2Ugb3JkZXIgd2hpY2ggYWxtb3N0IGNvcnJlc3BvbmRzIHRvIHRoZSBsYXllciBwcmlvcml0eSBv
cmRlci4KICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB3aGVuIGEgc3VibGF5
ZXIgZ2V0cyBhZGRlZCB0byBhIGxheWVyIGFmdGVyIGFkZGluZyBvdGhlciBub24tc3VibGF5ZXJz
LgogICAgICAgICAgICAgLy8gVG8gcmVzb2x2ZSB0aGlzIHdlIG5lZWQgbG9vayBmb3IgYSBzaGFy
ZWQgYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBhdXRvIGFQYXJlbnQgPSBydWxlU2V0LT5j
YXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVudElkZW50aWZpZXI7Ci0gICAgICAgICAg
ICBhdXRvIGJQYXJlbnQgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGIpLnBh
cmVudElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGFQYXJlbnQgPSBtX3J1bGVTZXQtPmNh
c2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAg
IGF1dG8gYlBhcmVudCA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihiKS5w
YXJlbnRJZGVudGlmaWVyOwogICAgICAgICAgICAgaWYgKGFQYXJlbnQgPT0gYlBhcmVudCB8fCBh
UGFyZW50ID09IGIgfHwgYlBhcmVudCA9PSBhKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgaWYgKGFQYXJlbnQgPiBiUGFyZW50KQpAQCAtMjAyLDcgKzI1OSw3IEBAIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9yZGVyKCkKICAgICB9OwogCiAgICAg
VmVjdG9yPFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IG9yZGVyVmVjdG9yOwotICAg
IGF1dG8gbGF5ZXJDb3VudCA9IHJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5zaXplKCk7CisgICAg
YXV0byBsYXllckNvdW50ID0gbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwogICAg
IG9yZGVyVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGF5ZXJDb3VudCk7CiAgICAgZm9y
IChSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAxOyBpZGVudGlm
aWVyIDw9IGxheWVyQ291bnQ7ICsraWRlbnRpZmllcikKICAgICAgICAgb3JkZXJWZWN0b3IudW5j
aGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOwpAQCAtMjEwLDUyICsyNjcsNTIgQEAgdm9pZCBSdWxl
U2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgIHN0ZDo6c29ydChvcmRl
clZlY3Rvci5iZWdpbigpLCBvcmRlclZlY3Rvci5lbmQoKSwgY29tcGFyZSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JkZXJWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJ1
bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVyID0g
aSArIDE7CisgICAgICAgIG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihvcmRl
clZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRk
TXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKQogewotICAgIGlmICghcmVzb2x2ZXIpCisgICAgaWYg
KCFtX3Jlc29sdmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNvbXBhcmVMYXllcnMg
PSBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICBhdXRvIGFPcmRl
ciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihhLmxheWVySWRlbnRp
Zmllcik7Ci0gICAgICAgIGF1dG8gYk9yZGVyID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJG
b3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBhT3JkZXIgPSBt
X3J1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihhLmxheWVySWRlbnRpZmll
cik7CisgICAgICAgIGF1dG8gYk9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZv
cklkZW50aWZpZXIoYi5sYXllcklkZW50aWZpZXIpOwogICAgICAgICByZXR1cm4gYU9yZGVyIDwg
Yk9yZGVyOwogICAgIH07CiAKICAgICAvLyBUaGUgb3JkZXIgbWF5IGNoYW5nZSBzbyB3ZSBuZWVk
IHRvIHJlcHJvY2VzcyByZXNvbHZlciBtdXRhdGluZyBydWxlcyBmcm9tIGVhcmxpZXIgc3R5bGVz
aGVldHMuCi0gICAgYXV0byBydWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShydWxlU2V0LT5tX3Jl
c29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOwotICAgIHJ1bGVzVG9BZGQuYXBwZW5k
VmVjdG9yKFdURk1vdmUoY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzKSk7CisgICAgYXV0
byBydWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShtX3J1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGlu
Z1J1bGVzSW5MYXllcnMsIHsgfSk7CisgICAgcnVsZXNUb0FkZC5hcHBlbmRWZWN0b3IoV1RGTW92
ZShtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcykpOwogCi0gICAgaWYgKCFjYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fY2FzY2FkZUxheWVySWRl
bnRpZmllck1hcC5pc0VtcHR5KCkpCiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQocnVsZXNUb0Fk
ZC5iZWdpbigpLCBydWxlc1RvQWRkLmVuZCgpLCBjb21wYXJlTGF5ZXJzKTsKIAogICAgIGZvciAo
YXV0byYgY29sbGVjdGVkUnVsZSA6IHJ1bGVzVG9BZGQpIHsKICAgICAgICAgaWYgKGNvbGxlY3Rl
ZFJ1bGUubGF5ZXJJZGVudGlmaWVyKQotICAgICAgICAgICAgcnVsZVNldC0+bV9yZXNvbHZlck11
dGF0aW5nUnVsZXNJbkxheWVycy5hcHBlbmQoY29sbGVjdGVkUnVsZSk7CisgICAgICAgICAgICBt
X3J1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxlY3Rl
ZFJ1bGUpOwogCiAgICAgICAgIGF1dG8mIHJ1bGUgPSBjb2xsZWN0ZWRSdWxlLnJ1bGU7CiAgICAg
ICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZSkpIHsKLSAgICAgICAgICAgIHJlc29s
dmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxT
dHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSksIGZhbHNlKTsKLSAgICAgICAgICAgIHJlc29s
dmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7CisgICAgICAgICAgICBt
X3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShkb3du
Y2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSksIGZhbHNlKTsKKyAgICAgICAgICAg
IG1fcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUoKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250
UGFsZXR0ZVZhbHVlcz4ocnVsZSkpIHsKLSAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpLmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHlsZVJ1
bGVGb250UGFsZXR0ZVZhbHVlcz4ocnVsZS5nZXQoKSkpOwotICAgICAgICAgICAgcmVzb2x2ZXIt
PmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUoKTsKKyAgICAgICAgICAgIG1fcmVz
b2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udFBhbGV0dGVWYWx1ZXNSdWxl
KGRvd25jYXN0PFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlLmdldCgpKSk7CisgICAg
ICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5bGVS
dWxlS2V5ZnJhbWVzPihydWxlKSkgewotICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1l
U3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7CisgICAgICAg
ICAgICBtX3Jlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZy
YW1lcz4ocnVsZS5nZXQoKSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLVJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+UnVsZVNldE1lZGlhUXVlcnlD
b2xsZWN0b3IoKSA9IGRlZmF1bHQ7CitSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6fk1lZGlhUXVlcnlDb2xsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgUnVsZVNldE1lZGlh
UXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQp
Citib29sIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVh
dGUoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogewogICAgIGlmICghc2V0KQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTI3NSw3ICszMzIsNyBAQCBib29sIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29s
bGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChj
b25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogewogICAgIGlmICghc2V0
IHx8IGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgpIHx8IHNldCAhPSAmZHluYW1pY0NvbnRl
eHRTdGFjay5sYXN0KCkuc2V0LmdldCgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTgsMTQgKzM1
NSwxNCBAQCB2b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFR
dWVyeVNldCogc2V0KQogICAgIGR5bmFtaWNDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQog
Ci12b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcigpCit2
b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZl
cigpCiB7CiAgICAgaWYgKGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSA9IHRy
dWU7CiB9CiAKLXZvaWQgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRl
ZChjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQog
ewogICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKaW5kZXggZWY0YWRmMDgzMTU1ZDA2
M2RmNDUyNWYxZDViMWQzYmQxNzJjNmJjMi4uY2E1MjQ1NWYzZTUyODdmNjI0YzBmZjgxYjJhODlj
OGVkZTE0YzdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5oCkBAIC0yNiw0
NiArMjYsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLXN0
cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7Ci0gICAgflJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yKCk7CitjbGFzcyBSdWxlU2V0QnVpbGRlciB7CitwdWJsaWM6CisgICAgUnVsZVNl
dEJ1aWxkZXIoUnVsZVNldCYsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBSZXNvbHZlciog
PSBudWxscHRyKTsKIAotICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcjsK
LSAgICBjb25zdCBib29sIGNvbGxlY3REeW5hbWljIHsgZmFsc2UgfTsKLQotICAgIHN0cnVjdCBE
eW5hbWljQ29udGV4dCB7Ci0gICAgICAgIFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0PiBzZXQ7Ci0g
ICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9ucyB7IH07Ci0gICAgICAg
IFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0dXJlcyB7IH07Ci0gICAgfTsKLSAgICBWZWN0b3I8
RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sgeyB9OwotCi0gICAgVmVjdG9yPFJ1
bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IGR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgeyB9
OwotICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSB7IGZh
bHNlIH07Ci0gICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyB7IGZhbHNl
IH07Ci0KLSAgICBib29sIHB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7Ci0g
ICAgdm9pZCBwb3AoY29uc3QgTWVkaWFRdWVyeVNldCopOwotICAgIHZvaWQgZGlkTXV0YXRlUmVz
b2x2ZXIoKTsKLSAgICB2b2lkIGFkZFJ1bGVJZk5lZWRlZChjb25zdCBSdWxlRGF0YSYpOwotfTsK
LQotc3RydWN0IFJ1bGVTZXRCdWlsZGVyIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWws
IFJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0KLSAgICBSZWY8UnVsZVNldD4gcnVsZVNldDsKLSAg
ICBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciBtZWRpYVF1ZXJ5Q29sbGVjdG9yOwotICAgIFJl
c29sdmVyKiByZXNvbHZlciB7IG51bGxwdHIgfTsKLSAgICBNb2RlIG1vZGUgeyBNb2RlOjpOb3Jt
YWwgfTsKLSAgICBDYXNjYWRlTGF5ZXJOYW1lIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSB7IH07
Ci0gICAgSGFzaE1hcDxDYXNjYWRlTGF5ZXJOYW1lLCBSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyPiBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwIHsgfTsKLSAgICBSdWxlU2V0OjpDYXNj
YWRlTGF5ZXJJZGVudGlmaWVyIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIHsgMCB9Owot
ICAgIFZlY3RvcjxSdWxlU2V0OjpSZXNvbHZlck11dGF0aW5nUnVsZT4gY29sbGVjdGVkUmVzb2x2
ZXJNdXRhdGluZ1J1bGVzIHsgfTsKLQotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3Qg
U3R5bGVTaGVldENvbnRlbnRzJik7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldFdpdGhTdGF0
aWNFdmFsdWF0aW9uKGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOworICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeVNl
dCogc2hlZXRRdWVyeSk7CiAKICAgICB+UnVsZVNldEJ1aWxkZXIoKTsKIAogcHJpdmF0ZToKKyAg
ICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOwogICAg
IHZvaWQgYWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYp
OwogICAgIHZvaWQgYWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYpOwogCkBAIC03NCw2ICs0
NSw0MCBAQCBwcml2YXRlOgogICAgIHZvaWQgcG9wQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVM
YXllck5hbWUmKTsKICAgICB2b2lkIHVwZGF0ZUNhc2NhZGVMYXllck9yZGVyKCk7CiAgICAgdm9p
ZCBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpOworCisgICAgZW51bSBjbGFzcyBNb2RlIHsg
Tm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2NhbiB9OworCisgICAgc3RydWN0IE1lZGlhUXVlcnlD
b2xsZWN0b3IgeworICAgICAgICB+TWVkaWFRdWVyeUNvbGxlY3RvcigpOworCisgICAgICAgIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcjsKKyAgICAgICAgYm9vbCBjb2xsZWN0
RHluYW1pYyB7IGZhbHNlIH07CisKKyAgICAgICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKKyAg
ICAgICAgICAgIFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0PiBzZXQ7CisgICAgICAgICAgICBWZWN0
b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMgeyB9OworICAgICAgICAgICAgUnVsZUZl
YXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzIHsgfTsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9y
PER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsgfTsKKworICAgICAgICBWZWN0
b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxl
cyB7IH07CisgICAgICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFR
dWVyeSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJpZXMgeyBmYWxzZSB9OworCisgICAgICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQqKTsKKyAgICAgICAgdm9pZCBwb3AoY29uc3QgTWVkaWFRdWVyeVNldCopOwor
ICAgICAgICB2b2lkIGRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAgIHZvaWQgYWRkUnVsZUlm
TmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7CisgICAgfTsKKworICAgIFJlZjxSdWxlU2V0PiBtX3J1
bGVTZXQ7CisgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBtX21lZGlhUXVlcnlDb2xsZWN0b3I7Cisg
ICAgUmVzb2x2ZXIqIG1fcmVzb2x2ZXIgeyBudWxscHRyIH07CisgICAgTW9kZSBtX21vZGUgeyBN
b2RlOjpOb3JtYWwgfTsKKyAgICBDYXNjYWRlTGF5ZXJOYW1lIG1fcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lIHsgfTsKKyAgICBIYXNoTWFwPENhc2NhZGVMYXllck5hbWUsIFJ1bGVTZXQ6OkNhc2Nh
ZGVMYXllcklkZW50aWZpZXI+IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcCB7IH07CisgICAg
UnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyIHsgMCB9OworICAgIFZlY3RvcjxSdWxlU2V0OjpSZXNvbHZlck11dGF0aW5nUnVsZT4g
bV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAppbmRleCBmMzhiZDcxOTNiYjA1NGMwMmQ1
NGY5NWI2NzE1YzU2MjUzN2MxNmM2Li5jZTYwZjAwN2YwMWRjYzJlMmQzMTJkNDkyMzg5Y2ZmZDA2
NjQwNDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcApAQCAt
MzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkVs
ZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5j
bHVkZSAiUnVsZVNldC5oIgorI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCiAj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtOTIsOCArOTIsMTAgQEAgSW52YWxpZGF0b3I6Oklu
dmFsaWRhdG9yKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzLCBjb25z
dCBNZWRpYVEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9vd25lZFJ1bGVTZXQtPmRpc2FibGVB
dXRvU2hyaW5rVG9GaXQoKTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHJ1bGVTZXRCdWlsZGVyKCpt
X293bmVkUnVsZVNldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAgICAgZm9yIChhdXRvJiBzaGVl
dCA6IHNoZWV0cykKLSAgICAgICAgbV9vd25lZFJ1bGVTZXQtPmFkZFJ1bGVzRnJvbVNoZWV0KCpz
aGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAgIHJ1bGVTZXRCdWlsZGVyLmFkZFJ1
bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24oKnNoZWV0KTsKIAogICAgIG1fcnVsZUlu
Zm9ybWF0aW9uID0gY29sbGVjdFJ1bGVJbmZvcm1hdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKaW5kZXggMWFiNGE5OWQzZjcxM2E3MDFmMTEx
ODZjNjIzZWU5YzFkY2E0YWU3NS4uM2Y1MTBhM2NiZTc1OTIyY2RhZTkwMDE3ODZlYWY4MDZiZmRm
ZjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJ1
bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0
eWxlU2NvcGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKQEAgLTczLDkgKzc0
LDExIEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxl
SWZOZWVkZWQoKSBjb25zdAogCiAgICAgLy8gTWVkaWEgcXVlcmllcyBvbiB1c2VyIGFnZW50IHNo
ZWV0IG5lZWQgdG8gZXZhbHVhdGVkIGluIGRvY3VtZW50IGNvbnRleHQuIFRoZXkgYmVoYXZlIGxp
a2UgYXV0aG9yIHNoZWV0cyBpbiB0aGlzIHJlc3BlY3QuCiAgICAgYXV0byYgbWVkaWFRdWVyeUV2
YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7CisKICAgICBt
X3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIAotICAg
IG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqVXNlckFnZW50
U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVhdG9y
LCBtX3N0eWxlUmVzb2x2ZXIpOworCisgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcigqbV91c2Vy
QWdlbnRNZWRpYVF1ZXJ5U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2
ZXIpOworICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRp
YVF1ZXJ5U3R5bGVTaGVldCwgbnVsbHB0cik7CiB9CiAKIFJ1bGVTZXQqIFNjb3BlUnVsZVNldHM6
OnVzZXJTdHlsZSgpIGNvbnN0CkBAIC04OSwzMSArOTIsMzggQEAgdm9pZCBTY29wZVJ1bGVTZXRz
Ojppbml0aWFsaXplVXNlclN0eWxlKCkKIHsKICAgICBhdXRvJiBleHRlbnNpb25TdHlsZVNoZWV0
cyA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCk7CiAg
ICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5
RXZhbHVhdG9yKCk7Ci0gICAgYXV0byB0ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7
Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNo
ZWV0cy5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJv
bVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG51bGxwdHIsIG1lZGlhUXVlcnlFdmFs
dWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CisKKyAgICBhdXRvIHVzZXJTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOworCisgICAgaWYgKGF1dG8qIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHls
ZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkpIHsKKyAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRl
cih1c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCks
IG51bGxwdHIpOworICAgIH0KKwogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBh
dXRvKiBwYWdlID0gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucGFnZSgpOwogICAgIGlmICgh
ZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKS5pc0VtcHR5KCkg
JiYgcGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRFbmFi
bGVJbkFwcEJyb3dzZXJQcml2YWN5UHJvdGVjdGlvbnMoKSkKICAgICAgICAgbV9zdHlsZVJlc29s
dmVyLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHks
IE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIklnbm9yaW5nIHVzZXIgc3R5bGUgc2hlZXQgZm9yIG5v
bi1hcHAgYm91bmQgZG9tYWluLiJfcyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7Cisg
ICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVh
dG9yKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIWV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVk
VXNlclN0eWxlU2hlZXRzKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkubm90aWZ5UGFnZU9mQXBwQm91bmRCZWhhdmlvcigpOwogICAg
IH0KICNlbHNlCi0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25T
dHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgp
LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hl
ZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksIHVzZXJT
dHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAjZW5kaWYKLSAgICBjb2xsZWN0UnVsZXNGcm9t
VXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmRvY3VtZW50VXNlclN0eWxlU2hl
ZXRzKCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwotICAgIGlm
ICh0ZW1wVXNlclN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1
bGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgbV91c2VyU3R5bGUgPSBXVEZNb3ZlKHRlbXBVc2Vy
U3R5bGUpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5
bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5
RXZhbHVhdG9yKTsKKworICAgIGlmICh1c2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8fCB1c2Vy
U3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCisgICAgICAgIG1fdXNlclN0eWxlID0gV1RG
TW92ZSh1c2VyU3R5bGUpOwogfQogCi12b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zy
b21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHVz
ZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYg
bWVkaXVtKQordm9pZCBTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hl
ZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiB1c2VyU2hlZXRzLCBSdWxl
U2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFs
dWF0b3IpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZXJTaGVldHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQVNTRVJUKHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCkuaXNVc2Vy
U3R5bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJT
aGVldHNbaV0tPmNvbnRlbnRzKCksIG51bGxwdHIsIG1lZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsK
KyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRv
ciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHVzZXJTaGVldHMp
IHsKKyAgICAgICAgQVNTRVJUKHNoZWV0LT5jb250ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSk7
CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQtPmNvbnRlbnRzKCksIG51
bGxwdHIpOwogICAgIH0KIH0KIApAQCAtMTc1LDExICsxODUsMTMgQEAgc3RkOjpvcHRpb25hbDxE
eW5hbWljTWVkaWFRdWVyeUV2YWx1YXRpb25DaGFuZ2VzPiBTY29wZVJ1bGVTZXRzOjpldmFsdWF0
ZUR5bmFtaWMKICAgICByZXR1cm4gZXZhbHVhdGlvbkNoYW5nZXM7CiB9CiAKLXZvaWQgU2NvcGVS
dWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBtZWRpdW0sIElu
c3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMpCit2b2lkIFNjb3Bl
UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciogbWVkaWFRdWVy
eUV2YWx1YXRvciwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVy
cykKIHsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKCptX2F1dGhvclN0eWxlLCAqbWVkaWFR
dWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisKICAgICBmb3IgKGF1dG8mIGNzc1No
ZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQo
KSk7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LT5j
b250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksICptZWRpdW0sIG1fc3R5bGVSZXNv
bHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQtPmNvbnRl
bnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgICAgIGluc3BlY3RvckNTU09N
V3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQuZ2V0KCkpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwCmluZGV4IGNlZDE4
YTM5ZGFiZGUyMmIzNTA5ZDA4N2Y5MTViMzgyMzcwYWFlMGYuLjNmMjc5YzMyOWM3MTZlNmVkYTdi
MGVmMzEwODI0MzE0ZWQxOWJmNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Vz
ZXJBZ2VudFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Vc2VyQWdlbnRTdHls
ZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUXVp
cmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJSdWxlU2V0LmgiCisj
aW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgpAQCAtMTA3LDggKzEwNywxMSBAQCBzdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBw
YXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiAKIHZvaWQgVXNlckFnZW50U3R5bGU6OmFk
ZFRvRGVmYXVsdFN0eWxlKFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQpCiB7Ci0gICAgZGVmYXVs
dFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICBkZWZh
dWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIHByaW50RXZhbCgpKTsKKyAg
ICBSdWxlU2V0QnVpbGRlciBzY3JlZW5CdWlsZGVyKCpkZWZhdWx0U3R5bGUsIHNjcmVlbkV2YWwo
KSk7CisgICAgc2NyZWVuQnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldFdpdGhTdGF0aWNFdmFsdWF0
aW9uKHNoZWV0KTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHByaW50QnVpbGRlcigqZGVmYXVsdFBy
aW50U3R5bGUsIHByaW50RXZhbCgpKTsKKyAgICBwcmludEJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hl
ZXRXaXRoU3RhdGljRXZhbHVhdGlvbihzaGVldCk7CiAKICAgICAvLyBCdWlsZCBhIHN0eWxlc2hl
ZXQgY29uc2lzdGluZyBvZiBub24tdHJpdmlhbCBtZWRpYSBxdWVyaWVzIHNlZW4gaW4gZGVmYXVs
dCBzdHlsZS4KICAgICAvLyBSdWxlc2V0cyBmb3IgdGhlc2UgY2FuJ3QgYmUgZ2xvYmFsIGFuZCBu
ZWVkIHRvIGJlIGJ1aWx0IGluIGRvY3VtZW50IGNvbnRleHQuCkBAIC0xNDUsNyArMTQ4LDkgQEAg
dm9pZCBVc2VyQWdlbnRTdHlsZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KCkKICAgICAvLyBRdWly
a3MtbW9kZSBydWxlcy4KICAgICBTdHJpbmcgcXVpcmtzUnVsZXMgPSBTdHJpbmcoU3RyaW5nSW1w
bDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9m
KHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSkgKyBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCku
ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAgICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFT
aGVldChxdWlya3NSdWxlcyk7Ci0gICAgZGVmYXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldCgqcXVpcmtzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKKworICAgIFJ1bGVTZXRCdWls
ZGVyIHF1aXJrQnVpbGRlcigqZGVmYXVsdFF1aXJrc1N0eWxlLCBzY3JlZW5FdmFsKCkpOworICAg
IHF1aXJrQnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldFdpdGhTdGF0aWNFdmFsdWF0aW9uKCpxdWly
a3NTdHlsZVNoZWV0KTsKIAogICAgICsrZGVmYXVsdFN0eWxlVmVyc2lvbjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440041</attachid>
            <date>2021-10-04 01:51:46 -0700</date>
            <delta_ts>2021-10-04 02:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004115144.patch</filename>
            <type>text/plain</type>
            <size>36950</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uOGQyMTZmYjQ5NmQyZWI5OWViOTY3NTU1YmQxNzg2
OTExN2VmMThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFr
ZXMgY2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13
YXkgZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVy
LgorCisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6
c2hyaW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5h
bWljUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2Fk
ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6cG9wQ2Fz
Y2FkZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6dXBk
YXRlQ2FzY2FkZUxheWVyT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRC
dWlsZGVyOjphZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlD
b2xsZWN0b3I6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6
Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmRpZE11dGF0ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6cHVzaEFuZEV2YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOiBEZWxldGVkLgorCisgICAgICAgIE1lZGlhUXVl
cnlDb2xsZWN0b3IgaXMgbm93IGEgcHJpdmF0ZSBpbm5lciBzdHJ1Y3Qgb2YgUnVsZVNldEJ1aWxk
ZXIuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5oOgorICAgICAgICAqIHN0eWxl
L1N0eWxlSW52YWxpZGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1fZGlydGll
c0FsbFN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZUlmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29w
ZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyk6CisgICAgICAgICogc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlVzZXJBZ2VudFN0eWxlOjphZGRUb0RlZmF1bHRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmluaXREZWZhdWx0U3R5bGVTaGVldCk6CisK
IDIwMjEtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgUnVsZVNldCBidWlsZGVyIHRvIGEgZmlsZSBvZiBpdHMgb3duCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVTZXQuY3BwCmluZGV4IDY4ZWRjZjFlM2U1NjJhNjVhZTYwZWIyNzI2MWEzYjlkMzZmNjA5Mjcu
LmZhNWFhMDdhNjI4NTc5NzdhOWFjMDVkYzk3MzljM2QzYzNhZjE4MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgotI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZp
bHRlci5oIgpAQCAtODQsOSArODMsMTUgQEAgc3RhdGljIGJvb2wgaXNIb3N0U2VsZWN0b3JNYXRj
aGluZ0luU2hhZG93VHJlZShjb25zdCBDU1NTZWxlY3RvciYgc3RhcnRTZWxlY3RvcikKICAgICBy
ZXR1cm4gbGVmdG1vc3RTZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MgJiYgbGVmdG1vc3RTZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzSG9zdDsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKGNvbnN0IFN0eWxl
UnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0
SW5kZXgsIHVuc2lnbmVkIGNhc2NhZGVMYXllcklkZW50aWZpZXIsIFJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yKiBtZWRpYVF1ZXJ5Q29sbGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKGNv
bnN0IFN0eWxlUnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2Vs
ZWN0b3JMaXN0SW5kZXgpCiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJ
bmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KyspOworICAgIFJ1bGVEYXRhIHJ1
bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIHNlbGVjdG9yTGlzdEluZGV4LCBtX3J1bGVDb3Vu
dCk7CisgICAgYWRkUnVsZShXVEZNb3ZlKHJ1bGVEYXRhKSwgMCk7Cit9CisKK3ZvaWQgUnVsZVNl
dDo6YWRkUnVsZShSdWxlRGF0YSYmIHJ1bGVEYXRhLCBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGNh
c2NhZGVMYXllcklkZW50aWZpZXIpCit7CisgICAgKyttX3J1bGVDb3VudDsKIAogICAgIGlmIChj
YXNjYWRlTGF5ZXJJZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8gb2xkU2l6ZSA9IG1fY2FzY2Fk
ZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5zaXplKCk7CkBAIC05Nyw5ICsxMDIsNiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZQogCiAgICAgbV9mZWF0dXJlcy5jb2xsZWN0RmVhdHVy
ZXMocnVsZURhdGEpOwogCi0gICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IpCi0gICAgICAgIG1l
ZGlhUXVlcnlDb2xsZWN0b3ItPmFkZFJ1bGVJZk5lZWRlZChydWxlRGF0YSk7Ci0KICAgICB1bnNp
Z25lZCBjbGFzc0J1Y2tldFNpemUgPSAwOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBpZFNlbGVj
dG9yID0gbnVsbHB0cjsKICAgICBjb25zdCBDU1NTZWxlY3RvciogdGFnU2VsZWN0b3IgPSBudWxs
cHRyOwpAQCAtMjcyLDQ1ICsyNzQsNiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxl
UnVsZVBhZ2UmIHJ1bGUpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKCZydWxlKTsKIH0KIAotdm9p
ZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IpCi17Ci0gICAgUnVsZVNl
dEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2
YWx1YXRvciB9IH07Ci0gICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0KLSAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwot
fQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnksIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvciwgU3R5bGU6OlJlc29sdmVyJiByZXNvbHZlcikKLXsK
LSAgICBhdXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7Ci0gICAg
ICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIgeyAqdGhpcywgUnVsZVNldE1lZGlhUXVlcnlDb2xs
ZWN0b3IgeyBldmFsdWF0b3IsIHRydWUgfSwgbnVsbHB0ciwgUnVsZVNldEJ1aWxkZXI6Ok1vZGU6
OlJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0gICAgICAgIGlmIChidWlsZGVyLm1lZGlhUXVlcnlD
b2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQotICAgICAgICAgICAgYnVpbGRl
ci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNv
bGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7Ci0gICAgICAgIHJldHVybiAhYnVpbGRlci5tZWRpYVF1
ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnk7Ci0g
ICAgfSgpOwotCi0gICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVk
aWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNv
bHV0aW9uIH0sICZyZXNvbHZlciB9OwotCi0gICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxl
Y3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVyeSkpCi0gICAgICAgIGJ1aWxkZXIuYWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQpOwotICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Ao
c2hlZXRRdWVyeSk7Ci0KLSAgICBtX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0g
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
aWVzOwotCi0gICAgaWYgKCFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1pY01lZGlh
UXVlcnlSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBmaXJzdE5ld0luZGV4ID0gbV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKLSAgICAgICAgbV9keW5hbWljTWVkaWFRdWVy
eVJ1bGVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzKSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBpbml0aWFsIHZh
bHVlcy4KLSAgICAgICAgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGV2YWx1YXRvciwg
Zmlyc3ROZXdJbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+CiB2b2lkIFJ1bGVTZXQ6OnRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYgZnVuY3Rpb24p
CiB7CkBAIC00MTQsMTQgKzM3Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKICAgICAgICAgdmVjdG9yLT5zaHJp
bmtUb0ZpdCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rRHluYW1pY1J1bGVzKFZl
Y3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiYgZHluYW1pY1J1bGVzKQotewot
ICAgIGZvciAoYXV0byYgcnVsZSA6IGR5bmFtaWNSdWxlcykKLSAgICAgICAgcnVsZS5zaHJpbmtU
b0ZpdCgpOwotCi0gICAgZHluYW1pY1J1bGVzLnNocmlua1RvRml0KCk7Ci19Ci0KIHZvaWQgUnVs
ZVNldDo6c2hyaW5rVG9GaXQoKQogewogICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVs
ZXMpOwpAQCAtNDQzLDcgKzM5OCw5IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogICAg
IG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9mZWF0dXJlcy5zaHJpbmtUb0ZpdCgp
OwogCi0gICAgc2hyaW5rRHluYW1pY1J1bGVzKG1fZHluYW1pY01lZGlhUXVlcnlSdWxlcyk7Cisg
ICAgZm9yIChhdXRvJiBydWxlIDogbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzKQorICAgICAgICBy
dWxlLnNocmlua1RvRml0KCk7CisgICAgbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNocmlua1Rv
Rml0KCk7CiAKICAgICBtX2Nhc2NhZGVMYXllcnMuc2hyaW5rVG9GaXQoKTsKICAgICBtX2Nhc2Nh
ZGVMYXllcklkZW50aWZpZXJGb3JSdWxlUG9zaXRpb24uc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuaAppbmRleCA4YTcxM2U2NWE5OGY4ZDRiY2Q3ZWQyNjM0MjMxMTFlZDgyNjNjNzhh
Li41ODVmMDRiYWRjZGExZDdiZTNmNjMwZmVlYWQ4OGZiMzc0M2NmYjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZVNldC5oCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiAKIGNsYXNzIFJl
c29sdmVyOwogY2xhc3MgUnVsZVNldDsKLXN0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjsKIAogdXNpbmcgSW52YWxpZGF0aW9uUnVsZVNldFZlY3RvciA9IFZlY3RvcjxSZWZQdHI8Y29u
c3QgUnVsZVNldD4sIDE+OwogCkBAIC03MSwyNSArNzAsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBWZWN0b3I8UnVsZURhdGEsIDE+IFJ1bGVEYXRhVmVjdG9yOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9tU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8UnVsZURhdGFWZWN0b3I+PiBBdG9tUnVsZU1h
cDsKIAotICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKLSAgICAgICAgVmVjdG9y
PFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Ci0gICAgICAgIFZlY3Rv
cjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0
b3IgcnVsZUZlYXR1cmVzOwotICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJlc2V0IHsgZmFsc2Ug
fTsKLSAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07Ci0KLSAgICAgICAgdm9pZCBzaHJpbmtU
b0ZpdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOwotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVy
eSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlOjpSZXNvbHZlciYpOwotCi0gICAg
dm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4LCB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlciA9IDAs
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKiA9IG51bGxwdHIpOworICAgIHZvaWQgYWRkUnVs
ZShjb25zdCBTdHlsZVJ1bGUmLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxl
Y3Rvckxpc3RJbmRleCk7CiAgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJik7CiAK
ICAgICB2b2lkIGFkZFRvUnVsZVNldChjb25zdCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFw
JiwgY29uc3QgUnVsZURhdGEmKTsKQEAgLTEyNiwxMiArMTA3LDE0IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlckZvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBzdHJ1Y3QgUnVsZVNldEJ1aWxkZXI7CisgICAgZnJpZW5kIGNs
YXNzIFJ1bGVTZXRCdWlsZGVyOwogCiAgICAgUnVsZVNldCgpOwogCiAgICAgdXNpbmcgQ2FzY2Fk
ZUxheWVySWRlbnRpZmllciA9IHVuc2lnbmVkOwogCisgICAgdm9pZCBhZGRSdWxlKFJ1bGVEYXRh
JiYsIENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCiAgICAgc3RydWN0IFJlc29sdmVyTXV0YXRp
bmdSdWxlIHsKICAgICAgICAgUmVmPFN0eWxlUnVsZUJhc2U+IHJ1bGU7CiAgICAgICAgIENhc2Nh
ZGVMYXllcklkZW50aWZpZXIgbGF5ZXJJZGVudGlmaWVyOwpAQCAtMTU1LDYgKzEzOCwyMSBAQCBw
cml2YXRlOgogICAgIGNvbnN0IENhc2NhZGVMYXllciYgY2FzY2FkZUxheWVyRm9ySWRlbnRpZmll
cihDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2Fz
Y2FkZUxheWVyc1tpZGVudGlmaWVyIC0gMV07IH0KICAgICB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJP
cmRlckZvcklkZW50aWZpZXIoQ2FzY2FkZUxheWVySWRlbnRpZmllcikgY29uc3Q7CiAKKyAgICBz
dHJ1Y3QgRHluYW1pY01lZGlhUXVlcnlSdWxlcyB7CisgICAgICAgIFZlY3RvcjxSZWY8Y29uc3Qg
TWVkaWFRdWVyeVNldD4+IG1lZGlhUXVlcnlTZXRzOworICAgICAgICBWZWN0b3I8c2l6ZV90PiBh
ZmZlY3RlZFJ1bGVQb3NpdGlvbnM7CisgICAgICAgIFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0
dXJlczsKKyAgICAgICAgYm9vbCByZXF1aXJlc0Z1bGxSZXNldCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgcmVzdWx0IHsgdHJ1ZSB9OworCisgICAgICAgIHZvaWQgc2hyaW5rVG9GaXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtZWRpYVF1ZXJ5U2V0cy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICAgICAgYWZmZWN0ZWRSdWxlUG9zaXRpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBy
dWxlRmVhdHVyZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBBdG9t
UnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwogICAgIEF0
b21SdWxlTWFwIG1fdGFnTG9jYWxOYW1lUnVsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKaW5kZXggYTAxZmUxOTJkOGIzNDg0YjY3YTA4NWI3M2I5MTM4ODZjMGE0OWU3
OC4uZDM3MWQ3N2RlYzA0Njg5Y2I2MTMzMzEwNGVkMjc2YzY4Yjk3YzRkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzIsMzYgKzMyLDg3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCitSdWxlU2V0QnVpbGRlcjo6UnVsZVNl
dEJ1aWxkZXIoUnVsZVNldCYgcnVsZVNldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZh
bHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCisgICAgOiBtX3J1bGVTZXQocnVsZVNldCkKKyAg
ICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciB9KQorICAgICwgbV9yZXNvbHZl
cihyZXNvbHZlcikKK3sKK30KKworCiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkK
IHsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAo
bV9tb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKQogICAgICAgICByZXR1cm47CiAK
ICAgICB1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigpOwogICAgIGFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKCk7CiB9CiAKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0V2l0
aFN0YXRpY0V2YWx1YXRpb24oY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3sKKyAg
ICBhZGRSdWxlc0Zyb21TaGVldChzaGVldCk7CisKKyAgICBpZiAobV9ydWxlU2V0LT5tX2F1dG9T
aHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIG1fcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKK30K
Kwordm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVl
dENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVyeSkKK3sKKyAg
ICBhdXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7CisgICAgICAg
IFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5lcihtX3J1bGVTZXQuZ2V0KCksIG1fbWVkaWFR
dWVyeUNvbGxlY3Rvci5ldmFsdWF0b3IpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tb2Rl
ID0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW47CisgICAgICAgIG11dGF0aW9uU2Nhbm5lci5t
X21lZGlhUXVlcnlDb2xsZWN0b3IuY29sbGVjdER5bmFtaWMgPSB0cnVlOworCisgICAgICAgIGlm
IChtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShz
aGVldFF1ZXJ5KSkKKyAgICAgICAgICAgIG11dGF0aW9uU2Nhbm5lci5hZGRSdWxlc0Zyb21TaGVl
dChzaGVldCk7CisgICAgICAgIG11dGF0aW9uU2Nhbm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3Iu
cG9wKHNoZWV0UXVlcnkpOworCisgICAgICAgIHJldHVybiAhbXV0YXRpb25TY2FubmVyLm1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5
OworICAgIH07CisKKyAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuY29sbGVjdER5bmFtaWMgPSBj
YW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24oKTsKKworICAgIGlmIChtX21lZGlhUXVl
cnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQorICAgICAgICBhZGRSdWxl
c0Zyb21TaGVldChzaGVldCk7CisgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1
ZXJ5KTsKKworICAgIG1fcnVsZVNldC0+bV9oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmll
cyA9IG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmll
czsKKworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVs
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNldC0+
bV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5tX2R5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5Q29s
bGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhlIGlu
aXRpYWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVl
cnlSdWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsK
KyAgICB9CisKKyAgICBpZiAobV9ydWxlU2V0LT5tX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisg
ICAgICAgIG1fcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKK30KKworCiB2b2lkIFJ1bGVTZXRCdWls
ZGVyOjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBy
dWxlcykKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgewotICAgICAgICBpZiAobW9k
ZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRp
ZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCisgICAgICAgIGlmIChtX21v
ZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gJiYgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9y
LmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkpIHsKLSAgICAgICAgICAg
IGlmIChtb2RlID09IE1vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQogICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxTdHlsZVJ1
bGU+KCpydWxlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaXM8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBN
b2RlOjpOb3JtYWwpCi0gICAgICAgICAgICAgICAgcnVsZVNldC0+YWRkUGFnZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKKyAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpOwotICAg
ICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKCZtZWRpYVJ1
bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rv
ci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAgICAgICAgICAg
ICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAgICAgICAgICAg
IG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAg
ICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1lZGlhUXVlcmll
cygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTI5LDEyIEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVW
YWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgewotICAgICAg
ICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsKLSAgICAgICAg
ICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAg
ICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKSB7CisgICAgICAg
ICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVz
b2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzLmFw
cGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAgICAgICAg
ICAgIGlmIChtX3Jlc29sdmVyKQorICAgICAgICAgICAgICAgIG1fY29sbGVjdGVkUmVzb2x2ZXJN
dXRhdGluZ1J1bGVzLmFwcGVuZCh7ICpydWxlLCBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlm
aWVyIH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlz
PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+
KCpydWxlKS5jb25kaXRpb25Jc1N1cHBvcnRlZCgpKSB7CkBAIC0xMDIsNyArMTUzLDcgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJiBzaGVldCkKICAgICAgICAgaWYgKCFydWxlLT5zdHlsZVNoZWV0KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUocnVsZS0+bWVkaWFRdWVyaWVzKCkpKSB7CisgICAgICAgIGlmIChtX21lZGlhUXVlcnlD
b2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHJ1bGUtPm1lZGlhUXVlcmllcygpKSkgewogICAgICAg
ICAgICAgYXV0byYgY2FzY2FkZUxheWVyTmFtZSA9IHJ1bGUtPmNhc2NhZGVMYXllck5hbWUoKTsK
ICAgICAgICAgICAgIGlmIChjYXNjYWRlTGF5ZXJOYW1lKQogICAgICAgICAgICAgICAgIHB1c2hD
YXNjYWRlTGF5ZXIoKmNhc2NhZGVMYXllck5hbWUpOwpAQCAtMTEyLDcgKzE2Myw3IEBAIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50
cyYgc2hlZXQpCiAgICAgICAgICAgICBpZiAoY2FzY2FkZUxheWVyTmFtZSkKICAgICAgICAgICAg
ICAgICBwb3BDYXNjYWRlTGF5ZXIoKmNhc2NhZGVMYXllck5hbWUpOwogICAgICAgICB9Ci0gICAg
ICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHJ1bGUtPm1lZGlhUXVlcmllcygpKTsKKyAgICAg
ICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAg
fQogCiAgICAgYWRkQ2hpbGRSdWxlcyhzaGVldC5jaGlsZFJ1bGVzKCkpOwpAQCAtMTI0LDggKzE3
NSwxMSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRTdHlsZVJ1bGUoY29uc3QgU3R5bGVSdWxl
JiBydWxlKQogICAgIGlmIChzZWxlY3Rvckxpc3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXggPSAwOwotICAgIGZvciAoc2l6ZV90IHNl
bGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4
ID0gc2VsZWN0b3JMaXN0LmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkK
LSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxp
c3RJbmRleCsrLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciwgJm1lZGlhUXVlcnlDb2xs
ZWN0b3IpOworICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4
ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gc2VsZWN0b3JMaXN0LmluZGV4T2ZOZXh0U2Vs
ZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkgeworICAgICAgICBSdWxlRGF0YSBydWxlRGF0YShy
dWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9ydWxlU2V0LT5ydWxlQ291
bnQoKSk7CisgICAgICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5hZGRSdWxlSWZOZWVkZWQocnVs
ZURhdGEpOworICAgICAgICBtX3J1bGVTZXQtPmFkZFJ1bGUoV1RGTW92ZShydWxlRGF0YSksIG1f
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIpOworICAgIH0KIH0KIAogdm9pZCBSdWxlU2V0
QnVpbGRlcjo6cmVnaXN0ZXJMYXllcnMoY29uc3QgVmVjdG9yPENhc2NhZGVMYXllck5hbWU+JiBu
YW1lcykKQEAgLTEzOCwxNCArMTkyLDE0IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnJlZ2lzdGVy
TGF5ZXJzKGNvbnN0IFZlY3RvcjxDYXNjYWRlTGF5ZXJOYW1lPiYgbmFtZXMpCiAKIHZvaWQgUnVs
ZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYgbmFt
ZSkKIHsKLSAgICBpZiAobW9kZSAhPSBNb2RlOjpOb3JtYWwpCisgICAgaWYgKG1fbW9kZSAhPSBN
b2RlOjpOb3JtYWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChjYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyTWFwLmlzRW1wdHkoKSAmJiAhcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHko
KSkgeworICAgIGlmIChtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFt
X3J1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRm9yIGlu
Y3JlbWVudGFsIGJ1aWxkLCByZWNvbnN0cnVjdCB0aGUgbmFtZS0+aWRlbnRpZmllciBtYXAuCiAg
ICAgICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIgaWRlbnRpZmllciA9IDA7Ci0g
ICAgICAgIGZvciAoYXV0byYgbGF5ZXIgOiBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMpCi0gICAg
ICAgICAgICBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmFkZChsYXllci5yZXNvbHZlZE5hbWUs
ICsraWRlbnRpZmllcik7CisgICAgICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX3J1bGVTZXQtPm1f
Y2FzY2FkZUxheWVycykKKyAgICAgICAgICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5h
ZGQobGF5ZXIucmVzb2x2ZWROYW1lLCArK2lkZW50aWZpZXIpOwogICAgIH0KIAogICAgIGF1dG8g
bmFtZVJlc29sdmluZ0Fub255bW91cyA9IFsmXSB7CkBAIC0xNTksMjkgKzIxMywyOSBAQCB2b2lk
IFJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUm
IG5hbWUpCiAKICAgICAvLyBGb3IgaGllcmFyY2hpY2FsIG5hbWVzIHdlIHJlZ2lzdGVyIHRoZSBj
b250YWluaW5nIGxheWVycyBpbmRpdmlkdWFsbHkgZmlyc3QuCiAgICAgZm9yIChhdXRvJiBuYW1l
U2VnbWVudCA6IG5hbWVSZXNvbHZpbmdBbm9ueW1vdXMoKSkgewotICAgICAgICByZXNvbHZlZENh
c2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKLSAgICAgICAgY3VycmVudENhc2Nh
ZGVMYXllcklkZW50aWZpZXIgPSBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmVuc3VyZShyZXNv
bHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7CisgICAgICAgIG1fcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lLmFwcGVuZChuYW1lU2VnbWVudCk7CisgICAgICAgIG1fY3VycmVudENhc2NhZGVMYXll
cklkZW50aWZpZXIgPSBtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuZW5zdXJlKG1fcmVzb2x2
ZWRDYXNjYWRlTGF5ZXJOYW1lLCBbJl0gewogICAgICAgICAgICAgLy8gUHJldmlvdXNseSB1bnNl
ZW4gbGF5ZXIuCi0gICAgICAgICAgICBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuYXBwZW5kKHsg
cmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9
KTsKLSAgICAgICAgICAgIHJldHVybiBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwor
ICAgICAgICAgICAgbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuYXBwZW5kKHsgbV9yZXNvbHZl
ZENhc2NhZGVMYXllck5hbWUsIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwogICAg
ICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVy
Ojpwb3BDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYgbmFtZSkKIHsKLSAgICBp
ZiAobW9kZSAhPSBNb2RlOjpOb3JtYWwpCisgICAgaWYgKG1fbW9kZSAhPSBNb2RlOjpOb3JtYWwp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byBzaXplID0gbmFtZS5pc0VtcHR5KCkg
PyAxIDogbmFtZS5zaXplKCk7IHNpemUtLTspIHsKLSAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZp
ZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOworICAgICAgICBtX3Jlc29sdmVkQ2FzY2Fk
ZUxheWVyTmFtZS5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fY3VycmVudENhc2NhZGVMYXllcklk
ZW50aWZpZXIgPSBtX3J1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIobV9jdXJyZW50
Q2FzY2FkZUxheWVySWRlbnRpZmllcikucGFyZW50SWRlbnRpZmllcjsKICAgICB9CiB9CiAKIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9yZGVyKCkKIHsKLSAgICBpZiAo
Y2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCisgICAgaWYgKG1fY2FzY2FkZUxh
eWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8g
Y29tcGFyZSA9IFsmXShhdXRvIGEsIGF1dG8gYikgewpAQCAtMTg5LDggKzI0Myw4IEBAIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9yZGVyKCkKICAgICAgICAgICAgIC8v
IElkZW50aWZpZXJzIGFyZSBpbiBwYXJzZSBvcmRlciB3aGljaCBhbG1vc3QgY29ycmVzcG9uZHMg
dG8gdGhlIGxheWVyIHByaW9yaXR5IG9yZGVyLgogICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhj
ZXB0aW9uIGlzIHdoZW4gYSBzdWJsYXllciBnZXRzIGFkZGVkIHRvIGEgbGF5ZXIgYWZ0ZXIgYWRk
aW5nIG90aGVyIG5vbi1zdWJsYXllcnMuCiAgICAgICAgICAgICAvLyBUbyByZXNvbHZlIHRoaXMg
d2UgbmVlZCBsb29rIGZvciBhIHNoYXJlZCBhbmNlc3RvciBsYXllci4KLSAgICAgICAgICAgIGF1
dG8gYVBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50
SWRlbnRpZmllcjsKLSAgICAgICAgICAgIGF1dG8gYlBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVM
YXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgIGF1dG8g
YVBhcmVudCA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihhKS5wYXJlbnRJ
ZGVudGlmaWVyOworICAgICAgICAgICAgYXV0byBiUGFyZW50ID0gbV9ydWxlU2V0LT5jYXNjYWRl
TGF5ZXJGb3JJZGVudGlmaWVyKGIpLnBhcmVudElkZW50aWZpZXI7CiAgICAgICAgICAgICBpZiAo
YVBhcmVudCA9PSBiUGFyZW50IHx8IGFQYXJlbnQgPT0gYiB8fCBiUGFyZW50ID09IGEpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYVBhcmVudCA+IGJQYXJlbnQpCkBA
IC0yMDIsNyArMjU2LDcgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVy
T3JkZXIoKQogICAgIH07CiAKICAgICBWZWN0b3I8UnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRp
Zmllcj4gb3JkZXJWZWN0b3I7Ci0gICAgYXV0byBsYXllckNvdW50ID0gcnVsZVNldC0+bV9jYXNj
YWRlTGF5ZXJzLnNpemUoKTsKKyAgICBhdXRvIGxheWVyQ291bnQgPSBtX3J1bGVTZXQtPm1fY2Fz
Y2FkZUxheWVycy5zaXplKCk7CiAgICAgb3JkZXJWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsYXllckNvdW50KTsKICAgICBmb3IgKFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIg
aWRlbnRpZmllciA9IDE7IGlkZW50aWZpZXIgPD0gbGF5ZXJDb3VudDsgKytpZGVudGlmaWVyKQog
ICAgICAgICBvcmRlclZlY3Rvci51bmNoZWNrZWRBcHBlbmQoaWRlbnRpZmllcik7CkBAIC0yMTAs
NTIgKzI2NCw1MiBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRl
cigpCiAgICAgc3RkOjpzb3J0KG9yZGVyVmVjdG9yLmJlZ2luKCksIG9yZGVyVmVjdG9yLmVuZCgp
LCBjb21wYXJlKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmRlclZlY3Rvci5z
aXplKCk7ICsraSkKLSAgICAgICAgcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihv
cmRlclZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKKyAgICAgICAgbV9ydWxlU2V0LT5jYXNjYWRl
TGF5ZXJGb3JJZGVudGlmaWVyKG9yZGVyVmVjdG9yW2ldKS5vcmRlciA9IGkgKyAxOwogfQogCiB2
b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpCiB7Ci0gICAg
aWYgKCFyZXNvbHZlcikKKyAgICBpZiAoIW1fcmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gY29tcGFyZUxheWVycyA9IFsmXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBi
KSB7Ci0gICAgICAgIGF1dG8gYU9yZGVyID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJ
ZGVudGlmaWVyKGEubGF5ZXJJZGVudGlmaWVyKTsKLSAgICAgICAgYXV0byBiT3JkZXIgPSBydWxl
U2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklkZW50aWZpZXIoYi5sYXllcklkZW50aWZpZXIpOwor
ICAgICAgICBhdXRvIGFPcmRlciA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVu
dGlmaWVyKGEubGF5ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBiT3JkZXIgPSBtX3J1bGVT
ZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihiLmxheWVySWRlbnRpZmllcik7CiAg
ICAgICAgIHJldHVybiBhT3JkZXIgPCBiT3JkZXI7CiAgICAgfTsKIAogICAgIC8vIFRoZSBvcmRl
ciBtYXkgY2hhbmdlIHNvIHdlIG5lZWQgdG8gcmVwcm9jZXNzIHJlc29sdmVyIG11dGF0aW5nIHJ1
bGVzIGZyb20gZWFybGllciBzdHlsZXNoZWV0cy4KLSAgICBhdXRvIHJ1bGVzVG9BZGQgPSBzdGQ6
OmV4Y2hhbmdlKHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMsIHsgfSk7
Ci0gICAgcnVsZXNUb0FkZC5hcHBlbmRWZWN0b3IoV1RGTW92ZShjb2xsZWN0ZWRSZXNvbHZlck11
dGF0aW5nUnVsZXMpKTsKKyAgICBhdXRvIHJ1bGVzVG9BZGQgPSBzdGQ6OmV4Y2hhbmdlKG1fcnVs
ZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9KTsKKyAgICBydWxlc1Rv
QWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKG1fY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVz
KSk7CiAKLSAgICBpZiAoIWNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQorICAg
IGlmICghbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAgc3Rk
OjpzdGFibGVfc29ydChydWxlc1RvQWRkLmJlZ2luKCksIHJ1bGVzVG9BZGQuZW5kKCksIGNvbXBh
cmVMYXllcnMpOwogCiAgICAgZm9yIChhdXRvJiBjb2xsZWN0ZWRSdWxlIDogcnVsZXNUb0FkZCkg
ewogICAgICAgICBpZiAoY29sbGVjdGVkUnVsZS5sYXllcklkZW50aWZpZXIpCi0gICAgICAgICAg
ICBydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLmFwcGVuZChjb2xsZWN0
ZWRSdWxlKTsKKyAgICAgICAgICAgIG1fcnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJ
bkxheWVycy5hcHBlbmQoY29sbGVjdGVkUnVsZSk7CiAKICAgICAgICAgYXV0byYgcnVsZSA9IGNv
bGxlY3RlZFJ1bGUucnVsZTsKICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPihydWxl
KSkgewotICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRk
Rm9udEZhY2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPihydWxlLmdldCgpKSwgZmFs
c2UpOwotICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25z
Q2FjaGUoKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9y
KCkuYWRkRm9udEZhY2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPihydWxlLmdldCgp
KSwgZmFsc2UpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNs
YXJhdGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlKSkgewotICAgICAgICAg
ICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udFBhbGV0dGVWYWx1
ZXNSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlLmdldCgpKSk7
Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNo
ZSgpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5h
ZGRGb250UGFsZXR0ZVZhbHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1
ZXM+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZXItPmludmFsaWRhdGVNYXRj
aGVkRGVjbGFyYXRpb25zQ2FjaGUoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUpKSB7Ci0gICAgICAgICAg
ICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+
KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUo
ZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0
b3I6On5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpID0gZGVmYXVsdDsKK1J1bGVTZXRCdWls
ZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+TWVkaWFRdWVyeUNvbGxlY3RvcigpID0gZGVmYXVs
dDsKIAotYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNv
bnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK2Jvb2wgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlD
b2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAg
ICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc1LDcgKzMyOSw3IEBAIGJv
b2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSdWxlU2V0TWVk
aWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK3ZvaWQgUnVs
ZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0
KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQgfHwgZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkg
fHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5zZXQuZ2V0KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTI5OCwxNCArMzUyLDE0IEBAIHZvaWQgUnVsZVNldE1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAgICAgZHluYW1pY0NvbnRleHRT
dGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXZvaWQgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6
OmRpZE11dGF0ZVJlc29sdmVyKCkKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OmRpZE11dGF0ZVJlc29sdmVyKCkKIHsKICAgICBpZiAoZHluYW1pY0NvbnRleHRTdGFj
ay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBkaWRNdXRhdGVSZXNvbHZlcldpdGhp
bkR5bmFtaWNNZWRpYVF1ZXJ5ID0gdHJ1ZTsKIH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNv
bGxlY3Rvcjo6YWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKK3ZvaWQg
UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZChjb25z
dCBSdWxlRGF0YSYgcnVsZURhdGEpCiB7CiAgICAgaWYgKGR5bmFtaWNDb250ZXh0U3RhY2suaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9SdWxlU2V0QnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIu
aAppbmRleCBlZjRhZGYwODMxNTVkMDYzZGY0NTI1ZjFkNWIxZDNiZDE3MmM2YmMyLi5jYTUyNDU1
ZjNlNTI4N2Y2MjRjMGZmODFiMmE4OWM4ZWRlMTRjN2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVTZXRCdWlsZGVyLmgKQEAgLTI2LDQ2ICsyNiwxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIFN0eWxlIHsKIAotc3RydWN0IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsK
LSAgICB+UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IoKTsKK2NsYXNzIFJ1bGVTZXRCdWlsZGVy
IHsKK3B1YmxpYzoKKyAgICBSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYsIFJlc29sdmVyKiA9IG51bGxwdHIpOwogCi0gICAgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgIGNvbnN0IGJvb2wgY29sbGVjdER5bmFtaWMgeyBm
YWxzZSB9OwotCi0gICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKLSAgICAgICAgUmVmPGNvbnN0
IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxl
UG9zaXRpb25zIHsgfTsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzIHsg
fTsKLSAgICB9OwotICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHluYW1pY0NvbnRleHRTdGFj
ayB7IH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHlu
YW1pY01lZGlhUXVlcnlSdWxlcyB7IH07Ci0gICAgYm9vbCBkaWRNdXRhdGVSZXNvbHZlcldpdGhp
bkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKLSAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyaWVzIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKGNv
bnN0IE1lZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7
Ci0gICAgdm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOwotICAgIHZvaWQgYWRkUnVsZUlmTmVlZGVk
KGNvbnN0IFJ1bGVEYXRhJik7Ci19OwotCi1zdHJ1Y3QgUnVsZVNldEJ1aWxkZXIgewotICAgIGVu
dW0gY2xhc3MgTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLQotICAgIFJl
ZjxSdWxlU2V0PiBydWxlU2V0OwotICAgIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIG1lZGlh
UXVlcnlDb2xsZWN0b3I7Ci0gICAgUmVzb2x2ZXIqIHJlc29sdmVyIHsgbnVsbHB0ciB9OwotICAg
IE1vZGUgbW9kZSB7IE1vZGU6Ok5vcm1hbCB9OwotICAgIENhc2NhZGVMYXllck5hbWUgcmVzb2x2
ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKLSAgICBIYXNoTWFwPENhc2NhZGVMYXllck5hbWUsIFJ1
bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAg
eyB9OwotICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIgY3VycmVudENhc2NhZGVM
YXllcklkZW50aWZpZXIgeyAwIH07Ci0gICAgVmVjdG9yPFJ1bGVTZXQ6OlJlc29sdmVyTXV0YXRp
bmdSdWxlPiBjb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OwotCi0gICAgdm9pZCBh
ZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmKTsKKyAgICB2b2lkIGFk
ZFJ1bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24oY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJik7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVu
dHMmLCBjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5KTsKIAogICAgIH5SdWxlU2V0QnVp
bGRlcigpOwogCiBwcml2YXRlOgorICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5
bGVTaGVldENvbnRlbnRzJik7CiAgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4+Jik7CiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoY29uc3QgU3R5
bGVSdWxlJik7CiAKQEAgLTc0LDYgKzQ1LDQwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwb3BDYXNj
YWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYpOwogICAgIHZvaWQgdXBkYXRlQ2FzY2Fk
ZUxheWVyT3JkZXIoKTsKICAgICB2b2lkIGFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCk7CisK
KyAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWwsIFJlc29sdmVyTXV0YXRpb25TY2FuIH07CisK
KyAgICBzdHJ1Y3QgTWVkaWFRdWVyeUNvbGxlY3RvciB7CisgICAgICAgIH5NZWRpYVF1ZXJ5Q29s
bGVjdG9yKCk7CisKKyAgICAgICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9y
OworICAgICAgICBib29sIGNvbGxlY3REeW5hbWljIHsgZmFsc2UgfTsKKworICAgICAgICBzdHJ1
Y3QgRHluYW1pY0NvbnRleHQgeworICAgICAgICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+
IHNldDsKKyAgICAgICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9ucyB7
IH07CisgICAgICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9OworICAg
ICAgICB9OworICAgICAgICBWZWN0b3I8RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3Rh
Y2sgeyB9OworCisgICAgICAgIFZlY3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVz
PiBkeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsgfTsKKyAgICAgICAgYm9vbCBkaWRNdXRhdGVSZXNv
bHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBoYXNW
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyB7IGZhbHNlIH07CisKKyAgICAgICAgYm9vbCBw
dXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCopOworICAgICAgICB2b2lkIHBvcChj
b25zdCBNZWRpYVF1ZXJ5U2V0Kik7CisgICAgICAgIHZvaWQgZGlkTXV0YXRlUmVzb2x2ZXIoKTsK
KyAgICAgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmKTsKKyAgICB9Owor
CisgICAgUmVmPFJ1bGVTZXQ+IG1fcnVsZVNldDsKKyAgICBNZWRpYVF1ZXJ5Q29sbGVjdG9yIG1f
bWVkaWFRdWVyeUNvbGxlY3RvcjsKKyAgICBSZXNvbHZlciogbV9yZXNvbHZlciB7IG51bGxwdHIg
fTsKKyAgICBNb2RlIG1fbW9kZSB7IE1vZGU6Ok5vcm1hbCB9OworICAgIENhc2NhZGVMYXllck5h
bWUgbV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUgeyB9OworICAgIEhhc2hNYXA8Q2FzY2FkZUxh
eWVyTmFtZSwgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllcj4gbV9jYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyTWFwIHsgfTsKKyAgICBSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIG1f
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgeyAwIH07CisgICAgVmVjdG9yPFJ1bGVTZXQ6
OlJlc29sdmVyTXV0YXRpbmdSdWxlPiBtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7
IH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFs
aWRhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmlu
ZGV4IGYzOGJkNzE5M2JiMDU0YzAyZDU0Zjk1YjY3MTVjNTYyNTM3YzE2YzYuLmNlNjBmMDA3ZjAx
ZGNjMmUyZDMxMmQ0OTIzODljZmZkMDY2NDA0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlSW52YWxpZGF0b3IuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJI
VE1MU2xvdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNl
dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC05Miw4ICs5
MiwxMCBAQCBJbnZhbGlkYXRvcjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRD
b250ZW50cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUQogICAgICAgICByZXR1cm47CiAKICAgICBt
X293bmVkUnVsZVNldC0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOworCisgICAgUnVsZVNldEJ1
aWxkZXIgcnVsZVNldEJ1aWxkZXIoKm1fb3duZWRSdWxlU2V0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9y
KTsKICAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNl
dC0+YWRkUnVsZXNGcm9tU2hlZXQoKnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICAg
ICAgcnVsZVNldEJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXRXaXRoU3RhdGljRXZhbHVhdGlvbigq
c2hlZXQpOwogCiAgICAgbV9ydWxlSW5mb3JtYXRpb24gPSBjb2xsZWN0UnVsZUluZm9ybWF0aW9u
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNl
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAppbmRl
eCAxYWI0YTk5ZDNmNzEzYTcwMWYxMTE4NmM2MjNlZTljMWRjYTRhZTc1Li4zZjUxMGEzY2JlNzU5
MjJjZGFlOTAwMTc4NmVhZjgwNmJmZGZmN2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRD
b250ZW50cy5oIgpAQCAtNzMsOSArNzQsMTEgQEAgdm9pZCBTY29wZVJ1bGVTZXRzOjp1cGRhdGVV
c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGVJZk5lZWRlZCgpIGNvbnN0CiAKICAgICAvLyBNZWRpYSBx
dWVyaWVzIG9uIHVzZXIgYWdlbnQgc2hlZXQgbmVlZCB0byBldmFsdWF0ZWQgaW4gZG9jdW1lbnQg
Y29udGV4dC4gVGhleSBiZWhhdmUgbGlrZSBhdXRob3Igc2hlZXRzIGluIHRoaXMgcmVzcGVjdC4K
ICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVl
cnlFdmFsdWF0b3IoKTsKKwogICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlID0gUnVsZVNl
dDo6Y3JlYXRlKCk7Ci0gICAgCi0gICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVyeVN0eWxlU2hlZXQsIG51bGxw
dHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CisKKyAgICBSdWxlU2V0
QnVpbGRlciBidWlsZGVyKCptX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSwgbWVkaWFRdWVyeUV2
YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVl
dCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBudWxscHRyKTsKIH0KIAog
UnVsZVNldCogU2NvcGVSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKQEAgLTg5LDMxICs5Miwz
OCBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5bGUoKQogewogICAgIGF1
dG8mIGV4dGVuc2lvblN0eWxlU2hlZXRzID0gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZXh0
ZW5zaW9uU3R5bGVTaGVldHMoKTsKICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9z
dHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKLSAgICBhdXRvIHRlbXBVc2VyU3R5
bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAgdGVt
cFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSwg
bnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVyKTsKKworICAgIGF1
dG8gdXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoYXV0byogcGFnZVVz
ZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkgeworICAgICAg
ICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvciwg
Jm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQocGFn
ZVVzZXJTaGVldC0+Y29udGVudHMoKSwgbnVsbHB0cik7CisgICAgfQorCiAjaWYgRU5BQkxFKEFQ
UF9CT1VORF9ET01BSU5TKQogICAgIGF1dG8qIHBhZ2UgPSBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKS5wYWdlKCk7CiAgICAgaWYgKCFleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJT
dHlsZVNoZWV0cygpLmlzRW1wdHkoKSAmJiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLnNob3VsZEVuYWJsZUluQXBwQnJvd3NlclByaXZhY3lQcm90ZWN0aW9ucygp
KQogICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiSWdub3Jpbmcg
dXNlciBzdHlsZSBzaGVldCBmb3Igbm9uLWFwcCBib3VuZCBkb21haW4uIl9zKTsKICAgICBlbHNl
IHsKLSAgICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHls
ZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNo
ZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB1c2Vy
U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgICAgICBpZiAocGFnZSAmJiAhZXh0ZW5z
aW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5ub3RpZnlQYWdlT2ZB
cHBCb3VuZEJlaGF2aW9yKCk7CiAgICAgfQogI2Vsc2UKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNl
clN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRz
KCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworICAgIGNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRV
c2VyU3R5bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICNlbmRp
ZgotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVkaWFR
dWVyeUV2YWx1YXRvcik7Ci0gICAgaWYgKHRlbXBVc2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8
fCB0ZW1wVXNlclN0eWxlLT5wYWdlUnVsZXMoKS5zaXplKCkgPiAwKQotICAgICAgICBtX3VzZXJT
dHlsZSA9IFdURk1vdmUodGVtcFVzZXJTdHlsZSk7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJT
dHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygp
LCB1c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworCisgICAgaWYgKHVzZXJTdHlsZS0+
cnVsZUNvdW50KCkgPiAwIHx8IHVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKKyAg
ICAgICAgbV91c2VyU3R5bGUgPSBXVEZNb3ZlKHVzZXJTdHlsZSk7CiB9CiAKLXZvaWQgU2NvcGVS
dWxlU2V0czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlLCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0pCit2b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRvcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0
c1tpXS0+Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbnVsbHB0ciwgbWVk
aXVtLCBtX3N0eWxlUmVzb2x2ZXIpOworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIodXNlclN0
eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICBmb3IgKGF1
dG8mIHNoZWV0IDogdXNlclNoZWV0cykgeworICAgICAgICBBU1NFUlQoc2hlZXQtPmNvbnRlbnRz
KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVl
dChzaGVldC0+Y29udGVudHMoKSwgbnVsbHB0cik7CiAgICAgfQogfQogCkBAIC0xNzUsMTEgKzE4
NSwxMyBAQCBzdGQ6Om9wdGlvbmFsPER5bmFtaWNNZWRpYVF1ZXJ5RXZhbHVhdGlvbkNoYW5nZXM+
IFNjb3BlUnVsZVNldHM6OmV2YWx1YXRlRHluYW1pYwogICAgIHJldHVybiBldmFsdWF0aW9uQ2hh
bmdlczsKIH0KIAotdm9pZCBTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlhUXVl
cnlFdmFsdWF0b3IqIG1lZGl1bSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NT
T01XcmFwcGVycykKK3ZvaWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKiBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJz
JiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKQogeworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIo
Km1fYXV0aG9yU3R5bGUsICptZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsK
KwogICAgIGZvciAoYXV0byYgY3NzU2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NF
UlQoIWNzc1NoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMo
KSwgKm1lZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zy
b21TaGVldChjc3NTaGVldC0+Y29udGVudHMoKSwgY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpKTsK
ICAgICAgICAgaW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5l
ZWRlZChjc3NTaGVldC5nZXQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHAKaW5kZXggY2VkMThhMzlkYWJkZTIyYjM1MDlkMDg3ZjkxNWIzODIzNzBhYWUw
Zi4uM2YyNzljMzI5YzcxNmU2ZWRhN2IwZWYzMTA4MjQzMTRlZDE5YmY3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1VzZXJBZ2VudFN0eWxlLmNwcApAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgot
I2luY2x1ZGUgIlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCkBAIC0xMDcsOCArMTA3LDExIEBAIHN0YXRp
YyBTdHlsZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIAog
dm9pZCBVc2VyQWdlbnRTdHlsZTo6YWRkVG9EZWZhdWx0U3R5bGUoU3R5bGVTaGVldENvbnRlbnRz
JiBzaGVldCkKIHsKLSAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCBz
Y3JlZW5FdmFsKCkpOwotICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChz
aGVldCwgcHJpbnRFdmFsKCkpOworICAgIFJ1bGVTZXRCdWlsZGVyIHNjcmVlbkJ1aWxkZXIoKmRl
ZmF1bHRTdHlsZSwgc2NyZWVuRXZhbCgpKTsKKyAgICBzY3JlZW5CdWlsZGVyLmFkZFJ1bGVzRnJv
bVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24oc2hlZXQpOworCisgICAgUnVsZVNldEJ1aWxkZXIg
cHJpbnRCdWlsZGVyKCpkZWZhdWx0UHJpbnRTdHlsZSwgcHJpbnRFdmFsKCkpOworICAgIHByaW50
QnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldFdpdGhTdGF0aWNFdmFsdWF0aW9uKHNoZWV0KTsKIAog
ICAgIC8vIEJ1aWxkIGEgc3R5bGVzaGVldCBjb25zaXN0aW5nIG9mIG5vbi10cml2aWFsIG1lZGlh
IHF1ZXJpZXMgc2VlbiBpbiBkZWZhdWx0IHN0eWxlLgogICAgIC8vIFJ1bGVzZXRzIGZvciB0aGVz
ZSBjYW4ndCBiZSBnbG9iYWwgYW5kIG5lZWQgdG8gYmUgYnVpbHQgaW4gZG9jdW1lbnQgY29udGV4
dC4KQEAgLTE0NSw3ICsxNDgsOSBAQCB2b2lkIFVzZXJBZ2VudFN0eWxlOjppbml0RGVmYXVsdFN0
eWxlU2hlZXQoKQogICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVzLgogICAgIFN0cmluZyBxdWlya3NS
dWxlcyA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhxdWlya3NVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpKSArIFJl
bmRlclRoZW1lOjpzaW5nbGV0b24oKS5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKICAgICBxdWly
a3NTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJrc1J1bGVzKTsKLSAgICBkZWZhdWx0UXVp
cmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWlya3NTdHlsZVNoZWV0LCBzY3JlZW5FdmFs
KCkpOworCisgICAgUnVsZVNldEJ1aWxkZXIgcXVpcmtCdWlsZGVyKCpkZWZhdWx0UXVpcmtzU3R5
bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgcXVpcmtCdWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0V2l0
aFN0YXRpY0V2YWx1YXRpb24oKnF1aXJrc1N0eWxlU2hlZXQpOwogCiAgICAgKytkZWZhdWx0U3R5
bGVWZXJzaW9uOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440042</attachid>
            <date>2021-10-04 02:10:31 -0700</date>
            <delta_ts>2021-10-04 06:19:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004121030.patch</filename>
            <type>text/plain</type>
            <size>36948</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uOGQyMTZmYjQ5NmQyZWI5OWViOTY3NTU1YmQxNzg2
OTExN2VmMThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFr
ZXMgY2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13
YXkgZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVy
LgorCisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6
c2hyaW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5h
bWljUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2Fk
ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6cG9wQ2Fz
Y2FkZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6dXBk
YXRlQ2FzY2FkZUxheWVyT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRC
dWlsZGVyOjphZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlD
b2xsZWN0b3I6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6
Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OmRpZE11dGF0ZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6cHVzaEFuZEV2YWx1YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOiBEZWxldGVkLgorCisgICAgICAgIE1lZGlhUXVl
cnlDb2xsZWN0b3IgaXMgbm93IGEgcHJpdmF0ZSBpbm5lciBzdHJ1Y3Qgb2YgUnVsZVNldEJ1aWxk
ZXIuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5oOgorICAgICAgICAqIHN0eWxl
L1N0eWxlSW52YWxpZGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1fZGlydGll
c0FsbFN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZUlmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29w
ZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0
cyk6CisgICAgICAgICogc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlVzZXJBZ2VudFN0eWxlOjphZGRUb0RlZmF1bHRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmluaXREZWZhdWx0U3R5bGVTaGVldCk6CisK
IDIwMjEtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgUnVsZVNldCBidWlsZGVyIHRvIGEgZmlsZSBvZiBpdHMgb3duCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVTZXQuY3BwCmluZGV4IDY4ZWRjZjFlM2U1NjJhNjVhZTYwZWIyNzI2MWEzYjlkMzZmNjA5Mjcu
LmZhNWFhMDdhNjI4NTc5NzdhOWFjMDVkYzk3MzljM2QzYzNhZjE4MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIgotI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZp
bHRlci5oIgpAQCAtODQsOSArODMsMTUgQEAgc3RhdGljIGJvb2wgaXNIb3N0U2VsZWN0b3JNYXRj
aGluZ0luU2hhZG93VHJlZShjb25zdCBDU1NTZWxlY3RvciYgc3RhcnRTZWxlY3RvcikKICAgICBy
ZXR1cm4gbGVmdG1vc3RTZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MgJiYgbGVmdG1vc3RTZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzSG9zdDsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKGNvbnN0IFN0eWxl
UnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0
SW5kZXgsIHVuc2lnbmVkIGNhc2NhZGVMYXllcklkZW50aWZpZXIsIFJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yKiBtZWRpYVF1ZXJ5Q29sbGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKGNv
bnN0IFN0eWxlUnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2Vs
ZWN0b3JMaXN0SW5kZXgpCiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJ
bmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KyspOworICAgIFJ1bGVEYXRhIHJ1
bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIHNlbGVjdG9yTGlzdEluZGV4LCBtX3J1bGVDb3Vu
dCk7CisgICAgYWRkUnVsZShXVEZNb3ZlKHJ1bGVEYXRhKSwgMCk7Cit9CisKK3ZvaWQgUnVsZVNl
dDo6YWRkUnVsZShSdWxlRGF0YSYmIHJ1bGVEYXRhLCBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGNh
c2NhZGVMYXllcklkZW50aWZpZXIpCit7CisgICAgKyttX3J1bGVDb3VudDsKIAogICAgIGlmIChj
YXNjYWRlTGF5ZXJJZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8gb2xkU2l6ZSA9IG1fY2FzY2Fk
ZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5zaXplKCk7CkBAIC05Nyw5ICsxMDIsNiBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZQogCiAgICAgbV9mZWF0dXJlcy5jb2xsZWN0RmVhdHVy
ZXMocnVsZURhdGEpOwogCi0gICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IpCi0gICAgICAgIG1l
ZGlhUXVlcnlDb2xsZWN0b3ItPmFkZFJ1bGVJZk5lZWRlZChydWxlRGF0YSk7Ci0KICAgICB1bnNp
Z25lZCBjbGFzc0J1Y2tldFNpemUgPSAwOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBpZFNlbGVj
dG9yID0gbnVsbHB0cjsKICAgICBjb25zdCBDU1NTZWxlY3RvciogdGFnU2VsZWN0b3IgPSBudWxs
cHRyOwpAQCAtMjcyLDQ1ICsyNzQsNiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxl
UnVsZVBhZ2UmIHJ1bGUpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKCZydWxlKTsKIH0KIAotdm9p
ZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNo
ZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IpCi17Ci0gICAgUnVsZVNl
dEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2
YWx1YXRvciB9IH07Ci0gICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0KLSAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwot
fQotCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnksIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvciwgU3R5bGU6OlJlc29sdmVyJiByZXNvbHZlcikKLXsK
LSAgICBhdXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7Ci0gICAg
ICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIgeyAqdGhpcywgUnVsZVNldE1lZGlhUXVlcnlDb2xs
ZWN0b3IgeyBldmFsdWF0b3IsIHRydWUgfSwgbnVsbHB0ciwgUnVsZVNldEJ1aWxkZXI6Ok1vZGU6
OlJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0gICAgICAgIGlmIChidWlsZGVyLm1lZGlhUXVlcnlD
b2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQotICAgICAgICAgICAgYnVpbGRl
ci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNv
bGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7Ci0gICAgICAgIHJldHVybiAhYnVpbGRlci5tZWRpYVF1
ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnk7Ci0g
ICAgfSgpOwotCi0gICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVk
aWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNv
bHV0aW9uIH0sICZyZXNvbHZlciB9OwotCi0gICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxl
Y3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVyeSkpCi0gICAgICAgIGJ1aWxkZXIuYWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQpOwotICAgIGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Ao
c2hlZXRRdWVyeSk7Ci0KLSAgICBtX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0g
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
aWVzOwotCi0gICAgaWYgKCFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1pY01lZGlh
UXVlcnlSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBmaXJzdE5ld0luZGV4ID0gbV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKLSAgICAgICAgbV9keW5hbWljTWVkaWFRdWVy
eVJ1bGVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzKSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBpbml0aWFsIHZh
bHVlcy4KLSAgICAgICAgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGV2YWx1YXRvciwg
Zmlyc3ROZXdJbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKLSAgICAgICAgc2hyaW5rVG9GaXQoKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+CiB2b2lkIFJ1bGVTZXQ6OnRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYgZnVuY3Rpb24p
CiB7CkBAIC00MTQsMTQgKzM3Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKICAgICAgICAgdmVjdG9yLT5zaHJp
bmtUb0ZpdCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rRHluYW1pY1J1bGVzKFZl
Y3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiYgZHluYW1pY1J1bGVzKQotewot
ICAgIGZvciAoYXV0byYgcnVsZSA6IGR5bmFtaWNSdWxlcykKLSAgICAgICAgcnVsZS5zaHJpbmtU
b0ZpdCgpOwotCi0gICAgZHluYW1pY1J1bGVzLnNocmlua1RvRml0KCk7Ci19Ci0KIHZvaWQgUnVs
ZVNldDo6c2hyaW5rVG9GaXQoKQogewogICAgIHNocmlua01hcFZlY3RvcnNUb0ZpdChtX2lkUnVs
ZXMpOwpAQCAtNDQzLDcgKzM5OCw5IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogICAg
IG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7CiAgICAgbV9mZWF0dXJlcy5zaHJpbmtUb0ZpdCgp
OwogCi0gICAgc2hyaW5rRHluYW1pY1J1bGVzKG1fZHluYW1pY01lZGlhUXVlcnlSdWxlcyk7Cisg
ICAgZm9yIChhdXRvJiBydWxlIDogbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzKQorICAgICAgICBy
dWxlLnNocmlua1RvRml0KCk7CisgICAgbV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNocmlua1Rv
Rml0KCk7CiAKICAgICBtX2Nhc2NhZGVMYXllcnMuc2hyaW5rVG9GaXQoKTsKICAgICBtX2Nhc2Nh
ZGVMYXllcklkZW50aWZpZXJGb3JSdWxlUG9zaXRpb24uc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXQuaAppbmRleCA4YTcxM2U2NWE5OGY4ZDRiY2Q3ZWQyNjM0MjMxMTFlZDgyNjNjNzhh
Li41ODVmMDRiYWRjZGExZDdiZTNmNjMwZmVlYWQ4OGZiMzc0M2NmYjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZVNldC5oCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiAKIGNsYXNzIFJl
c29sdmVyOwogY2xhc3MgUnVsZVNldDsKLXN0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjsKIAogdXNpbmcgSW52YWxpZGF0aW9uUnVsZVNldFZlY3RvciA9IFZlY3RvcjxSZWZQdHI8Y29u
c3QgUnVsZVNldD4sIDE+OwogCkBAIC03MSwyNSArNzAsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBWZWN0b3I8UnVsZURhdGEsIDE+IFJ1bGVEYXRhVmVjdG9yOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9tU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8UnVsZURhdGFWZWN0b3I+PiBBdG9tUnVsZU1h
cDsKIAotICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKLSAgICAgICAgVmVjdG9y
PFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Ci0gICAgICAgIFZlY3Rv
cjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0
b3IgcnVsZUZlYXR1cmVzOwotICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJlc2V0IHsgZmFsc2Ug
fTsKLSAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07Ci0KLSAgICAgICAgdm9pZCBzaHJpbmtU
b0ZpdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYpOwotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVy
eSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlOjpSZXNvbHZlciYpOwotCi0gICAg
dm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4LCB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlciA9IDAs
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKiA9IG51bGxwdHIpOworICAgIHZvaWQgYWRkUnVs
ZShjb25zdCBTdHlsZVJ1bGUmLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxl
Y3Rvckxpc3RJbmRleCk7CiAgICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJik7CiAK
ICAgICB2b2lkIGFkZFRvUnVsZVNldChjb25zdCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFw
JiwgY29uc3QgUnVsZURhdGEmKTsKQEAgLTEyNiwxMiArMTA3LDE0IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjYXNjYWRlTGF5ZXJPcmRlckZvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIGZyaWVuZCBzdHJ1Y3QgUnVsZVNldEJ1aWxkZXI7CisgICAgZnJpZW5kIGNs
YXNzIFJ1bGVTZXRCdWlsZGVyOwogCiAgICAgUnVsZVNldCgpOwogCiAgICAgdXNpbmcgQ2FzY2Fk
ZUxheWVySWRlbnRpZmllciA9IHVuc2lnbmVkOwogCisgICAgdm9pZCBhZGRSdWxlKFJ1bGVEYXRh
JiYsIENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCiAgICAgc3RydWN0IFJlc29sdmVyTXV0YXRp
bmdSdWxlIHsKICAgICAgICAgUmVmPFN0eWxlUnVsZUJhc2U+IHJ1bGU7CiAgICAgICAgIENhc2Nh
ZGVMYXllcklkZW50aWZpZXIgbGF5ZXJJZGVudGlmaWVyOwpAQCAtMTU1LDYgKzEzOCwyMSBAQCBw
cml2YXRlOgogICAgIGNvbnN0IENhc2NhZGVMYXllciYgY2FzY2FkZUxheWVyRm9ySWRlbnRpZmll
cihDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2Fz
Y2FkZUxheWVyc1tpZGVudGlmaWVyIC0gMV07IH0KICAgICB1bnNpZ25lZCBjYXNjYWRlTGF5ZXJP
cmRlckZvcklkZW50aWZpZXIoQ2FzY2FkZUxheWVySWRlbnRpZmllcikgY29uc3Q7CiAKKyAgICBz
dHJ1Y3QgRHluYW1pY01lZGlhUXVlcnlSdWxlcyB7CisgICAgICAgIFZlY3RvcjxSZWY8Y29uc3Qg
TWVkaWFRdWVyeVNldD4+IG1lZGlhUXVlcnlTZXRzOworICAgICAgICBWZWN0b3I8c2l6ZV90PiBh
ZmZlY3RlZFJ1bGVQb3NpdGlvbnM7CisgICAgICAgIFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0
dXJlczsKKyAgICAgICAgYm9vbCByZXF1aXJlc0Z1bGxSZXNldCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgcmVzdWx0IHsgdHJ1ZSB9OworCisgICAgICAgIHZvaWQgc2hyaW5rVG9GaXQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtZWRpYVF1ZXJ5U2V0cy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICAgICAgYWZmZWN0ZWRSdWxlUG9zaXRpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBy
dWxlRmVhdHVyZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICBBdG9t
UnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwogICAgIEF0
b21SdWxlTWFwIG1fdGFnTG9jYWxOYW1lUnVsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKaW5kZXggYTAxZmUxOTJkOGIzNDg0YjY3YTA4NWI3M2I5MTM4ODZjMGE0OWU3
OC4uZWEwZWRhMDM3NTgwNDdlNTA0OGZiZmRkMmJmMTkwODEwOTkwNzg0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzIsMzYgKzMyLDg2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCitSdWxlU2V0QnVpbGRlcjo6UnVsZVNl
dEJ1aWxkZXIoUnVsZVNldCYgcnVsZVNldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZh
bHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCisgICAgOiBtX3J1bGVTZXQocnVsZVNldCkKKyAg
ICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciB9KQorICAgICwgbV9yZXNvbHZl
cihyZXNvbHZlcikKK3sKK30KKwogUnVsZVNldEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcigpCiB7
Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pCisgICAgaWYgKG1f
bW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKICAgICBhZGRNdXRhdGluZ1J1bGVzVG9SZXNv
bHZlcigpOwogfQogCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVldFdpdGhT
dGF0aWNFdmFsdWF0aW9uKGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQpCit7CisgICAg
YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQpOworCisgICAgaWYgKG1fcnVsZVNldC0+bV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkKQorICAgICAgICBtX3J1bGVTZXQtPnNocmlua1RvRml0KCk7Cit9CisK
K3ZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRD
b250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnkpCit7CisgICAg
YXV0byBjYW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gPSBbJl0geworICAgICAgICBS
dWxlU2V0QnVpbGRlciBtdXRhdGlvblNjYW5uZXIobV9ydWxlU2V0LmdldCgpLCBtX21lZGlhUXVl
cnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgbXV0YXRpb25TY2FubmVyLm1fbW9kZSA9
IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9t
ZWRpYVF1ZXJ5Q29sbGVjdG9yLmNvbGxlY3REeW5hbWljID0gdHJ1ZTsKKworICAgICAgICBpZiAo
bXV0YXRpb25TY2FubmVyLm1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hl
ZXRRdWVyeSkpCisgICAgICAgICAgICBtdXRhdGlvblNjYW5uZXIuYWRkUnVsZXNGcm9tU2hlZXQo
c2hlZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBv
cChzaGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9uU2Nhbm5lci5tX21lZGlh
UXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeTsK
KyAgICB9OworCisgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmNvbGxlY3REeW5hbWljID0gY2Fu
VXNlRHluYW1pY01lZGlhUXVlcnlSZXNvbHV0aW9uKCk7CisKKyAgICBpZiAobV9tZWRpYVF1ZXJ5
Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkKKyAgICAgICAgYWRkUnVsZXNG
cm9tU2hlZXQoc2hlZXQpOworICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Aoc2hlZXRRdWVy
eSk7CisKKyAgICBtX3J1bGVTZXQtPm1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMg
PSBtX21lZGlhUXVlcnlDb2xsZWN0b3IuaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7
CisKKyAgICBpZiAoIW1fbWVkaWFRdWVyeUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVz
LmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGZpcnN0TmV3SW5kZXggPSBtX3J1bGVTZXQtPm1f
ZHluYW1pY01lZGlhUXVlcnlSdWxlcy5zaXplKCk7CisgICAgICAgIG1fcnVsZVNldC0+bV9keW5h
bWljTWVkaWFRdWVyeVJ1bGVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKG1fbWVkaWFRdWVyeUNvbGxl
Y3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzKSk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBpbml0
aWFsIHZhbHVlcy4KKyAgICAgICAgbV9ydWxlU2V0LT5ldmFsdWF0ZUR5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMobV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmV2YWx1YXRvciwgZmlyc3ROZXdJbmRleCk7Cisg
ICAgfQorCisgICAgaWYgKG1fcnVsZVNldC0+bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQorICAg
ICAgICBtX3J1bGVTZXQtPnNocmlua1RvRml0KCk7Cit9CisKKwogdm9pZCBSdWxlU2V0QnVpbGRl
cjo6YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVs
ZXMpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsKLSAgICAgICAgaWYgKG1vZGUg
PT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gJiYgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRN
dXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICBpZiAobV9tb2Rl
ID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuICYmIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5k
aWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5KQogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZT4oKnJ1bGUpKSB7Ci0gICAgICAgICAgICBp
ZiAobW9kZSA9PSBNb2RlOjpOb3JtYWwpCisgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6
Ok5vcm1hbCkKICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxl
PigqcnVsZSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVTZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0
PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6
Ok5vcm1hbCkKKyAgICAgICAgICAgICAgICBtX3J1bGVTZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0
PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpydWxlKSkgewogICAgICAgICAgICAg
YXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKTsKLSAgICAg
ICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZSgmbWVkaWFSdWxl
Lm1lZGlhUXVlcmllcygpKSkKKyAgICAgICAgICAgIGlmIChtX21lZGlhUXVlcnlDb2xsZWN0b3Iu
cHVzaEFuZEV2YWx1YXRlKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKQogICAgICAgICAgICAg
ICAgIGFkZENoaWxkUnVsZXMobWVkaWFSdWxlLmNoaWxkUnVsZXMoKSk7Ci0gICAgICAgICAgICBt
ZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpKTsKKyAgICAg
ICAgICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMo
KSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlTGF5ZXI+KCpydWxlKSkgewpAQCAtNzgsMTIgKzEyOCwxMiBAQCB2b2lkIFJ1bGVTZXRC
dWlsZGVyOjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+
JiBydWxlcykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
czxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUpIHx8IGlzPFN0eWxlUnVsZUZvbnRQYWxldHRlVmFs
dWVzPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpIHsKLSAgICAgICAg
ICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKSB7Ci0gICAgICAgICAg
ICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikgeworICAgICAgICAg
ICAgICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc29s
dmVyKQotICAgICAgICAgICAgICAgIGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcy5hcHBl
bmQoeyAqcnVsZSwgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7CisgICAgICAgICAg
ICBpZiAobV9yZXNvbHZlcikKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RlZFJlc29sdmVyTXV0
YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmll
ciB9KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxT
dHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigq
cnVsZSkuY29uZGl0aW9uSXNTdXBwb3J0ZWQoKSkgewpAQCAtMTAyLDcgKzE1Miw3IEBAIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50
cyYgc2hlZXQpCiAgICAgICAgIGlmICghcnVsZS0+c3R5bGVTaGVldCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1
YXRlKHJ1bGUtPm1lZGlhUXVlcmllcygpKSkgeworICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5Q29s
bGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKICAgICAgICAg
ICAgIGF1dG8mIGNhc2NhZGVMYXllck5hbWUgPSBydWxlLT5jYXNjYWRlTGF5ZXJOYW1lKCk7CiAg
ICAgICAgICAgICBpZiAoY2FzY2FkZUxheWVyTmFtZSkKICAgICAgICAgICAgICAgICBwdXNoQ2Fz
Y2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKQEAgLTExMiw3ICsxNjIsNyBAQCB2b2lkIFJ1
bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
IHNoZWV0KQogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCiAgICAgICAgICAgICAg
ICAgcG9wQ2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKICAgICAgICAgfQotICAgICAg
ICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAg
IG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIH0K
IAogICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKQEAgLTEyNCw4ICsxNzQs
MTEgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYg
cnVsZSkKICAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxl
Y3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9
IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0g
ICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0
SW5kZXgrKywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVj
dG9yKTsKKyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAh
PSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVj
dG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVs
ZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50
KCkpOworICAgICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVE
YXRhKTsKKyAgICAgICAgbV9ydWxlU2V0LT5hZGRSdWxlKFdURk1vdmUocnVsZURhdGEpLCBtX2N1
cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyKTsKKyAgICB9CiB9CiAKIHZvaWQgUnVsZVNldEJ1
aWxkZXI6OnJlZ2lzdGVyTGF5ZXJzKGNvbnN0IFZlY3RvcjxDYXNjYWRlTGF5ZXJOYW1lPiYgbmFt
ZXMpCkBAIC0xMzgsMTQgKzE5MSwxNCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3Rlckxh
eWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQogCiB2b2lkIFJ1bGVT
ZXRCdWlsZGVyOjpwdXNoQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmIG5hbWUp
CiB7Ci0gICAgaWYgKG1vZGUgIT0gTW9kZTo6Tm9ybWFsKQorICAgIGlmIChtX21vZGUgIT0gTW9k
ZTo6Tm9ybWFsKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoY2FzY2FkZUxheWVySWRlbnRp
Zmllck1hcC5pc0VtcHR5KCkgJiYgIXJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5pc0VtcHR5KCkp
IHsKKyAgICBpZiAobV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSAmJiAhbV9y
dWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZvciBpbmNy
ZW1lbnRhbCBidWlsZCwgcmVjb25zdHJ1Y3QgdGhlIG5hbWUtPmlkZW50aWZpZXIgbWFwLgogICAg
ICAgICBSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAwOwotICAg
ICAgICBmb3IgKGF1dG8mIGxheWVyIDogcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQotICAgICAg
ICAgICAgY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5hZGQobGF5ZXIucmVzb2x2ZWROYW1lLCAr
K2lkZW50aWZpZXIpOworICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9ydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMpCisgICAgICAgICAgICBtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRk
KGxheWVyLnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKICAgICB9CiAKICAgICBhdXRvIG5h
bWVSZXNvbHZpbmdBbm9ueW1vdXMgPSBbJl0gewpAQCAtMTU5LDI5ICsyMTIsMjkgQEAgdm9pZCBS
dWxlU2V0QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBu
YW1lKQogCiAgICAgLy8gRm9yIGhpZXJhcmNoaWNhbCBuYW1lcyB3ZSByZWdpc3RlciB0aGUgY29u
dGFpbmluZyBsYXllcnMgaW5kaXZpZHVhbGx5IGZpcnN0LgogICAgIGZvciAoYXV0byYgbmFtZVNl
Z21lbnQgOiBuYW1lUmVzb2x2aW5nQW5vbnltb3VzKCkpIHsKLSAgICAgICAgcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lLmFwcGVuZChuYW1lU2VnbWVudCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRl
TGF5ZXJJZGVudGlmaWVyID0gY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5lbnN1cmUocmVzb2x2
ZWRDYXNjYWRlTGF5ZXJOYW1lLCBbJl0geworICAgICAgICBtX3Jlc29sdmVkQ2FzY2FkZUxheWVy
TmFtZS5hcHBlbmQobmFtZVNlZ21lbnQpOworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmVuc3VyZShtX3Jlc29sdmVk
Q2FzY2FkZUxheWVyTmFtZSwgWyZdIHsKICAgICAgICAgICAgIC8vIFByZXZpb3VzbHkgdW5zZWVu
IGxheWVyLgotICAgICAgICAgICAgcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IHJl
c29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7
Ci0gICAgICAgICAgICByZXR1cm4gcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKKyAg
ICAgICAgICAgIG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IG1fcmVzb2x2ZWRD
YXNjYWRlTGF5ZXJOYW1lLCBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIH0pOworICAg
ICAgICAgICAgcmV0dXJuIG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6
cG9wQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmIG5hbWUpCiB7Ci0gICAgaWYg
KG1vZGUgIT0gTW9kZTo6Tm9ybWFsKQorICAgIGlmIChtX21vZGUgIT0gTW9kZTo6Tm9ybWFsKQog
ICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8gc2l6ZSA9IG5hbWUuaXNFbXB0eSgpID8g
MSA6IG5hbWUuc2l6ZSgpOyBzaXplLS07KSB7Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVy
TmFtZS5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVy
ID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihjdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllcikucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAgbV9yZXNvbHZlZENhc2NhZGVM
YXllck5hbWUucmVtb3ZlTGFzdCgpOworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKG1fY3VycmVudENh
c2NhZGVMYXllcklkZW50aWZpZXIpLnBhcmVudElkZW50aWZpZXI7CiAgICAgfQogfQogCiB2b2lk
IFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigpCiB7Ci0gICAgaWYgKGNh
c2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nhc2NhZGVMYXll
cklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNv
bXBhcmUgPSBbJl0oYXV0byBhLCBhdXRvIGIpIHsKQEAgLTE4OSw4ICsyNDIsOCBAQCB2b2lkIFJ1
bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigpCiAgICAgICAgICAgICAvLyBJ
ZGVudGlmaWVycyBhcmUgaW4gcGFyc2Ugb3JkZXIgd2hpY2ggYWxtb3N0IGNvcnJlc3BvbmRzIHRv
IHRoZSBsYXllciBwcmlvcml0eSBvcmRlci4KICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2Vw
dGlvbiBpcyB3aGVuIGEgc3VibGF5ZXIgZ2V0cyBhZGRlZCB0byBhIGxheWVyIGFmdGVyIGFkZGlu
ZyBvdGhlciBub24tc3VibGF5ZXJzLgogICAgICAgICAgICAgLy8gVG8gcmVzb2x2ZSB0aGlzIHdl
IG5lZWQgbG9vayBmb3IgYSBzaGFyZWQgYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBhdXRv
IGFQYXJlbnQgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVudElk
ZW50aWZpZXI7Ci0gICAgICAgICAgICBhdXRvIGJQYXJlbnQgPSBydWxlU2V0LT5jYXNjYWRlTGF5
ZXJGb3JJZGVudGlmaWVyKGIpLnBhcmVudElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGFQ
YXJlbnQgPSBtX3J1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRl
bnRpZmllcjsKKyAgICAgICAgICAgIGF1dG8gYlBhcmVudCA9IG1fcnVsZVNldC0+Y2FzY2FkZUxh
eWVyRm9ySWRlbnRpZmllcihiKS5wYXJlbnRJZGVudGlmaWVyOwogICAgICAgICAgICAgaWYgKGFQ
YXJlbnQgPT0gYlBhcmVudCB8fCBhUGFyZW50ID09IGIgfHwgYlBhcmVudCA9PSBhKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGFQYXJlbnQgPiBiUGFyZW50KQpAQCAt
MjAyLDcgKzI1NSw3IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9y
ZGVyKCkKICAgICB9OwogCiAgICAgVmVjdG9yPFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZp
ZXI+IG9yZGVyVmVjdG9yOwotICAgIGF1dG8gbGF5ZXJDb3VudCA9IHJ1bGVTZXQtPm1fY2FzY2Fk
ZUxheWVycy5zaXplKCk7CisgICAgYXV0byBsYXllckNvdW50ID0gbV9ydWxlU2V0LT5tX2Nhc2Nh
ZGVMYXllcnMuc2l6ZSgpOwogICAgIG9yZGVyVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bGF5ZXJDb3VudCk7CiAgICAgZm9yIChSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDw9IGxheWVyQ291bnQ7ICsraWRlbnRpZmllcikKICAg
ICAgICAgb3JkZXJWZWN0b3IudW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOwpAQCAtMjEwLDUy
ICsyNjMsNTIgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIo
KQogICAgIHN0ZDo6c29ydChvcmRlclZlY3Rvci5iZWdpbigpLCBvcmRlclZlY3Rvci5lbmQoKSwg
Y29tcGFyZSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JkZXJWZWN0b3Iuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIob3Jk
ZXJWZWN0b3JbaV0pLm9yZGVyID0gaSArIDE7CisgICAgICAgIG1fcnVsZVNldC0+Y2FzY2FkZUxh
eWVyRm9ySWRlbnRpZmllcihvcmRlclZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKIH0KIAogdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6YWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKQogewotICAgIGlm
ICghcmVzb2x2ZXIpCisgICAgaWYgKCFtX3Jlc29sdmVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIGNvbXBhcmVMYXllcnMgPSBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikg
ewotICAgICAgICBhdXRvIGFPcmRlciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRl
bnRpZmllcihhLmxheWVySWRlbnRpZmllcik7Ci0gICAgICAgIGF1dG8gYk9yZGVyID0gcnVsZVNl
dC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsKKyAg
ICAgICAgYXV0byBhT3JkZXIgPSBtX3J1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRp
ZmllcihhLmxheWVySWRlbnRpZmllcik7CisgICAgICAgIGF1dG8gYk9yZGVyID0gbV9ydWxlU2V0
LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklkZW50aWZpZXIoYi5sYXllcklkZW50aWZpZXIpOwogICAg
ICAgICByZXR1cm4gYU9yZGVyIDwgYk9yZGVyOwogICAgIH07CiAKICAgICAvLyBUaGUgb3JkZXIg
bWF5IGNoYW5nZSBzbyB3ZSBuZWVkIHRvIHJlcHJvY2VzcyByZXNvbHZlciBtdXRhdGluZyBydWxl
cyBmcm9tIGVhcmxpZXIgc3R5bGVzaGVldHMuCi0gICAgYXV0byBydWxlc1RvQWRkID0gc3RkOjpl
eGNoYW5nZShydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOwot
ICAgIHJ1bGVzVG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUoY29sbGVjdGVkUmVzb2x2ZXJNdXRh
dGluZ1J1bGVzKSk7CisgICAgYXV0byBydWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShtX3J1bGVT
ZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMsIHsgfSk7CisgICAgcnVsZXNUb0Fk
ZC5hcHBlbmRWZWN0b3IoV1RGTW92ZShtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcykp
OwogCi0gICAgaWYgKCFjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBp
ZiAoIW1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCiAgICAgICAgIHN0ZDo6
c3RhYmxlX3NvcnQocnVsZXNUb0FkZC5iZWdpbigpLCBydWxlc1RvQWRkLmVuZCgpLCBjb21wYXJl
TGF5ZXJzKTsKIAogICAgIGZvciAoYXV0byYgY29sbGVjdGVkUnVsZSA6IHJ1bGVzVG9BZGQpIHsK
ICAgICAgICAgaWYgKGNvbGxlY3RlZFJ1bGUubGF5ZXJJZGVudGlmaWVyKQotICAgICAgICAgICAg
cnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycy5hcHBlbmQoY29sbGVjdGVk
UnVsZSk7CisgICAgICAgICAgICBtX3J1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5M
YXllcnMuYXBwZW5kKGNvbGxlY3RlZFJ1bGUpOwogCiAgICAgICAgIGF1dG8mIHJ1bGUgPSBjb2xs
ZWN0ZWRSdWxlLnJ1bGU7CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZSkp
IHsKLSAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZv
bnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSksIGZhbHNl
KTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0Nh
Y2hlKCk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSks
IGZhbHNlKTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpczxTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcz4ocnVsZSkpIHsKLSAgICAgICAgICAg
IHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRQYWxldHRlVmFsdWVz
UnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcz4ocnVsZS5nZXQoKSkpOwot
ICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUo
KTsKKyAgICAgICAgICAgIG1fcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRk
Rm9udFBhbGV0dGVWYWx1ZXNSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVz
PihydWxlLmdldCgpKSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hl
ZERlY2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlKSkgewotICAgICAgICAgICAg
cmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihy
dWxlLmdldCgpKSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRv
d25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZS5nZXQoKSkpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojp+UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IoKSA9IGRlZmF1bHQ7CitSdWxlU2V0QnVpbGRl
cjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6fk1lZGlhUXVlcnlDb2xsZWN0b3IoKSA9IGRlZmF1bHQ7
CiAKLWJvb2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25z
dCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCitib29sIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29s
bGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogewogICAg
IGlmICghc2V0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NSw3ICszMjgsNyBAQCBib29s
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFR
dWVyeVNldCogc2V0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUnVsZVNldE1lZGlh
UXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCit2b2lkIFJ1bGVT
ZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCog
c2V0KQogewogICAgIGlmICghc2V0IHx8IGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgpIHx8
IHNldCAhPSAmZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuc2V0LmdldCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yOTgsMTQgKzM1MSwxNCBAQCB2b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVj
dG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogICAgIGR5bmFtaWNDb250ZXh0U3Rh
Y2sucmVtb3ZlTGFzdCgpOwogfQogCi12b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpk
aWRNdXRhdGVSZXNvbHZlcigpCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVj
dG9yOjpkaWRNdXRhdGVSZXNvbHZlcigpCiB7CiAgICAgaWYgKGR5bmFtaWNDb250ZXh0U3RhY2su
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5E
eW5hbWljTWVkaWFRdWVyeSA9IHRydWU7CiB9CiAKLXZvaWQgUnVsZVNldE1lZGlhUXVlcnlDb2xs
ZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZChjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCit2b2lkIFJ1
bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3Qg
UnVsZURhdGEmIHJ1bGVEYXRhKQogewogICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZVNldEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgK
aW5kZXggZWY0YWRmMDgzMTU1ZDA2M2RmNDUyNWYxZDViMWQzYmQxNzJjNmJjMi4uY2E1MjQ1NWYz
ZTUyODdmNjI0YzBmZjgxYjJhODljOGVkZTE0YzdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
U2V0QnVpbGRlci5oCkBAIC0yNiw0NiArMjYsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBTdHlsZSB7CiAKLXN0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7Ci0g
ICAgflJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CitjbGFzcyBSdWxlU2V0QnVpbGRlciB7
CitwdWJsaWM6CisgICAgUnVsZVNldEJ1aWxkZXIoUnVsZVNldCYsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImLCBSZXNvbHZlciogPSBudWxscHRyKTsKIAotICAgIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIGV2YWx1YXRvcjsKLSAgICBjb25zdCBib29sIGNvbGxlY3REeW5hbWljIHsgZmFs
c2UgfTsKLQotICAgIHN0cnVjdCBEeW5hbWljQ29udGV4dCB7Ci0gICAgICAgIFJlZjxjb25zdCBN
ZWRpYVF1ZXJ5U2V0PiBzZXQ7Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBv
c2l0aW9ucyB7IH07Ci0gICAgICAgIFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0dXJlcyB7IH07
Ci0gICAgfTsKLSAgICBWZWN0b3I8RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sg
eyB9OwotCi0gICAgVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IGR5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMgeyB9OwotICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5E
eW5hbWljTWVkaWFRdWVyeSB7IGZhbHNlIH07Ci0gICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllcyB7IGZhbHNlIH07Ci0KLSAgICBib29sIHB1c2hBbmRFdmFsdWF0ZShjb25z
dCBNZWRpYVF1ZXJ5U2V0Kik7Ci0gICAgdm9pZCBwb3AoY29uc3QgTWVkaWFRdWVyeVNldCopOwot
ICAgIHZvaWQgZGlkTXV0YXRlUmVzb2x2ZXIoKTsKLSAgICB2b2lkIGFkZFJ1bGVJZk5lZWRlZChj
b25zdCBSdWxlRGF0YSYpOwotfTsKLQotc3RydWN0IFJ1bGVTZXRCdWlsZGVyIHsKLSAgICBlbnVt
IGNsYXNzIE1vZGUgeyBOb3JtYWwsIFJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0KLSAgICBSZWY8
UnVsZVNldD4gcnVsZVNldDsKLSAgICBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciBtZWRpYVF1
ZXJ5Q29sbGVjdG9yOwotICAgIFJlc29sdmVyKiByZXNvbHZlciB7IG51bGxwdHIgfTsKLSAgICBN
b2RlIG1vZGUgeyBNb2RlOjpOb3JtYWwgfTsKLSAgICBDYXNjYWRlTGF5ZXJOYW1lIHJlc29sdmVk
Q2FzY2FkZUxheWVyTmFtZSB7IH07Ci0gICAgSGFzaE1hcDxDYXNjYWRlTGF5ZXJOYW1lLCBSdWxl
U2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyPiBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwIHsg
fTsKLSAgICBSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyIHsgMCB9OwotICAgIFZlY3RvcjxSdWxlU2V0OjpSZXNvbHZlck11dGF0aW5n
UnVsZT4gY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzIHsgfTsKLQotICAgIHZvaWQgYWRk
UnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJik7CisgICAgdm9pZCBhZGRS
dWxlc0Zyb21TaGVldFdpdGhTdGF0aWNFdmFsdWF0aW9uKGNvbnN0IFN0eWxlU2hlZXRDb250ZW50
cyYpOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRz
JiwgY29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVyeSk7CiAKICAgICB+UnVsZVNldEJ1aWxk
ZXIoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxl
U2hlZXRDb250ZW50cyYpOwogICAgIHZvaWQgYWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+PiYpOwogICAgIHZvaWQgYWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxl
UnVsZSYpOwogCkBAIC03NCw2ICs0NSw0MCBAQCBwcml2YXRlOgogICAgIHZvaWQgcG9wQ2FzY2Fk
ZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmKTsKICAgICB2b2lkIHVwZGF0ZUNhc2NhZGVM
YXllck9yZGVyKCk7CiAgICAgdm9pZCBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpOworCisg
ICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2NhbiB9OworCisg
ICAgc3RydWN0IE1lZGlhUXVlcnlDb2xsZWN0b3IgeworICAgICAgICB+TWVkaWFRdWVyeUNvbGxl
Y3RvcigpOworCisgICAgICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcjsK
KyAgICAgICAgYm9vbCBjb2xsZWN0RHluYW1pYyB7IGZhbHNlIH07CisKKyAgICAgICAgc3RydWN0
IER5bmFtaWNDb250ZXh0IHsKKyAgICAgICAgICAgIFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0PiBz
ZXQ7CisgICAgICAgICAgICBWZWN0b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMgeyB9
OworICAgICAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzIHsgfTsKKyAgICAg
ICAgfTsKKyAgICAgICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNr
IHsgfTsKKworICAgICAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcz4g
ZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07CisgICAgICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2
ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgeyBmYWxzZSB9OworCisgICAgICAgIGJvb2wgcHVz
aEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKKyAgICAgICAgdm9pZCBwb3AoY29u
c3QgTWVkaWFRdWVyeVNldCopOworICAgICAgICB2b2lkIGRpZE11dGF0ZVJlc29sdmVyKCk7Cisg
ICAgICAgIHZvaWQgYWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7CisgICAgfTsKKwor
ICAgIFJlZjxSdWxlU2V0PiBtX3J1bGVTZXQ7CisgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBtX21l
ZGlhUXVlcnlDb2xsZWN0b3I7CisgICAgUmVzb2x2ZXIqIG1fcmVzb2x2ZXIgeyBudWxscHRyIH07
CisgICAgTW9kZSBtX21vZGUgeyBNb2RlOjpOb3JtYWwgfTsKKyAgICBDYXNjYWRlTGF5ZXJOYW1l
IG1fcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKKyAgICBIYXNoTWFwPENhc2NhZGVMYXll
ck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IG1fY2FzY2FkZUxheWVySWRl
bnRpZmllck1hcCB7IH07CisgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBtX2N1
cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIHsgMCB9OworICAgIFZlY3RvcjxSdWxlU2V0OjpS
ZXNvbHZlck11dGF0aW5nUnVsZT4gbV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlk
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAppbmRl
eCBmMzhiZDcxOTNiYjA1NGMwMmQ1NGY5NWI2NzE1YzU2MjUzN2MxNmM2Li5jZTYwZjAwN2YwMWRj
YzJlMmQzMTJkNDkyMzg5Y2ZmZDA2NjQwNDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUludmFsaWRhdG9yLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiSFRN
TFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiUnVsZVNldC5oIgorI2luY2x1ZGUgIlJ1bGVTZXRC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNlbGVjdG9yRmlsdGVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtOTIsOCArOTIs
MTAgQEAgSW52YWxpZGF0b3I6OkludmFsaWRhdG9yKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29u
dGVudHMqPiYgc2hlZXRzLCBjb25zdCBNZWRpYVEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9v
d25lZFJ1bGVTZXQtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKKworICAgIFJ1bGVTZXRCdWls
ZGVyIHJ1bGVTZXRCdWlsZGVyKCptX293bmVkUnVsZVNldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7
CiAgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykKLSAgICAgICAgbV9vd25lZFJ1bGVTZXQt
PmFkZFJ1bGVzRnJvbVNoZWV0KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAg
IHJ1bGVTZXRCdWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0V2l0aFN0YXRpY0V2YWx1YXRpb24oKnNo
ZWV0KTsKIAogICAgIG1fcnVsZUluZm9ybWF0aW9uID0gY29sbGVjdFJ1bGVJbmZvcm1hdGlvbigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKaW5kZXgg
MWFiNGE5OWQzZjcxM2E3MDFmMTExODZjNjIzZWU5YzFkY2E0YWU3NS4uM2Y1MTBhM2NiZTc1OTIy
Y2RhZTkwMDE3ODZlYWY4MDZiZmRmZjdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVNjb3BlUnVsZVNldHMuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKQEAgLTczLDkgKzc0LDExIEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6dXBkYXRlVXNl
ckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQoKSBjb25zdAogCiAgICAgLy8gTWVkaWEgcXVl
cmllcyBvbiB1c2VyIGFnZW50IHNoZWV0IG5lZWQgdG8gZXZhbHVhdGVkIGluIGRvY3VtZW50IGNv
bnRleHQuIFRoZXkgYmVoYXZlIGxpa2UgYXV0aG9yIHNoZWV0cyBpbiB0aGlzIHJlc3BlY3QuCiAg
ICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5
RXZhbHVhdG9yKCk7CisKICAgICBtX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSA9IFJ1bGVTZXQ6
OmNyZWF0ZSgpOwotICAgIAotICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBudWxscHRy
LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBtX3N0eWxlUmVzb2x2ZXIpOworCisgICAgUnVsZVNldEJ1
aWxkZXIgYnVpbGRlcigqbV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUsIG1lZGlhUXVlcnlFdmFs
dWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQo
KlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1ZXJ5U3R5bGVTaGVldCwgbnVsbHB0cik7CiB9CiAKIFJ1
bGVTZXQqIFNjb3BlUnVsZVNldHM6OnVzZXJTdHlsZSgpIGNvbnN0CkBAIC04OSwzMSArOTIsMzgg
QEAgdm9pZCBTY29wZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKCkKIHsKICAgICBhdXRv
JiBleHRlbnNpb25TdHlsZVNoZWV0cyA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmV4dGVu
c2lvblN0eWxlU2hlZXRzKCk7CiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5
bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7Ci0gICAgYXV0byB0ZW1wVXNlclN0eWxl
ID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hl
ZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBV
c2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG51
bGxwdHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CisKKyAgICBhdXRv
IHVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworCisgICAgaWYgKGF1dG8qIHBhZ2VVc2Vy
U2hlZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkpIHsKKyAgICAgICAg
UnVsZVNldEJ1aWxkZXIgYnVpbGRlcih1c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZt
X3N0eWxlUmVzb2x2ZXIpOworICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VV
c2VyU2hlZXQtPmNvbnRlbnRzKCksIG51bGxwdHIpOworICAgIH0KKwogI2lmIEVOQUJMRShBUFBf
Qk9VTkRfRE9NQUlOUykKICAgICBhdXRvKiBwYWdlID0gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50
KCkucGFnZSgpOwogICAgIGlmICghZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMoKS5pc0VtcHR5KCkgJiYgcGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIo
KS5jbGllbnQoKS5zaG91bGRFbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5UHJvdGVjdGlvbnMoKSkK
ICAgICAgICAgbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIklnbm9yaW5nIHVz
ZXIgc3R5bGUgc2hlZXQgZm9yIG5vbi1hcHAgYm91bmQgZG9tYWluLiJfcyk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVT
aGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVk
aWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVl
dHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdXNlclN0
eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIWV4dGVuc2lv
blN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkubm90aWZ5UGFnZU9mQXBw
Qm91bmRCZWhhdmlvcigpOwogICAgIH0KICNlbHNlCi0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJT
dHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygp
LCB0ZW1wVXNlclN0eWxlLmdldCgpLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICBjb2xsZWN0
UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNl
clN0eWxlU2hlZXRzKCksIHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAjZW5kaWYK
LSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRz
LmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlhUXVl
cnlFdmFsdWF0b3IpOwotICAgIGlmICh0ZW1wVXNlclN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwg
dGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgbV91c2VyU3R5
bGUgPSBXVEZNb3ZlKHRlbXBVc2VyU3R5bGUpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5
bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwg
dXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKworICAgIGlmICh1c2VyU3R5bGUtPnJ1
bGVDb3VudCgpID4gMCB8fCB1c2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCisgICAg
ICAgIG1fdXNlclN0eWxlID0gV1RGTW92ZSh1c2VyU3R5bGUpOwogfQogCi12b2lkIFNjb3BlUnVs
ZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtKQordm9pZCBTY29wZVJ1bGVTZXRzOjpjb2xsZWN0
UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4+JiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZXJTaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKHVzZXJTaGVldHNb
aV0tPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxlLmFk
ZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksIG51bGxwdHIsIG1lZGl1
bSwgbV9zdHlsZVJlc29sdmVyKTsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJTdHls
ZSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgZm9yIChhdXRv
JiBzaGVldCA6IHVzZXJTaGVldHMpIHsKKyAgICAgICAgQVNTRVJUKHNoZWV0LT5jb250ZW50cygp
LmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQo
c2hlZXQtPmNvbnRlbnRzKCksIG51bGxwdHIpOwogICAgIH0KIH0KIApAQCAtMTc1LDExICsxODUs
MTMgQEAgc3RkOjpvcHRpb25hbDxEeW5hbWljTWVkaWFRdWVyeUV2YWx1YXRpb25DaGFuZ2VzPiBT
Y29wZVJ1bGVTZXRzOjpldmFsdWF0ZUR5bmFtaWMKICAgICByZXR1cm4gZXZhbHVhdGlvbkNoYW5n
ZXM7CiB9CiAKLXZvaWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKiBtZWRpdW0sIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09N
V3JhcHBlcnMpCit2b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVy
eUV2YWx1YXRvciogbWVkaWFRdWVyeUV2YWx1YXRvciwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYg
aW5zcGVjdG9yQ1NTT01XcmFwcGVycykKIHsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKCpt
X2F1dGhvclN0eWxlLCAqbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisK
ICAgICBmb3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJU
KCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KGNzc1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCks
ICptZWRpdW0sIG1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9t
U2hlZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSk7CiAg
ICAgICAgIGluc3BlY3RvckNTU09NV3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVk
ZWQoY3NzU2hlZXQuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvVXNlckFnZW50U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvVXNlckFnZW50
U3R5bGUuY3BwCmluZGV4IGNlZDE4YTM5ZGFiZGUyMmIzNTA5ZDA4N2Y5MTViMzgyMzcwYWFlMGYu
LjNmMjc5YzMyOWM3MTZlNmVkYTdiMGVmMzEwODI0MzE0ZWQxOWJmNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1VzZXJBZ2VudFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNp
bmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgpAQCAtMTA3LDggKzEwNywxMSBAQCBzdGF0aWMg
U3R5bGVTaGVldENvbnRlbnRzKiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiAKIHZv
aWQgVXNlckFnZW50U3R5bGU6OmFkZFRvRGVmYXVsdFN0eWxlKFN0eWxlU2hlZXRDb250ZW50cyYg
c2hlZXQpCiB7Ci0gICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgc2Ny
ZWVuRXZhbCgpKTsKLSAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQsIHByaW50RXZhbCgpKTsKKyAgICBSdWxlU2V0QnVpbGRlciBzY3JlZW5CdWlsZGVyKCpkZWZh
dWx0U3R5bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgc2NyZWVuQnVpbGRlci5hZGRSdWxlc0Zyb21T
aGVldFdpdGhTdGF0aWNFdmFsdWF0aW9uKHNoZWV0KTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHBy
aW50QnVpbGRlcigqZGVmYXVsdFByaW50U3R5bGUsIHByaW50RXZhbCgpKTsKKyAgICBwcmludEJ1
aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXRXaXRoU3RhdGljRXZhbHVhdGlvbihzaGVldCk7CiAKICAg
ICAvLyBCdWlsZCBhIHN0eWxlc2hlZXQgY29uc2lzdGluZyBvZiBub24tdHJpdmlhbCBtZWRpYSBx
dWVyaWVzIHNlZW4gaW4gZGVmYXVsdCBzdHlsZS4KICAgICAvLyBSdWxlc2V0cyBmb3IgdGhlc2Ug
Y2FuJ3QgYmUgZ2xvYmFsIGFuZCBuZWVkIHRvIGJlIGJ1aWx0IGluIGRvY3VtZW50IGNvbnRleHQu
CkBAIC0xNDUsNyArMTQ4LDkgQEAgdm9pZCBVc2VyQWdlbnRTdHlsZTo6aW5pdERlZmF1bHRTdHls
ZVNoZWV0KCkKICAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KICAgICBTdHJpbmcgcXVpcmtzUnVs
ZXMgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocXVpcmtzVXNlckFn
ZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKSkgKyBSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkuZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAgICAgcXVpcmtz
U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7Ci0gICAgZGVmYXVsdFF1aXJr
c1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqcXVpcmtzU3R5bGVTaGVldCwgc2NyZWVuRXZhbCgp
KTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHF1aXJrQnVpbGRlcigqZGVmYXVsdFF1aXJrc1N0eWxl
LCBzY3JlZW5FdmFsKCkpOworICAgIHF1aXJrQnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldFdpdGhT
dGF0aWNFdmFsdWF0aW9uKCpxdWlya3NTdHlsZVNoZWV0KTsKIAogICAgICsrZGVmYXVsdFN0eWxl
VmVyc2lvbjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440055</attachid>
            <date>2021-10-04 06:19:56 -0700</date>
            <delta_ts>2021-10-04 06:53:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004161955.patch</filename>
            <type>text/plain</type>
            <size>37065</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uNzRiZjcyNGMwYTdhYjllMDA3NTNiZDU4N2M0NWFh
ZjgyMDRmZGM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFr
ZXMgY2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13
YXkgZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVy
LgorCisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6
c2hyaW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5h
bWljUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtU
b0ZpdCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNU
b1Jlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVk
aWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlk
TXV0YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVy
OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVj
dG9yOjpwb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRp
YVF1ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRl
ZCk6IERlbGV0ZWQuCisKKyAgICAgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBpcyBub3cgYSBwcml2
YXRlIGlubmVyIHN0cnVjdCBvZiBSdWxlU2V0QnVpbGRlci4KKworICAgICAgICAqIHN0eWxlL1J1
bGVTZXRCdWlsZGVyLmg6CisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bV9kaXJ0aWVzQWxsU3R5bGUpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2Nv
cGVSdWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2Vy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmNvbGxlY3RS
dWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3Bl
UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9Vc2Vy
QWdlbnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6
OmFkZFRvRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpVc2VyQWdlbnRT
dHlsZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KToKKwogMjAyMS0xMC0wMyAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBSdWxlU2V0IGJ1aWxkZXIgdG8g
YSBmaWxlIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVT
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggNjhlZGNmMWUz
ZTU2MmE2NWFlNjBlYjI3MjYxYTNiOWQzNmY2MDkyNy4uZmE1YWEwN2E2Mjg1Nzk3N2E5YWMwNWRj
OTczOWMzZDNjM2FmMTgyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUnVsZVNldEJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdG9y
Q2hlY2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCkBAIC04NCw5ICs4MywxNSBA
QCBzdGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0IENT
U1NlbGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9yLT5t
YXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9yLT5w
c2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQogCi12
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBzZWxl
Y3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2FkZUxh
eWVySWRlbnRpZmllciwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xs
ZWN0b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNp
Z25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCkKIHsKLSAgICBS
dWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwg
bV9ydWxlQ291bnQrKyk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRl
eCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KTsKKyAgICBhZGRSdWxlKFdURk1vdmUo
cnVsZURhdGEpLCAwKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFJ1bGVEYXRhJiYgcnVs
ZURhdGEsIENhc2NhZGVMYXllcklkZW50aWZpZXIgY2FzY2FkZUxheWVySWRlbnRpZmllcikKK3sK
KyAgICArK21fcnVsZUNvdW50OwogCiAgICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXIpIHsK
ICAgICAgICAgYXV0byBvbGRTaXplID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyRm9yUnVsZVBv
c2l0aW9uLnNpemUoKTsKQEAgLTk3LDkgKzEwMiw2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShj
b25zdCBTdHlsZVJ1bGUmIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNl
CiAKICAgICBtX2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKLSAgICBpZiAo
bWVkaWFRdWVyeUNvbGxlY3RvcikKLSAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVs
ZUlmTmVlZGVkKHJ1bGVEYXRhKTsKLQogICAgIHVuc2lnbmVkIGNsYXNzQnVja2V0U2l6ZSA9IDA7
CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0b3IgPSBudWxscHRyOwogICAgIGNvbnN0
IENTU1NlbGVjdG9yKiB0YWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC0yNzIsNDUgKzI3NCw2IEBA
IHZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYgcnVsZSkKICAgICBtX3Bh
Z2VSdWxlcy5hcHBlbmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNo
ZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIGV2YWx1YXRvcikKLXsKLSAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMs
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKLSAgICBidWlsZGVy
LmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsKLQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVu
YWJsZWQpCi0gICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFR
dWVyeVNldCogc2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9y
LCBTdHlsZTo6UmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGF1dG8gY2FuVXNlRHluYW1pY01l
ZGlhUXVlcnlSZXNvbHV0aW9uID0gWyZdIHsKLSAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRl
ciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9
LCBudWxscHRyLCBSdWxlU2V0QnVpbGRlcjo6TW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsK
LSAgICAgICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUo
c2hlZXRRdWVyeSkpCi0gICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0
KTsKLSAgICAgICAgYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsK
LSAgICAgICAgcmV0dXJuICFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVz
b2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeTsKLSAgICB9KCk7Ci0KLSAgICBSdWxlU2V0QnVp
bGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVh
dG9yLCBjYW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07Ci0K
LSAgICBpZiAoYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVl
dFF1ZXJ5KSkKLSAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAg
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLQotICAgIG1faGFz
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0
b3IuaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7Ci0KLSAgICBpZiAoIWJ1aWxkZXIu
bWVkaWFRdWVyeUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzLmlzRW1wdHkoKSkgewot
ICAgICAgICBhdXRvIGZpcnN0TmV3SW5kZXggPSBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2l6
ZSgpOwotICAgICAgICBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1v
dmUoYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsK
LQotICAgICAgICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBldmFsdWF0ZUR5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMoZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKLSAgICB9Ci0K
LSAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgp
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KIHZvaWQgUnVsZVNldDo6dHJhdmVy
c2VSdWxlRGF0YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKQEAgLTQxNCwxNCArMzc3LDYgQEAg
c3RhdGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVs
ZU1hcCYgbWFwKQogICAgICAgICB2ZWN0b3ItPnNocmlua1RvRml0KCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBzaHJpbmtEeW5hbWljUnVsZXMoVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXM+JiBkeW5hbWljUnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogZHlu
YW1pY1J1bGVzKQotICAgICAgICBydWxlLnNocmlua1RvRml0KCk7Ci0KLSAgICBkeW5hbWljUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKLX0KLQogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAg
ICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CkBAIC00NDMsNyArMzk4LDkgQEAg
dm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQo
KTsKICAgICBtX2ZlYXR1cmVzLnNocmlua1RvRml0KCk7CiAKLSAgICBzaHJpbmtEeW5hbWljUnVs
ZXMobV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBtX2R5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpCisgICAgICAgIHJ1bGUuc2hyaW5rVG9GaXQoKTsKKyAgICBt
X2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgIG1fY2FzY2FkZUxh
eWVycy5zaHJpbmtUb0ZpdCgpOwogICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllckZvclJ1bGVQ
b3NpdGlvbi5zaHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
UnVsZVNldC5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCmluZGV4IDhhNzEzZTY1
YTk4ZjhkNGJjZDdlZDI2MzQyMzExMWVkODI2M2M3OGEuLjU4NWYwNGJhZGNkYTFkN2JlM2Y2MzBm
ZWVhZDg4ZmIzNzQzY2ZiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVT
ZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKQEAgLTQyLDcgKzQyLDYg
QEAgbmFtZXNwYWNlIFN0eWxlIHsKIAogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBSdWxlU2V0Owot
c3RydWN0IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOwogCiB1c2luZyBJbnZhbGlkYXRpb25S
dWxlU2V0VmVjdG9yID0gVmVjdG9yPFJlZlB0cjxjb25zdCBSdWxlU2V0PiwgMT47CiAKQEAgLTcx
LDI1ICs3MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVs
ZURhdGFWZWN0b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVl
X3B0cjxSdWxlRGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgc3RydWN0IER5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMgewotICAgICAgICBWZWN0b3I8UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+
PiBtZWRpYVF1ZXJ5U2V0czsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9z
aXRpb25zOwotICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXM7Ci0gICAgICAg
IGJvb2wgcmVxdWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHJlc3VsdCB7
IHRydWUgfTsKLQotICAgICAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbWVkaWFRdWVyeVNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIGFmZmVjdGVk
UnVsZVBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgcnVsZUZlYXR1cmVzLnNo
cmlua1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21T
aGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
Jik7Ci0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
LCBjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiwgU3R5bGU6OlJlc29sdmVyJik7Ci0KLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVS
dWxlJiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgs
IHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0
b3IqID0gbnVsbHB0cik7CisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2ln
bmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKICAgICB2b2lk
IGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmKTsKIAogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNv
bnN0IEF0b21TdHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwpAQCAt
MTI2LDEyICsxMDcsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVy
Rm9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVj
dCBSdWxlU2V0QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgUnVsZVNldEJ1aWxkZXI7CiAKICAg
ICBSdWxlU2V0KCk7CiAKICAgICB1c2luZyBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gdW5zaWdu
ZWQ7CiAKKyAgICB2b2lkIGFkZFJ1bGUoUnVsZURhdGEmJiwgQ2FzY2FkZUxheWVySWRlbnRpZmll
cik7CisKICAgICBzdHJ1Y3QgUmVzb2x2ZXJNdXRhdGluZ1J1bGUgewogICAgICAgICBSZWY8U3R5
bGVSdWxlQmFzZT4gcnVsZTsKICAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBsYXllcklk
ZW50aWZpZXI7CkBAIC0xNTUsNiArMTM4LDIxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ2FzY2Fk
ZUxheWVyJiBjYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKENhc2NhZGVMYXllcklkZW50aWZpZXIg
aWRlbnRpZmllcikgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGF5ZXJzW2lkZW50aWZpZXIgLSAx
XTsgfQogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihDYXNjYWRl
TGF5ZXJJZGVudGlmaWVyKSBjb25zdDsKIAorICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1
bGVzIHsKKyAgICAgICAgVmVjdG9yPFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVy
eVNldHM7CisgICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKKyAg
ICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzOworICAgICAgICBib29sIHJlcXVp
cmVzRnVsbFJlc2V0IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07CisK
KyAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGlh
UXVlcnlTZXRzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlv
bnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgp
OworICAgICAgICB9CisgICAgfTsKKwogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBB
dG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdMb2NhbE5hbWVS
dWxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBhMDFmZTE5
MmQ4YjM0ODRiNjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4Li5jNTMyYTljZGYyZjc0MzA2OTYxYmIz
ODAwYmJhNzZkMDBmY2MwNjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
U2V0QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIu
Y3BwCkBAIC0zMiwzNiArMzIsNzUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBT
dHlsZSB7CiAKK1J1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiBydWxlU2V0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFJlc29sdmVyKiByZXNvbHZl
cikKKyAgICA6IG1fcnVsZVNldCgmcnVsZVNldCkKKyAgICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rv
cih7IGV2YWx1YXRvciB9KQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKworUnVs
ZVNldEJ1aWxkZXI6OlJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2
YWx1YXRvcikKKyAgICA6IG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciB9KQorewor
fQorCiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkKIHsKLSAgICBpZiAobW9kZSA9
PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB1cGRhdGVE
eW5hbWljTWVkaWFRdWVyaWVzKCk7CiAgICAgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsK
KworICAgIGlmIChtX3J1bGVTZXQtPm1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAgICAg
bV9ydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRS
dWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5KQoreworICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVl
cnlSZXNvbHV0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3Jlc29sdmVyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5l
cihtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgbXV0YXRpb25TY2Fu
bmVyLm1fbWVkaWFRdWVyeUNvbGxlY3Rvci5jb2xsZWN0RHluYW1pYyA9IHRydWU7CisKKyAgICAg
ICAgaWYgKG11dGF0aW9uU2Nhbm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1
YXRlKHNoZWV0UXVlcnkpKQorICAgICAgICAgICAgbXV0YXRpb25TY2FubmVyLmFkZFJ1bGVzRnJv
bVNoZWV0Q29udGVudHMoc2hlZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1
ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9u
U2Nhbm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5h
bWljTWVkaWFRdWVyeTsKKyAgICB9OworCisgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmNvbGxl
Y3REeW5hbWljID0gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNvbHV0aW9uKCk7CisKKyAgICBp
ZiAobV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkKKyAg
ICAgICAgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cyhzaGVldCk7CisgICAgbV9tZWRpYVF1ZXJ5
Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRk
Q2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMpCiB7
CiAgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTW9k
ZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gJiYgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVS
ZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICBpZiAoIW1fcnVsZVNldCAm
JiBtX21lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVk
aWFRdWVyeSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGU+
KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQorICAgICAg
ICAgICAgaWYgKG1fcnVsZVNldCkKICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlPigqcnVsZSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAgICAgICAgICAgaWYg
KG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVTZXQtPmFkZFBhZ2VS
dWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAgICAgICBpZiAobV9y
dWxlU2V0KQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1bGUoZG93bmNhc3Q8
U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAgICAgICAgICAgICBh
dXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpOwotICAgICAg
ICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKCZtZWRpYVJ1bGUu
bWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5w
dXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAgICAgICAgICAgICAg
ICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAgICAgICAgICAgIG1l
ZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAgICAg
ICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1lZGlhUXVlcmllcygp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHls
ZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTE3LDEyIEBAIHZvaWQgUnVsZVNldEJ1
aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4m
IHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlz
PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1
ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgewotICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsKLSAgICAgICAgICAg
ICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgICAgICAg
ICBpZiAoIW1fcnVsZVNldCkgeworICAgICAgICAgICAgICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rv
ci5kaWRNdXRhdGVSZXNvbHZlcigpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc29sdmVyKQotICAgICAgICAgICAgICAgIGNvbGxl
Y3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwgY3VycmVudENhc2NhZGVM
YXllcklkZW50aWZpZXIgfSk7CisgICAgICAgICAgICBpZiAobV9yZXNvbHZlcikKKyAgICAgICAg
ICAgICAgICBtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwg
bV9jdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpICYm
IGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkuY29uZGl0aW9uSXNTdXBwb3J0ZWQo
KSkgewpAQCAtOTMsNyArMTMyLDcgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxl
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMpCiAgICAgfQogfQog
Ci12b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0
Q29udGVudHMmIHNoZWV0KQordm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXRD
b250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogewogICAgIGZvciAoYXV0
byYgcnVsZSA6IHNoZWV0LmxheWVyUnVsZXNCZWZvcmVJbXBvcnRSdWxlcygpKQogICAgICAgICBy
ZWdpc3RlckxheWVycyhydWxlLT5uYW1lTGlzdCgpKTsKQEAgLTEwMiwxNyArMTQxLDE3IEBAIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQpCiAgICAgICAgIGlmICghcnVsZS0+c3R5bGVTaGVldCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2
YWx1YXRlKHJ1bGUtPm1lZGlhUXVlcmllcygpKSkgeworICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5
Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKICAgICAg
ICAgICAgIGF1dG8mIGNhc2NhZGVMYXllck5hbWUgPSBydWxlLT5jYXNjYWRlTGF5ZXJOYW1lKCk7
CiAgICAgICAgICAgICBpZiAoY2FzY2FkZUxheWVyTmFtZSkKICAgICAgICAgICAgICAgICBwdXNo
Q2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKIAotICAgICAgICAgICAgYWRkUnVsZXNG
cm9tU2hlZXQoKnJ1bGUtPnN0eWxlU2hlZXQoKSk7CisgICAgICAgICAgICBhZGRSdWxlc0Zyb21T
aGVldENvbnRlbnRzKCpydWxlLT5zdHlsZVNoZWV0KCkpOwogCiAgICAgICAgICAgICBpZiAoY2Fz
Y2FkZUxheWVyTmFtZSkKICAgICAgICAgICAgICAgICBwb3BDYXNjYWRlTGF5ZXIoKmNhc2NhZGVM
YXllck5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHJ1
bGUtPm1lZGlhUXVlcmllcygpKTsKKyAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChy
dWxlLT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgfQogCiAgICAgYWRkQ2hpbGRSdWxlcyhzaGVldC5j
aGlsZFJ1bGVzKCkpOwpAQCAtMTI0LDggKzE2MywxNCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjph
ZGRTdHlsZVJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlKQogICAgIGlmIChzZWxlY3Rvckxpc3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5k
ZXggPSAwOwotICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4
ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gc2VsZWN0b3JMaXN0LmluZGV4T2ZOZXh0U2Vs
ZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxl
LCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrLCBjdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciwgJm1lZGlhUXVlcnlDb2xsZWN0b3IpOworICAgIGZvciAoc2l6ZV90IHNlbGVj
dG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0g
c2VsZWN0b3JMaXN0LmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkgewor
ICAgICAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxp
c3RJbmRleCwgbV9ydWxlU2V0LT5ydWxlQ291bnQoKSk7CisgICAgICAgIG1fbWVkaWFRdWVyeUNv
bGxlY3Rvci5hZGRSdWxlSWZOZWVkZWQocnVsZURhdGEpOworCisgICAgICAgIG1fcnVsZVNldC0+
YWRkUnVsZShXVEZNb3ZlKHJ1bGVEYXRhKSwgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmll
cik7CisKKyAgICAgICAgKytzZWxlY3Rvckxpc3RJbmRleDsKKyAgICB9CiB9CiAKIHZvaWQgUnVs
ZVNldEJ1aWxkZXI6OnJlZ2lzdGVyTGF5ZXJzKGNvbnN0IFZlY3RvcjxDYXNjYWRlTGF5ZXJOYW1l
PiYgbmFtZXMpCkBAIC0xMzgsMTQgKzE4MywxNCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdp
c3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQogCiB2b2lk
IFJ1bGVTZXRCdWlsZGVyOjpwdXNoQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUm
IG5hbWUpCiB7Ci0gICAgaWYgKG1vZGUgIT0gTW9kZTo6Tm9ybWFsKQorICAgIGlmICghbV9ydWxl
U2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoY2FzY2FkZUxheWVySWRlbnRpZmllck1h
cC5pc0VtcHR5KCkgJiYgIXJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAobV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSAmJiAhbV9ydWxlU2V0
LT5tX2Nhc2NhZGVMYXllcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZvciBpbmNyZW1lbnRh
bCBidWlsZCwgcmVjb25zdHJ1Y3QgdGhlIG5hbWUtPmlkZW50aWZpZXIgbWFwLgogICAgICAgICBS
dWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAwOwotICAgICAgICBm
b3IgKGF1dG8mIGxheWVyIDogcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQotICAgICAgICAgICAg
Y2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5hZGQobGF5ZXIucmVzb2x2ZWROYW1lLCArK2lkZW50
aWZpZXIpOworICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9ydWxlU2V0LT5tX2Nhc2NhZGVM
YXllcnMpCisgICAgICAgICAgICBtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVy
LnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKICAgICB9CiAKICAgICBhdXRvIG5hbWVSZXNv
bHZpbmdBbm9ueW1vdXMgPSBbJl0gewpAQCAtMTU5LDI5ICsyMDQsMjkgQEAgdm9pZCBSdWxlU2V0
QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQog
CiAgICAgLy8gRm9yIGhpZXJhcmNoaWNhbCBuYW1lcyB3ZSByZWdpc3RlciB0aGUgY29udGFpbmlu
ZyBsYXllcnMgaW5kaXZpZHVhbGx5IGZpcnN0LgogICAgIGZvciAoYXV0byYgbmFtZVNlZ21lbnQg
OiBuYW1lUmVzb2x2aW5nQW5vbnltb3VzKCkpIHsKLSAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lLmFwcGVuZChuYW1lU2VnbWVudCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyID0gY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5lbnN1cmUocmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lLCBbJl0geworICAgICAgICBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5h
cHBlbmQobmFtZVNlZ21lbnQpOworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlm
aWVyID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmVuc3VyZShtX3Jlc29sdmVkQ2FzY2Fk
ZUxheWVyTmFtZSwgWyZdIHsKICAgICAgICAgICAgIC8vIFByZXZpb3VzbHkgdW5zZWVuIGxheWVy
LgotICAgICAgICAgICAgcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IHJlc29sdmVk
Q2FzY2FkZUxheWVyTmFtZSwgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKKyAgICAgICAg
ICAgIG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmFwcGVuZCh7IG1fcmVzb2x2ZWRDYXNjYWRl
TGF5ZXJOYW1lLCBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIH0pOworICAgICAgICAg
ICAgcmV0dXJuIG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICAgICAgfSku
aXRlcmF0b3ItPnZhbHVlOwogICAgIH0KIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cG9wQ2Fz
Y2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmIG5hbWUpCiB7Ci0gICAgaWYgKG1vZGUg
IT0gTW9kZTo6Tm9ybWFsKQorICAgIGlmICghbV9ydWxlU2V0KQogICAgICAgICByZXR1cm47CiAK
ICAgICBmb3IgKGF1dG8gc2l6ZSA9IG5hbWUuaXNFbXB0eSgpID8gMSA6IG5hbWUuc2l6ZSgpOyBz
aXplLS07KSB7Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyRm9ySWRlbnRpZmllcihjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllcikucGFyZW50
SWRlbnRpZmllcjsKKyAgICAgICAgbV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUucmVtb3ZlTGFz
dCgpOworICAgICAgICBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gbV9ydWxlU2V0
LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZp
ZXIpLnBhcmVudElkZW50aWZpZXI7CiAgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1
cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigpCiB7Ci0gICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZp
ZXJNYXAuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNvbXBhcmUgPSBbJl0oYXV0byBh
LCBhdXRvIGIpIHsKQEAgLTE4OSw4ICsyMzQsOCBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRh
dGVDYXNjYWRlTGF5ZXJPcmRlcigpCiAgICAgICAgICAgICAvLyBJZGVudGlmaWVycyBhcmUgaW4g
cGFyc2Ugb3JkZXIgd2hpY2ggYWxtb3N0IGNvcnJlc3BvbmRzIHRvIHRoZSBsYXllciBwcmlvcml0
eSBvcmRlci4KICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB3aGVuIGEgc3Vi
bGF5ZXIgZ2V0cyBhZGRlZCB0byBhIGxheWVyIGFmdGVyIGFkZGluZyBvdGhlciBub24tc3VibGF5
ZXJzLgogICAgICAgICAgICAgLy8gVG8gcmVzb2x2ZSB0aGlzIHdlIG5lZWQgbG9vayBmb3IgYSBz
aGFyZWQgYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBhdXRvIGFQYXJlbnQgPSBydWxlU2V0
LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVudElkZW50aWZpZXI7Ci0gICAgICAg
ICAgICBhdXRvIGJQYXJlbnQgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGIp
LnBhcmVudElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGFQYXJlbnQgPSBtX3J1bGVTZXQt
PmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAg
ICAgIGF1dG8gYlBhcmVudCA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihi
KS5wYXJlbnRJZGVudGlmaWVyOwogICAgICAgICAgICAgaWYgKGFQYXJlbnQgPT0gYlBhcmVudCB8
fCBhUGFyZW50ID09IGIgfHwgYlBhcmVudCA9PSBhKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgaWYgKGFQYXJlbnQgPiBiUGFyZW50KQpAQCAtMjAyLDcgKzI0Nyw3IEBAIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9yZGVyKCkKICAgICB9OwogCiAg
ICAgVmVjdG9yPFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IG9yZGVyVmVjdG9yOwot
ICAgIGF1dG8gbGF5ZXJDb3VudCA9IHJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5zaXplKCk7Cisg
ICAgYXV0byBsYXllckNvdW50ID0gbV9ydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwog
ICAgIG9yZGVyVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGF5ZXJDb3VudCk7CiAgICAg
Zm9yIChSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAxOyBpZGVu
dGlmaWVyIDw9IGxheWVyQ291bnQ7ICsraWRlbnRpZmllcikKICAgICAgICAgb3JkZXJWZWN0b3Iu
dW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOwpAQCAtMjEwLDUyICsyNTUsNjYgQEAgdm9pZCBS
dWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgIHN0ZDo6c29ydChv
cmRlclZlY3Rvci5iZWdpbigpLCBvcmRlclZlY3Rvci5lbmQoKSwgY29tcGFyZSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JkZXJWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVy
ID0gaSArIDE7CisgICAgICAgIG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihv
cmRlclZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKIH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6
YWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKQogewotICAgIGlmICghcmVzb2x2ZXIpCisgICAg
aWYgKCFtX3Jlc29sdmVyKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNvbXBhcmVMYXll
cnMgPSBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICBhdXRvIGFP
cmRlciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihhLmxheWVySWRl
bnRpZmllcik7Ci0gICAgICAgIGF1dG8gYk9yZGVyID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyT3Jk
ZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBhT3JkZXIg
PSBtX3J1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihhLmxheWVySWRlbnRp
Zmllcik7CisgICAgICAgIGF1dG8gYk9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRl
ckZvcklkZW50aWZpZXIoYi5sYXllcklkZW50aWZpZXIpOwogICAgICAgICByZXR1cm4gYU9yZGVy
IDwgYk9yZGVyOwogICAgIH07CiAKICAgICAvLyBUaGUgb3JkZXIgbWF5IGNoYW5nZSBzbyB3ZSBu
ZWVkIHRvIHJlcHJvY2VzcyByZXNvbHZlciBtdXRhdGluZyBydWxlcyBmcm9tIGVhcmxpZXIgc3R5
bGVzaGVldHMuCi0gICAgYXV0byBydWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShydWxlU2V0LT5t
X3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOwotICAgIHJ1bGVzVG9BZGQuYXBw
ZW5kVmVjdG9yKFdURk1vdmUoY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzKSk7CisgICAg
YXV0byBydWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShtX3J1bGVTZXQtPm1fcmVzb2x2ZXJNdXRh
dGluZ1J1bGVzSW5MYXllcnMsIHsgfSk7CisgICAgcnVsZXNUb0FkZC5hcHBlbmRWZWN0b3IoV1RG
TW92ZShtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcykpOwogCi0gICAgaWYgKCFjYXNj
YWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fY2FzY2FkZUxheWVy
SWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQocnVsZXNU
b0FkZC5iZWdpbigpLCBydWxlc1RvQWRkLmVuZCgpLCBjb21wYXJlTGF5ZXJzKTsKIAogICAgIGZv
ciAoYXV0byYgY29sbGVjdGVkUnVsZSA6IHJ1bGVzVG9BZGQpIHsKICAgICAgICAgaWYgKGNvbGxl
Y3RlZFJ1bGUubGF5ZXJJZGVudGlmaWVyKQotICAgICAgICAgICAgcnVsZVNldC0+bV9yZXNvbHZl
ck11dGF0aW5nUnVsZXNJbkxheWVycy5hcHBlbmQoY29sbGVjdGVkUnVsZSk7CisgICAgICAgICAg
ICBtX3J1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxl
Y3RlZFJ1bGUpOwogCiAgICAgICAgIGF1dG8mIHJ1bGUgPSBjb2xsZWN0ZWRSdWxlLnJ1bGU7CiAg
ICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZSkpIHsKLSAgICAgICAgICAgIHJl
c29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShkb3duY2Fz
dDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSksIGZhbHNlKTsKLSAgICAgICAgICAgIHJl
c29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7CisgICAgICAgICAg
ICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShk
b3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSksIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1fcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUoKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVG
b250UGFsZXR0ZVZhbHVlcz4ocnVsZSkpIHsKLSAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpLmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHls
ZVJ1bGVGb250UGFsZXR0ZVZhbHVlcz4ocnVsZS5nZXQoKSkpOwotICAgICAgICAgICAgcmVzb2x2
ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUoKTsKKyAgICAgICAgICAgIG1f
cmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udFBhbGV0dGVWYWx1ZXNS
dWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlLmdldCgpKSk7Cisg
ICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hl
KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlS2V5ZnJhbWVzPihydWxlKSkgewotICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZy
YW1lU3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7CisgICAg
ICAgICAgICBtX3Jlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtl
eWZyYW1lcz4ocnVsZS5nZXQoKSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLVJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+UnVsZVNldE1lZGlhUXVl
cnlDb2xsZWN0b3IoKSA9IGRlZmF1bHQ7Cit2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVEeW5h
bWljTWVkaWFRdWVyaWVzKCkKK3sKKyAgICBpZiAobV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmhhc1Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKQorICAgICAgICBtX3J1bGVTZXQtPm1faGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSB0cnVlOworCisgICAgaWYgKCFtX21lZGlhUXVl
cnlDb2xsZWN0b3IuZHluYW1pY01lZGlhUXVlcnlSdWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
YXV0byBmaXJzdE5ld0luZGV4ID0gbV9ydWxlU2V0LT5tX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMu
c2l6ZSgpOworICAgICAgICBtX3J1bGVTZXQtPm1fZHluYW1pY01lZGlhUXVlcnlSdWxlcy5hcHBl
bmRWZWN0b3IoV1RGTW92ZShtX21lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1pY01lZGlhUXVlcnlS
dWxlcykpOworCisgICAgICAgIC8vIFNldCB0aGUgaW5pdGlhbCB2YWx1ZXMuCisgICAgICAgIG1f
cnVsZVNldC0+ZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKG1fbWVkaWFRdWVyeUNvbGxl
Y3Rvci5ldmFsdWF0b3IsIGZpcnN0TmV3SW5kZXgpOworICAgIH0KK30KKworUnVsZVNldEJ1aWxk
ZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6On5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0
OwogCi1ib29sIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUoY29u
c3QgTWVkaWFRdWVyeVNldCogc2V0KQorYm9vbCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNv
bGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKIHsKICAg
ICBpZiAoIXNldCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzUsNyArMzM0LDcgQEAgYm9v
bCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlh
UXVlcnlTZXQqIHNldCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJ1bGVTZXRNZWRp
YVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQordm9pZCBSdWxl
U2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQq
IHNldCkKIHsKICAgICBpZiAoIXNldCB8fCBkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSB8
fCBzZXQgIT0gJmR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLnNldC5nZXQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjk4LDE0ICszNTcsMTQgQEAgdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKICAgICBkeW5hbWljQ29udGV4dFN0
YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6
ZGlkTXV0YXRlUmVzb2x2ZXIoKQordm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQogewogICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNr
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRpZE11dGF0ZVJlc29sdmVyV2l0aGlu
RHluYW1pY01lZGlhUXVlcnkgPSB0cnVlOwogfQogCi12b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29s
bGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQordm9pZCBS
dWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlmTmVlZGVkKGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoZHluYW1pY0NvbnRleHRTdGFjay5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5o
CmluZGV4IGVmNGFkZjA4MzE1NWQwNjNkZjQ1MjVmMWQ1YjFkM2JkMTcyYzZiYzIuLjQ5NjYwZjAw
MjcyN2Q5OTYxMjBjYjUxYWNmNjRiOGY5MDA2YmZmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVs
ZVNldEJ1aWxkZXIuaApAQCAtMjYsNDYgKzI2LDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgU3R5bGUgewogCi1zdHJ1Y3QgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3Igewot
ICAgIH5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpOworY2xhc3MgUnVsZVNldEJ1aWxkZXIg
eworcHVibGljOgorICAgIGVudW0gY2xhc3MgTWVkaWFRdWVyeU1vZGUgeyBEeW5hbWljLCBTdGF0
aWMgfTsKKyAgICBSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYsIFJlc29sdmVyKiA9IG51bGxwdHIpOwogCi0gICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciYgZXZhbHVhdG9yOwotICAgIGNvbnN0IGJvb2wgY29sbGVjdER5bmFtaWMgeyBmYWxzZSB9
OwotCi0gICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKLSAgICAgICAgUmVmPGNvbnN0IE1lZGlh
UXVlcnlTZXQ+IHNldDsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRp
b25zIHsgfTsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzIHsgfTsKLSAg
ICB9OwotICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHluYW1pY0NvbnRleHRTdGFjayB7IH07
Ci0KLSAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01l
ZGlhUXVlcnlSdWxlcyB7IH07Ci0gICAgYm9vbCBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFt
aWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKLSAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyaWVzIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7Ci0gICAg
dm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOwotICAgIHZvaWQgYWRkUnVsZUlmTmVlZGVkKGNvbnN0
IFJ1bGVEYXRhJik7Ci19OwotCi1zdHJ1Y3QgUnVsZVNldEJ1aWxkZXIgewotICAgIGVudW0gY2xh
c3MgTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLQotICAgIFJlZjxSdWxl
U2V0PiBydWxlU2V0OwotICAgIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIG1lZGlhUXVlcnlD
b2xsZWN0b3I7Ci0gICAgUmVzb2x2ZXIqIHJlc29sdmVyIHsgbnVsbHB0ciB9OwotICAgIE1vZGUg
bW9kZSB7IE1vZGU6Ok5vcm1hbCB9OwotICAgIENhc2NhZGVMYXllck5hbWUgcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lIHsgfTsKLSAgICBIYXNoTWFwPENhc2NhZGVMYXllck5hbWUsIFJ1bGVTZXQ6
OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAgeyB9Owot
ICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIgY3VycmVudENhc2NhZGVMYXllcklk
ZW50aWZpZXIgeyAwIH07Ci0gICAgVmVjdG9yPFJ1bGVTZXQ6OlJlc29sdmVyTXV0YXRpbmdSdWxl
PiBjb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OwotCi0gICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmKTsKKyAgICB2b2lkIGFkZFJ1bGVz
RnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYsIGNvbnN0IE1lZGlhUXVlcnlTZXQq
IHNoZWV0UXVlcnkgPSBudWxscHRyKTsKIAogICAgIH5SdWxlU2V0QnVpbGRlcigpOwogCiBwcml2
YXRlOgorICAgIFJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImKTsKKwor
ICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVu
dHMmKTsKICAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mKTsKICAgICB2b2lkIGFkZFN0eWxlUnVsZShjb25zdCBTdHlsZVJ1bGUmKTsKIApA
QCAtNzQsNiArNDcsMzggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBvcENhc2NhZGVMYXllcihjb25z
dCBDYXNjYWRlTGF5ZXJOYW1lJik7CiAgICAgdm9pZCB1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcigp
OwogICAgIHZvaWQgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsKKyAgICB2b2lkIHVwZGF0
ZUR5bmFtaWNNZWRpYVF1ZXJpZXMoKTsKKworICAgIHN0cnVjdCBNZWRpYVF1ZXJ5Q29sbGVjdG9y
IHsKKyAgICAgICAgfk1lZGlhUXVlcnlDb2xsZWN0b3IoKTsKKworICAgICAgICBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3I7CisgICAgICAgIGJvb2wgY29sbGVjdER5bmFtaWMg
eyBmYWxzZSB9OworCisgICAgICAgIHN0cnVjdCBEeW5hbWljQ29udGV4dCB7CisgICAgICAgICAg
ICBSZWY8Y29uc3QgTWVkaWFRdWVyeVNldD4gc2V0OworICAgICAgICAgICAgVmVjdG9yPHNpemVf
dD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKKyAgICAgICAgICAgIFJ1bGVGZWF0dXJlVmVj
dG9yIHJ1bGVGZWF0dXJlcyB7IH07CisgICAgICAgIH07CisgICAgICAgIFZlY3RvcjxEeW5hbWlj
Q29udGV4dD4gZHluYW1pY0NvbnRleHRTdGFjayB7IH07CisKKyAgICAgICAgVmVjdG9yPFJ1bGVT
ZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IGR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgeyB9Owor
ICAgICAgICBib29sIGRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgeyBm
YWxzZSB9OworICAgICAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzIHsg
ZmFsc2UgfTsKKworICAgICAgICBib29sIHB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5
U2V0Kik7CisgICAgICAgIHZvaWQgcG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKKyAgICAgICAg
dm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICB2b2lkIGFkZFJ1bGVJZk5lZWRlZChj
b25zdCBSdWxlRGF0YSYpOworICAgIH07CisKKyAgICBSZWZQdHI8UnVsZVNldD4gbV9ydWxlU2V0
OworICAgIE1lZGlhUXVlcnlDb2xsZWN0b3IgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yOworICAgIFJl
c29sdmVyKiBtX3Jlc29sdmVyIHsgbnVsbHB0ciB9OworICAgIENhc2NhZGVMYXllck5hbWUgbV9y
ZXNvbHZlZENhc2NhZGVMYXllck5hbWUgeyB9OworICAgIEhhc2hNYXA8Q2FzY2FkZUxheWVyTmFt
ZSwgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllcj4gbV9jYXNjYWRlTGF5ZXJJZGVudGlm
aWVyTWFwIHsgfTsKKyAgICBSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIG1fY3VycmVu
dENhc2NhZGVMYXllcklkZW50aWZpZXIgeyAwIH07CisgICAgVmVjdG9yPFJ1bGVTZXQ6OlJlc29s
dmVyTXV0YXRpbmdSdWxlPiBtX2NvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7IH07CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmluZGV4IGYz
OGJkNzE5M2JiMDU0YzAyZDU0Zjk1YjY3MTVjNTYyNTM3YzE2YzYuLjYzYzM0OTQ5ZjEzNGJlNGFl
ZjIxOGY3N2QwODA5ZmJmMGMwODAwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlSW52YWxpZGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52
YWxpZGF0b3IuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJIVE1MU2xv
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Vs
ZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC05Miw4ICs5MiwxMCBA
QCBJbnZhbGlkYXRvcjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50
cyo+JiBzaGVldHMsIGNvbnN0IE1lZGlhUQogICAgICAgICByZXR1cm47CiAKICAgICBtX293bmVk
UnVsZVNldC0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOworCisgICAgUnVsZVNldEJ1aWxkZXIg
cnVsZVNldEJ1aWxkZXIoKm1fb3duZWRSdWxlU2V0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAg
ICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNldC0+YWRk
UnVsZXNGcm9tU2hlZXQoKnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICAgICAgcnVs
ZVNldEJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoKnNoZWV0KTsKIAogICAgIG1fcnVsZUluZm9y
bWF0aW9uID0gY29sbGVjdFJ1bGVJbmZvcm1hdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKaW5kZXggMWFiNGE5OWQzZjcxM2E3MDFmMTExODZj
NjIzZWU5YzFkY2E0YWU3NS4uNWI5M2FlYTJlMDdmNWFiNDFmYzA0Y2QzNDI1MTQ2YWIyNjM5MjEy
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJ1bGVT
ZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKQEAgLTczLDkgKzc0LDEx
IEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZO
ZWVkZWQoKSBjb25zdAogCiAgICAgLy8gTWVkaWEgcXVlcmllcyBvbiB1c2VyIGFnZW50IHNoZWV0
IG5lZWQgdG8gZXZhbHVhdGVkIGluIGRvY3VtZW50IGNvbnRleHQuIFRoZXkgYmVoYXZlIGxpa2Ug
YXV0aG9yIHNoZWV0cyBpbiB0aGlzIHJlc3BlY3QuCiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1
YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7CisKICAgICBtX3Vz
ZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIAotICAgIG1f
dXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqVXNlckFnZW50U3R5
bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0LCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBt
X3N0eWxlUmVzb2x2ZXIpOworCisgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcigqbV91c2VyQWdl
bnRNZWRpYVF1ZXJ5U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIp
OworICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1
ZXJ5U3R5bGVTaGVldCk7CiB9CiAKIFJ1bGVTZXQqIFNjb3BlUnVsZVNldHM6OnVzZXJTdHlsZSgp
IGNvbnN0CkBAIC04OSwzMSArOTIsMzggQEAgdm9pZCBTY29wZVJ1bGVTZXRzOjppbml0aWFsaXpl
VXNlclN0eWxlKCkKIHsKICAgICBhdXRvJiBleHRlbnNpb25TdHlsZVNoZWV0cyA9IG1fc3R5bGVS
ZXNvbHZlci5kb2N1bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCk7CiAgICAgYXV0byYgbWVk
aWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7
Ci0gICAgYXV0byB0ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKENT
U1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdlVXNl
clNoZWV0KCkpCi0gICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VV
c2VyU2hlZXQtPmNvbnRlbnRzKCksIG51bGxwdHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5
bGVSZXNvbHZlcik7CisKKyAgICBhdXRvIHVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwor
CisgICAgaWYgKGF1dG8qIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdl
VXNlclNoZWV0KCkpIHsKKyAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcih1c2VyU3R5bGUs
IG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICBidWlsZGVy
LmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkpOworICAgIH0KKwog
I2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKICAgICBhdXRvKiBwYWdlID0gbV9zdHlsZVJl
c29sdmVyLmRvY3VtZW50KCkucGFnZSgpOwogICAgIGlmICghZXh0ZW5zaW9uU3R5bGVTaGVldHMu
aW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKS5pc0VtcHR5KCkgJiYgcGFnZSAmJiBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRFbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5
UHJvdGVjdGlvbnMoKSkKICAgICAgICAgbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuYWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6V2Fybmlu
ZywgIklnbm9yaW5nIHVzZXIgc3R5bGUgc2hlZXQgZm9yIG5vbi1hcHAgYm91bmQgZG9tYWluLiJf
cyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMo
ZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJT
dHlsZS5nZXQoKSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAgIGNvbGxlY3RSdWxlc0Zy
b21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVT
aGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICAgICAgaWYgKHBh
Z2UgJiYgIWV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCku
bm90aWZ5UGFnZU9mQXBwQm91bmRCZWhhdmlvcigpOwogICAgIH0KICNlbHNlCi0gICAgY29sbGVj
dFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVz
ZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBtZWRpYVF1ZXJ5RXZhbHVhdG9y
KTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hl
ZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksIHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1
YXRvcik7CiAjZW5kaWYKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVu
c2lvblN0eWxlU2hlZXRzLmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksIHRlbXBVc2VyU3R5bGUu
Z2V0KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwotICAgIGlmICh0ZW1wVXNlclN0eWxlLT5ydWxl
Q291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKLSAg
ICAgICAgbV91c2VyU3R5bGUgPSBXVEZNb3ZlKHRlbXBVc2VyU3R5bGUpOworICAgIGNvbGxlY3RS
dWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2Vy
U3R5bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKworICAgIGlm
ICh1c2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8fCB1c2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNp
emUoKSA+IDApCisgICAgICAgIG1fdXNlclN0eWxlID0gV1RGTW92ZSh1c2VyU3R5bGUpOwogfQog
Ci12b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVz
ZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtKQordm9pZCBTY29wZVJ1
bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCiB7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHVzZXJTaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQVNT
RVJUKHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICAg
ICAgdXNlclN0eWxlLmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCks
IG51bGxwdHIsIG1lZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsKKyAgICBSdWxlU2V0QnVpbGRlciBi
dWlsZGVyKHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7
CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHVzZXJTaGVldHMpIHsKKyAgICAgICAgQVNTRVJUKHNo
ZWV0LT5jb250ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRk
UnVsZXNGcm9tU2hlZXQoc2hlZXQtPmNvbnRlbnRzKCkpOwogICAgIH0KIH0KIApAQCAtMTc1LDEx
ICsxODUsMTMgQEAgc3RkOjpvcHRpb25hbDxEeW5hbWljTWVkaWFRdWVyeUV2YWx1YXRpb25DaGFu
Z2VzPiBTY29wZVJ1bGVTZXRzOjpldmFsdWF0ZUR5bmFtaWMKICAgICByZXR1cm4gZXZhbHVhdGlv
bkNoYW5nZXM7CiB9CiAKLXZvaWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVl
dHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKiBtZWRpdW0sIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3Rv
ckNTU09NV3JhcHBlcnMpCit2b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hl
ZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVk
aWFRdWVyeUV2YWx1YXRvciogbWVkaWFRdWVyeUV2YWx1YXRvciwgSW5zcGVjdG9yQ1NTT01XcmFw
cGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycykKIHsKKyAgICBSdWxlU2V0QnVpbGRlciBidWls
ZGVyKCptX2F1dGhvclN0eWxlLCAqbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZl
cik7CisKICAgICBmb3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAg
QVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVy
aWVzKCksICptZWRpdW0sIG1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVs
ZXNGcm9tU2hlZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMo
KSk7CiAgICAgICAgIGluc3BlY3RvckNTU09NV3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0
SWZOZWVkZWQoY3NzU2hlZXQuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvVXNl
ckFnZW50U3R5bGUuY3BwCmluZGV4IGNlZDE4YTM5ZGFiZGUyMmIzNTA5ZDA4N2Y5MTViMzgyMzcw
YWFlMGYuLmQ1MDdmYjE2M2ZkZTJkMmVmNmYxOWMyYTE5NGMzMDQwNjcyNzcxODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1VzZXJBZ2VudFN0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKLSNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgpAQCAtMTA3LDggKzEwNywxMSBAQCBz
dGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIp
CiAKIHZvaWQgVXNlckFnZW50U3R5bGU6OmFkZFRvRGVmYXVsdFN0eWxlKFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQpCiB7Ci0gICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dCwgc2NyZWVuRXZhbCgpKTsKLSAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICBSdWxlU2V0QnVpbGRlciBzY3JlZW5CdWlsZGVy
KCpkZWZhdWx0U3R5bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgc2NyZWVuQnVpbGRlci5hZGRSdWxl
c0Zyb21TaGVldChzaGVldCk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBwcmludEJ1aWxkZXIoKmRl
ZmF1bHRQcmludFN0eWxlLCBwcmludEV2YWwoKSk7CisgICAgcHJpbnRCdWlsZGVyLmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0KTsKIAogICAgIC8vIEJ1aWxkIGEgc3R5bGVzaGVldCBjb25zaXN0aW5n
IG9mIG5vbi10cml2aWFsIG1lZGlhIHF1ZXJpZXMgc2VlbiBpbiBkZWZhdWx0IHN0eWxlLgogICAg
IC8vIFJ1bGVzZXRzIGZvciB0aGVzZSBjYW4ndCBiZSBnbG9iYWwgYW5kIG5lZWQgdG8gYmUgYnVp
bHQgaW4gZG9jdW1lbnQgY29udGV4dC4KQEAgLTE0NSw3ICsxNDgsOSBAQCB2b2lkIFVzZXJBZ2Vu
dFN0eWxlOjppbml0RGVmYXVsdFN0eWxlU2hlZXQoKQogICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVz
LgogICAgIFN0cmluZyBxdWlya3NSdWxlcyA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRo
b3V0Q29weWluZyhxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocXVpcmtzVXNlckFn
ZW50U3R5bGVTaGVldCkpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5leHRyYVF1aXJrc1N0
eWxlU2hlZXQoKTsKICAgICBxdWlya3NTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJrc1J1
bGVzKTsKLSAgICBkZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWlya3NT
dHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOworCisgICAgUnVsZVNldEJ1aWxkZXIgcXVpcmtCdWls
ZGVyKCpkZWZhdWx0UXVpcmtzU3R5bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgcXVpcmtCdWlsZGVy
LmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWlya3NTdHlsZVNoZWV0KTsKIAogICAgICsrZGVmYXVsdFN0
eWxlVmVyc2lvbjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440058</attachid>
            <date>2021-10-04 06:53:50 -0700</date>
            <delta_ts>2021-10-04 07:45:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004165348.patch</filename>
            <type>text/plain</type>
            <size>36938</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uNTExYzIyNWQzYTQwMjE1ODFkODVkZDRkOTk0MTYx
ZTdkOGI1NDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsYW4gQnVqdGFzLgorCisgICAgICAg
IEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMg
Y2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13YXkg
ZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVyLgor
CisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6c2hy
aW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5hbWlj
UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtUb0Zp
dCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0
YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojpwb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZCk6
IERlbGV0ZWQuCisKKyAgICAgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBpcyBub3cgYSBwcml2YXRl
IGlubmVyIHN0cnVjdCBvZiBSdWxlU2V0QnVpbGRlci4KKworICAgICAgICAqIHN0eWxlL1J1bGVT
ZXRCdWlsZGVyLmg6CisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6bV9kaXJ0aWVzQWxsU3R5bGUpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGVS
dWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVs
ZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmFk
ZFRvRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpVc2VyQWdlbnRTdHls
ZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KToKKwogMjAyMS0xMC0wMyAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBSdWxlU2V0IGJ1aWxkZXIgdG8gYSBm
aWxlIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggNjhlZGNmMWUzZTU2
MmE2NWFlNjBlYjI3MjYxYTNiOWQzNmY2MDkyNy4uZmE1YWEwN2E2Mjg1Nzk3N2E5YWMwNWRjOTcz
OWMzZDNjM2FmMTgyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUnVsZVNldEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCkBAIC04NCw5ICs4MywxNSBAQCBz
dGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9yLT5wc2V1
ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQogCi12b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBzZWxlY3Rv
ckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2FkZUxheWVy
SWRlbnRpZmllciwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0
b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCkKIHsKLSAgICBSdWxl
RGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9y
dWxlQ291bnQrKyk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwg
c2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KTsKKyAgICBhZGRSdWxlKFdURk1vdmUocnVs
ZURhdGEpLCAwKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFJ1bGVEYXRhJiYgcnVsZURh
dGEsIENhc2NhZGVMYXllcklkZW50aWZpZXIgY2FzY2FkZUxheWVySWRlbnRpZmllcikKK3sKKyAg
ICArK21fcnVsZUNvdW50OwogCiAgICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXIpIHsKICAg
ICAgICAgYXV0byBvbGRTaXplID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyRm9yUnVsZVBvc2l0
aW9uLnNpemUoKTsKQEAgLTk3LDkgKzEwMiw2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25z
dCBTdHlsZVJ1bGUmIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlCiAK
ICAgICBtX2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKLSAgICBpZiAobWVk
aWFRdWVyeUNvbGxlY3RvcikKLSAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZUlm
TmVlZGVkKHJ1bGVEYXRhKTsKLQogICAgIHVuc2lnbmVkIGNsYXNzQnVja2V0U2l6ZSA9IDA7CiAg
ICAgY29uc3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0b3IgPSBudWxscHRyOwogICAgIGNvbnN0IENT
U1NlbGVjdG9yKiB0YWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC0yNzIsNDUgKzI3NCw2IEBAIHZv
aWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYgcnVsZSkKICAgICBtX3BhZ2VS
dWxlcy5hcHBlbmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0
KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIGV2YWx1YXRvcikKLXsKLSAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1
bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKLSAgICBidWlsZGVyLmFk
ZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsKLQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJs
ZWQpCi0gICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNG
cm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVy
eVNldCogc2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBT
dHlsZTo6UmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlh
UXVlcnlSZXNvbHV0aW9uID0gWyZdIHsKLSAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7
ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBu
dWxscHRyLCBSdWxlU2V0QnVpbGRlcjo6TW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLSAg
ICAgICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hl
ZXRRdWVyeSkpCi0gICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsK
LSAgICAgICAgYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLSAg
ICAgICAgcmV0dXJuICFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2
ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeTsKLSAgICB9KCk7Ci0KLSAgICBSdWxlU2V0QnVpbGRl
ciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9y
LCBjYW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07Ci0KLSAg
ICBpZiAoYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1
ZXJ5KSkKLSAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgYnVp
bGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLQotICAgIG1faGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3Iu
aGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7Ci0KLSAgICBpZiAoIWJ1aWxkZXIubWVk
aWFRdWVyeUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBhdXRvIGZpcnN0TmV3SW5kZXggPSBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2l6ZSgp
OwotICAgICAgICBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUo
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKLQot
ICAgICAgICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBldmFsdWF0ZUR5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMoZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KIHZvaWQgUnVsZVNldDo6dHJhdmVyc2VS
dWxlRGF0YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKQEAgLTQxNCwxNCArMzc3LDYgQEAgc3Rh
dGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1h
cCYgbWFwKQogICAgICAgICB2ZWN0b3ItPnNocmlua1RvRml0KCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBzaHJpbmtEeW5hbWljUnVsZXMoVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1
ZXJ5UnVsZXM+JiBkeW5hbWljUnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogZHluYW1p
Y1J1bGVzKQotICAgICAgICBydWxlLnNocmlua1RvRml0KCk7Ci0KLSAgICBkeW5hbWljUnVsZXMu
c2hyaW5rVG9GaXQoKTsKLX0KLQogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAgICAg
c2hyaW5rTWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CkBAIC00NDMsNyArMzk4LDkgQEAgdm9p
ZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsK
ICAgICBtX2ZlYXR1cmVzLnNocmlua1RvRml0KCk7CiAKLSAgICBzaHJpbmtEeW5hbWljUnVsZXMo
bV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBtX2R5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMpCisgICAgICAgIHJ1bGUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2R5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgIG1fY2FzY2FkZUxheWVy
cy5zaHJpbmtUb0ZpdCgpOwogICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3Np
dGlvbi5zaHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVs
ZVNldC5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCmluZGV4IDhhNzEzZTY1YTk4
ZjhkNGJjZDdlZDI2MzQyMzExMWVkODI2M2M3OGEuLjU4NWYwNGJhZGNkYTFkN2JlM2Y2MzBmZWVh
ZDg4ZmIzNzQzY2ZiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKQEAgLTQyLDcgKzQyLDYgQEAg
bmFtZXNwYWNlIFN0eWxlIHsKIAogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBSdWxlU2V0Owotc3Ry
dWN0IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOwogCiB1c2luZyBJbnZhbGlkYXRpb25SdWxl
U2V0VmVjdG9yID0gVmVjdG9yPFJlZlB0cjxjb25zdCBSdWxlU2V0PiwgMT47CiAKQEAgLTcxLDI1
ICs3MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURh
dGFWZWN0b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlRGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgc3RydWN0IER5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMgewotICAgICAgICBWZWN0b3I8UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+PiBt
ZWRpYVF1ZXJ5U2V0czsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRp
b25zOwotICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXM7Ci0gICAgICAgIGJv
b2wgcmVxdWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHJlc3VsdCB7IHRy
dWUgfTsKLQotICAgICAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbWVkaWFRdWVyeVNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIGFmZmVjdGVkUnVs
ZVBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgcnVsZUZlYXR1cmVzLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVl
dChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7
Ci0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBj
b25zdCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
JiwgU3R5bGU6OlJlc29sdmVyJik7Ci0KLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxl
JiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVu
c2lnbmVkIGNhc2NhZGVMYXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3Iq
ID0gbnVsbHB0cik7CisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKICAgICB2b2lkIGFk
ZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmKTsKIAogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0
IEF0b21TdHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwpAQCAtMTI2
LDEyICsxMDcsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9y
KGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBS
dWxlU2V0QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgUnVsZVNldEJ1aWxkZXI7CiAKICAgICBS
dWxlU2V0KCk7CiAKICAgICB1c2luZyBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gdW5zaWduZWQ7
CiAKKyAgICB2b2lkIGFkZFJ1bGUoUnVsZURhdGEmJiwgQ2FzY2FkZUxheWVySWRlbnRpZmllcik7
CisKICAgICBzdHJ1Y3QgUmVzb2x2ZXJNdXRhdGluZ1J1bGUgewogICAgICAgICBSZWY8U3R5bGVS
dWxlQmFzZT4gcnVsZTsKICAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBsYXllcklkZW50
aWZpZXI7CkBAIC0xNTUsNiArMTM4LDIxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ2FzY2FkZUxh
eWVyJiBjYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKENhc2NhZGVMYXllcklkZW50aWZpZXIgaWRl
bnRpZmllcikgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGF5ZXJzW2lkZW50aWZpZXIgLSAxXTsg
fQogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyKSBjb25zdDsKIAorICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVz
IHsKKyAgICAgICAgVmVjdG9yPFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNl
dHM7CisgICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKKyAgICAg
ICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzOworICAgICAgICBib29sIHJlcXVpcmVz
RnVsbFJlc2V0IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07CisKKyAg
ICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGlhUXVl
cnlTZXRzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9t
UnVsZU1hcCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdMb2NhbE5hbWVSdWxl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBhMDFmZTE5MmQ4
YjM0ODRiNjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4Li5lY2Q3YzNjYWM1MDhmZTU0NjYxM2VkNDRm
MDhiMzM0MjkzZDYxYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3Bw
CkBAIC0zMiwzNiArMzIsNzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHls
ZSB7CiAKK1J1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiBydWxlU2V0LCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFJlc29sdmVyKiByZXNvbHZlcikK
KyAgICA6IG1fcnVsZVNldCgmcnVsZVNldCkKKyAgICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7
IGV2YWx1YXRvciB9KQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKworUnVsZVNl
dEJ1aWxkZXI6OlJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1
YXRvcikKKyAgICA6IG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciwgdHJ1ZSB9KQor
eworfQorCiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkKIHsKLSAgICBpZiAobW9k
ZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAoIW1fcnVsZVNldCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB1cGRh
dGVEeW5hbWljTWVkaWFRdWVyaWVzKCk7CiAgICAgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIo
KTsKKworICAgIGlmIChtX3J1bGVTZXQtPm1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAg
ICAgbV9ydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjph
ZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5KQoreworICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlh
UXVlcnlSZXNvbHV0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3Jlc29sdmVyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nh
bm5lcihtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgaWYgKG11dGF0
aW9uU2Nhbm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVl
cnkpKQorICAgICAgICAgICAgbXV0YXRpb25TY2FubmVyLmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVu
dHMoc2hlZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9y
LnBvcChzaGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9uU2Nhbm5lci5kaWRT
ZWVSZXNvbHZlck11dGF0aW9uV2l0aGluRHluYW1pY01lZGlhUXVlcnk7CisgICAgfTsKKworICAg
IG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5jb2xsZWN0RHluYW1pYyA9IGNhblVzZUR5bmFtaWNNZWRp
YVF1ZXJ5UmVzb2x1dGlvbigpOworCisgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNo
QW5kRXZhbHVhdGUoc2hlZXRRdWVyeSkpCisgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0Q29udGVu
dHMoc2hlZXQpOworICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7CiB9
CiAKIHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzKQogewogICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVz
KSB7Ci0gICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuICYmIG1l
ZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVy
eSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZGlkU2VlUmVzb2x2ZXJNdXRhdGlv
bldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IGlmIChpczxTdHlsZVJ1bGU+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQorICAgICAgICAgICAgaWYgKG1fcnVsZVNldCkKICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkg
ewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAg
IHJ1bGVTZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7Cisg
ICAgICAgICAgICBpZiAobV9ydWxlU2V0KQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRk
UGFnZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRp
YT4oKnJ1bGUpOwotICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2
YWx1YXRlKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMo
KSkpCiAgICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygp
KTsKLSAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFR
dWVyaWVzKCkpOworICAgICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFS
dWxlLm1lZGlhUXVlcmllcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpczxTdHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTE1LDEx
IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVS
dWxlRm9udFBhbGV0dGVWYWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpy
dWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNj
YW4pIHsKLSAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29s
dmVyKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAocmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRh
dGluZ1J1bGVzLmFwcGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9
KTsKKyAgICAgICAgICAgIGlmICghbV9ydWxlU2V0ICYmICFtX21lZGlhUXVlcnlDb2xsZWN0b3Iu
ZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGlkU2VlUmVz
b2x2ZXJNdXRhdGlvbldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5ID0gdHJ1ZTsKKworICAgICAgICAg
ICAgaWYgKG1fcmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9jb2xsZWN0ZWRSZXNvbHZlck11
dGF0aW5nUnVsZXMuYXBwZW5kKHsgKnJ1bGUsIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZp
ZXIgfSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8
U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4o
KnJ1bGUpLmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKQEAgLTkzLDcgKzEyOSw3IEBAIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mIHJ1bGVzKQogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVs
ZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3ZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJiBzaGVldCkKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVm
b3JlSW1wb3J0UnVsZXMoKSkKICAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3Qo
KSk7CkBAIC0xMDIsMTcgKzEzOCwxNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zy
b21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogICAgICAgICBpZiAoIXJ1
bGUtPnN0eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICht
ZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkp
IHsKKyAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVs
ZS0+bWVkaWFRdWVyaWVzKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1l
ID0gcnVsZS0+Y2FzY2FkZUxheWVyTmFtZSgpOwogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXll
ck5hbWUpCiAgICAgICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFt
ZSk7CiAKLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkp
OworICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cygqcnVsZS0+c3R5bGVTaGVl
dCgpKTsKIAogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCiAgICAgICAgICAgICAg
ICAgcG9wQ2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKICAgICAgICAgfQotICAgICAg
ICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAg
IG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIH0K
IAogICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKQEAgLTEyNCw4ICsxNjAs
MTQgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYg
cnVsZSkKICAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxl
Y3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9
IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0g
ICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0
SW5kZXgrKywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVj
dG9yKTsKKyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAh
PSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVj
dG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVs
ZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50
KCkpOworICAgICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVE
YXRhKTsKKworICAgICAgICBtX3J1bGVTZXQtPmFkZFJ1bGUoV1RGTW92ZShydWxlRGF0YSksIG1f
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCisgICAgICAgICsrc2VsZWN0b3JMaXN0
SW5kZXg7CisgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhj
b25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQpAQCAtMTM4LDE0ICsxODAsMTQg
QEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6cmVnaXN0ZXJMYXllcnMoY29uc3QgVmVjdG9yPENhc2Nh
ZGVMYXllck5hbWU+JiBuYW1lcykKIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cHVzaENhc2NhZGVM
YXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQogewotICAgIGlmIChtb2RlICE9IE1v
ZGU6Ok5vcm1hbCkKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY2FzY2FkZUxheWVySWRlbnRpZmll
ck1hcC5pc0VtcHR5KCkgJiYgIW1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBGb3IgaW5jcmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1l
LT5pZGVudGlmaWVyIG1hcC4KICAgICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1f
Y2FzY2FkZUxheWVycykKLSAgICAgICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRk
KGxheWVyLnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChhdXRvJiBs
YXllciA6IG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQorICAgICAgICAgICAgbV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmFkZChsYXllci5yZXNvbHZlZE5hbWUsICsraWRlbnRpZmllcik7
CiAgICAgfQogCiAgICAgYXV0byBuYW1lUmVzb2x2aW5nQW5vbnltb3VzID0gWyZdIHsKQEAgLTE1
OSwyOSArMjAxLDI5IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29u
c3QgQ2FzY2FkZUxheWVyTmFtZSYgbmFtZSkKIAogICAgIC8vIEZvciBoaWVyYXJjaGljYWwgbmFt
ZXMgd2UgcmVnaXN0ZXIgdGhlIGNvbnRhaW5pbmcgbGF5ZXJzIGluZGl2aWR1YWxseSBmaXJzdC4K
ICAgICBmb3IgKGF1dG8mIG5hbWVTZWdtZW50IDogbmFtZVJlc29sdmluZ0Fub255bW91cygpKSB7
Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5hcHBlbmQobmFtZVNlZ21lbnQpOwot
ICAgICAgICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IGNhc2NhZGVMYXllcklkZW50
aWZpZXJNYXAuZW5zdXJlKHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgWyZdIHsKKyAgICAgICAg
bV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKKyAgICAgICAg
bV9jdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IG1fY2FzY2FkZUxheWVySWRlbnRpZmll
ck1hcC5lbnN1cmUobV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7CiAgICAgICAgICAg
ICAvLyBQcmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1fY2Fz
Y2FkZUxheWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRDYXNj
YWRlTGF5ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1fY2Fz
Y2FkZUxheWVycy5zaXplKCk7CisgICAgICAgICAgICBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVy
cy5hcHBlbmQoeyBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgbV9jdXJyZW50Q2FzY2FkZUxh
eWVySWRlbnRpZmllciB9KTsKKyAgICAgICAgICAgIHJldHVybiBtX3J1bGVTZXQtPm1fY2FzY2Fk
ZUxheWVycy5zaXplKCk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiB9CiAK
IHZvaWQgUnVsZVNldEJ1aWxkZXI6OnBvcENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJO
YW1lJiBuYW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKKyAgICBpZiAoIW1f
cnVsZVNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvIHNpemUgPSBuYW1lLmlz
RW1wdHkoKSA/IDEgOiBuYW1lLnNpemUoKTsgc2l6ZS0tOykgewotICAgICAgICByZXNvbHZlZENh
c2NhZGVMYXllck5hbWUucmVtb3ZlTGFzdCgpOwotICAgICAgICBjdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoY3VycmVudENh
c2NhZGVMYXllcklkZW50aWZpZXIpLnBhcmVudElkZW50aWZpZXI7CisgICAgICAgIG1fcmVzb2x2
ZWRDYXNjYWRlTGF5ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jdXJyZW50Q2FzY2Fk
ZUxheWVySWRlbnRpZmllciA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllciht
X2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOwogICAgIH0K
IH0KIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogewot
ICAgIGlmIChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAobV9j
YXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byBjb21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CkBAIC0xODksOCArMjMxLDgg
QEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgICAg
ICAgICAgLy8gSWRlbnRpZmllcnMgYXJlIGluIHBhcnNlIG9yZGVyIHdoaWNoIGFsbW9zdCBjb3Jy
ZXNwb25kcyB0byB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIuCiAgICAgICAgICAgICAvLyBUaGUg
b25seSBleGNlcHRpb24gaXMgd2hlbiBhIHN1YmxheWVyIGdldHMgYWRkZWQgdG8gYSBsYXllciBh
ZnRlciBhZGRpbmcgb3RoZXIgbm9uLXN1YmxheWVycy4KICAgICAgICAgICAgIC8vIFRvIHJlc29s
dmUgdGhpcyB3ZSBuZWVkIGxvb2sgZm9yIGEgc2hhcmVkIGFuY2VzdG9yIGxheWVyLgotICAgICAg
ICAgICAgYXV0byBhUGFyZW50ID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihh
KS5wYXJlbnRJZGVudGlmaWVyOwotICAgICAgICAgICAgYXV0byBiUGFyZW50ID0gcnVsZVNldC0+
Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihiKS5wYXJlbnRJZGVudGlmaWVyOworICAgICAgICAg
ICAgYXV0byBhUGFyZW50ID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEp
LnBhcmVudElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGJQYXJlbnQgPSBtX3J1bGVTZXQt
PmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKICAgICAgICAg
ICAgIGlmIChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0g
YSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBh
cmVudCkKQEAgLTIwMiw3ICsyNDQsNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNj
YWRlTGF5ZXJPcmRlcigpCiAgICAgfTsKIAogICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxheWVyQ291bnQgPSBydWxlU2V0
LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOworICAgIGF1dG8gbGF5ZXJDb3VudCA9IG1fcnVsZVNl
dC0+bV9jYXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICBvcmRlclZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxheWVyQ291bnQpOwogICAgIGZvciAoUnVsZVNldDo6Q2FzY2FkZUxheWVySWRl
bnRpZmllciBpZGVudGlmaWVyID0gMTsgaWRlbnRpZmllciA8PSBsYXllckNvdW50OyArK2lkZW50
aWZpZXIpCiAgICAgICAgIG9yZGVyVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsK
QEAgLTIxMCw1MiArMjUyLDY2IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVM
YXllck9yZGVyKCkKICAgICBzdGQ6OnNvcnQob3JkZXJWZWN0b3IuYmVnaW4oKSwgb3JkZXJWZWN0
b3IuZW5kKCksIGNvbXBhcmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yZGVy
VmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVu
dGlmaWVyKG9yZGVyVmVjdG9yW2ldKS5vcmRlciA9IGkgKyAxOworICAgICAgICBtX3J1bGVTZXQt
PmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVyID0gaSArIDE7
CiB9CiAKIHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCkK
IHsKLSAgICBpZiAoIXJlc29sdmVyKQorICAgIGlmICghbV9yZXNvbHZlcikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0
IGF1dG8mIGIpIHsKLSAgICAgICAgYXV0byBhT3JkZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJP
cmRlckZvcklkZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGJPcmRl
ciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihiLmxheWVySWRlbnRp
Zmllcik7CisgICAgICAgIGF1dG8gYU9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRl
ckZvcklkZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOworICAgICAgICBhdXRvIGJPcmRlciA9
IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlm
aWVyKTsKICAgICAgICAgcmV0dXJuIGFPcmRlciA8IGJPcmRlcjsKICAgICB9OwogCiAgICAgLy8g
VGhlIG9yZGVyIG1heSBjaGFuZ2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0
YXRpbmcgcnVsZXMgZnJvbSBlYXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0Fk
ZCA9IHN0ZDo6ZXhjaGFuZ2UocnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVy
cywgeyB9KTsKLSAgICBydWxlc1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJl
c29sdmVyTXV0YXRpbmdSdWxlcykpOworICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6ZXhjaGFu
Z2UobV9ydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOworICAg
IHJ1bGVzVG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0
aW5nUnVsZXMpKTsKIAotICAgIGlmICghY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5
KCkpCisgICAgaWYgKCFtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQogICAg
ICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9BZGQuYmVnaW4oKSwgcnVsZXNUb0FkZC5lbmQo
KSwgY29tcGFyZUxheWVycyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbGxlY3RlZFJ1bGUgOiBydWxl
c1RvQWRkKSB7CiAgICAgICAgIGlmIChjb2xsZWN0ZWRSdWxlLmxheWVySWRlbnRpZmllcikKLSAg
ICAgICAgICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5k
KGNvbGxlY3RlZFJ1bGUpOworICAgICAgICAgICAgbV9ydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRp
bmdSdWxlc0luTGF5ZXJzLmFwcGVuZChjb2xsZWN0ZWRSdWxlKTsKIAogICAgICAgICBhdXRvJiBy
dWxlID0gY29sbGVjdGVkUnVsZS5ydWxlOwogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZh
Y2U+KHJ1bGUpKSB7Ci0gICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0
KCkpLCBmYWxzZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNs
YXJhdGlvbnNDYWNoZSgpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250
U2VsZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1
bGUuZ2V0KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0
Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7Ci0g
ICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFs
ZXR0ZVZhbHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUu
Z2V0KCkpKTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlKCk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpLmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250UGFs
ZXR0ZVZhbHVlcz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+aW52YWxp
ZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZSkpIHsKLSAg
ICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtl
eWZyYW1lcz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+YWRkS2V5ZnJh
bWVTdHlsZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgfQogfQogCi1SdWxlU2V0TWVkaWFRdWVy
eUNvbGxlY3Rvcjo6flJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0Owordm9p
ZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlRHluYW1pY01lZGlhUXVlcmllcygpCit7CisgICAgaWYg
KG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcykK
KyAgICAgICAgbV9ydWxlU2V0LT5tX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0g
dHJ1ZTsKKworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNl
dC0+bV9keW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5t
X2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5
Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhl
IGluaXRpYWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlh
UXVlcnlSdWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4
KTsKKyAgICB9Cit9CisKK1J1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+TWVk
aWFRdWVyeUNvbGxlY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNv
bGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK2Jvb2wg
UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25z
dCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjc1LDcgKzMzMSw3IEBAIGJvb2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6
OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1l
ZGlhUXVlcnlTZXQqIHNldCkKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0
b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQgfHwgZHlu
YW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNr
Lmxhc3QoKS5zZXQuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5OCwxNCArMzU0LDcgQEAg
dm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQq
IHNldCkKICAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBS
dWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQotewotICAgIGlm
IChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRp
ZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgPSB0cnVlOwotfQotCi12b2lk
IFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURh
dGEmIHJ1bGVEYXRhKQordm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6
YWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoZHlu
YW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9SdWxlU2V0QnVpbGRlci5oCmluZGV4IGVmNGFkZjA4MzE1NWQwNjNkZjQ1MjVmMWQ1YjFk
M2JkMTcyYzZiYzIuLjAyMjBjYTI0MWVjMmNmZTFhMmM2MTNhNGY0ZDJkZGMwODg2ODNjMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaApAQCAtMjYsNDYgKzI2LDE5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCi1zdHJ1Y3QgUnVsZVNldE1l
ZGlhUXVlcnlDb2xsZWN0b3IgewotICAgIH5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpOwor
Y2xhc3MgUnVsZVNldEJ1aWxkZXIgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgTWVkaWFRdWVy
eU1vZGUgeyBEeW5hbWljLCBTdGF0aWMgfTsKKyAgICBSdWxlU2V0QnVpbGRlcihSdWxlU2V0Jiwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFJlc29sdmVyKiA9IG51bGxwdHIpOwogCi0gICAg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgIGNvbnN0IGJvb2wgY29s
bGVjdER5bmFtaWMgeyBmYWxzZSB9OwotCi0gICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKLSAg
ICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAgVmVjdG9yPHNpemVf
dD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3Ig
cnVsZUZlYXR1cmVzIHsgfTsKLSAgICB9OwotICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHlu
YW1pY0NvbnRleHRTdGFjayB7IH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlh
UXVlcnlSdWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07Ci0gICAgYm9vbCBkaWRNdXRh
dGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKLSAgICBib29sIGhh
c1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgcHVz
aEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIHBvcChjb25zdCBN
ZWRpYVF1ZXJ5U2V0Kik7Ci0gICAgdm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOwotICAgIHZvaWQg
YWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7Ci19OwotCi1zdHJ1Y3QgUnVsZVNldEJ1
aWxkZXIgewotICAgIGVudW0gY2xhc3MgTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNj
YW4gfTsKLQotICAgIFJlZjxSdWxlU2V0PiBydWxlU2V0OwotICAgIFJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yIG1lZGlhUXVlcnlDb2xsZWN0b3I7Ci0gICAgUmVzb2x2ZXIqIHJlc29sdmVyIHsg
bnVsbHB0ciB9OwotICAgIE1vZGUgbW9kZSB7IE1vZGU6Ok5vcm1hbCB9OwotICAgIENhc2NhZGVM
YXllck5hbWUgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKLSAgICBIYXNoTWFwPENhc2Nh
ZGVMYXllck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IGNhc2NhZGVMYXll
cklkZW50aWZpZXJNYXAgeyB9OwotICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIg
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgeyAwIH07Ci0gICAgVmVjdG9yPFJ1bGVTZXQ6
OlJlc29sdmVyTXV0YXRpbmdSdWxlPiBjb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9
OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
KTsKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYs
IGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnkgPSBudWxscHRyKTsKIAogICAgIH5SdWxl
U2V0QnVpbGRlcigpOwogCiBwcml2YXRlOgorICAgIFJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImKTsKKworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cyhj
b25zdCBTdHlsZVNoZWV0Q29udGVudHMmKTsKICAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mKTsKICAgICB2b2lkIGFkZFN0eWxlUnVsZShj
b25zdCBTdHlsZVJ1bGUmKTsKIApAQCAtNzQsNiArNDcsMzcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHBvcENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJik7CiAgICAgdm9pZCB1cGRh
dGVDYXNjYWRlTGF5ZXJPcmRlcigpOwogICAgIHZvaWQgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2
ZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUR5bmFtaWNNZWRpYVF1ZXJpZXMoKTsKKworICAgIHN0cnVj
dCBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsKKyAgICAgICAgfk1lZGlhUXVlcnlDb2xsZWN0b3IoKTsK
KworICAgICAgICBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3I7CisgICAgICAg
IGJvb2wgY29sbGVjdER5bmFtaWMgeyBmYWxzZSB9OworCisgICAgICAgIHN0cnVjdCBEeW5hbWlj
Q29udGV4dCB7CisgICAgICAgICAgICBSZWY8Y29uc3QgTWVkaWFRdWVyeVNldD4gc2V0OworICAg
ICAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKKyAgICAg
ICAgICAgIFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0dXJlcyB7IH07CisgICAgICAgIH07Cisg
ICAgICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHluYW1pY0NvbnRleHRTdGFjayB7IH07CisK
KyAgICAgICAgVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IGR5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMgeyB9OworICAgICAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyaWVzIHsgZmFsc2UgfTsKKworICAgICAgICBib29sIHB1c2hBbmRFdmFsdWF0ZShjb25z
dCBNZWRpYVF1ZXJ5U2V0Kik7CisgICAgICAgIHZvaWQgcG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQq
KTsKKyAgICAgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmKTsKKyAgICB9
OworCisgICAgUmVmUHRyPFJ1bGVTZXQ+IG1fcnVsZVNldDsKKyAgICBNZWRpYVF1ZXJ5Q29sbGVj
dG9yIG1fbWVkaWFRdWVyeUNvbGxlY3RvcjsKKyAgICBSZXNvbHZlciogbV9yZXNvbHZlciB7IG51
bGxwdHIgfTsKKyAgICBDYXNjYWRlTGF5ZXJOYW1lIG1fcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1l
IHsgfTsKKyAgICBIYXNoTWFwPENhc2NhZGVMYXllck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXll
cklkZW50aWZpZXI+IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcCB7IH07CisgICAgUnVsZVNl
dDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVy
IHsgMCB9OworICAgIFZlY3RvcjxSdWxlU2V0OjpSZXNvbHZlck11dGF0aW5nUnVsZT4gbV9jb2xs
ZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OworICAgIGJvb2wgZGlkU2VlUmVzb2x2ZXJN
dXRhdGlvbldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKaW5kZXggZjM4YmQ3MTkzYmIwNTRj
MDJkNTRmOTViNjcxNWM1NjI1MzdjMTZjNi4uNjNjMzQ5NDlmMTM0YmU0YWVmMjE4Zjc3ZDA4MDlm
YmYwYzA4MDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlk
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAK
QEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgot
I2luY2x1ZGUgIlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTkyLDggKzkyLDEwIEBAIEludmFsaWRhdG9y
OjpJbnZhbGlkYXRvcihjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4mIHNoZWV0cywg
Y29uc3QgTWVkaWFRCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fb3duZWRSdWxlU2V0LT5kaXNh
YmxlQXV0b1Nocmlua1RvRml0KCk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBydWxlU2V0QnVpbGRl
cigqbV9vd25lZFJ1bGVTZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGZvciAoYXV0byYg
c2hlZXQgOiBzaGVldHMpCi0gICAgICAgIG1fb3duZWRSdWxlU2V0LT5hZGRSdWxlc0Zyb21TaGVl
dCgqc2hlZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworICAgICAgICBydWxlU2V0QnVpbGRlci5h
ZGRSdWxlc0Zyb21TaGVldCgqc2hlZXQpOwogCiAgICAgbV9ydWxlSW5mb3JtYXRpb24gPSBjb2xs
ZWN0UnVsZUluZm9ybWF0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZVJ1bGVTZXRzLmNwcAppbmRleCAxYWI0YTk5ZDNmNzEzYTcwMWYxMTE4NmM2MjNlZTljMWRjYTRh
ZTc1Li41YjkzYWVhMmUwN2Y1YWI0MWZjMDRjZDM0MjUxNDZhYjI2MzkyMTIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFs
dWF0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgpAQCAtNzMsOSArNzQsMTEgQEAgdm9pZCBTY29w
ZVJ1bGVTZXRzOjp1cGRhdGVVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGVJZk5lZWRlZCgpIGNvbnN0
CiAKICAgICAvLyBNZWRpYSBxdWVyaWVzIG9uIHVzZXIgYWdlbnQgc2hlZXQgbmVlZCB0byBldmFs
dWF0ZWQgaW4gZG9jdW1lbnQgY29udGV4dC4gVGhleSBiZWhhdmUgbGlrZSBhdXRob3Igc2hlZXRz
IGluIHRoaXMgcmVzcGVjdC4KICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9zdHls
ZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKKwogICAgIG1fdXNlckFnZW50TWVkaWFR
dWVyeVN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgCi0gICAgbV91c2VyQWdlbnRNZWRp
YVF1ZXJ5U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVy
eVN0eWxlU2hlZXQsIG51bGxwdHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZl
cik7CisKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKCptX3VzZXJBZ2VudE1lZGlhUXVlcnlT
dHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgYnVpbGRl
ci5hZGRSdWxlc0Zyb21TaGVldCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0
KTsKIH0KIAogUnVsZVNldCogU2NvcGVSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKQEAgLTg5
LDMxICs5MiwzOCBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5bGUoKQog
ewogICAgIGF1dG8mIGV4dGVuc2lvblN0eWxlU2hlZXRzID0gbV9zdHlsZVJlc29sdmVyLmRvY3Vt
ZW50KCkuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKTsKICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVh
dG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKLSAgICBhdXRvIHRl
bXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCog
cGFnZVVzZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkKLSAg
ICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29u
dGVudHMoKSwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVyKTsK
KworICAgIGF1dG8gdXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoYXV0
byogcGFnZVVzZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkg
eworICAgICAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2
YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9t
U2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSk7CisgICAgfQorCiAjaWYgRU5BQkxFKEFQ
UF9CT1VORF9ET01BSU5TKQogICAgIGF1dG8qIHBhZ2UgPSBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKS5wYWdlKCk7CiAgICAgaWYgKCFleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJT
dHlsZVNoZWV0cygpLmlzRW1wdHkoKSAmJiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLnNob3VsZEVuYWJsZUluQXBwQnJvd3NlclByaXZhY3lQcm90ZWN0aW9ucygp
KQogICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiSWdub3Jpbmcg
dXNlciBzdHlsZSBzaGVldCBmb3Igbm9uLWFwcCBib3VuZCBkb21haW4uIl9zKTsKICAgICBlbHNl
IHsKLSAgICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHls
ZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNo
ZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB1c2Vy
U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgICAgICBpZiAocGFnZSAmJiAhZXh0ZW5z
aW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5ub3RpZnlQYWdlT2ZB
cHBCb3VuZEJlaGF2aW9yKCk7CiAgICAgfQogI2Vsc2UKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNl
clN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRz
KCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworICAgIGNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRV
c2VyU3R5bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICNlbmRp
ZgotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVkaWFR
dWVyeUV2YWx1YXRvcik7Ci0gICAgaWYgKHRlbXBVc2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8
fCB0ZW1wVXNlclN0eWxlLT5wYWdlUnVsZXMoKS5zaXplKCkgPiAwKQotICAgICAgICBtX3VzZXJT
dHlsZSA9IFdURk1vdmUodGVtcFVzZXJTdHlsZSk7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJT
dHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygp
LCB1c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworCisgICAgaWYgKHVzZXJTdHlsZS0+
cnVsZUNvdW50KCkgPiAwIHx8IHVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKKyAg
ICAgICAgbV91c2VyU3R5bGUgPSBXVEZNb3ZlKHVzZXJTdHlsZSk7CiB9CiAKLXZvaWQgU2NvcGVS
dWxlU2V0czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlLCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0pCit2b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxl
Y3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRvcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlclNoZWV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0
c1tpXS0+Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbnVsbHB0ciwgbWVk
aXVtLCBtX3N0eWxlUmVzb2x2ZXIpOworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIodXNlclN0
eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICBmb3IgKGF1
dG8mIHNoZWV0IDogdXNlclNoZWV0cykgeworICAgICAgICBBU1NFUlQoc2hlZXQtPmNvbnRlbnRz
KCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVl
dChzaGVldC0+Y29udGVudHMoKSk7CiAgICAgfQogfQogCkBAIC0xNzUsMTEgKzE4NSwxMyBAQCBz
dGQ6Om9wdGlvbmFsPER5bmFtaWNNZWRpYVF1ZXJ5RXZhbHVhdGlvbkNoYW5nZXM+IFNjb3BlUnVs
ZVNldHM6OmV2YWx1YXRlRHluYW1pYwogICAgIHJldHVybiBldmFsdWF0aW9uQ2hhbmdlczsKIH0K
IAotdm9pZCBTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlhUXVlcnlFdmFsdWF0
b3IqIG1lZGl1bSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVy
cykKK3ZvaWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yKiBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0
b3JDU1NPTVdyYXBwZXJzKQogeworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIoKm1fYXV0aG9y
U3R5bGUsICptZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKwogICAgIGZv
ciAoYXV0byYgY3NzU2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NFUlQoIWNzc1No
ZWV0LT5kaXNhYmxlZCgpKTsKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQoY3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgKm1lZGl1
bSwgbV9zdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChj
c3NTaGVldC0+Y29udGVudHMoKSwgY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpKTsKICAgICAgICAg
aW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NT
aGVldC5nZXQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9V
c2VyQWdlbnRTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5j
cHAKaW5kZXggY2VkMThhMzlkYWJkZTIyYjM1MDlkMDg3ZjkxNWIzODIzNzBhYWUwZi4uZDUwN2Zi
MTYzZmRlMmQyZWY2ZjE5YzJhMTk0YzMwNDA2NzI3NzE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1VzZXJBZ2VudFN0eWxlLmNwcApAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUg
IlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U3R5bGVTaGVldENvbnRlbnRzLmgiCkBAIC0xMDcsOCArMTA3LDExIEBAIHN0YXRpYyBTdHlsZVNo
ZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIAogdm9pZCBVc2Vy
QWdlbnRTdHlsZTo6YWRkVG9EZWZhdWx0U3R5bGUoU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkK
IHsKLSAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCBzY3JlZW5FdmFs
KCkpOwotICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgcHJp
bnRFdmFsKCkpOworICAgIFJ1bGVTZXRCdWlsZGVyIHNjcmVlbkJ1aWxkZXIoKmRlZmF1bHRTdHls
ZSwgc2NyZWVuRXZhbCgpKTsKKyAgICBzY3JlZW5CdWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0KTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHByaW50QnVpbGRlcigqZGVmYXVsdFByaW50U3R5
bGUsIHByaW50RXZhbCgpKTsKKyAgICBwcmludEJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQpOwogCiAgICAgLy8gQnVpbGQgYSBzdHlsZXNoZWV0IGNvbnNpc3Rpbmcgb2Ygbm9uLXRyaXZp
YWwgbWVkaWEgcXVlcmllcyBzZWVuIGluIGRlZmF1bHQgc3R5bGUuCiAgICAgLy8gUnVsZXNldHMg
Zm9yIHRoZXNlIGNhbid0IGJlIGdsb2JhbCBhbmQgbmVlZCB0byBiZSBidWlsdCBpbiBkb2N1bWVu
dCBjb250ZXh0LgpAQCAtMTQ1LDcgKzE0OCw5IEBAIHZvaWQgVXNlckFnZW50U3R5bGU6OmluaXRE
ZWZhdWx0U3R5bGVTaGVldCgpCiAgICAgLy8gUXVpcmtzLW1vZGUgcnVsZXMuCiAgICAgU3RyaW5n
IHF1aXJrc1J1bGVzID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHF1
aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0
KSkpICsgUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwog
ICAgIHF1aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVpcmtzUnVsZXMpOwotICAgIGRl
ZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnF1aXJrc1N0eWxlU2hlZXQsIHNj
cmVlbkV2YWwoKSk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBxdWlya0J1aWxkZXIoKmRlZmF1bHRR
dWlya3NTdHlsZSwgc2NyZWVuRXZhbCgpKTsKKyAgICBxdWlya0J1aWxkZXIuYWRkUnVsZXNGcm9t
U2hlZXQoKnF1aXJrc1N0eWxlU2hlZXQpOwogCiAgICAgKytkZWZhdWx0U3R5bGVWZXJzaW9uOwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440060</attachid>
            <date>2021-10-04 07:45:25 -0700</date>
            <delta_ts>2021-10-04 07:49:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004174522.patch</filename>
            <type>text/plain</type>
            <size>36989</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uNTExYzIyNWQzYTQwMjE1ODFkODVkZDRkOTk0MTYx
ZTdkOGI1NDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsYW4gQnVqdGFzLgorCisgICAgICAg
IEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMg
Y2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13YXkg
ZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVyLgor
CisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6c2hy
aW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5hbWlj
UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtUb0Zp
dCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0
YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojpwb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZCk6
IERlbGV0ZWQuCisKKyAgICAgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBpcyBub3cgYSBwcml2YXRl
IGlubmVyIHN0cnVjdCBvZiBSdWxlU2V0QnVpbGRlci4KKworICAgICAgICAqIHN0eWxlL1J1bGVT
ZXRCdWlsZGVyLmg6CisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6bV9kaXJ0aWVzQWxsU3R5bGUpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGVS
dWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVs
ZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmFk
ZFRvRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpVc2VyQWdlbnRTdHls
ZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KToKKwogMjAyMS0xMC0wMyAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBSdWxlU2V0IGJ1aWxkZXIgdG8gYSBm
aWxlIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggNjhlZGNmMWUzZTU2
MmE2NWFlNjBlYjI3MjYxYTNiOWQzNmY2MDkyNy4uY2FiNzU2ZTgzOGQ1OTNhMGIzN2FmZWEyNTEw
OWZmNzFjZDRhN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUnVsZVNldEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCkBAIC04NCw5ICs4MywxNyBAQCBz
dGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9yLT5wc2V1
ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQogCi12b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBzZWxlY3Rv
ckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2FkZUxheWVy
SWRlbnRpZmllciwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0
b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCkKIHsKLSAgICBSdWxl
RGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9y
dWxlQ291bnQrKyk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwg
c2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KTsKKyAgICBhZGRSdWxlKFdURk1vdmUocnVs
ZURhdGEpLCAwKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFJ1bGVEYXRhJiYgcnVsZURh
dGEsIENhc2NhZGVMYXllcklkZW50aWZpZXIgY2FzY2FkZUxheWVySWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQocnVsZURhdGEucG9zaXRpb24oKSA9PSBtX3J1bGVDb3VudCk7CisKKyAgICArK21f
cnVsZUNvdW50OwogCiAgICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXIpIHsKICAgICAgICAg
YXV0byBvbGRTaXplID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyRm9yUnVsZVBvc2l0aW9uLnNp
emUoKTsKQEAgLTk3LDkgKzEwNCw2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25zdCBTdHls
ZVJ1bGUmIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlCiAKICAgICBt
X2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKLSAgICBpZiAobWVkaWFRdWVy
eUNvbGxlY3RvcikKLSAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZUlmTmVlZGVk
KHJ1bGVEYXRhKTsKLQogICAgIHVuc2lnbmVkIGNsYXNzQnVja2V0U2l6ZSA9IDA7CiAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0b3IgPSBudWxscHRyOwogICAgIGNvbnN0IENTU1NlbGVj
dG9yKiB0YWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC0yNzIsNDUgKzI3Niw2IEBAIHZvaWQgUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYgcnVsZSkKICAgICBtX3BhZ2VSdWxlcy5h
cHBlbmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0
IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2
YWx1YXRvcikKLXsKLSAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRN
ZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKLSAgICBidWlsZGVyLmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0KTsKLQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCi0g
ICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeVNldCog
c2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBTdHlsZTo6
UmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKLSAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlz
LCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBudWxscHRy
LCBSdWxlU2V0QnVpbGRlcjo6TW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLSAgICAgICAg
aWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVy
eSkpCi0gICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsKLSAgICAg
ICAgYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLSAgICAgICAg
cmV0dXJuICFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRo
aW5EeW5hbWljTWVkaWFRdWVyeTsKLSAgICB9KCk7Ci0KLSAgICBSdWxlU2V0QnVpbGRlciBidWls
ZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5V
c2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07Ci0KLSAgICBpZiAo
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkK
LSAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgYnVpbGRlci5t
ZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLQotICAgIG1faGFzVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuaGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7Ci0KLSAgICBpZiAoIWJ1aWxkZXIubWVkaWFRdWVy
eUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBh
dXRvIGZpcnN0TmV3SW5kZXggPSBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2l6ZSgpOwotICAg
ICAgICBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoYnVpbGRl
ci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKLQotICAgICAg
ICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBldmFsdWF0ZUR5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMoZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KIHZvaWQgUnVsZVNldDo6dHJhdmVyc2VSdWxlRGF0
YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKQEAgLTQxNCwxNCArMzc5LDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFw
KQogICAgICAgICB2ZWN0b3ItPnNocmlua1RvRml0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBzaHJpbmtEeW5hbWljUnVsZXMoVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVs
ZXM+JiBkeW5hbWljUnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogZHluYW1pY1J1bGVz
KQotICAgICAgICBydWxlLnNocmlua1RvRml0KCk7Ci0KLSAgICBkeW5hbWljUnVsZXMuc2hyaW5r
VG9GaXQoKTsKLX0KLQogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAgICAgc2hyaW5r
TWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CkBAIC00NDMsNyArNDAwLDkgQEAgdm9pZCBSdWxl
U2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBt
X2ZlYXR1cmVzLnNocmlua1RvRml0KCk7CiAKLSAgICBzaHJpbmtEeW5hbWljUnVsZXMobV9keW5h
bWljTWVkaWFRdWVyeVJ1bGVzKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBtX2R5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMpCisgICAgICAgIHJ1bGUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2R5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgIG1fY2FzY2FkZUxheWVycy5zaHJp
bmtUb0ZpdCgpOwogICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5z
aHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCmluZGV4IDhhNzEzZTY1YTk4ZjhkNGJj
ZDdlZDI2MzQyMzExMWVkODI2M2M3OGEuLjU4NWYwNGJhZGNkYTFkN2JlM2Y2MzBmZWVhZDg4ZmIz
NzQzY2ZiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNw
YWNlIFN0eWxlIHsKIAogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBSdWxlU2V0Owotc3RydWN0IFJ1
bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOwogCiB1c2luZyBJbnZhbGlkYXRpb25SdWxlU2V0VmVj
dG9yID0gVmVjdG9yPFJlZlB0cjxjb25zdCBSdWxlU2V0PiwgMT47CiAKQEAgLTcxLDI1ICs3MCw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURhdGFWZWN0
b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxl
RGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgc3RydWN0IER5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMgewotICAgICAgICBWZWN0b3I8UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+PiBtZWRpYVF1
ZXJ5U2V0czsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zOwot
ICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXM7Ci0gICAgICAgIGJvb2wgcmVx
dWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHJlc3VsdCB7IHRydWUgfTsK
LQotICAgICAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVk
aWFRdWVyeVNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIGFmZmVjdGVkUnVsZVBvc2l0
aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgcnVsZUZlYXR1cmVzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25z
dCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7Ci0gICAg
dm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBN
ZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5
bGU6OlJlc29sdmVyJik7Ci0KLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVk
IGNhc2NhZGVMYXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqID0gbnVs
bHB0cik7CisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKICAgICB2b2lkIGFkZFBhZ2VS
dWxlKFN0eWxlUnVsZVBhZ2UmKTsKIAogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0IEF0b21T
dHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwpAQCAtMTI2LDEyICsx
MDcsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9yKGNvbnN0
IFJ1bGVEYXRhJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBSdWxlU2V0
QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgUnVsZVNldEJ1aWxkZXI7CiAKICAgICBSdWxlU2V0
KCk7CiAKICAgICB1c2luZyBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gdW5zaWduZWQ7CiAKKyAg
ICB2b2lkIGFkZFJ1bGUoUnVsZURhdGEmJiwgQ2FzY2FkZUxheWVySWRlbnRpZmllcik7CisKICAg
ICBzdHJ1Y3QgUmVzb2x2ZXJNdXRhdGluZ1J1bGUgewogICAgICAgICBSZWY8U3R5bGVSdWxlQmFz
ZT4gcnVsZTsKICAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBsYXllcklkZW50aWZpZXI7
CkBAIC0xNTUsNiArMTM4LDIxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ2FzY2FkZUxheWVyJiBj
YXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKENhc2NhZGVMYXllcklkZW50aWZpZXIgaWRlbnRpZmll
cikgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGF5ZXJzW2lkZW50aWZpZXIgLSAxXTsgfQogICAg
IHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyKSBjb25zdDsKIAorICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKKyAg
ICAgICAgVmVjdG9yPFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Cisg
ICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKKyAgICAgICAgUnVs
ZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzOworICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJl
c2V0IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07CisKKyAgICAgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRz
LnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICB9CisgICAgfTsKKwogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9tUnVsZU1h
cCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdMb2NhbE5hbWVSdWxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBhMDFmZTE5MmQ4YjM0ODRi
NjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4Li5lY2Q3YzNjYWM1MDhmZTU0NjYxM2VkNDRmMDhiMzM0
MjkzZDYxYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCkBAIC0z
MiwzNiArMzIsNzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAK
K1J1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiBydWxlU2V0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFJlc29sdmVyKiByZXNvbHZlcikKKyAgICA6
IG1fcnVsZVNldCgmcnVsZVNldCkKKyAgICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1
YXRvciB9KQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKworUnVsZVNldEJ1aWxk
ZXI6OlJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcikK
KyAgICA6IG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciwgdHJ1ZSB9KQoreworfQor
CiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkKIHsKLSAgICBpZiAobW9kZSA9PSBN
b2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB1cGRhdGVEeW5h
bWljTWVkaWFRdWVyaWVzKCk7CiAgICAgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsKKwor
ICAgIGlmIChtX3J1bGVTZXQtPm1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAgICAgbV9y
dWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxl
c0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBzaGVldFF1ZXJ5KQoreworICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3Jlc29sdmVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5lciht
X21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgaWYgKG11dGF0aW9uU2Nh
bm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQor
ICAgICAgICAgICAgbXV0YXRpb25TY2FubmVyLmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChz
aGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9uU2Nhbm5lci5kaWRTZWVSZXNv
bHZlck11dGF0aW9uV2l0aGluRHluYW1pY01lZGlhUXVlcnk7CisgICAgfTsKKworICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5jb2xsZWN0RHluYW1pYyA9IGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5
UmVzb2x1dGlvbigpOworCisgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUoc2hlZXRRdWVyeSkpCisgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7CiB9CiAKIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogewogICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7Ci0g
ICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuICYmIG1lZGlhUXVl
cnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSkKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZGlkU2VlUmVzb2x2ZXJNdXRhdGlvbldpdGhp
bkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChp
czxTdHlsZVJ1bGU+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9y
bWFsKQorICAgICAgICAgICAgaWYgKG1fcnVsZVNldCkKICAgICAgICAgICAgICAgICBhZGRTdHls
ZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVT
ZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAg
ICAgICBpZiAobV9ydWxlU2V0KQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1
bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAg
ICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpOwotICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRl
KCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVy
eUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAg
ICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAg
ICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVz
KCkpOworICAgICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1l
ZGlhUXVlcmllcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpczxTdHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTE1LDExIEBAIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9u
dFBhbGV0dGVWYWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkg
ewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsK
LSAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1
bGVzLmFwcGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAg
ICAgICAgICAgIGlmICghbV9ydWxlU2V0ICYmICFtX21lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1p
Y0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGlkU2VlUmVzb2x2ZXJN
dXRhdGlvbldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYg
KG1fcmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5n
UnVsZXMuYXBwZW5kKHsgKnJ1bGUsIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5bGVS
dWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUp
LmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKQEAgLTkzLDcgKzEyOSw3IEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4mIHJ1bGVzKQogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9t
U2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3ZvaWQgUnVsZVNldEJ1aWxk
ZXI6OmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBz
aGVldCkKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVmb3JlSW1w
b3J0UnVsZXMoKSkKICAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3QoKSk7CkBA
IC0xMDIsMTcgKzEzOCwxNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogICAgICAgICBpZiAoIXJ1bGUtPnN0
eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVF1
ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAg
ICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVsZS0+bWVk
aWFRdWVyaWVzKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1lID0gcnVs
ZS0+Y2FzY2FkZUxheWVyTmFtZSgpOwogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUp
CiAgICAgICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CiAK
LSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkpOworICAg
ICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cygqcnVsZS0+c3R5bGVTaGVldCgpKTsK
IAogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCiAgICAgICAgICAgICAgICAgcG9w
Q2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKICAgICAgICAgfQotICAgICAgICBtZWRp
YVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIH0KIAogICAg
IGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKQEAgLTEyNCw4ICsxNjAsMTQgQEAg
dm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkK
ICAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3Rvcklu
ZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVj
dG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAg
IHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgr
KywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsK
KyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RG
b3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0
ZXIoc2VsZWN0b3JJbmRleCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2Vs
ZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50KCkpOwor
ICAgICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVEYXRhKTsK
KworICAgICAgICBtX3J1bGVTZXQtPmFkZFJ1bGUoV1RGTW92ZShydWxlRGF0YSksIG1fY3VycmVu
dENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCisgICAgICAgICsrc2VsZWN0b3JMaXN0SW5kZXg7
CisgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBW
ZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQpAQCAtMTM4LDE0ICsxODAsMTQgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6cmVnaXN0ZXJMYXllcnMoY29uc3QgVmVjdG9yPENhc2NhZGVMYXll
ck5hbWU+JiBuYW1lcykKIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihj
b25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5v
cm1hbCkKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNh
c2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFydWxlU2V0LT5tX2Nhc2NhZGVM
YXllcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5p
c0VtcHR5KCkgJiYgIW1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyBGb3IgaW5jcmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1lLT5pZGVu
dGlmaWVyIG1hcC4KICAgICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1fY2FzY2Fk
ZUxheWVycykKLSAgICAgICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVy
LnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChhdXRvJiBsYXllciA6
IG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQorICAgICAgICAgICAgbV9jYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyTWFwLmFkZChsYXllci5yZXNvbHZlZE5hbWUsICsraWRlbnRpZmllcik7CiAgICAg
fQogCiAgICAgYXV0byBuYW1lUmVzb2x2aW5nQW5vbnltb3VzID0gWyZdIHsKQEAgLTE1OSwyOSAr
MjAxLDI5IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2Fz
Y2FkZUxheWVyTmFtZSYgbmFtZSkKIAogICAgIC8vIEZvciBoaWVyYXJjaGljYWwgbmFtZXMgd2Ug
cmVnaXN0ZXIgdGhlIGNvbnRhaW5pbmcgbGF5ZXJzIGluZGl2aWR1YWxseSBmaXJzdC4KICAgICBm
b3IgKGF1dG8mIG5hbWVTZWdtZW50IDogbmFtZVJlc29sdmluZ0Fub255bW91cygpKSB7Ci0gICAg
ICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5hcHBlbmQobmFtZVNlZ21lbnQpOwotICAgICAg
ICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IGNhc2NhZGVMYXllcklkZW50aWZpZXJN
YXAuZW5zdXJlKHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgWyZdIHsKKyAgICAgICAgbV9yZXNv
bHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKKyAgICAgICAgbV9jdXJy
ZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5l
bnN1cmUobV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7CiAgICAgICAgICAgICAvLyBQ
cmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5zaXplKCk7CisgICAgICAgICAgICBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5hcHBl
bmQoeyBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRl
bnRpZmllciB9KTsKKyAgICAgICAgICAgIHJldHVybiBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVy
cy5zaXplKCk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiB9CiAKIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OnBvcENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBu
YW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKKyAgICBpZiAoIW1fcnVsZVNl
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvIHNpemUgPSBuYW1lLmlzRW1wdHko
KSA/IDEgOiBuYW1lLnNpemUoKTsgc2l6ZS0tOykgewotICAgICAgICByZXNvbHZlZENhc2NhZGVM
YXllck5hbWUucmVtb3ZlTGFzdCgpOwotICAgICAgICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRp
ZmllciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoY3VycmVudENhc2NhZGVM
YXllcklkZW50aWZpZXIpLnBhcmVudElkZW50aWZpZXI7CisgICAgICAgIG1fcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihtX2N1cnJl
bnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOwogICAgIH0KIH0KIAog
dm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogewotICAgIGlm
IChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAobV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBjb21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CkBAIC0xODksOCArMjMxLDggQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgICAgICAgICAg
Ly8gSWRlbnRpZmllcnMgYXJlIGluIHBhcnNlIG9yZGVyIHdoaWNoIGFsbW9zdCBjb3JyZXNwb25k
cyB0byB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIuCiAgICAgICAgICAgICAvLyBUaGUgb25seSBl
eGNlcHRpb24gaXMgd2hlbiBhIHN1YmxheWVyIGdldHMgYWRkZWQgdG8gYSBsYXllciBhZnRlciBh
ZGRpbmcgb3RoZXIgbm9uLXN1YmxheWVycy4KICAgICAgICAgICAgIC8vIFRvIHJlc29sdmUgdGhp
cyB3ZSBuZWVkIGxvb2sgZm9yIGEgc2hhcmVkIGFuY2VzdG9yIGxheWVyLgotICAgICAgICAgICAg
YXV0byBhUGFyZW50ID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihhKS5wYXJl
bnRJZGVudGlmaWVyOwotICAgICAgICAgICAgYXV0byBiUGFyZW50ID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyRm9ySWRlbnRpZmllcihiKS5wYXJlbnRJZGVudGlmaWVyOworICAgICAgICAgICAgYXV0
byBhUGFyZW50ID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVu
dElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGJQYXJlbnQgPSBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKICAgICAgICAgICAgIGlm
IChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0gYSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBhcmVudCkK
QEAgLTIwMiw3ICsyNDQsNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5
ZXJPcmRlcigpCiAgICAgfTsKIAogICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxheWVyQ291bnQgPSBydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMuc2l6ZSgpOworICAgIGF1dG8gbGF5ZXJDb3VudCA9IG1fcnVsZVNldC0+bV9j
YXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICBvcmRlclZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxheWVyQ291bnQpOwogICAgIGZvciAoUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyID0gMTsgaWRlbnRpZmllciA8PSBsYXllckNvdW50OyArK2lkZW50aWZpZXIp
CiAgICAgICAgIG9yZGVyVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsKQEAgLTIx
MCw1MiArMjUyLDY2IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9y
ZGVyKCkKICAgICBzdGQ6OnNvcnQob3JkZXJWZWN0b3IuYmVnaW4oKSwgb3JkZXJWZWN0b3IuZW5k
KCksIGNvbXBhcmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yZGVyVmVjdG9y
LnNpemUoKTsgKytpKQotICAgICAgICBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVy
KG9yZGVyVmVjdG9yW2ldKS5vcmRlciA9IGkgKyAxOworICAgICAgICBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVyID0gaSArIDE7CiB9CiAK
IHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCkKIHsKLSAg
ICBpZiAoIXJlc29sdmVyKQorICAgIGlmICghbV9yZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8m
IGIpIHsKLSAgICAgICAgYXV0byBhT3JkZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZv
cklkZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGJPcmRlciA9IHJ1
bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihiLmxheWVySWRlbnRpZmllcik7
CisgICAgICAgIGF1dG8gYU9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklk
ZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOworICAgICAgICBhdXRvIGJPcmRlciA9IG1fcnVs
ZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsK
ICAgICAgICAgcmV0dXJuIGFPcmRlciA8IGJPcmRlcjsKICAgICB9OwogCiAgICAgLy8gVGhlIG9y
ZGVyIG1heSBjaGFuZ2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0YXRpbmcg
cnVsZXMgZnJvbSBlYXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0
ZDo6ZXhjaGFuZ2UocnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9
KTsKLSAgICBydWxlc1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJlc29sdmVy
TXV0YXRpbmdSdWxlcykpOworICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6ZXhjaGFuZ2UobV9y
dWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOworICAgIHJ1bGVz
VG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVs
ZXMpKTsKIAotICAgIGlmICghY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCisg
ICAgaWYgKCFtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICBz
dGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9BZGQuYmVnaW4oKSwgcnVsZXNUb0FkZC5lbmQoKSwgY29t
cGFyZUxheWVycyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbGxlY3RlZFJ1bGUgOiBydWxlc1RvQWRk
KSB7CiAgICAgICAgIGlmIChjb2xsZWN0ZWRSdWxlLmxheWVySWRlbnRpZmllcikKLSAgICAgICAg
ICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxl
Y3RlZFJ1bGUpOworICAgICAgICAgICAgbV9ydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxl
c0luTGF5ZXJzLmFwcGVuZChjb2xsZWN0ZWRSdWxlKTsKIAogICAgICAgICBhdXRvJiBydWxlID0g
Y29sbGVjdGVkUnVsZS5ydWxlOwogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KHJ1
bGUpKSB7Ci0gICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5h
ZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlv
bnNDYWNoZSgpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0
KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERl
Y2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7Ci0gICAgICAg
ICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFsZXR0ZVZh
bHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUuZ2V0KCkp
KTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0Nh
Y2hlKCk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250UGFsZXR0ZVZh
bHVlcz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+aW52YWxpZGF0ZU1h
dGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZSkpIHsKLSAgICAgICAg
ICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1l
cz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHls
ZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgfQogfQogCi1SdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6flJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0Owordm9pZCBSdWxl
U2V0QnVpbGRlcjo6dXBkYXRlRHluYW1pY01lZGlhUXVlcmllcygpCit7CisgICAgaWYgKG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcykKKyAgICAg
ICAgbV9ydWxlU2V0LT5tX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0gdHJ1ZTsK
KworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNldC0+bV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5tX2R5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5Q29sbGVj
dG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhlIGluaXRp
YWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcnlS
dWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKKyAg
ICB9Cit9CisKK1J1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+TWVkaWFRdWVy
eUNvbGxlY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK2Jvb2wgUnVsZVNl
dEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjc1LDcgKzMzMSw3IEBAIGJvb2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hB
bmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVl
cnlTZXQqIHNldCkKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBv
cChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQgfHwgZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3Qo
KS5zZXQuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5OCwxNCArMzU0LDcgQEAgdm9pZCBS
dWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkK
ICAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBSdWxlU2V0
TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQotewotICAgIGlmIChkeW5h
bWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRpZE11dGF0
ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgPSB0cnVlOwotfQotCi12b2lkIFJ1bGVT
ZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQordm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVs
ZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9S
dWxlU2V0QnVpbGRlci5oCmluZGV4IGVmNGFkZjA4MzE1NWQwNjNkZjQ1MjVmMWQ1YjFkM2JkMTcy
YzZiYzIuLjAyMjBjYTI0MWVjMmNmZTFhMmM2MTNhNGY0ZDJkZGMwODg2ODNjMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaApAQCAtMjYsNDYgKzI2LDE5IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCi1zdHJ1Y3QgUnVsZVNldE1lZGlhUXVl
cnlDb2xsZWN0b3IgewotICAgIH5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpOworY2xhc3Mg
UnVsZVNldEJ1aWxkZXIgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgTWVkaWFRdWVyeU1vZGUg
eyBEeW5hbWljLCBTdGF0aWMgfTsKKyAgICBSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYsIFJlc29sdmVyKiA9IG51bGxwdHIpOwogCi0gICAgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgIGNvbnN0IGJvb2wgY29sbGVjdER5
bmFtaWMgeyBmYWxzZSB9OwotCi0gICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKLSAgICAgICAg
UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZm
ZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZl
YXR1cmVzIHsgfTsKLSAgICB9OwotICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHluYW1pY0Nv
bnRleHRTdGFjayB7IH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlS
dWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07Ci0gICAgYm9vbCBkaWRNdXRhdGVSZXNv
bHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKLSAgICBib29sIGhhc1ZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgcHVzaEFuZEV2
YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1
ZXJ5U2V0Kik7Ci0gICAgdm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOwotICAgIHZvaWQgYWRkUnVs
ZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7Ci19OwotCi1zdHJ1Y3QgUnVsZVNldEJ1aWxkZXIg
ewotICAgIGVudW0gY2xhc3MgTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsK
LQotICAgIFJlZjxSdWxlU2V0PiBydWxlU2V0OwotICAgIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVj
dG9yIG1lZGlhUXVlcnlDb2xsZWN0b3I7Ci0gICAgUmVzb2x2ZXIqIHJlc29sdmVyIHsgbnVsbHB0
ciB9OwotICAgIE1vZGUgbW9kZSB7IE1vZGU6Ok5vcm1hbCB9OwotICAgIENhc2NhZGVMYXllck5h
bWUgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKLSAgICBIYXNoTWFwPENhc2NhZGVMYXll
ck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IGNhc2NhZGVMYXllcklkZW50
aWZpZXJNYXAgeyB9OwotICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIgY3VycmVu
dENhc2NhZGVMYXllcklkZW50aWZpZXIgeyAwIH07Ci0gICAgVmVjdG9yPFJ1bGVTZXQ6OlJlc29s
dmVyTXV0YXRpbmdSdWxlPiBjb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OwotCi0g
ICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmKTsKKyAg
ICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYsIGNvbnN0
IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnkgPSBudWxscHRyKTsKIAogICAgIH5SdWxlU2V0QnVp
bGRlcigpOwogCiBwcml2YXRlOgorICAgIFJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImKTsKKworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cyhjb25zdCBT
dHlsZVNoZWV0Q29udGVudHMmKTsKICAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mKTsKICAgICB2b2lkIGFkZFN0eWxlUnVsZShjb25zdCBT
dHlsZVJ1bGUmKTsKIApAQCAtNzQsNiArNDcsMzcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBvcENh
c2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJik7CiAgICAgdm9pZCB1cGRhdGVDYXNj
YWRlTGF5ZXJPcmRlcigpOwogICAgIHZvaWQgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsK
KyAgICB2b2lkIHVwZGF0ZUR5bmFtaWNNZWRpYVF1ZXJpZXMoKTsKKworICAgIHN0cnVjdCBNZWRp
YVF1ZXJ5Q29sbGVjdG9yIHsKKyAgICAgICAgfk1lZGlhUXVlcnlDb2xsZWN0b3IoKTsKKworICAg
ICAgICBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3I7CisgICAgICAgIGJvb2wg
Y29sbGVjdER5bmFtaWMgeyBmYWxzZSB9OworCisgICAgICAgIHN0cnVjdCBEeW5hbWljQ29udGV4
dCB7CisgICAgICAgICAgICBSZWY8Y29uc3QgTWVkaWFRdWVyeVNldD4gc2V0OworICAgICAgICAg
ICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKKyAgICAgICAgICAg
IFJ1bGVGZWF0dXJlVmVjdG9yIHJ1bGVGZWF0dXJlcyB7IH07CisgICAgICAgIH07CisgICAgICAg
IFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHluYW1pY0NvbnRleHRTdGFjayB7IH07CisKKyAgICAg
ICAgVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXM+IGR5bmFtaWNNZWRpYVF1
ZXJ5UnVsZXMgeyB9OworICAgICAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
aWVzIHsgZmFsc2UgfTsKKworICAgICAgICBib29sIHB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0Kik7CisgICAgICAgIHZvaWQgcG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKKyAg
ICAgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmKTsKKyAgICB9OworCisg
ICAgUmVmUHRyPFJ1bGVTZXQ+IG1fcnVsZVNldDsKKyAgICBNZWRpYVF1ZXJ5Q29sbGVjdG9yIG1f
bWVkaWFRdWVyeUNvbGxlY3RvcjsKKyAgICBSZXNvbHZlciogbV9yZXNvbHZlciB7IG51bGxwdHIg
fTsKKyAgICBDYXNjYWRlTGF5ZXJOYW1lIG1fcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsK
KyAgICBIYXNoTWFwPENhc2NhZGVMYXllck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50
aWZpZXI+IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcCB7IH07CisgICAgUnVsZVNldDo6Q2Fz
Y2FkZUxheWVySWRlbnRpZmllciBtX2N1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIHsgMCB9
OworICAgIFZlY3RvcjxSdWxlU2V0OjpSZXNvbHZlck11dGF0aW5nUnVsZT4gbV9jb2xsZWN0ZWRS
ZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OworICAgIGJvb2wgZGlkU2VlUmVzb2x2ZXJNdXRhdGlv
bldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKaW5kZXggZjM4YmQ3MTkzYmIwNTRjMDJkNTRm
OTViNjcxNWM1NjI1MzdjMTZjNi4uNjNjMzQ5NDlmMTM0YmU0YWVmMjE4Zjc3ZDA4MDlmYmYwYzA4
MDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKQEAgLTMx
LDcgKzMxLDcgQEAKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJFbGVt
ZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1
ZGUgIlJ1bGVTZXQuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgogI2lu
Y2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTkyLDggKzkyLDEwIEBAIEludmFsaWRhdG9yOjpJbnZh
bGlkYXRvcihjb25zdCBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4mIHNoZWV0cywgY29uc3Qg
TWVkaWFRCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fb3duZWRSdWxlU2V0LT5kaXNhYmxlQXV0
b1Nocmlua1RvRml0KCk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBydWxlU2V0QnVpbGRlcigqbV9v
d25lZFJ1bGVTZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGZvciAoYXV0byYgc2hlZXQg
OiBzaGVldHMpCi0gICAgICAgIG1fb3duZWRSdWxlU2V0LT5hZGRSdWxlc0Zyb21TaGVldCgqc2hl
ZXQsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworICAgICAgICBydWxlU2V0QnVpbGRlci5hZGRSdWxl
c0Zyb21TaGVldCgqc2hlZXQpOwogCiAgICAgbV9ydWxlSW5mb3JtYXRpb24gPSBjb2xsZWN0UnVs
ZUluZm9ybWF0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVNjb3BlUnVsZVNldHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVT
ZXRzLmNwcAppbmRleCAxYWI0YTk5ZDNmNzEzYTcwMWYxMTE4NmM2MjNlZTljMWRjYTRhZTc1Li41
YjkzYWVhMmUwN2Y1YWI0MWZjMDRjZDM0MjUxNDZhYjI2MzkyMTIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3Iu
aCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgpAQCAtNzMsOSArNzQsMTEgQEAgdm9pZCBTY29wZVJ1bGVT
ZXRzOjp1cGRhdGVVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGVJZk5lZWRlZCgpIGNvbnN0CiAKICAg
ICAvLyBNZWRpYSBxdWVyaWVzIG9uIHVzZXIgYWdlbnQgc2hlZXQgbmVlZCB0byBldmFsdWF0ZWQg
aW4gZG9jdW1lbnQgY29udGV4dC4gVGhleSBiZWhhdmUgbGlrZSBhdXRob3Igc2hlZXRzIGluIHRo
aXMgcmVzcGVjdC4KICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9zdHlsZVJlc29s
dmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKKwogICAgIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgCi0gICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVyeVN0eWxl
U2hlZXQsIG51bGxwdHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7CisK
KyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKCptX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSwg
bWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgYnVpbGRlci5hZGRS
dWxlc0Zyb21TaGVldCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVlcnlTdHlsZVNoZWV0KTsKIH0K
IAogUnVsZVNldCogU2NvcGVSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKQEAgLTg5LDMxICs5
MiwzOCBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5bGUoKQogewogICAg
IGF1dG8mIGV4dGVuc2lvblN0eWxlU2hlZXRzID0gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCku
ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKTsKICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0g
bV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKLSAgICBhdXRvIHRlbXBVc2Vy
U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVz
ZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkKLSAgICAgICAg
dGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMo
KSwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVyKTsKKworICAg
IGF1dG8gdXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoYXV0byogcGFn
ZVVzZXJTaGVldCA9IGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSkgeworICAg
ICAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRv
ciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQo
cGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSk7CisgICAgfQorCiAjaWYgRU5BQkxFKEFQUF9CT1VO
RF9ET01BSU5TKQogICAgIGF1dG8qIHBhZ2UgPSBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5w
YWdlKCk7CiAgICAgaWYgKCFleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNo
ZWV0cygpLmlzRW1wdHkoKSAmJiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNs
aWVudCgpLnNob3VsZEVuYWJsZUluQXBwQnJvd3NlclByaXZhY3lQcm90ZWN0aW9ucygpKQogICAg
ICAgICBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiSWdub3JpbmcgdXNlciBz
dHlsZSBzaGVldCBmb3Igbm9uLWFwcCBib3VuZCBkb21haW4uIl9zKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0
cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBtZWRpYVF1
ZXJ5RXZhbHVhdG9yKTsKKyAgICAgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhl
eHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCB1c2VyU3R5bGUs
IG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgICAgICBpZiAocGFnZSAmJiAhZXh0ZW5zaW9uU3R5
bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5ub3RpZnlQYWdlT2ZBcHBCb3Vu
ZEJlaGF2aW9yKCk7CiAgICAgfQogI2Vsc2UKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxl
U2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksIHRl
bXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworICAgIGNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5
bGVTaGVldHMoKSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICNlbmRpZgotICAg
IGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9j
dW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVkaWFRdWVyeUV2
YWx1YXRvcik7Ci0gICAgaWYgKHRlbXBVc2VyU3R5bGUtPnJ1bGVDb3VudCgpID4gMCB8fCB0ZW1w
VXNlclN0eWxlLT5wYWdlUnVsZXMoKS5zaXplKCkgPiAwKQotICAgICAgICBtX3VzZXJTdHlsZSA9
IFdURk1vdmUodGVtcFVzZXJTdHlsZSk7CisgICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNo
ZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpLCB1c2Vy
U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOworCisgICAgaWYgKHVzZXJTdHlsZS0+cnVsZUNv
dW50KCkgPiAwIHx8IHVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKKyAgICAgICAg
bV91c2VyU3R5bGUgPSBXVEZNb3ZlKHVzZXJTdHlsZSk7CiB9CiAKLXZvaWQgU2NvcGVSdWxlU2V0
czo6Y29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+PiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlLCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0pCit2b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4m
IHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYgbWVkaWFRdWVyeUV2YWx1YXRvcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlclNoZWV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQodXNlclNoZWV0c1tpXS0+
Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwotICAgICAgICB1c2VyU3R5bGUuYWRkUnVs
ZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbnVsbHB0ciwgbWVkaXVtLCBt
X3N0eWxlUmVzb2x2ZXIpOworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIodXNlclN0eWxlLCBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICBmb3IgKGF1dG8mIHNo
ZWV0IDogdXNlclNoZWV0cykgeworICAgICAgICBBU1NFUlQoc2hlZXQtPmNvbnRlbnRzKCkuaXNV
c2VyU3R5bGVTaGVldCgpKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dC0+Y29udGVudHMoKSk7CiAgICAgfQogfQogCkBAIC0xNzUsMTEgKzE4NSwxMyBAQCBzdGQ6Om9w
dGlvbmFsPER5bmFtaWNNZWRpYVF1ZXJ5RXZhbHVhdGlvbkNoYW5nZXM+IFNjb3BlUnVsZVNldHM6
OmV2YWx1YXRlRHluYW1pYwogICAgIHJldHVybiBldmFsdWF0aW9uQ2hhbmdlczsKIH0KIAotdm9p
ZCBTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1l
ZGl1bSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycykKK3Zv
aWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NP
TVdyYXBwZXJzKQogeworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIoKm1fYXV0aG9yU3R5bGUs
ICptZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKwogICAgIGZvciAoYXV0
byYgY3NzU2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5k
aXNhYmxlZCgpKTsKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3Nz
U2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgKm1lZGl1bSwgbV9z
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVl
dC0+Y29udGVudHMoKSwgY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpKTsKICAgICAgICAgaW5zcGVj
dG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldC5n
ZXQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAKaW5k
ZXggY2VkMThhMzlkYWJkZTIyYjM1MDlkMDg3ZjkxNWIzODIzNzBhYWUwZi4uZDUwN2ZiMTYzZmRl
MmQyZWY2ZjE5YzJhMTk0YzMwNDA2NzI3NzE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvVXNlckFnZW50U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1VzZXJB
Z2VudFN0eWxlLmNwcApAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJ1bGVT
ZXQuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVT
aGVldENvbnRlbnRzLmgiCkBAIC0xMDcsOCArMTA3LDExIEBAIHN0YXRpYyBTdHlsZVNoZWV0Q29u
dGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikKIAogdm9pZCBVc2VyQWdlbnRT
dHlsZTo6YWRkVG9EZWZhdWx0U3R5bGUoU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKIHsKLSAg
ICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCBzY3JlZW5FdmFsKCkpOwot
ICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgcHJpbnRFdmFs
KCkpOworICAgIFJ1bGVTZXRCdWlsZGVyIHNjcmVlbkJ1aWxkZXIoKmRlZmF1bHRTdHlsZSwgc2Ny
ZWVuRXZhbCgpKTsKKyAgICBzY3JlZW5CdWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsK
KworICAgIFJ1bGVTZXRCdWlsZGVyIHByaW50QnVpbGRlcigqZGVmYXVsdFByaW50U3R5bGUsIHBy
aW50RXZhbCgpKTsKKyAgICBwcmludEJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQpOwog
CiAgICAgLy8gQnVpbGQgYSBzdHlsZXNoZWV0IGNvbnNpc3Rpbmcgb2Ygbm9uLXRyaXZpYWwgbWVk
aWEgcXVlcmllcyBzZWVuIGluIGRlZmF1bHQgc3R5bGUuCiAgICAgLy8gUnVsZXNldHMgZm9yIHRo
ZXNlIGNhbid0IGJlIGdsb2JhbCBhbmQgbmVlZCB0byBiZSBidWlsdCBpbiBkb2N1bWVudCBjb250
ZXh0LgpAQCAtMTQ1LDcgKzE0OCw5IEBAIHZvaWQgVXNlckFnZW50U3R5bGU6OmluaXREZWZhdWx0
U3R5bGVTaGVldCgpCiAgICAgLy8gUXVpcmtzLW1vZGUgcnVsZXMuCiAgICAgU3RyaW5nIHF1aXJr
c1J1bGVzID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHF1aXJrc1Vz
ZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihxdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSkpICsg
UmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwogICAgIHF1
aXJrc1N0eWxlU2hlZXQgPSBwYXJzZVVBU2hlZXQocXVpcmtzUnVsZXMpOwotICAgIGRlZmF1bHRR
dWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKnF1aXJrc1N0eWxlU2hlZXQsIHNjcmVlbkV2
YWwoKSk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBxdWlya0J1aWxkZXIoKmRlZmF1bHRRdWlya3NT
dHlsZSwgc2NyZWVuRXZhbCgpKTsKKyAgICBxdWlya0J1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQo
KnF1aXJrc1N0eWxlU2hlZXQpOwogCiAgICAgKytkZWZhdWx0U3R5bGVWZXJzaW9uOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440061</attachid>
            <date>2021-10-04 07:49:18 -0700</date>
            <delta_ts>2021-10-04 07:52:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004174916.patch</filename>
            <type>text/plain</type>
            <size>36937</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uNTExYzIyNWQzYTQwMjE1ODFkODVkZDRkOTk0MTYx
ZTdkOGI1NDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsYW4gQnVqdGFzLgorCisgICAgICAg
IEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMg
Y2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13YXkg
ZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVyLgor
CisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6c2hy
aW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5hbWlj
UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtUb0Zp
dCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0
YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojpwb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZCk6
IERlbGV0ZWQuCisKKyAgICAgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBpcyBub3cgYSBwcml2YXRl
IGlubmVyIHN0cnVjdCBvZiBSdWxlU2V0QnVpbGRlci4KKworICAgICAgICAqIHN0eWxlL1J1bGVT
ZXRCdWlsZGVyLmg6CisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6bV9kaXJ0aWVzQWxsU3R5bGUpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGVS
dWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVs
ZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmFk
ZFRvRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpVc2VyQWdlbnRTdHls
ZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KToKKwogMjAyMS0xMC0wMyAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBSdWxlU2V0IGJ1aWxkZXIgdG8gYSBm
aWxlIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggNjhlZGNmMWUzZTU2
MmE2NWFlNjBlYjI3MjYxYTNiOWQzNmY2MDkyNy4uY2FiNzU2ZTgzOGQ1OTNhMGIzN2FmZWEyNTEw
OWZmNzFjZDRhN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUnVsZVNldEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCkBAIC04NCw5ICs4MywxNyBAQCBz
dGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9yLT5wc2V1
ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQogCi12b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBzZWxlY3Rv
ckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2FkZUxheWVy
SWRlbnRpZmllciwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0
b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCkKIHsKLSAgICBSdWxl
RGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9y
dWxlQ291bnQrKyk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwg
c2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KTsKKyAgICBhZGRSdWxlKFdURk1vdmUocnVs
ZURhdGEpLCAwKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFJ1bGVEYXRhJiYgcnVsZURh
dGEsIENhc2NhZGVMYXllcklkZW50aWZpZXIgY2FzY2FkZUxheWVySWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQocnVsZURhdGEucG9zaXRpb24oKSA9PSBtX3J1bGVDb3VudCk7CisKKyAgICArK21f
cnVsZUNvdW50OwogCiAgICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXIpIHsKICAgICAgICAg
YXV0byBvbGRTaXplID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyRm9yUnVsZVBvc2l0aW9uLnNp
emUoKTsKQEAgLTk3LDkgKzEwNCw2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25zdCBTdHls
ZVJ1bGUmIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlCiAKICAgICBt
X2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKLSAgICBpZiAobWVkaWFRdWVy
eUNvbGxlY3RvcikKLSAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZUlmTmVlZGVk
KHJ1bGVEYXRhKTsKLQogICAgIHVuc2lnbmVkIGNsYXNzQnVja2V0U2l6ZSA9IDA7CiAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0b3IgPSBudWxscHRyOwogICAgIGNvbnN0IENTU1NlbGVj
dG9yKiB0YWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC0yNzIsNDUgKzI3Niw2IEBAIHZvaWQgUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYgcnVsZSkKICAgICBtX3BhZ2VSdWxlcy5h
cHBlbmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0
IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2
YWx1YXRvcikKLXsKLSAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRN
ZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKLSAgICBidWlsZGVyLmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0KTsKLQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCi0g
ICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeVNldCog
c2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBTdHlsZTo6
UmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKLSAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlz
LCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBudWxscHRy
LCBSdWxlU2V0QnVpbGRlcjo6TW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLSAgICAgICAg
aWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVy
eSkpCi0gICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsKLSAgICAg
ICAgYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLSAgICAgICAg
cmV0dXJuICFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRo
aW5EeW5hbWljTWVkaWFRdWVyeTsKLSAgICB9KCk7Ci0KLSAgICBSdWxlU2V0QnVpbGRlciBidWls
ZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5V
c2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07Ci0KLSAgICBpZiAo
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkK
LSAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgYnVpbGRlci5t
ZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLQotICAgIG1faGFzVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuaGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7Ci0KLSAgICBpZiAoIWJ1aWxkZXIubWVkaWFRdWVy
eUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBh
dXRvIGZpcnN0TmV3SW5kZXggPSBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2l6ZSgpOwotICAg
ICAgICBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoYnVpbGRl
ci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKLQotICAgICAg
ICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBldmFsdWF0ZUR5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMoZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KIHZvaWQgUnVsZVNldDo6dHJhdmVyc2VSdWxlRGF0
YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKQEAgLTQxNCwxNCArMzc5LDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFw
KQogICAgICAgICB2ZWN0b3ItPnNocmlua1RvRml0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBzaHJpbmtEeW5hbWljUnVsZXMoVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVs
ZXM+JiBkeW5hbWljUnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogZHluYW1pY1J1bGVz
KQotICAgICAgICBydWxlLnNocmlua1RvRml0KCk7Ci0KLSAgICBkeW5hbWljUnVsZXMuc2hyaW5r
VG9GaXQoKTsKLX0KLQogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAgICAgc2hyaW5r
TWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CkBAIC00NDMsNyArNDAwLDkgQEAgdm9pZCBSdWxl
U2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBt
X2ZlYXR1cmVzLnNocmlua1RvRml0KCk7CiAKLSAgICBzaHJpbmtEeW5hbWljUnVsZXMobV9keW5h
bWljTWVkaWFRdWVyeVJ1bGVzKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBtX2R5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMpCisgICAgICAgIHJ1bGUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2R5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgIG1fY2FzY2FkZUxheWVycy5zaHJp
bmtUb0ZpdCgpOwogICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5z
aHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCmluZGV4IDhhNzEzZTY1YTk4ZjhkNGJj
ZDdlZDI2MzQyMzExMWVkODI2M2M3OGEuLjU4NWYwNGJhZGNkYTFkN2JlM2Y2MzBmZWVhZDg4ZmIz
NzQzY2ZiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNw
YWNlIFN0eWxlIHsKIAogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBSdWxlU2V0Owotc3RydWN0IFJ1
bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOwogCiB1c2luZyBJbnZhbGlkYXRpb25SdWxlU2V0VmVj
dG9yID0gVmVjdG9yPFJlZlB0cjxjb25zdCBSdWxlU2V0PiwgMT47CiAKQEAgLTcxLDI1ICs3MCw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURhdGFWZWN0
b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxl
RGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgc3RydWN0IER5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMgewotICAgICAgICBWZWN0b3I8UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+PiBtZWRpYVF1
ZXJ5U2V0czsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zOwot
ICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXM7Ci0gICAgICAgIGJvb2wgcmVx
dWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHJlc3VsdCB7IHRydWUgfTsK
LQotICAgICAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVk
aWFRdWVyeVNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIGFmZmVjdGVkUnVsZVBvc2l0
aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgcnVsZUZlYXR1cmVzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25z
dCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7Ci0gICAg
dm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBN
ZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5
bGU6OlJlc29sdmVyJik7Ci0KLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVk
IGNhc2NhZGVMYXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqID0gbnVs
bHB0cik7CisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKICAgICB2b2lkIGFkZFBhZ2VS
dWxlKFN0eWxlUnVsZVBhZ2UmKTsKIAogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0IEF0b21T
dHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwpAQCAtMTI2LDEyICsx
MDcsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9yKGNvbnN0
IFJ1bGVEYXRhJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBSdWxlU2V0
QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgUnVsZVNldEJ1aWxkZXI7CiAKICAgICBSdWxlU2V0
KCk7CiAKICAgICB1c2luZyBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gdW5zaWduZWQ7CiAKKyAg
ICB2b2lkIGFkZFJ1bGUoUnVsZURhdGEmJiwgQ2FzY2FkZUxheWVySWRlbnRpZmllcik7CisKICAg
ICBzdHJ1Y3QgUmVzb2x2ZXJNdXRhdGluZ1J1bGUgewogICAgICAgICBSZWY8U3R5bGVSdWxlQmFz
ZT4gcnVsZTsKICAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBsYXllcklkZW50aWZpZXI7
CkBAIC0xNTUsNiArMTM4LDIxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ2FzY2FkZUxheWVyJiBj
YXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKENhc2NhZGVMYXllcklkZW50aWZpZXIgaWRlbnRpZmll
cikgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGF5ZXJzW2lkZW50aWZpZXIgLSAxXTsgfQogICAg
IHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyKSBjb25zdDsKIAorICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKKyAg
ICAgICAgVmVjdG9yPFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Cisg
ICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKKyAgICAgICAgUnVs
ZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzOworICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJl
c2V0IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07CisKKyAgICAgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRz
LnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICB9CisgICAgfTsKKwogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9tUnVsZU1h
cCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdMb2NhbE5hbWVSdWxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBhMDFmZTE5MmQ4YjM0ODRi
NjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4Li5lY2Q3YzNjYWM1MDhmZTU0NjYxM2VkNDRmMDhiMzM0
MjkzZDYxYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCkBAIC0z
MiwzNiArMzIsNzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAK
K1J1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiBydWxlU2V0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFJlc29sdmVyKiByZXNvbHZlcikKKyAgICA6
IG1fcnVsZVNldCgmcnVsZVNldCkKKyAgICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1
YXRvciB9KQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKworUnVsZVNldEJ1aWxk
ZXI6OlJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcikK
KyAgICA6IG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciwgdHJ1ZSB9KQoreworfQor
CiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkKIHsKLSAgICBpZiAobW9kZSA9PSBN
b2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB1cGRhdGVEeW5h
bWljTWVkaWFRdWVyaWVzKCk7CiAgICAgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsKKwor
ICAgIGlmIChtX3J1bGVTZXQtPm1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAgICAgbV9y
dWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxl
c0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBzaGVldFF1ZXJ5KQoreworICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3Jlc29sdmVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5lciht
X21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgaWYgKG11dGF0aW9uU2Nh
bm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQor
ICAgICAgICAgICAgbXV0YXRpb25TY2FubmVyLmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChz
aGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9uU2Nhbm5lci5kaWRTZWVSZXNv
bHZlck11dGF0aW9uV2l0aGluRHluYW1pY01lZGlhUXVlcnk7CisgICAgfTsKKworICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5jb2xsZWN0RHluYW1pYyA9IGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5
UmVzb2x1dGlvbigpOworCisgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUoc2hlZXRRdWVyeSkpCisgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7CiB9CiAKIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogewogICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7Ci0g
ICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuICYmIG1lZGlhUXVl
cnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSkKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZGlkU2VlUmVzb2x2ZXJNdXRhdGlvbldpdGhp
bkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChp
czxTdHlsZVJ1bGU+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9y
bWFsKQorICAgICAgICAgICAgaWYgKG1fcnVsZVNldCkKICAgICAgICAgICAgICAgICBhZGRTdHls
ZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVT
ZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAg
ICAgICBpZiAobV9ydWxlU2V0KQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1
bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAg
ICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpOwotICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRl
KCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVy
eUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAg
ICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAg
ICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVz
KCkpOworICAgICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1l
ZGlhUXVlcmllcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpczxTdHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTE1LDExIEBAIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9u
dFBhbGV0dGVWYWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkg
ewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsK
LSAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1
bGVzLmFwcGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAg
ICAgICAgICAgIGlmICghbV9ydWxlU2V0ICYmICFtX21lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1p
Y0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGlkU2VlUmVzb2x2ZXJN
dXRhdGlvbldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYg
KG1fcmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5n
UnVsZXMuYXBwZW5kKHsgKnJ1bGUsIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5bGVS
dWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUp
LmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKQEAgLTkzLDcgKzEyOSw3IEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4mIHJ1bGVzKQogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9t
U2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3ZvaWQgUnVsZVNldEJ1aWxk
ZXI6OmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBz
aGVldCkKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVmb3JlSW1w
b3J0UnVsZXMoKSkKICAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3QoKSk7CkBA
IC0xMDIsMTcgKzEzOCwxNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogICAgICAgICBpZiAoIXJ1bGUtPnN0
eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVF1
ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAg
ICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVsZS0+bWVk
aWFRdWVyaWVzKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1lID0gcnVs
ZS0+Y2FzY2FkZUxheWVyTmFtZSgpOwogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUp
CiAgICAgICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CiAK
LSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkpOworICAg
ICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cygqcnVsZS0+c3R5bGVTaGVldCgpKTsK
IAogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCiAgICAgICAgICAgICAgICAgcG9w
Q2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKICAgICAgICAgfQotICAgICAgICBtZWRp
YVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIH0KIAogICAg
IGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKQEAgLTEyNCw4ICsxNjAsMTQgQEAg
dm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkK
ICAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3Rvcklu
ZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVj
dG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAg
IHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgr
KywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsK
KyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RG
b3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0
ZXIoc2VsZWN0b3JJbmRleCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2Vs
ZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50KCkpOwor
ICAgICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVEYXRhKTsK
KworICAgICAgICBtX3J1bGVTZXQtPmFkZFJ1bGUoV1RGTW92ZShydWxlRGF0YSksIG1fY3VycmVu
dENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCisgICAgICAgICsrc2VsZWN0b3JMaXN0SW5kZXg7
CisgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBW
ZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQpAQCAtMTM4LDE0ICsxODAsMTQgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6cmVnaXN0ZXJMYXllcnMoY29uc3QgVmVjdG9yPENhc2NhZGVMYXll
ck5hbWU+JiBuYW1lcykKIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihj
b25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5v
cm1hbCkKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNh
c2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFydWxlU2V0LT5tX2Nhc2NhZGVM
YXllcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5p
c0VtcHR5KCkgJiYgIW1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyBGb3IgaW5jcmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1lLT5pZGVu
dGlmaWVyIG1hcC4KICAgICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1fY2FzY2Fk
ZUxheWVycykKLSAgICAgICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVy
LnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChhdXRvJiBsYXllciA6
IG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQorICAgICAgICAgICAgbV9jYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyTWFwLmFkZChsYXllci5yZXNvbHZlZE5hbWUsICsraWRlbnRpZmllcik7CiAgICAg
fQogCiAgICAgYXV0byBuYW1lUmVzb2x2aW5nQW5vbnltb3VzID0gWyZdIHsKQEAgLTE1OSwyOSAr
MjAxLDI5IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2Fz
Y2FkZUxheWVyTmFtZSYgbmFtZSkKIAogICAgIC8vIEZvciBoaWVyYXJjaGljYWwgbmFtZXMgd2Ug
cmVnaXN0ZXIgdGhlIGNvbnRhaW5pbmcgbGF5ZXJzIGluZGl2aWR1YWxseSBmaXJzdC4KICAgICBm
b3IgKGF1dG8mIG5hbWVTZWdtZW50IDogbmFtZVJlc29sdmluZ0Fub255bW91cygpKSB7Ci0gICAg
ICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5hcHBlbmQobmFtZVNlZ21lbnQpOwotICAgICAg
ICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IGNhc2NhZGVMYXllcklkZW50aWZpZXJN
YXAuZW5zdXJlKHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgWyZdIHsKKyAgICAgICAgbV9yZXNv
bHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKKyAgICAgICAgbV9jdXJy
ZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5l
bnN1cmUobV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7CiAgICAgICAgICAgICAvLyBQ
cmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5zaXplKCk7CisgICAgICAgICAgICBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5hcHBl
bmQoeyBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRl
bnRpZmllciB9KTsKKyAgICAgICAgICAgIHJldHVybiBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVy
cy5zaXplKCk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiB9CiAKIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OnBvcENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBu
YW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKKyAgICBpZiAoIW1fcnVsZVNl
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvIHNpemUgPSBuYW1lLmlzRW1wdHko
KSA/IDEgOiBuYW1lLnNpemUoKTsgc2l6ZS0tOykgewotICAgICAgICByZXNvbHZlZENhc2NhZGVM
YXllck5hbWUucmVtb3ZlTGFzdCgpOwotICAgICAgICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRp
ZmllciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoY3VycmVudENhc2NhZGVM
YXllcklkZW50aWZpZXIpLnBhcmVudElkZW50aWZpZXI7CisgICAgICAgIG1fcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihtX2N1cnJl
bnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOwogICAgIH0KIH0KIAog
dm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogewotICAgIGlm
IChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAobV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBjb21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CkBAIC0xODksOCArMjMxLDggQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgICAgICAgICAg
Ly8gSWRlbnRpZmllcnMgYXJlIGluIHBhcnNlIG9yZGVyIHdoaWNoIGFsbW9zdCBjb3JyZXNwb25k
cyB0byB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIuCiAgICAgICAgICAgICAvLyBUaGUgb25seSBl
eGNlcHRpb24gaXMgd2hlbiBhIHN1YmxheWVyIGdldHMgYWRkZWQgdG8gYSBsYXllciBhZnRlciBh
ZGRpbmcgb3RoZXIgbm9uLXN1YmxheWVycy4KICAgICAgICAgICAgIC8vIFRvIHJlc29sdmUgdGhp
cyB3ZSBuZWVkIGxvb2sgZm9yIGEgc2hhcmVkIGFuY2VzdG9yIGxheWVyLgotICAgICAgICAgICAg
YXV0byBhUGFyZW50ID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihhKS5wYXJl
bnRJZGVudGlmaWVyOwotICAgICAgICAgICAgYXV0byBiUGFyZW50ID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyRm9ySWRlbnRpZmllcihiKS5wYXJlbnRJZGVudGlmaWVyOworICAgICAgICAgICAgYXV0
byBhUGFyZW50ID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVu
dElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGJQYXJlbnQgPSBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKICAgICAgICAgICAgIGlm
IChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0gYSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBhcmVudCkK
QEAgLTIwMiw3ICsyNDQsNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5
ZXJPcmRlcigpCiAgICAgfTsKIAogICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxheWVyQ291bnQgPSBydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMuc2l6ZSgpOworICAgIGF1dG8gbGF5ZXJDb3VudCA9IG1fcnVsZVNldC0+bV9j
YXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICBvcmRlclZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxheWVyQ291bnQpOwogICAgIGZvciAoUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyID0gMTsgaWRlbnRpZmllciA8PSBsYXllckNvdW50OyArK2lkZW50aWZpZXIp
CiAgICAgICAgIG9yZGVyVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsKQEAgLTIx
MCw1MiArMjUyLDY2IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9y
ZGVyKCkKICAgICBzdGQ6OnNvcnQob3JkZXJWZWN0b3IuYmVnaW4oKSwgb3JkZXJWZWN0b3IuZW5k
KCksIGNvbXBhcmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yZGVyVmVjdG9y
LnNpemUoKTsgKytpKQotICAgICAgICBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVy
KG9yZGVyVmVjdG9yW2ldKS5vcmRlciA9IGkgKyAxOworICAgICAgICBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVyID0gaSArIDE7CiB9CiAK
IHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCkKIHsKLSAg
ICBpZiAoIXJlc29sdmVyKQorICAgIGlmICghbV9yZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8m
IGIpIHsKLSAgICAgICAgYXV0byBhT3JkZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZv
cklkZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGJPcmRlciA9IHJ1
bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihiLmxheWVySWRlbnRpZmllcik7
CisgICAgICAgIGF1dG8gYU9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklk
ZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOworICAgICAgICBhdXRvIGJPcmRlciA9IG1fcnVs
ZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsK
ICAgICAgICAgcmV0dXJuIGFPcmRlciA8IGJPcmRlcjsKICAgICB9OwogCiAgICAgLy8gVGhlIG9y
ZGVyIG1heSBjaGFuZ2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0YXRpbmcg
cnVsZXMgZnJvbSBlYXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0
ZDo6ZXhjaGFuZ2UocnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9
KTsKLSAgICBydWxlc1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJlc29sdmVy
TXV0YXRpbmdSdWxlcykpOworICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6ZXhjaGFuZ2UobV9y
dWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOworICAgIHJ1bGVz
VG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVs
ZXMpKTsKIAotICAgIGlmICghY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCisg
ICAgaWYgKCFtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICBz
dGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9BZGQuYmVnaW4oKSwgcnVsZXNUb0FkZC5lbmQoKSwgY29t
cGFyZUxheWVycyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbGxlY3RlZFJ1bGUgOiBydWxlc1RvQWRk
KSB7CiAgICAgICAgIGlmIChjb2xsZWN0ZWRSdWxlLmxheWVySWRlbnRpZmllcikKLSAgICAgICAg
ICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxl
Y3RlZFJ1bGUpOworICAgICAgICAgICAgbV9ydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxl
c0luTGF5ZXJzLmFwcGVuZChjb2xsZWN0ZWRSdWxlKTsKIAogICAgICAgICBhdXRvJiBydWxlID0g
Y29sbGVjdGVkUnVsZS5ydWxlOwogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KHJ1
bGUpKSB7Ci0gICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5h
ZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlv
bnNDYWNoZSgpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0
KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERl
Y2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7Ci0gICAgICAg
ICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFsZXR0ZVZh
bHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUuZ2V0KCkp
KTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0Nh
Y2hlKCk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250UGFsZXR0ZVZh
bHVlcz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+aW52YWxpZGF0ZU1h
dGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZSkpIHsKLSAgICAgICAg
ICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1l
cz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHls
ZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgfQogfQogCi1SdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6flJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0Owordm9pZCBSdWxl
U2V0QnVpbGRlcjo6dXBkYXRlRHluYW1pY01lZGlhUXVlcmllcygpCit7CisgICAgaWYgKG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcykKKyAgICAg
ICAgbV9ydWxlU2V0LT5tX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0gdHJ1ZTsK
KworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNldC0+bV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5tX2R5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5Q29sbGVj
dG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhlIGluaXRp
YWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcnlS
dWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKKyAg
ICB9Cit9CisKK1J1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+TWVkaWFRdWVy
eUNvbGxlY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK2Jvb2wgUnVsZVNl
dEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjc1LDcgKzMzMSw3IEBAIGJvb2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hB
bmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVl
cnlTZXQqIHNldCkKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBv
cChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQgfHwgZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3Qo
KS5zZXQuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5OCwxNCArMzU0LDcgQEAgdm9pZCBS
dWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkK
ICAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBSdWxlU2V0
TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQotewotICAgIGlmIChkeW5h
bWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRpZE11dGF0
ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgPSB0cnVlOwotfQotCi12b2lkIFJ1bGVT
ZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQordm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVs
ZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9S
dWxlU2V0QnVpbGRlci5oCmluZGV4IGVmNGFkZjA4MzE1NWQwNjNkZjQ1MjVmMWQ1YjFkM2JkMTcy
YzZiYzIuLmYzYTc2ZjM0NjBkZjY2YTFmYzQzNTE5YmVlZmM4M2Q4M2Q5NjEwM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaApAQCAtMjYsNDYgKzI2LDE4IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCi1zdHJ1Y3QgUnVsZVNldE1lZGlhUXVl
cnlDb2xsZWN0b3IgewotICAgIH5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpOworY2xhc3Mg
UnVsZVNldEJ1aWxkZXIgeworcHVibGljOgorICAgIFJ1bGVTZXRCdWlsZGVyKFJ1bGVTZXQmLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgUmVzb2x2ZXIqID0gbnVsbHB0cik7CiAKLSAgICBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3I7Ci0gICAgY29uc3QgYm9vbCBjb2xs
ZWN0RHluYW1pYyB7IGZhbHNlIH07Ci0KLSAgICBzdHJ1Y3QgRHluYW1pY0NvbnRleHQgewotICAg
ICAgICBSZWY8Y29uc3QgTWVkaWFRdWVyeVNldD4gc2V0OwotICAgICAgICBWZWN0b3I8c2l6ZV90
PiBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMgeyB9OwotICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBy
dWxlRmVhdHVyZXMgeyB9OwotICAgIH07Ci0gICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5h
bWljQ29udGV4dFN0YWNrIHsgfTsKLQotICAgIFZlY3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFR
dWVyeVJ1bGVzPiBkeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsgfTsKLSAgICBib29sIGRpZE11dGF0
ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgeyBmYWxzZSB9OwotICAgIGJvb2wgaGFz
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgeyBmYWxzZSB9OwotCi0gICAgYm9vbCBwdXNo
QW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCopOwotICAgIHZvaWQgcG9wKGNvbnN0IE1l
ZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIGRpZE11dGF0ZVJlc29sdmVyKCk7Ci0gICAgdm9pZCBh
ZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmKTsKLX07Ci0KLXN0cnVjdCBSdWxlU2V0QnVp
bGRlciB7Ci0gICAgZW51bSBjbGFzcyBNb2RlIHsgTm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2Nh
biB9OwotCi0gICAgUmVmPFJ1bGVTZXQ+IHJ1bGVTZXQ7Ci0gICAgUnVsZVNldE1lZGlhUXVlcnlD
b2xsZWN0b3IgbWVkaWFRdWVyeUNvbGxlY3RvcjsKLSAgICBSZXNvbHZlciogcmVzb2x2ZXIgeyBu
dWxscHRyIH07Ci0gICAgTW9kZSBtb2RlIHsgTW9kZTo6Tm9ybWFsIH07Ci0gICAgQ2FzY2FkZUxh
eWVyTmFtZSByZXNvbHZlZENhc2NhZGVMYXllck5hbWUgeyB9OwotICAgIEhhc2hNYXA8Q2FzY2Fk
ZUxheWVyTmFtZSwgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllcj4gY2FzY2FkZUxheWVy
SWRlbnRpZmllck1hcCB7IH07Ci0gICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBj
dXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB7IDAgfTsKLSAgICBWZWN0b3I8UnVsZVNldDo6
UmVzb2x2ZXJNdXRhdGluZ1J1bGU+IGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7IH07
Ci0KLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYp
OworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiwg
Y29uc3QgTWVkaWFRdWVyeVNldCogc2hlZXRRdWVyeSA9IG51bGxwdHIpOwogCiAgICAgflJ1bGVT
ZXRCdWlsZGVyKCk7CiAKIHByaXZhdGU6CisgICAgUnVsZVNldEJ1aWxkZXIoY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYpOworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldENvbnRlbnRzKGNv
bnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOwogICAgIHZvaWQgYWRkQ2hpbGRSdWxlcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYpOwogICAgIHZvaWQgYWRkU3R5bGVSdWxlKGNv
bnN0IFN0eWxlUnVsZSYpOwogCkBAIC03NCw2ICs0NiwzNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cG9wQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmKTsKICAgICB2b2lkIHVwZGF0
ZUNhc2NhZGVMYXllck9yZGVyKCk7CiAgICAgdm9pZCBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZl
cigpOworICAgIHZvaWQgdXBkYXRlRHluYW1pY01lZGlhUXVlcmllcygpOworCisgICAgc3RydWN0
IE1lZGlhUXVlcnlDb2xsZWN0b3IgeworICAgICAgICB+TWVkaWFRdWVyeUNvbGxlY3RvcigpOwor
CisgICAgICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcjsKKyAgICAgICAg
Ym9vbCBjb2xsZWN0RHluYW1pYyB7IGZhbHNlIH07CisKKyAgICAgICAgc3RydWN0IER5bmFtaWND
b250ZXh0IHsKKyAgICAgICAgICAgIFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0PiBzZXQ7CisgICAg
ICAgICAgICBWZWN0b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMgeyB9OworICAgICAg
ICAgICAgUnVsZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzIHsgfTsKKyAgICAgICAgfTsKKyAg
ICAgICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsgfTsKKwor
ICAgICAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01l
ZGlhUXVlcnlSdWxlcyB7IH07CisgICAgICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJpZXMgeyBmYWxzZSB9OworCisgICAgICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKGNvbnN0
IE1lZGlhUXVlcnlTZXQqKTsKKyAgICAgICAgdm9pZCBwb3AoY29uc3QgTWVkaWFRdWVyeVNldCop
OworICAgICAgICB2b2lkIGFkZFJ1bGVJZk5lZWRlZChjb25zdCBSdWxlRGF0YSYpOworICAgIH07
CisKKyAgICBSZWZQdHI8UnVsZVNldD4gbV9ydWxlU2V0OworICAgIE1lZGlhUXVlcnlDb2xsZWN0
b3IgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yOworICAgIFJlc29sdmVyKiBtX3Jlc29sdmVyIHsgbnVs
bHB0ciB9OworICAgIENhc2NhZGVMYXllck5hbWUgbV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUg
eyB9OworICAgIEhhc2hNYXA8Q2FzY2FkZUxheWVyTmFtZSwgUnVsZVNldDo6Q2FzY2FkZUxheWVy
SWRlbnRpZmllcj4gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwIHsgfTsKKyAgICBSdWxlU2V0
OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIg
eyAwIH07CisgICAgVmVjdG9yPFJ1bGVTZXQ6OlJlc29sdmVyTXV0YXRpbmdSdWxlPiBtX2NvbGxl
Y3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7IH07CisgICAgYm9vbCBkaWRTZWVSZXNvbHZlck11
dGF0aW9uV2l0aGluRHluYW1pY01lZGlhUXVlcnkgeyBmYWxzZSB9OwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAppbmRleCBmMzhiZDcxOTNiYjA1NGMw
MmQ1NGY5NWI2NzE1YzU2MjUzN2MxNmM2Li42M2MzNDk0OWYxMzRiZTRhZWYyMThmNzdkMDgwOWZi
ZjBjMDgwMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcApA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUnVsZVNldC5oIgorI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtOTIsOCArOTIsMTAgQEAgSW52YWxpZGF0b3I6
OkludmFsaWRhdG9yKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzLCBj
b25zdCBNZWRpYVEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9vd25lZFJ1bGVTZXQtPmRpc2Fi
bGVBdXRvU2hyaW5rVG9GaXQoKTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHJ1bGVTZXRCdWlsZGVy
KCptX293bmVkUnVsZVNldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAgICAgZm9yIChhdXRvJiBz
aGVldCA6IHNoZWV0cykKLSAgICAgICAgbV9vd25lZFJ1bGVTZXQtPmFkZFJ1bGVzRnJvbVNoZWV0
KCpzaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAgIHJ1bGVTZXRCdWlsZGVyLmFk
ZFJ1bGVzRnJvbVNoZWV0KCpzaGVldCk7CiAKICAgICBtX3J1bGVJbmZvcm1hdGlvbiA9IGNvbGxl
Y3RSdWxlSW5mb3JtYXRpb24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
UnVsZVNldHMuY3BwCmluZGV4IDFhYjRhOTlkM2Y3MTNhNzAxZjExMTg2YzYyM2VlOWMxZGNhNGFl
NzUuLjViOTNhZWEyZTA3ZjVhYjQxZmMwNGNkMzQyNTE0NmFiMjYzOTIxMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcApAQCAtMzYsNiArMzYsNyBAQAog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1
YXRvci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCkBAIC03Myw5ICs3NCwxMSBAQCB2b2lkIFNjb3Bl
UnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZUlmTmVlZGVkKCkgY29uc3QK
IAogICAgIC8vIE1lZGlhIHF1ZXJpZXMgb24gdXNlciBhZ2VudCBzaGVldCBuZWVkIHRvIGV2YWx1
YXRlZCBpbiBkb2N1bWVudCBjb250ZXh0LiBUaGV5IGJlaGF2ZSBsaWtlIGF1dGhvciBzaGVldHMg
aW4gdGhpcyByZXNwZWN0LgogICAgIGF1dG8mIG1lZGlhUXVlcnlFdmFsdWF0b3IgPSBtX3N0eWxl
UmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpOworCiAgICAgbV91c2VyQWdlbnRNZWRpYVF1
ZXJ5U3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAgICAKLSAgICBtX3VzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1ZXJ5
U3R5bGVTaGVldCwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVy
KTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIoKm1fdXNlckFnZW50TWVkaWFRdWVyeVN0
eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICBidWlsZGVy
LmFkZFJ1bGVzRnJvbVNoZWV0KCpVc2VyQWdlbnRTdHlsZTo6bWVkaWFRdWVyeVN0eWxlU2hlZXQp
OwogfQogCiBSdWxlU2V0KiBTY29wZVJ1bGVTZXRzOjp1c2VyU3R5bGUoKSBjb25zdApAQCAtODks
MzEgKzkyLDM4IEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6aW5pdGlhbGl6ZVVzZXJTdHlsZSgpCiB7
CiAgICAgYXV0byYgZXh0ZW5zaW9uU3R5bGVTaGVldHMgPSBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKS5leHRlbnNpb25TdHlsZVNoZWV0cygpOwogICAgIGF1dG8mIG1lZGlhUXVlcnlFdmFsdWF0
b3IgPSBtX3N0eWxlUmVzb2x2ZXIubWVkaWFRdWVyeUV2YWx1YXRvcigpOwotICAgIGF1dG8gdGVt
cFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBw
YWdlVXNlclNoZWV0ID0gZXh0ZW5zaW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgpKQotICAg
ICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LT5jb250
ZW50cygpLCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBtX3N0eWxlUmVzb2x2ZXIpOwor
CisgICAgYXV0byB1c2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKworICAgIGlmIChhdXRv
KiBwYWdlVXNlclNoZWV0ID0gZXh0ZW5zaW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgpKSB7
CisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIGJ1aWxkZXIodXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZh
bHVhdG9yLCAmbV9zdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21T
aGVldChwYWdlVXNlclNoZWV0LT5jb250ZW50cygpKTsKKyAgICB9CisKICNpZiBFTkFCTEUoQVBQ
X0JPVU5EX0RPTUFJTlMpCiAgICAgYXV0byogcGFnZSA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVu
dCgpLnBhZ2UoKTsKICAgICBpZiAoIWV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0
eWxlU2hlZXRzKCkuaXNFbXB0eSgpICYmIHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVy
KCkuY2xpZW50KCkuc2hvdWxkRW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeVByb3RlY3Rpb25zKCkp
CiAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJJZ25vcmluZyB1
c2VyIHN0eWxlIHNoZWV0IGZvciBub24tYXBwIGJvdW5kIGRvbWFpbi4iX3MpOwogICAgIGVsc2Ug
ewotICAgICAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxl
U2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1l
ZGlhUXVlcnlFdmFsdWF0b3IpOworICAgICAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hl
ZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCksIHVzZXJT
dHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAgICAgICAgIGlmIChwYWdlICYmICFleHRlbnNp
b25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLm5vdGlmeVBhZ2VPZkFw
cEJvdW5kQmVoYXZpb3IoKTsKICAgICB9CiAjZWxzZQotICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2Vy
U3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMo
KSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgY29sbGVj
dFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVz
ZXJTdHlsZVNoZWV0cygpLCB1c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogI2VuZGlm
Ci0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0
cy5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBtZWRpYVF1
ZXJ5RXZhbHVhdG9yKTsKLSAgICBpZiAodGVtcFVzZXJTdHlsZS0+cnVsZUNvdW50KCkgPiAwIHx8
IHRlbXBVc2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCi0gICAgICAgIG1fdXNlclN0
eWxlID0gV1RGTW92ZSh0ZW1wVXNlclN0eWxlKTsKKyAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0
eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCks
IHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CisKKyAgICBpZiAodXNlclN0eWxlLT5y
dWxlQ291bnQoKSA+IDAgfHwgdXNlclN0eWxlLT5wYWdlUnVsZXMoKS5zaXplKCkgPiAwKQorICAg
ICAgICBtX3VzZXJTdHlsZSA9IFdURk1vdmUodXNlclN0eWxlKTsKIH0KIAotdm9pZCBTY29wZVJ1
bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSkKK3ZvaWQgU2NvcGVSdWxlU2V0czo6Y29sbGVj
dFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiYgdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlLCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCh1c2VyU2hlZXRz
W2ldLT5jb250ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSk7Ci0gICAgICAgIHVzZXJTdHlsZS5h
ZGRSdWxlc0Zyb21TaGVldCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLCBudWxscHRyLCBtZWRp
dW0sIG1fc3R5bGVSZXNvbHZlcik7CisgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcih1c2VyU3R5
bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAgIGZvciAoYXV0
byYgc2hlZXQgOiB1c2VyU2hlZXRzKSB7CisgICAgICAgIEFTU0VSVChzaGVldC0+Y29udGVudHMo
KS5pc1VzZXJTdHlsZVNoZWV0KCkpOworICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0
KHNoZWV0LT5jb250ZW50cygpKTsKICAgICB9CiB9CiAKQEAgLTE3NSwxMSArMTg1LDEzIEBAIHN0
ZDo6b3B0aW9uYWw8RHluYW1pY01lZGlhUXVlcnlFdmFsdWF0aW9uQ2hhbmdlcz4gU2NvcGVSdWxl
U2V0czo6ZXZhbHVhdGVEeW5hbWljCiAgICAgcmV0dXJuIGV2YWx1YXRpb25DaGFuZ2VzOwogfQog
Ci12b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRv
ciogbWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KQordm9pZCBTY29wZVJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMsIE1lZGlhUXVlcnlFdmFsdWF0
b3IqIG1lZGlhUXVlcnlFdmFsdWF0b3IsIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3Rv
ckNTU09NV3JhcHBlcnMpCiB7CisgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcigqbV9hdXRob3JT
dHlsZSwgKm1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworCiAgICAgZm9y
IChhdXRvJiBjc3NTaGVldCA6IHN0eWxlU2hlZXRzKSB7CiAgICAgICAgIEFTU0VSVCghY3NzU2hl
ZXQtPmRpc2FibGVkKCkpOwotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChjc3NTaGVldC0+Y29udGVudHMoKSwgY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCAqbWVkaXVt
LCBtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KGNz
c1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkpOwogICAgICAgICBp
bnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RGcm9tU3R5bGVTaGVldElmTmVlZGVkKGNzc1No
ZWV0LmdldCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Vz
ZXJBZ2VudFN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1VzZXJBZ2VudFN0eWxlLmNw
cAppbmRleCBjZWQxOGEzOWRhYmRlMjJiMzUwOWQwODdmOTE1YjM4MjM3MGFhZTBmLi5kNTA3ZmIx
NjNmZGUyZDJlZjZmMTljMmExOTRjMzA0MDY3Mjc3MTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
VXNlckFnZW50U3R5bGUuY3BwCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAi
UnVsZVNldC5oIgorI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0Q29udGVudHMuaCIKQEAgLTEwNyw4ICsxMDcsMTEgQEAgc3RhdGljIFN0eWxlU2hl
ZXRDb250ZW50cyogcGFyc2VVQVNoZWV0KGNvbnN0IFN0cmluZyYgc3RyKQogCiB2b2lkIFVzZXJB
Z2VudFN0eWxlOjphZGRUb0RlZmF1bHRTdHlsZShTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQog
ewotICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIHNjcmVlbkV2YWwo
KSk7Ci0gICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCBwcmlu
dEV2YWwoKSk7CisgICAgUnVsZVNldEJ1aWxkZXIgc2NyZWVuQnVpbGRlcigqZGVmYXVsdFN0eWxl
LCBzY3JlZW5FdmFsKCkpOworICAgIHNjcmVlbkJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQpOworCisgICAgUnVsZVNldEJ1aWxkZXIgcHJpbnRCdWlsZGVyKCpkZWZhdWx0UHJpbnRTdHls
ZSwgcHJpbnRFdmFsKCkpOworICAgIHByaW50QnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVl
dCk7CiAKICAgICAvLyBCdWlsZCBhIHN0eWxlc2hlZXQgY29uc2lzdGluZyBvZiBub24tdHJpdmlh
bCBtZWRpYSBxdWVyaWVzIHNlZW4gaW4gZGVmYXVsdCBzdHlsZS4KICAgICAvLyBSdWxlc2V0cyBm
b3IgdGhlc2UgY2FuJ3QgYmUgZ2xvYmFsIGFuZCBuZWVkIHRvIGJlIGJ1aWx0IGluIGRvY3VtZW50
IGNvbnRleHQuCkBAIC0xNDUsNyArMTQ4LDkgQEAgdm9pZCBVc2VyQWdlbnRTdHlsZTo6aW5pdERl
ZmF1bHRTdHlsZVNoZWV0KCkKICAgICAvLyBRdWlya3MtbW9kZSBydWxlcy4KICAgICBTdHJpbmcg
cXVpcmtzUnVsZXMgPSBTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocXVp
cmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQp
KSkgKyBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAg
ICAgcXVpcmtzU3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChxdWlya3NSdWxlcyk7Ci0gICAgZGVm
YXVsdFF1aXJrc1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqcXVpcmtzU3R5bGVTaGVldCwgc2Ny
ZWVuRXZhbCgpKTsKKworICAgIFJ1bGVTZXRCdWlsZGVyIHF1aXJrQnVpbGRlcigqZGVmYXVsdFF1
aXJrc1N0eWxlLCBzY3JlZW5FdmFsKCkpOworICAgIHF1aXJrQnVpbGRlci5hZGRSdWxlc0Zyb21T
aGVldCgqcXVpcmtzU3R5bGVTaGVldCk7CiAKICAgICArK2RlZmF1bHRTdHlsZVZlcnNpb247CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440062</attachid>
            <date>2021-10-04 07:52:22 -0700</date>
            <delta_ts>2021-10-04 12:34:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231158-20211004175220.patch</filename>
            <type>text/plain</type>
            <size>36939</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU3MTJjMzk1MmFiYzgz
MmE4NzQ4NWIwZTIwYjA2OWJhYmQ5MGIxYy4uNTExYzIyNWQzYTQwMjE1ODFkODVkZDRkOTk0MTYx
ZTdkOGI1NDhkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTEwLTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJ1bGVTZXRCdWls
ZGVyIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsYW4gQnVqdGFzLgorCisgICAgICAg
IEltcHJvdmUgZW5jYXBzdWxhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMg
Y2xpZW50cyB1c2UgUnVsZVNldEJ1aWxkZXIgZGlyZWN0bHkgcmVtb3ZpbmcgdGhlIHR3by13YXkg
ZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIFJ1bGVTZXQgYW5kIFJ1bGVTZXRCdWlsZGVyLgor
CisgICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6c2hy
aW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaHJpbmtEeW5hbWlj
UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1J1bGVTZXQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzOjpzaHJpbmtUb0Zp
dCk6CisgICAgICAgICogc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6bV9yZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dEJ1aWxkZXI6On5SdWxlU2V0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jl
c29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0
YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojpwb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OmFkZFJ1bGVJZk5lZWRlZCk6
IERlbGV0ZWQuCisKKyAgICAgICAgTWVkaWFRdWVyeUNvbGxlY3RvciBpcyBub3cgYSBwcml2YXRl
IGlubmVyIHN0cnVjdCBvZiBSdWxlU2V0QnVpbGRlci4KKworICAgICAgICAqIHN0eWxlL1J1bGVT
ZXRCdWlsZGVyLmg6CisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6bV9kaXJ0aWVzQWxsU3R5bGUpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGVSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2NvcGVS
dWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmluaXRpYWxpemVVc2VyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVs
ZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBzdHlsZS9Vc2VyQWdl
bnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VXNlckFnZW50U3R5bGU6OmFk
ZFRvRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpVc2VyQWdlbnRTdHls
ZTo6aW5pdERlZmF1bHRTdHlsZVNoZWV0KToKKwogMjAyMS0xMC0wMyAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBSdWxlU2V0IGJ1aWxkZXIgdG8gYSBm
aWxlIG9mIGl0cyBvd24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggNjhlZGNmMWUzZTU2
MmE2NWFlNjBlYjI3MjYxYTNiOWQzNmY2MDkyNy4uY2FiNzU2ZTgzOGQ1OTNhMGIzN2FmZWEyNTEw
OWZmNzFjZDRhN2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUnVsZVNldEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmlsdGVyLmgiCkBAIC04NCw5ICs4MywxNyBAQCBz
dGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9yLT5wc2V1
ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQogCi12b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBzZWxlY3Rv
ckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2FkZUxheWVy
SWRlbnRpZmllciwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0
b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCkKIHsKLSAgICBSdWxl
RGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9y
dWxlQ291bnQrKyk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwg
c2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZUNvdW50KTsKKyAgICBhZGRSdWxlKFdURk1vdmUocnVs
ZURhdGEpLCAwKTsKK30KKwordm9pZCBSdWxlU2V0OjphZGRSdWxlKFJ1bGVEYXRhJiYgcnVsZURh
dGEsIENhc2NhZGVMYXllcklkZW50aWZpZXIgY2FzY2FkZUxheWVySWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQocnVsZURhdGEucG9zaXRpb24oKSA9PSBtX3J1bGVDb3VudCk7CisKKyAgICArK21f
cnVsZUNvdW50OwogCiAgICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXIpIHsKICAgICAgICAg
YXV0byBvbGRTaXplID0gbV9jYXNjYWRlTGF5ZXJJZGVudGlmaWVyRm9yUnVsZVBvc2l0aW9uLnNp
emUoKTsKQEAgLTk3LDkgKzEwNCw2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25zdCBTdHls
ZVJ1bGUmIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlCiAKICAgICBt
X2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKLSAgICBpZiAobWVkaWFRdWVy
eUNvbGxlY3RvcikKLSAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZUlmTmVlZGVk
KHJ1bGVEYXRhKTsKLQogICAgIHVuc2lnbmVkIGNsYXNzQnVja2V0U2l6ZSA9IDA7CiAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0b3IgPSBudWxscHRyOwogICAgIGNvbnN0IENTU1NlbGVj
dG9yKiB0YWdTZWxlY3RvciA9IG51bGxwdHI7CkBAIC0yNzIsNDUgKzI3Niw2IEBAIHZvaWQgUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYgcnVsZSkKICAgICBtX3BhZ2VSdWxlcy5h
cHBlbmQoJnJ1bGUpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0
IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2
YWx1YXRvcikKLXsKLSAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRN
ZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKLSAgICBidWlsZGVyLmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0KTsKLQotICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCi0g
ICAgICAgIHNocmlua1RvRml0KCk7Ci19Ci0KLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeVNldCog
c2hlZXRRdWVyeSwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBTdHlsZTo6
UmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKLSAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlz
LCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBudWxscHRy
LCBSdWxlU2V0QnVpbGRlcjo6TW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4gfTsKLSAgICAgICAg
aWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hlZXRRdWVy
eSkpCi0gICAgICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0KTsKLSAgICAg
ICAgYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLSAgICAgICAg
cmV0dXJuICFidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRo
aW5EeW5hbWljTWVkaWFRdWVyeTsKLSAgICB9KCk7Ci0KLSAgICBSdWxlU2V0QnVpbGRlciBidWls
ZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5V
c2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07Ci0KLSAgICBpZiAo
YnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkK
LSAgICAgICAgYnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChzaGVldCk7Ci0gICAgYnVpbGRlci5t
ZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChzaGVldFF1ZXJ5KTsKLQotICAgIG1faGFzVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IuaGFzVmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXM7Ci0KLSAgICBpZiAoIWJ1aWxkZXIubWVkaWFRdWVy
eUNvbGxlY3Rvci5keW5hbWljTWVkaWFRdWVyeVJ1bGVzLmlzRW1wdHkoKSkgewotICAgICAgICBh
dXRvIGZpcnN0TmV3SW5kZXggPSBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuc2l6ZSgpOwotICAg
ICAgICBtX2R5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoYnVpbGRl
ci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKLQotICAgICAg
ICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBldmFsdWF0ZUR5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMoZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQotICAgICAgICBzaHJpbmtUb0ZpdCgpOwotfQotCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KIHZvaWQgUnVsZVNldDo6dHJhdmVyc2VSdWxlRGF0
YXMoRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsKQEAgLTQxNCwxNCArMzc5LDYgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFw
KQogICAgICAgICB2ZWN0b3ItPnNocmlua1RvRml0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBzaHJpbmtEeW5hbWljUnVsZXMoVmVjdG9yPFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVs
ZXM+JiBkeW5hbWljUnVsZXMpCi17Ci0gICAgZm9yIChhdXRvJiBydWxlIDogZHluYW1pY1J1bGVz
KQotICAgICAgICBydWxlLnNocmlua1RvRml0KCk7Ci0KLSAgICBkeW5hbWljUnVsZXMuc2hyaW5r
VG9GaXQoKTsKLX0KLQogdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAgICAgc2hyaW5r
TWFwVmVjdG9yc1RvRml0KG1faWRSdWxlcyk7CkBAIC00NDMsNyArNDAwLDkgQEAgdm9pZCBSdWxl
U2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKICAgICBt
X2ZlYXR1cmVzLnNocmlua1RvRml0KCk7CiAKLSAgICBzaHJpbmtEeW5hbWljUnVsZXMobV9keW5h
bWljTWVkaWFRdWVyeVJ1bGVzKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBtX2R5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMpCisgICAgICAgIHJ1bGUuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2R5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgIG1fY2FzY2FkZUxheWVycy5zaHJp
bmtUb0ZpdCgpOwogICAgIG1fY2FzY2FkZUxheWVySWRlbnRpZmllckZvclJ1bGVQb3NpdGlvbi5z
aHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCmluZGV4IDhhNzEzZTY1YTk4ZjhkNGJj
ZDdlZDI2MzQyMzExMWVkODI2M2M3OGEuLjU4NWYwNGJhZGNkYTFkN2JlM2Y2MzBmZWVhZDg4ZmIz
NzQzY2ZiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNw
YWNlIFN0eWxlIHsKIAogY2xhc3MgUmVzb2x2ZXI7CiBjbGFzcyBSdWxlU2V0Owotc3RydWN0IFJ1
bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOwogCiB1c2luZyBJbnZhbGlkYXRpb25SdWxlU2V0VmVj
dG9yID0gVmVjdG9yPFJlZlB0cjxjb25zdCBSdWxlU2V0PiwgMT47CiAKQEAgLTcxLDI1ICs3MCw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURhdGFWZWN0
b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxl
RGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgc3RydWN0IER5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMgewotICAgICAgICBWZWN0b3I8UmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+PiBtZWRpYVF1
ZXJ5U2V0czsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zOwot
ICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXM7Ci0gICAgICAgIGJvb2wgcmVx
dWlyZXNGdWxsUmVzZXQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHJlc3VsdCB7IHRydWUgfTsK
LQotICAgICAgICB2b2lkIHNocmlua1RvRml0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVk
aWFRdWVyeVNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIGFmZmVjdGVkUnVsZVBvc2l0
aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICAgICAgcnVsZUZlYXR1cmVzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25z
dCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7Ci0gICAg
dm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBN
ZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5
bGU6OlJlc29sdmVyJik7Ci0KLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVk
IGNhc2NhZGVMYXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqID0gbnVs
bHB0cik7CisgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KTsKICAgICB2b2lkIGFkZFBhZ2VS
dWxlKFN0eWxlUnVsZVBhZ2UmKTsKIAogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0IEF0b21T
dHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwpAQCAtMTI2LDEyICsx
MDcsMTQgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9yKGNvbnN0
IFJ1bGVEYXRhJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHN0cnVjdCBSdWxlU2V0
QnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgUnVsZVNldEJ1aWxkZXI7CiAKICAgICBSdWxlU2V0
KCk7CiAKICAgICB1c2luZyBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gdW5zaWduZWQ7CiAKKyAg
ICB2b2lkIGFkZFJ1bGUoUnVsZURhdGEmJiwgQ2FzY2FkZUxheWVySWRlbnRpZmllcik7CisKICAg
ICBzdHJ1Y3QgUmVzb2x2ZXJNdXRhdGluZ1J1bGUgewogICAgICAgICBSZWY8U3R5bGVSdWxlQmFz
ZT4gcnVsZTsKICAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBsYXllcklkZW50aWZpZXI7
CkBAIC0xNTUsNiArMTM4LDIxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ2FzY2FkZUxheWVyJiBj
YXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKENhc2NhZGVMYXllcklkZW50aWZpZXIgaWRlbnRpZmll
cikgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGF5ZXJzW2lkZW50aWZpZXIgLSAxXTsgfQogICAg
IHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyKSBjb25zdDsKIAorICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsKKyAg
ICAgICAgVmVjdG9yPFJlZjxjb25zdCBNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7Cisg
ICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9uczsKKyAgICAgICAgUnVs
ZUZlYXR1cmVWZWN0b3IgcnVsZUZlYXR1cmVzOworICAgICAgICBib29sIHJlcXVpcmVzRnVsbFJl
c2V0IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCByZXN1bHQgeyB0cnVlIH07CisKKyAgICAgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlTZXRz
LnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgICAgIHJ1bGVGZWF0dXJlcy5zaHJpbmtUb0ZpdCgpOworICAgICAg
ICB9CisgICAgfTsKKwogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9tUnVsZU1h
cCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdMb2NhbE5hbWVSdWxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBhMDFmZTE5MmQ4YjM0ODRi
NjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4Li5lY2Q3YzNjYWM1MDhmZTU0NjYxM2VkNDRmMDhiMzM0
MjkzZDYxYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCkBAIC0z
MiwzNiArMzIsNzMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAK
K1J1bGVTZXRCdWlsZGVyOjpSdWxlU2V0QnVpbGRlcihSdWxlU2V0JiBydWxlU2V0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFJlc29sdmVyKiByZXNvbHZlcikKKyAgICA6
IG1fcnVsZVNldCgmcnVsZVNldCkKKyAgICAsIG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1
YXRvciB9KQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKworUnVsZVNldEJ1aWxk
ZXI6OlJ1bGVTZXRCdWlsZGVyKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvcikK
KyAgICA6IG1fbWVkaWFRdWVyeUNvbGxlY3Rvcih7IGV2YWx1YXRvciwgdHJ1ZSB9KQoreworfQor
CiBSdWxlU2V0QnVpbGRlcjo6flJ1bGVTZXRCdWlsZGVyKCkKIHsKLSAgICBpZiAobW9kZSA9PSBN
b2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB1cGRhdGVEeW5h
bWljTWVkaWFRdWVyaWVzKCk7CiAgICAgYWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKTsKKwor
ICAgIGlmIChtX3J1bGVTZXQtPm1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKKyAgICAgICAgbV9y
dWxlU2V0LT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxl
c0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBzaGVldFF1ZXJ5KQoreworICAgIGF1dG8gY2FuVXNlRHluYW1pY01lZGlhUXVlcnlS
ZXNvbHV0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3Jlc29sdmVyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFJ1bGVTZXRCdWlsZGVyIG11dGF0aW9uU2Nhbm5lciht
X21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yKTsKKyAgICAgICAgaWYgKG11dGF0aW9uU2Nh
bm5lci5tX21lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNoZWV0UXVlcnkpKQor
ICAgICAgICAgICAgbXV0YXRpb25TY2FubmVyLmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgICAgICBtdXRhdGlvblNjYW5uZXIubV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcChz
aGVldFF1ZXJ5KTsKKworICAgICAgICByZXR1cm4gIW11dGF0aW9uU2Nhbm5lci5kaWRTZWVSZXNv
bHZlck11dGF0aW9uV2l0aGluRHluYW1pY01lZGlhUXVlcnk7CisgICAgfTsKKworICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5jb2xsZWN0RHluYW1pYyA9IGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5
UmVzb2x1dGlvbigpOworCisgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUoc2hlZXRRdWVyeSkpCisgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoc2hl
ZXQpOworICAgIG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3Aoc2hlZXRRdWVyeSk7CiB9CiAKIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogewogICAgIGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7Ci0g
ICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuICYmIG1lZGlhUXVl
cnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSkKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZGlkU2VlUmVzb2x2ZXJNdXRhdGlvbldpdGhp
bkR5bmFtaWNNZWRpYVF1ZXJ5KQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChp
czxTdHlsZVJ1bGU+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9y
bWFsKQorICAgICAgICAgICAgaWYgKG1fcnVsZVNldCkKICAgICAgICAgICAgICAgICBhZGRTdHls
ZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVT
ZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAg
ICAgICBpZiAobV9ydWxlU2V0KQorICAgICAgICAgICAgICAgIG1fcnVsZVNldC0+YWRkUGFnZVJ1
bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAg
ICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1
bGUpOwotICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRl
KCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpKQorICAgICAgICAgICAgaWYgKG1fbWVkaWFRdWVy
eUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpCiAg
ICAgICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpKTsKLSAg
ICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKCZtZWRpYVJ1bGUubWVkaWFRdWVyaWVz
KCkpOworICAgICAgICAgICAgbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCgmbWVkaWFSdWxlLm1l
ZGlhUXVlcmllcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpczxTdHlsZVJ1bGVMYXllcj4oKnJ1bGUpKSB7CkBAIC03OCwxMiArMTE1LDExIEBAIHZv
aWQgUnVsZVNldEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPj4mIHJ1bGVzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlRm9u
dFBhbGV0dGVWYWx1ZXM+KCpydWxlKSB8fCBpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkg
ewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4pIHsK
LSAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyKCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAocmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgY29sbGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1
bGVzLmFwcGVuZCh7ICpydWxlLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAg
ICAgICAgICAgIGlmICghbV9ydWxlU2V0ICYmICFtX21lZGlhUXVlcnlDb2xsZWN0b3IuZHluYW1p
Y0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGlkU2VlUmVzb2x2ZXJN
dXRhdGlvbldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYg
KG1fcmVzb2x2ZXIpCisgICAgICAgICAgICAgICAgbV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5n
UnVsZXMuYXBwZW5kKHsgKnJ1bGUsIG1fY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8U3R5bGVS
dWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUp
LmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKQEAgLTkzLDcgKzEyOSw3IEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4mIHJ1bGVzKQogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9t
U2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkKK3ZvaWQgUnVsZVNldEJ1aWxk
ZXI6OmFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBz
aGVldCkKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVmb3JlSW1w
b3J0UnVsZXMoKSkKICAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3QoKSk7CkBA
IC0xMDIsMTcgKzEzOCwxNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjphZGRSdWxlc0Zyb21TaGVl
dChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0KQogICAgICAgICBpZiAoIXJ1bGUtPnN0
eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVF1
ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAg
ICAgICAgaWYgKG1fbWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVsZS0+bWVk
aWFRdWVyaWVzKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1lID0gcnVs
ZS0+Y2FzY2FkZUxheWVyTmFtZSgpOwogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUp
CiAgICAgICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CiAK
LSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkpOworICAg
ICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXRDb250ZW50cygqcnVsZS0+c3R5bGVTaGVldCgpKTsK
IAogICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCiAgICAgICAgICAgICAgICAgcG9w
Q2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1lKTsKICAgICAgICAgfQotICAgICAgICBtZWRp
YVF1ZXJ5Q29sbGVjdG9yLnBvcChydWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgIG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIH0KIAogICAg
IGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKQEAgLTEyNCw4ICsxNjAsMTQgQEAg
dm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkK
ICAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHVu
c2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3Rvcklu
ZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVj
dG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAg
IHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgr
KywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsK
KyAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RG
b3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0
ZXIoc2VsZWN0b3JJbmRleCkpIHsKKyAgICAgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2Vs
ZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgsIG1fcnVsZVNldC0+cnVsZUNvdW50KCkpOwor
ICAgICAgICBtX21lZGlhUXVlcnlDb2xsZWN0b3IuYWRkUnVsZUlmTmVlZGVkKHJ1bGVEYXRhKTsK
KworICAgICAgICBtX3J1bGVTZXQtPmFkZFJ1bGUoV1RGTW92ZShydWxlRGF0YSksIG1fY3VycmVu
dENhc2NhZGVMYXllcklkZW50aWZpZXIpOworCisgICAgICAgICsrc2VsZWN0b3JMaXN0SW5kZXg7
CisgICAgfQogfQogCiB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBW
ZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQpAQCAtMTM4LDE0ICsxODAsMTQgQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6cmVnaXN0ZXJMYXllcnMoY29uc3QgVmVjdG9yPENhc2NhZGVMYXll
ck5hbWU+JiBuYW1lcykKIAogdm9pZCBSdWxlU2V0QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihj
b25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBuYW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5v
cm1hbCkKKyAgICBpZiAoIW1fcnVsZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNh
c2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFydWxlU2V0LT5tX2Nhc2NhZGVM
YXllcnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5p
c0VtcHR5KCkgJiYgIW1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyBGb3IgaW5jcmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1lLT5pZGVu
dGlmaWVyIG1hcC4KICAgICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1fY2FzY2Fk
ZUxheWVycykKLSAgICAgICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVy
LnJlc29sdmVkTmFtZSwgKytpZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChhdXRvJiBsYXllciA6
IG1fcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQorICAgICAgICAgICAgbV9jYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyTWFwLmFkZChsYXllci5yZXNvbHZlZE5hbWUsICsraWRlbnRpZmllcik7CiAgICAg
fQogCiAgICAgYXV0byBuYW1lUmVzb2x2aW5nQW5vbnltb3VzID0gWyZdIHsKQEAgLTE1OSwyOSAr
MjAxLDI5IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2Fz
Y2FkZUxheWVyTmFtZSYgbmFtZSkKIAogICAgIC8vIEZvciBoaWVyYXJjaGljYWwgbmFtZXMgd2Ug
cmVnaXN0ZXIgdGhlIGNvbnRhaW5pbmcgbGF5ZXJzIGluZGl2aWR1YWxseSBmaXJzdC4KICAgICBm
b3IgKGF1dG8mIG5hbWVTZWdtZW50IDogbmFtZVJlc29sdmluZ0Fub255bW91cygpKSB7Ci0gICAg
ICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5hcHBlbmQobmFtZVNlZ21lbnQpOwotICAgICAg
ICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IGNhc2NhZGVMYXllcklkZW50aWZpZXJN
YXAuZW5zdXJlKHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgWyZdIHsKKyAgICAgICAgbV9yZXNv
bHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKKyAgICAgICAgbV9jdXJy
ZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciA9IG1fY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5l
bnN1cmUobV9yZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7CiAgICAgICAgICAgICAvLyBQ
cmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5zaXplKCk7CisgICAgICAgICAgICBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVycy5hcHBl
bmQoeyBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFtZSwgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRl
bnRpZmllciB9KTsKKyAgICAgICAgICAgIHJldHVybiBtX3J1bGVTZXQtPm1fY2FzY2FkZUxheWVy
cy5zaXplKCk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiB9CiAKIHZvaWQg
UnVsZVNldEJ1aWxkZXI6OnBvcENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBu
YW1lKQogewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKKyAgICBpZiAoIW1fcnVsZVNl
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChhdXRvIHNpemUgPSBuYW1lLmlzRW1wdHko
KSA/IDEgOiBuYW1lLnNpemUoKTsgc2l6ZS0tOykgewotICAgICAgICByZXNvbHZlZENhc2NhZGVM
YXllck5hbWUucmVtb3ZlTGFzdCgpOwotICAgICAgICBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRp
ZmllciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoY3VycmVudENhc2NhZGVM
YXllcklkZW50aWZpZXIpLnBhcmVudElkZW50aWZpZXI7CisgICAgICAgIG1fcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciA9IG1fcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihtX2N1cnJl
bnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOwogICAgIH0KIH0KIAog
dm9pZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogewotICAgIGlm
IChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAobV9jYXNjYWRl
TGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBjb21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CkBAIC0xODksOCArMjMxLDggQEAgdm9p
ZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQogICAgICAgICAgICAg
Ly8gSWRlbnRpZmllcnMgYXJlIGluIHBhcnNlIG9yZGVyIHdoaWNoIGFsbW9zdCBjb3JyZXNwb25k
cyB0byB0aGUgbGF5ZXIgcHJpb3JpdHkgb3JkZXIuCiAgICAgICAgICAgICAvLyBUaGUgb25seSBl
eGNlcHRpb24gaXMgd2hlbiBhIHN1YmxheWVyIGdldHMgYWRkZWQgdG8gYSBsYXllciBhZnRlciBh
ZGRpbmcgb3RoZXIgbm9uLXN1YmxheWVycy4KICAgICAgICAgICAgIC8vIFRvIHJlc29sdmUgdGhp
cyB3ZSBuZWVkIGxvb2sgZm9yIGEgc2hhcmVkIGFuY2VzdG9yIGxheWVyLgotICAgICAgICAgICAg
YXV0byBhUGFyZW50ID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihhKS5wYXJl
bnRJZGVudGlmaWVyOwotICAgICAgICAgICAgYXV0byBiUGFyZW50ID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyRm9ySWRlbnRpZmllcihiKS5wYXJlbnRJZGVudGlmaWVyOworICAgICAgICAgICAgYXV0
byBhUGFyZW50ID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGEpLnBhcmVu
dElkZW50aWZpZXI7CisgICAgICAgICAgICBhdXRvIGJQYXJlbnQgPSBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKICAgICAgICAgICAgIGlm
IChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0gYSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBhcmVudCkK
QEAgLTIwMiw3ICsyNDQsNyBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5
ZXJPcmRlcigpCiAgICAgfTsKIAogICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxheWVyQ291bnQgPSBydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMuc2l6ZSgpOworICAgIGF1dG8gbGF5ZXJDb3VudCA9IG1fcnVsZVNldC0+bV9j
YXNjYWRlTGF5ZXJzLnNpemUoKTsKICAgICBvcmRlclZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxheWVyQ291bnQpOwogICAgIGZvciAoUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyID0gMTsgaWRlbnRpZmllciA8PSBsYXllckNvdW50OyArK2lkZW50aWZpZXIp
CiAgICAgICAgIG9yZGVyVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsKQEAgLTIx
MCw1MiArMjUyLDY2IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6OnVwZGF0ZUNhc2NhZGVMYXllck9y
ZGVyKCkKICAgICBzdGQ6OnNvcnQob3JkZXJWZWN0b3IuYmVnaW4oKSwgb3JkZXJWZWN0b3IuZW5k
KCksIGNvbXBhcmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yZGVyVmVjdG9y
LnNpemUoKTsgKytpKQotICAgICAgICBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVy
KG9yZGVyVmVjdG9yW2ldKS5vcmRlciA9IGkgKyAxOworICAgICAgICBtX3J1bGVTZXQtPmNhc2Nh
ZGVMYXllckZvcklkZW50aWZpZXIob3JkZXJWZWN0b3JbaV0pLm9yZGVyID0gaSArIDE7CiB9CiAK
IHZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCkKIHsKLSAg
ICBpZiAoIXJlc29sdmVyKQorICAgIGlmICghbV9yZXNvbHZlcikKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8m
IGIpIHsKLSAgICAgICAgYXV0byBhT3JkZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZv
cklkZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGJPcmRlciA9IHJ1
bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihiLmxheWVySWRlbnRpZmllcik7
CisgICAgICAgIGF1dG8gYU9yZGVyID0gbV9ydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklk
ZW50aWZpZXIoYS5sYXllcklkZW50aWZpZXIpOworICAgICAgICBhdXRvIGJPcmRlciA9IG1fcnVs
ZVNldC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsK
ICAgICAgICAgcmV0dXJuIGFPcmRlciA8IGJPcmRlcjsKICAgICB9OwogCiAgICAgLy8gVGhlIG9y
ZGVyIG1heSBjaGFuZ2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0YXRpbmcg
cnVsZXMgZnJvbSBlYXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0
ZDo6ZXhjaGFuZ2UocnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9
KTsKLSAgICBydWxlc1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJlc29sdmVy
TXV0YXRpbmdSdWxlcykpOworICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6ZXhjaGFuZ2UobV9y
dWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLCB7IH0pOworICAgIHJ1bGVz
VG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9jb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVs
ZXMpKTsKIAotICAgIGlmICghY2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5pc0VtcHR5KCkpCisg
ICAgaWYgKCFtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpKQogICAgICAgICBz
dGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9BZGQuYmVnaW4oKSwgcnVsZXNUb0FkZC5lbmQoKSwgY29t
cGFyZUxheWVycyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbGxlY3RlZFJ1bGUgOiBydWxlc1RvQWRk
KSB7CiAgICAgICAgIGlmIChjb2xsZWN0ZWRSdWxlLmxheWVySWRlbnRpZmllcikKLSAgICAgICAg
ICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxl
Y3RlZFJ1bGUpOworICAgICAgICAgICAgbV9ydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxl
c0luTGF5ZXJzLmFwcGVuZChjb2xsZWN0ZWRSdWxlKTsKIAogICAgICAgICBhdXRvJiBydWxlID0g
Y29sbGVjdGVkUnVsZS5ydWxlOwogICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KHJ1
bGUpKSB7Ci0gICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5h
ZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlv
bnNDYWNoZSgpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0
KCkpLCBmYWxzZSk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERl
Y2xhcmF0aW9uc0NhY2hlKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7Ci0gICAgICAg
ICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFsZXR0ZVZh
bHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUuZ2V0KCkp
KTsKLSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0Nh
Y2hlKCk7CisgICAgICAgICAgICBtX3Jlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRQYWxldHRlVmFsdWVzUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250UGFsZXR0ZVZh
bHVlcz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+aW52YWxpZGF0ZU1h
dGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZSkpIHsKLSAgICAgICAg
ICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1l
cz4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbV9yZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHls
ZShkb3duY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXM+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgfQogfQogCi1SdWxlU2V0TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6flJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0Owordm9pZCBSdWxl
U2V0QnVpbGRlcjo6dXBkYXRlRHluYW1pY01lZGlhUXVlcmllcygpCit7CisgICAgaWYgKG1fbWVk
aWFRdWVyeUNvbGxlY3Rvci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcykKKyAgICAg
ICAgbV9ydWxlU2V0LT5tX2hhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0gdHJ1ZTsK
KworICAgIGlmICghbV9tZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmlyc3ROZXdJbmRleCA9IG1fcnVsZVNldC0+bV9k
eW5hbWljTWVkaWFRdWVyeVJ1bGVzLnNpemUoKTsKKyAgICAgICAgbV9ydWxlU2V0LT5tX2R5bmFt
aWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUobV9tZWRpYVF1ZXJ5Q29sbGVj
dG9yLmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKKworICAgICAgICAvLyBTZXQgdGhlIGluaXRp
YWwgdmFsdWVzLgorICAgICAgICBtX3J1bGVTZXQtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcnlS
dWxlcyhtX21lZGlhUXVlcnlDb2xsZWN0b3IuZXZhbHVhdG9yLCBmaXJzdE5ld0luZGV4KTsKKyAg
ICB9Cit9CisKK1J1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjp+TWVkaWFRdWVy
eUNvbGxlY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK2Jvb2wgUnVsZVNl
dEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjc1LDcgKzMzMSw3IEBAIGJvb2wgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hB
bmRFdmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVl
cnlTZXQqIHNldCkKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBv
cChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiB7CiAgICAgaWYgKCFzZXQgfHwgZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3Qo
KS5zZXQuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5OCwxNCArMzU0LDcgQEAgdm9pZCBS
dWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkK
ICAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBSdWxlU2V0
TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQotewotICAgIGlmIChkeW5h
bWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRpZE11dGF0
ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkgPSB0cnVlOwotfQotCi12b2lkIFJ1bGVT
ZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQordm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVs
ZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBpZiAoZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9S
dWxlU2V0QnVpbGRlci5oCmluZGV4IGVmNGFkZjA4MzE1NWQwNjNkZjQ1MjVmMWQ1YjFkM2JkMTcy
YzZiYzIuLjM3YzlhYTRjYTEzYjkwZDJlZmQ3OTFlMWQzYTk4NDZhZTNjMWRiNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaApAQCAtMjYsNDYgKzI2LDE3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCi1zdHJ1Y3QgUnVsZVNldE1lZGlhUXVl
cnlDb2xsZWN0b3IgewotICAgIH5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpOwotCi0gICAg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgIGNvbnN0IGJvb2wgY29s
bGVjdER5bmFtaWMgeyBmYWxzZSB9OwotCi0gICAgc3RydWN0IER5bmFtaWNDb250ZXh0IHsKLSAg
ICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAgVmVjdG9yPHNpemVf
dD4gYWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKLSAgICAgICAgUnVsZUZlYXR1cmVWZWN0b3Ig
cnVsZUZlYXR1cmVzIHsgfTsKLSAgICB9OwotICAgIFZlY3RvcjxEeW5hbWljQ29udGV4dD4gZHlu
YW1pY0NvbnRleHRTdGFjayB7IH07Ci0KLSAgICBWZWN0b3I8UnVsZVNldDo6RHluYW1pY01lZGlh
UXVlcnlSdWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07Ci0gICAgYm9vbCBkaWRNdXRh
dGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFsc2UgfTsKLSAgICBib29sIGhh
c1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgcHVz
aEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKLSAgICB2b2lkIHBvcChjb25zdCBN
ZWRpYVF1ZXJ5U2V0Kik7Ci0gICAgdm9pZCBkaWRNdXRhdGVSZXNvbHZlcigpOwotICAgIHZvaWQg
YWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7Ci19OwotCi1zdHJ1Y3QgUnVsZVNldEJ1
aWxkZXIgewotICAgIGVudW0gY2xhc3MgTW9kZSB7IE5vcm1hbCwgUmVzb2x2ZXJNdXRhdGlvblNj
YW4gfTsKLQotICAgIFJlZjxSdWxlU2V0PiBydWxlU2V0OwotICAgIFJ1bGVTZXRNZWRpYVF1ZXJ5
Q29sbGVjdG9yIG1lZGlhUXVlcnlDb2xsZWN0b3I7Ci0gICAgUmVzb2x2ZXIqIHJlc29sdmVyIHsg
bnVsbHB0ciB9OwotICAgIE1vZGUgbW9kZSB7IE1vZGU6Ok5vcm1hbCB9OwotICAgIENhc2NhZGVM
YXllck5hbWUgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKLSAgICBIYXNoTWFwPENhc2Nh
ZGVMYXllck5hbWUsIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXI+IGNhc2NhZGVMYXll
cklkZW50aWZpZXJNYXAgeyB9OwotICAgIFJ1bGVTZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIg
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgeyAwIH07Ci0gICAgVmVjdG9yPFJ1bGVTZXQ6
OlJlc29sdmVyTXV0YXRpbmdSdWxlPiBjb2xsZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9
OwotCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
KTsKLQorY2xhc3MgUnVsZVNldEJ1aWxkZXIgeworcHVibGljOgorICAgIFJ1bGVTZXRCdWlsZGVy
KFJ1bGVTZXQmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgUmVzb2x2ZXIqID0gbnVsbHB0
cik7CiAgICAgflJ1bGVTZXRCdWlsZGVyKCk7CiAKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0
KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVl
cnkgPSBudWxscHRyKTsKKwogcHJpdmF0ZToKKyAgICBSdWxlU2V0QnVpbGRlcihjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJik7CisKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0Q29udGVudHMo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJik7CiAgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+Jik7CiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUo
Y29uc3QgU3R5bGVSdWxlJik7CiAKQEAgLTc0LDYgKzQ1LDM3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwb3BDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYpOwogICAgIHZvaWQgdXBk
YXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKICAgICB2b2lkIGFkZE11dGF0aW5nUnVsZXNUb1Jlc29s
dmVyKCk7CisgICAgdm9pZCB1cGRhdGVEeW5hbWljTWVkaWFRdWVyaWVzKCk7CisKKyAgICBzdHJ1
Y3QgTWVkaWFRdWVyeUNvbGxlY3RvciB7CisgICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7
CisKKyAgICAgICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOworICAgICAg
ICBib29sIGNvbGxlY3REeW5hbWljIHsgZmFsc2UgfTsKKworICAgICAgICBzdHJ1Y3QgRHluYW1p
Y0NvbnRleHQgeworICAgICAgICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKKyAg
ICAgICAgICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9ucyB7IH07CisgICAg
ICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9OworICAgICAgICB9Owor
ICAgICAgICBWZWN0b3I8RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sgeyB9Owor
CisgICAgICAgIFZlY3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWlj
TWVkaWFRdWVyeVJ1bGVzIHsgfTsKKyAgICAgICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcmllcyB7IGZhbHNlIH07CisKKyAgICAgICAgYm9vbCBwdXNoQW5kRXZhbHVhdGUoY29u
c3QgTWVkaWFRdWVyeVNldCopOworICAgICAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0
Kik7CisgICAgICAgIHZvaWQgYWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJik7CisgICAg
fTsKKworICAgIFJlZlB0cjxSdWxlU2V0PiBtX3J1bGVTZXQ7CisgICAgTWVkaWFRdWVyeUNvbGxl
Y3RvciBtX21lZGlhUXVlcnlDb2xsZWN0b3I7CisgICAgUmVzb2x2ZXIqIG1fcmVzb2x2ZXIgeyBu
dWxscHRyIH07CisgICAgQ2FzY2FkZUxheWVyTmFtZSBtX3Jlc29sdmVkQ2FzY2FkZUxheWVyTmFt
ZSB7IH07CisgICAgSGFzaE1hcDxDYXNjYWRlTGF5ZXJOYW1lLCBSdWxlU2V0OjpDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyPiBtX2Nhc2NhZGVMYXllcklkZW50aWZpZXJNYXAgeyB9OworICAgIFJ1bGVT
ZXQ6OkNhc2NhZGVMYXllcklkZW50aWZpZXIgbV9jdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmll
ciB7IDAgfTsKKyAgICBWZWN0b3I8UnVsZVNldDo6UmVzb2x2ZXJNdXRhdGluZ1J1bGU+IG1fY29s
bGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzIHsgfTsKKyAgICBib29sIGRpZFNlZVJlc29sdmVy
TXV0YXRpb25XaXRoaW5EeW5hbWljTWVkaWFRdWVyeSB7IGZhbHNlIH07CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmluZGV4IGYzOGJkNzE5M2JiMDU0
YzAyZDU0Zjk1YjY3MTVjNTYyNTM3YzE2YzYuLjYzYzM0OTQ5ZjEzNGJlNGFlZjIxOGY3N2QwODA5
ZmJmMGMwODAwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxp
ZGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIu
aCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC05Miw4ICs5MiwxMCBAQCBJbnZhbGlkYXRv
cjo6SW52YWxpZGF0b3IoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+JiBzaGVldHMs
IGNvbnN0IE1lZGlhUQogICAgICAgICByZXR1cm47CiAKICAgICBtX293bmVkUnVsZVNldC0+ZGlz
YWJsZUF1dG9TaHJpbmtUb0ZpdCgpOworCisgICAgUnVsZVNldEJ1aWxkZXIgcnVsZVNldEJ1aWxk
ZXIoKm1fb3duZWRSdWxlU2V0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICBmb3IgKGF1dG8m
IHNoZWV0IDogc2hlZXRzKQotICAgICAgICBtX293bmVkUnVsZVNldC0+YWRkUnVsZXNGcm9tU2hl
ZXQoKnNoZWV0LCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICAgICAgcnVsZVNldEJ1aWxkZXIu
YWRkUnVsZXNGcm9tU2hlZXQoKnNoZWV0KTsKIAogICAgIG1fcnVsZUluZm9ybWF0aW9uID0gY29s
bGVjdFJ1bGVJbmZvcm1hdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2Nv
cGVSdWxlU2V0cy5jcHAKaW5kZXggMWFiNGE5OWQzZjcxM2E3MDFmMTExODZjNjIzZWU5YzFkY2E0
YWU3NS4uNWI5M2FlYTJlMDdmNWFiNDFmYzA0Y2QzNDI1MTQ2YWIyNjM5MjEyMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZh
bHVhdG9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJ1bGVTZXRCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKQEAgLTczLDkgKzc0LDExIEBAIHZvaWQgU2Nv
cGVSdWxlU2V0czo6dXBkYXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQoKSBjb25z
dAogCiAgICAgLy8gTWVkaWEgcXVlcmllcyBvbiB1c2VyIGFnZW50IHNoZWV0IG5lZWQgdG8gZXZh
bHVhdGVkIGluIGRvY3VtZW50IGNvbnRleHQuIFRoZXkgYmVoYXZlIGxpa2UgYXV0aG9yIHNoZWV0
cyBpbiB0aGlzIHJlc3BlY3QuCiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5
bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7CisKICAgICBtX3VzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwotICAgIAotICAgIG1fdXNlckFnZW50TWVk
aWFRdWVyeVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCgqVXNlckFnZW50U3R5bGU6Om1lZGlhUXVl
cnlTdHlsZVNoZWV0LCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yLCBtX3N0eWxlUmVzb2x2
ZXIpOworCisgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcigqbV91c2VyQWdlbnRNZWRpYVF1ZXJ5
U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAgIGJ1aWxk
ZXIuYWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1ZXJ5U3R5bGVTaGVl
dCk7CiB9CiAKIFJ1bGVTZXQqIFNjb3BlUnVsZVNldHM6OnVzZXJTdHlsZSgpIGNvbnN0CkBAIC04
OSwzMSArOTIsMzggQEAgdm9pZCBTY29wZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKCkK
IHsKICAgICBhdXRvJiBleHRlbnNpb25TdHlsZVNoZWV0cyA9IG1fc3R5bGVSZXNvbHZlci5kb2N1
bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCk7CiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1
YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7Ci0gICAgYXV0byB0
ZW1wVXNlclN0eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQq
IHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkpCi0g
ICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNv
bnRlbnRzKCksIG51bGxwdHIsIG1lZGlhUXVlcnlFdmFsdWF0b3IsIG1fc3R5bGVSZXNvbHZlcik7
CisKKyAgICBhdXRvIHVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworCisgICAgaWYgKGF1
dG8qIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkp
IHsKKyAgICAgICAgUnVsZVNldEJ1aWxkZXIgYnVpbGRlcih1c2VyU3R5bGUsIG1lZGlhUXVlcnlF
dmFsdWF0b3IsICZtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICBidWlsZGVyLmFkZFJ1bGVzRnJv
bVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCkpOworICAgIH0KKwogI2lmIEVOQUJMRShB
UFBfQk9VTkRfRE9NQUlOUykKICAgICBhdXRvKiBwYWdlID0gbV9zdHlsZVJlc29sdmVyLmRvY3Vt
ZW50KCkucGFnZSgpOwogICAgIGlmICghZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2Vy
U3R5bGVTaGVldHMoKS5pc0VtcHR5KCkgJiYgcGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5jbGllbnQoKS5zaG91bGRFbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5UHJvdGVjdGlvbnMo
KSkKICAgICAgICAgbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIklnbm9yaW5n
IHVzZXIgc3R5bGUgc2hlZXQgZm9yIG5vbi1hcHAgYm91bmQgZG9tYWluLiJfcyk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5
bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdGVtcFVzZXJTdHlsZS5nZXQoKSwg
bWVkaWFRdWVyeUV2YWx1YXRvcik7CisgICAgICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVT
aGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgdXNl
clN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIWV4dGVu
c2lvblN0eWxlU2hlZXRzLmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkubm90aWZ5UGFnZU9m
QXBwQm91bmRCZWhhdmlvcigpOwogICAgIH0KICNlbHNlCi0gICAgY29sbGVjdFJ1bGVzRnJvbVVz
ZXJTdHlsZVNoZWV0cyhleHRlbnNpb25TdHlsZVNoZWV0cy5pbmplY3RlZFVzZXJTdHlsZVNoZWV0
cygpLCB0ZW1wVXNlclN0eWxlLmdldCgpLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKyAgICBjb2xs
ZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hlZXRzLmluamVjdGVk
VXNlclN0eWxlU2hlZXRzKCksIHVzZXJTdHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAjZW5k
aWYKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGV4dGVuc2lvblN0eWxlU2hl
ZXRzLmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCksIHRlbXBVc2VyU3R5bGUuZ2V0KCksIG1lZGlh
UXVlcnlFdmFsdWF0b3IpOwotICAgIGlmICh0ZW1wVXNlclN0eWxlLT5ydWxlQ291bnQoKSA+IDAg
fHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgbV91c2Vy
U3R5bGUgPSBXVEZNb3ZlKHRlbXBVc2VyU3R5bGUpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2Vy
U3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMo
KSwgdXNlclN0eWxlLCBtZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKKworICAgIGlmICh1c2VyU3R5bGUt
PnJ1bGVDb3VudCgpID4gMCB8fCB1c2VyU3R5bGUtPnBhZ2VSdWxlcygpLnNpemUoKSA+IDApCisg
ICAgICAgIG1fdXNlclN0eWxlID0gV1RGTW92ZSh1c2VyU3R5bGUpOwogfQogCi12b2lkIFNjb3Bl
UnVsZVNldHM6OmNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHVzZXJTaGVldHMsIFJ1bGVTZXQmIHVzZXJTdHlsZSwgY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtKQordm9pZCBTY29wZVJ1bGVTZXRzOjpjb2xs
ZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4+JiB1c2VyU2hlZXRzLCBSdWxlU2V0JiB1c2VyU3R5bGUsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHVzZXJTaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQVNTRVJUKHVzZXJTaGVl
dHNbaV0tPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICAgICAgdXNlclN0eWxl
LmFkZFJ1bGVzRnJvbVNoZWV0KHVzZXJTaGVldHNbaV0tPmNvbnRlbnRzKCksIG51bGxwdHIsIG1l
ZGl1bSwgbV9zdHlsZVJlc29sdmVyKTsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKHVzZXJT
dHlsZSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgZm9yIChh
dXRvJiBzaGVldCA6IHVzZXJTaGVldHMpIHsKKyAgICAgICAgQVNTRVJUKHNoZWV0LT5jb250ZW50
cygpLmlzVXNlclN0eWxlU2hlZXQoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hl
ZXQoc2hlZXQtPmNvbnRlbnRzKCkpOwogICAgIH0KIH0KIApAQCAtMTc1LDExICsxODUsMTMgQEAg
c3RkOjpvcHRpb25hbDxEeW5hbWljTWVkaWFRdWVyeUV2YWx1YXRpb25DaGFuZ2VzPiBTY29wZVJ1
bGVTZXRzOjpldmFsdWF0ZUR5bmFtaWMKICAgICByZXR1cm4gZXZhbHVhdGlvbkNoYW5nZXM7CiB9
CiAKLXZvaWQgU2NvcGVSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRzLCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yKiBtZWRpdW0sIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBl
cnMpCit2b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1
YXRvciogbWVkaWFRdWVyeUV2YWx1YXRvciwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVj
dG9yQ1NTT01XcmFwcGVycykKIHsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyKCptX2F1dGhv
clN0eWxlLCAqbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5bGVSZXNvbHZlcik7CisKICAgICBm
b3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJUKCFjc3NT
aGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KGNzc1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksICptZWRp
dW0sIG1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQo
Y3NzU2hlZXQtPmNvbnRlbnRzKCksIGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgICAg
IGluc3BlY3RvckNTU09NV3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3Nz
U2hlZXQuZ2V0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
VXNlckFnZW50U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvVXNlckFnZW50U3R5bGUu
Y3BwCmluZGV4IGNlZDE4YTM5ZGFiZGUyMmIzNTA5ZDA4N2Y5MTViMzgyMzcwYWFlMGYuLmQ1MDdm
YjE2M2ZkZTJkMmVmNmYxOWMyYTE5NGMzMDQwNjcyNzcxODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1VzZXJBZ2VudFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9Vc2VyQWdlbnRTdHlsZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRl
ICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiUnVsZVNldEJ1aWxkZXIuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRDb250ZW50cy5oIgpAQCAtMTA3LDggKzEwNywxMSBAQCBzdGF0aWMgU3R5bGVT
aGVldENvbnRlbnRzKiBwYXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiAKIHZvaWQgVXNl
ckFnZW50U3R5bGU6OmFkZFRvRGVmYXVsdFN0eWxlKFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQp
CiB7Ci0gICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgc2NyZWVuRXZh
bCgpKTsKLSAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIHBy
aW50RXZhbCgpKTsKKyAgICBSdWxlU2V0QnVpbGRlciBzY3JlZW5CdWlsZGVyKCpkZWZhdWx0U3R5
bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgc2NyZWVuQnVpbGRlci5hZGRSdWxlc0Zyb21TaGVldChz
aGVldCk7CisKKyAgICBSdWxlU2V0QnVpbGRlciBwcmludEJ1aWxkZXIoKmRlZmF1bHRQcmludFN0
eWxlLCBwcmludEV2YWwoKSk7CisgICAgcHJpbnRCdWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0KTsKIAogICAgIC8vIEJ1aWxkIGEgc3R5bGVzaGVldCBjb25zaXN0aW5nIG9mIG5vbi10cml2
aWFsIG1lZGlhIHF1ZXJpZXMgc2VlbiBpbiBkZWZhdWx0IHN0eWxlLgogICAgIC8vIFJ1bGVzZXRz
IGZvciB0aGVzZSBjYW4ndCBiZSBnbG9iYWwgYW5kIG5lZWQgdG8gYmUgYnVpbHQgaW4gZG9jdW1l
bnQgY29udGV4dC4KQEAgLTE0NSw3ICsxNDgsOSBAQCB2b2lkIFVzZXJBZ2VudFN0eWxlOjppbml0
RGVmYXVsdFN0eWxlU2hlZXQoKQogICAgIC8vIFF1aXJrcy1tb2RlIHJ1bGVzLgogICAgIFN0cmlu
ZyBxdWlya3NSdWxlcyA9IFN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhx
dWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YocXVpcmtzVXNlckFnZW50U3R5bGVTaGVl
dCkpKSArIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsK
ICAgICBxdWlya3NTdHlsZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHF1aXJrc1J1bGVzKTsKLSAgICBk
ZWZhdWx0UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KCpxdWlya3NTdHlsZVNoZWV0LCBz
Y3JlZW5FdmFsKCkpOworCisgICAgUnVsZVNldEJ1aWxkZXIgcXVpcmtCdWlsZGVyKCpkZWZhdWx0
UXVpcmtzU3R5bGUsIHNjcmVlbkV2YWwoKSk7CisgICAgcXVpcmtCdWlsZGVyLmFkZFJ1bGVzRnJv
bVNoZWV0KCpxdWlya3NTdHlsZVNoZWV0KTsKIAogICAgICsrZGVmYXVsdFN0eWxlVmVyc2lvbjsK
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>