<?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>210582</bug_id>
          
          <creation_ts>2020-04-15 17:16:56 -0700</creation_ts>
          <short_desc>REGRESSION(r260081) Broke iOS PLT due to InjectedBundle initialization</short_desc>
          <delta_ts>2020-04-16 13:02:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>Safari 13</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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1642054</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 17:16:56 -0700</bug_when>
    <thetext>The changes in r260081 began enforcing NSSecureCoding best practices, triggering a bug in InjectedBundleMac.mm, which is used by iOS as well.

This patch does the following:

1. It delays parameter decoding until the appropriate platform initialization function has been found and used.
2. It renames InjectedBundleMac.mm to InjectedBundleCocoa.mm.
3. It removes a temporary workaround needed to get PLT running on iOS again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642055</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 17:17:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/61838584&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642059</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 17:19:43 -0700</bug_when>
    <thetext>Temporary workaround landed here:

Committed r260159: &lt;https://trac.webkit.org/changeset/260159&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642067</commentid>
    <comment_count>3</comment_count>
      <attachid>396597</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 17:35:17 -0700</bug_when>
    <thetext>Created attachment 396597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642070</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-15 17:40:49 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #3)
&gt; Created attachment 396597 [details]
&gt; Patch

Would be REALLY helpful to post a diff of the code changes without the file rename.  The InjectedBundle::initialize() method is too long to reasonably compare.

Maybe try using Tools/Scripts/svn-create-patch to create the patch?  I think it does this automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642090</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-15 18:49:24 -0700</bug_when>
    <thetext>Yes, we can’t review a patch that doesn’t show the diff. I am surprised, because usually patches I make that include a rename do include the diff.

Another option is to simply do the rename separately in a second step. Seems likely there’s no urgency to the name change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642112</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 19:55:47 -0700</bug_when>
    <thetext>I’ll do the small patch without the rename. I also see some bot redness which might be rename related, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642113</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 19:57:00 -0700</bug_when>
    <thetext>Volumes/Data/worker/macOS-Mojave-Debug-Build-EWS/build/WebKitBuild/Debug/DerivedSources/WebKit2/unified-sources/UnifiedSource54-mm.mm:7:10: fatal error: &apos;WebProcess/InjectedBundle/mac/InjectedBundleMac.mm&apos; file not found

So maybe Unified Sources don’t understand renames. I probably need to update another file.

I’ll separate the rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642151</commentid>
    <comment_count>8</comment_count>
      <attachid>396623</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-15 22:40:36 -0700</bug_when>
    <thetext>Created attachment 396623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642289</commentid>
    <comment_count>9</comment_count>
      <attachid>396623</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-16 09:43:01 -0700</bug_when>
    <thetext>Comment on attachment 396623
Patch

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

I’d love to say review+ here but I don’t really understand the philosophy behind the changes.

&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:105
&gt;          ASSERT([dictionary isKindOfClass:[NSDictionary class]]);

Should this be a runtime check that returns false rather than just an assertion? Why can we assert it&apos;s a dictionary? We should assert only things we know to be true.

&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:175
&gt; +    ASSERT(!initializeFunction);
&gt; +    ASSERT(!additionalClassesForParameterCoderFunction);

What makes these things true on iOS family platforms? I don’t understand why we would compile code to find these things and then assert (only in debug builds) that we don’t have them. Why not compile out the code that looks for them instead? Or something like that?

&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:190
&gt; +    ASSERT(!initializeFunction);

Same comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642307</commentid>
    <comment_count>10</comment_count>
      <attachid>396623</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-16 10:11:51 -0700</bug_when>
    <thetext>Comment on attachment 396623
Patch

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

&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:105
&gt;&gt;          ASSERT([dictionary isKindOfClass:[NSDictionary class]]);
&gt; 
&gt; Should this be a runtime check that returns false rather than just an assertion? Why can we assert it&apos;s a dictionary? We should assert only things we know to be true.

I think this is part of the API contract between the injected bundle and the UIProcess. The design assumes we are getting an NSDictionary with the relevant parameters encoded in it.

If this not an NSDictionary, it seems like the UIProcess is violating the contract and maybe we should just exit. I&apos;m not sure what the threat model would be here -- possibly a WKWebView client that is attempting to manipulate WebContent in ways that our APIs do not allow.

&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:175
&gt;&gt; +    ASSERT(!additionalClassesForParameterCoderFunction);
&gt; 
&gt; What makes these things true on iOS family platforms? I don’t understand why we would compile code to find these things and then assert (only in debug builds) that we don’t have them. Why not compile out the code that looks for them instead? Or something like that?

I didn&apos;t compile things out because the existing code allows both paths on iOS (the C API style, and the newer ObjC plugin class). Because I was not sure if the C API support on iOS was intentional I left it in, but added these assertions to see if I could catch any test cases on any of our many platforms that hit this.

I&apos;m basically trying to make sure that either the C API &apos;WKBundleAdditionalClassesForParameterCoder&apos; or the Objective C method &apos;additionalClassesForParameterCoderFunction&apos; are used to seed the valid classes for the NSKeyedUnarchiver prior to attempting to decode the parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642327</commentid>
    <comment_count>11</comment_count>
      <attachid>396669</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-16 10:40:38 -0700</bug_when>
    <thetext>Created attachment 396669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642348</commentid>
    <comment_count>12</comment_count>
      <attachid>396623</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-16 11:12:45 -0700</bug_when>
    <thetext>Comment on attachment 396623
Patch

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

I’d love to say review+ here but I don’t really understand the philosophy behind the changes.

&gt;&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:105
&gt;&gt;&gt;          ASSERT([dictionary isKindOfClass:[NSDictionary class]]);
&gt;&gt; 
&gt;&gt; Should this be a runtime check that returns false rather than just an assertion? Why can we assert it&apos;s a dictionary? We should assert only things we know to be true.
&gt; 
&gt; I think this is part of the API contract between the injected bundle and the UIProcess. The design assumes we are getting an NSDictionary with the relevant parameters encoded in it.
&gt; 
&gt; If this not an NSDictionary, it seems like the UIProcess is violating the contract and maybe we should just exit. I&apos;m not sure what the threat model would be here -- possibly a WKWebView client that is attempting to manipulate WebContent in ways that our APIs do not allow.

If so, the same is true of the failure to *decode* the bundle parameter data. I am not sure what the threat model is there either. Why does this function have a return value at all? Why not just assert there is no exception?

&gt;&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:175
&gt;&gt;&gt; +    ASSERT(!initializeFunction);
&gt;&gt;&gt; +    ASSERT(!additionalClassesForParameterCoderFunction);
&gt;&gt; 
&gt;&gt; What makes these things true on iOS family platforms? I don’t understand why we would compile code to find these things and then assert (only in debug builds) that we don’t have them. Why not compile out the code that looks for them instead? Or something like that?
&gt; 
&gt; I didn&apos;t compile things out because the existing code allows both paths on iOS (the C API style, and the newer ObjC plugin class). Because I was not sure if the C API support on iOS was intentional I left it in, but added these assertions to see if I could catch any test cases on any of our many platforms that hit this.
&gt; 
&gt; I&apos;m basically trying to make sure that either the C API &apos;WKBundleAdditionalClassesForParameterCoder&apos; or the Objective C method &apos;additionalClassesForParameterCoderFunction&apos; are used to seed the valid classes for the NSKeyedUnarchiver prior to attempting to decode the parameters.

If that’s the goal maybe we can write the code explicitly that way. Make sure that either one or another is used, and do the appropriate thing if they are not (crash, don’t load the bundle, whatever). The platform conditionals make it *harder* to get that right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642350</commentid>
    <comment_count>13</comment_count>
      <attachid>396669</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-16 11:12:59 -0700</bug_when>
    <thetext>Comment on attachment 396669
Patch

And you did that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642354</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-16 11:20:01 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; I’d love to say review+ here but I don’t really understand the philosophy
&gt; behind the changes.

Sorry, that was re-posted because my locally built Safari crashed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642386</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-16 12:07:30 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)
&gt; Comment on attachment 396669 [details]
&gt; Patch
&gt; 
&gt; And you did that!

:-D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642410</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-16 13:02:47 -0700</bug_when>
    <thetext>Committed r260215: &lt;https://trac.webkit.org/changeset/260215&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396669.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396597</attachid>
            <date>2020-04-15 17:35:17 -0700</date>
            <delta_ts>2020-04-15 22:40:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210582-20200415173516.patch</filename>
            <type>text/plain</type>
            <size>31968</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5YWE2ZGRkMDQwYjZhNDYz
YmJkNjA2OGM3MDMzZGIxM2YxOGFhMzcuLjQ4Y2JkMjEyMzUwNzAwZWNlNWFmYjJhNmFkZjkwMDAx
YzY2ODlmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjAtMDQtMTUgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjYwMDgx
KSBCcm9rZSBpT1MgUExUIGR1ZSB0byBJbmplY3RlZEJ1bmRsZSBpbml0aWFsaXphdGlvbiAoZWRp
dCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDU4
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjE4Mzg1ODQ+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNoYW5nZXMgaW4gcjI2MDA4MSBiZWdh
biBlbmZvcmNpbmcgTlNTZWN1cmVDb2RpbmcgYmVzdCBwcmFjdGljZXMsIHRyaWdnZXJpbmcKKyAg
ICAgICAgYSBidWcgaW4gSW5qZWN0ZWRCdW5kbGVNYWMubW0sIHdoaWNoIGlzIHVzZWQgYnkgaU9T
IGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dpbmc6CisKKyAg
ICAgICAgMS4gRGVsYXlzIHBhcmFtZXRlciBkZWNvZGluZyB1bnRpbCB0aGUgYXBwcm9wcmlhdGUg
cGxhdGZvcm0gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gZm91
bmQgYW5kIHVzZWQuCisgICAgICAgIDIuIFJlbmFtZXMgSW5qZWN0ZWRCdW5kbGVNYWMubW0gdG8g
SW5qZWN0ZWRCdW5kbGVDb2NvYS5tbSB0byBhdm9pZCBmdXR1cmUgY29uZnVzaW9uLgorICAgICAg
ICAzLiBSZW1vdmVzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgbmVlZGVkIHRvIGdldCBQTFQgcnVu
bmluZyBvbiBpT1MgYWdhaW4uCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVj
dGVkQnVuZGxlQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tLgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6ZGVjb2RlQnVuZGxlUGFyYW1ldGVycyk6IFJlbW92ZSB0ZW1wb3Jh
cnkgd29ya2Fyb3VuZAorICAgICAgICBuZWVkZWQgdG8gZ2V0IFBMVCB3b3JraW5nIGFnYWluLgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6IERlbGF5IGRlY29k
aW5nIHRoZSBidW5kbGUgcGFyYW1ldGVycyBvbgorICAgICAgICBpT1MgdW50aWwgdGhlIFBsdWdp
bidzIGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIgbWV0aG9kIGNhbiBiZSBjYWxs
ZWQuCisKIDIwMjAtMDQtMTUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSVBDIEhhcmRlbmluZ10gTWFjaE1lc3NhZ2U6OmNyZWF0ZSgpIHNob3VsZCB1c2Ug
Y2hlY2tlZCBhcml0aG1ldGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBlMjYzZDFjMTVkMGJjYzVhNzBmNDlmZTJkNDIzMWE4NzAyMWI1
Nzk2Li4zY2YzYmRlNDAwYTg0YmI0Nzg5MDM5YjcxZTE3MTliNjI5NDNlZDA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2NzUsNyAr
NDY3NSw3IEBACiAJCUJDMURGRUEzMTJCMzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzIwNEVFMDExQzgzRTk4MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzIwNEVFMTExQzgzRTk4MDA4RjMzNzUg
LyogSW5qZWN0ZWRCdW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMyMDRFRTUxMUM4
M0VBOTAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDMjA0RUU1MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRs
ZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyMDRFRTkx
MUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdLQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyMDRFRUExMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDMjA0RUVCMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNhc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVBUElDYXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05Mzc5LDggKzkzNzksOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQlCQzIwNEVFNzExQzgzRUFEMDA4RjMzNzUgLyogQVBJICovLAor
CQkJCUJDMjA0RUU0MTFDODNFOUMwMDhGMzM3NSAvKiBjb2NvYSAqLywKIAkJCQlCQzRCRUU5NjEy
MEEwOTE3MDBGQkEwQzcgLyogRE9NICovLAotCQkJCUJDMjA0RUU0MTFDODNFOUMwMDhGMzM3NSAv
KiBtYWMgKi8sCiAJCQkJMzc2OTA3OUMxOEYzNDBBMjAwMURGRjA0IC8qIEFQSUluamVjdGVkQnVu
ZGxlRm9ybUNsaWVudC5oICovLAogCQkJCTM3NjkwNzk4MThGMzFDQjIwMDFERkYwNCAvKiBBUElJ
bmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5oICovLAogCQkJCUJDMjA0RUUwMTFDODNFOTgwMDhG
MzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgKi8sCkBAIC05NDE2LDEyICs5NDE2LDEyIEBACiAJ
CQlwYXRoID0gSW5qZWN0ZWRCdW5kbGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OwotCQlCQzIwNEVFNDExQzgzRTlDMDA4RjMzNzUgLyogbWFjICovID0geworCQlCQzIwNEVFNDEx
QzgzRTlDMDA4RjMzNzUgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCUJDMjA0RUU1MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRs
ZU1hYy5tbSAqLywKKwkJCQlCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5k
bGVDb2NvYS5tbSAqLywKIAkJCSk7Ci0JCQlwYXRoID0gbWFjOworCQkJcGF0aCA9IGNvY29hOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKIAkJQkMyMDRFRTcxMUM4M0VBRDAwOEYz
Mzc1IC8qIEFQSSAqLyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlQ29jb2EubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjE1NDlhN2Y5ZjBhNTkwOTMzYWI5MjI3MThkOTVhNGQ4ODVjOTRiNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9j
b2NvYS9JbmplY3RlZEJ1bmRsZUNvY29hLm1tCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCisK
KyNpbXBvcnQgIkFQSUFycmF5LmgiCisjaW1wb3J0ICJBUElEYXRhLmgiCisjaW1wb3J0ICJPYmpD
T2JqZWN0R3JhcGguaCIKKyNpbXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tC
dW5kbGVJbml0aWFsaXplLmgiCisjaW1wb3J0ICJXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJz
LmgiCisjaW1wb3J0ICJXS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgorI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZV
UkwuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNCdW5kbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxkbGZjbi5oPgorI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisjaW1wb3J0IDxzdGRpby5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK0BpbnRlcmZhY2UgTlNCdW5kbGUgKFdLQXBwRGV0YWlscykKKy0gKENGQnVuZGxl
UmVmKV9jZkJ1bmRsZTsKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworI2lmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lO
RykKKworc3RhdGljIE5TRXZlbnRNb2RpZmllckZsYWdzIGN1cnJlbnRNb2RpZmllckZsYWdzKGlk
IHNlbGYsIFNFTCBfY21kKQoreworICAgIGF1dG8gY3VycmVudE1vZGlmaWVycyA9IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6Y3VycmVudFN0YXRlT2ZNb2RpZmllcktleXMoKTsKKyAgICBOU0V2ZW50
TW9kaWZpZXJGbGFncyBtb2RpZmllcnMgPSAwOworICAgIAorICAgIGlmIChjdXJyZW50TW9kaWZp
ZXJzLmNvbnRhaW5zKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyOjpTaGlmdEtleSkpCisgICAgICAg
IG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnU2hpZnQ7CisgICAgaWYgKGN1cnJlbnRN
b2RpZmllcnMuY29udGFpbnMoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkNvbnRyb2xLZXkpKQor
ICAgICAgICBtb2RpZmllcnMgfD0gTlNFdmVudE1vZGlmaWVyRmxhZ0NvbnRyb2w7CisgICAgaWYg
KGN1cnJlbnRNb2RpZmllcnMuY29udGFpbnMoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkFsdEtl
eSkpCisgICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uOworICAg
IGlmIChjdXJyZW50TW9kaWZpZXJzLmNvbnRhaW5zKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyOjpN
ZXRhS2V5KSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5k
OworICAgIGlmIChjdXJyZW50TW9kaWZpZXJzLmNvbnRhaW5zKFBsYXRmb3JtRXZlbnQ6Ok1vZGlm
aWVyOjpDYXBzTG9ja0tleSkpCisgICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJG
bGFnQ2Fwc0xvY2s7CisgICAgCisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKworI2VuZGlmCisK
K3N0YXRpYyBSZXRhaW5QdHI8TlNLZXllZFVuYXJjaGl2ZXI+IGNyZWF0ZVVuYXJjaGl2ZXIoY29u
c3QgdW5zaWduZWQgY2hhciogYnl0ZXMsIE5TVUludGVnZXIgbGVuZ3RoKQoreworICAgIGF1dG8g
ZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3Rf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oYnl0ZXMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XSk7CisgICAgYXV0byB1bmFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFs
bG9jXSBpbml0Rm9yUmVhZGluZ0Zyb21EYXRhOmRhdGEuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwor
ICAgIHVuYXJjaGl2ZXIuZ2V0KCkuZGVjb2RpbmdGYWlsdXJlUG9saWN5ID0gTlNEZWNvZGluZ0Zh
aWx1cmVQb2xpY3lSYWlzZUV4Y2VwdGlvbjsKKyAgICByZXR1cm4gdW5hcmNoaXZlcjsKK30KKwor
c3RhdGljIFJldGFpblB0cjxOU0tleWVkVW5hcmNoaXZlcj4gY3JlYXRlVW5hcmNoaXZlcihjb25z
dCBBUEk6OkRhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVVuYXJjaGl2ZXIoZGF0YS5i
eXRlcygpLCBkYXRhLnNpemUoKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNLZXllZFVuYXJj
aGl2ZXI+IGNyZWF0ZVVuYXJjaGl2ZXIoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQor
eworICAgIHJldHVybiBjcmVhdGVVbmFyY2hpdmVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGU6OmRlY29kZUJ1bmRsZVBhcmFtZXRlcnMoQVBJOjpE
YXRhKiBidW5kbGVQYXJhbWV0ZXJEYXRhUHRyKQoreworICAgIGlmICghYnVuZGxlUGFyYW1ldGVy
RGF0YVB0cikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIHVuYXJjaGl2ZXIgPSBj
cmVhdGVVbmFyY2hpdmVyKCpidW5kbGVQYXJhbWV0ZXJEYXRhUHRyKTsKKworICAgIE5TRGljdGlv
bmFyeSAqZGljdGlvbmFyeSA9IG5pbDsKKyAgICBAdHJ5IHsKKyAgICAgICAgZGljdGlvbmFyeSA9
IFt1bmFyY2hpdmVyLmdldCgpIGRlY29kZU9iamVjdE9mQ2xhc3NlczpjbGFzc2VzRm9yQ29kZXIo
KSBmb3JLZXk6QCJwYXJhbWV0ZXJzIl07CisgICAgICAgIEFTU0VSVChbZGljdGlvbmFyeSBpc0tp
bmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0
aW9uICpleGNlcHRpb24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIGJ1
bmRsZSBwYXJhbWV0ZXJzOiAlQC4iICwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIW1fYnVuZGxlUGFyYW1ldGVycyB8fCBtX2J1bmRs
ZVBhcmFtZXRlcnMuZ2V0KCkpOworICAgIG1fYnVuZGxlUGFyYW1ldGVycyA9IGFkb3B0TlMoW1tX
S1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6ZGlj
dGlvbmFyeV0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluamVjdGVkQnVuZGxlOjpp
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IEFQSTo6T2JqZWN0KiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQoreworICAgIGlmIChtX3NhbmRi
b3hFeHRlbnNpb24pIHsKKyAgICAgICAgaWYgKCFtX3NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWVQ
ZXJtYW5lbnRseSgpKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxl
Ojpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjb25zdW1lIGJ1bmRsZSBzYW5kYm94IGV4dGVuc2lv
biBmb3IgWyVzXS5cbiIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaW5qZWN0ZWRCdW5k
bGVQYXRoU3RyID0gbV9wYXRoLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1
bmRsZVBhdGhTdHIpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9h
ZCBmYWlsZWQgLSBDb3VsZCBub3QgY3JlYXRlIHRoZSBwYXRoIHN0cmluZy5cbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYnVu
ZGxlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBpbmplY3Rl
ZEJ1bmRsZVBhdGhTdHIuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOworICAg
IGlmICghYnVuZGxlVVJMKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6
OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgdXJsIGZyb20gdGhlIHBhdGggc3Ry
aW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3BsYXRmb3Jt
QnVuZGxlID0gW1tOU0J1bmRsZSBhbGxvY10gaW5pdFdpdGhVUkw6KF9fYnJpZGdlIE5TVVJMICop
YnVuZGxlVVJMLmdldCgpXTsKKyAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAg
V1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgY3Jl
YXRlIHRoZSBidW5kbGUuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFdLQnVuZGxlQWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uUHRyIGFk
ZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXJGdW5jdGlvbiA9IG51bGxwdHI7CisgICAg
V0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIgaW5pdGlhbGl6ZUZ1bmN0aW9uID0gbnVsbHB0
cjsKKyAgICBpZiAoUmV0YWluUHRyPENGVVJMUmVmPiBleGVjdXRhYmxlVVJMID0gYWRvcHRDRihD
RkJ1bmRsZUNvcHlFeGVjdXRhYmxlVVJMKFttX3BsYXRmb3JtQnVuZGxlIF9jZkJ1bmRsZV0pKSkg
eworICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhQYXRoU2l6ZSA9IDQwOTY7Cisg
ICAgICAgIGNoYXIgcGF0aFRvRXhlY3V0YWJsZVttYXhQYXRoU2l6ZV07CisgICAgICAgIGlmIChD
RlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihleGVjdXRhYmxlVVJMLmdldCgpLCB0cnVl
LCBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KHBhdGhUb0V4ZWN1dGFibGUpLCBtYXhQYXRoU2l6ZSkp
IHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGhvbGQgb250byB0aGlzIGhhbmRsZSBhbnl3aGVy
ZSBtb3JlIHBlcm1hbmVudCBzaW5jZSB3ZSBuZXZlciBkbGNvc2UuCisgICAgICAgICAgICBpZiAo
dm9pZCogaGFuZGxlID0gZGxvcGVuKHBhdGhUb0V4ZWN1dGFibGUsIFJUTERfTEFaWSB8IFJUTERf
R0xPQkFMIHwgUlRMRF9GSVJTVCkpIHsKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ2xhc3Nl
c0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5kbGVBZGRpdGlv
bmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb25QdHI+KGRsc3ltKGhhbmRsZSwgIldL
QnVuZGxlQWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlciIpKTsKKyAgICAgICAgICAg
ICAgICBpbml0aWFsaXplRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5kbGVJbml0aWFsaXpl
RnVuY3Rpb25QdHI+KGRsc3ltKGhhbmRsZSwgIldLQnVuZGxlSW5pdGlhbGl6ZSIpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgaWYgKCFpbml0aWFsaXpl
RnVuY3Rpb24pIHsKKyAgICAgICAgaWYgKCFbbV9wbGF0Zm9ybUJ1bmRsZSBsb2FkXSkgeworICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3Vs
ZCBub3QgbG9hZCB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBidW5kbGUuXG4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYWRkaXRpb25h
bENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uKQorICAgICAgICBhZGRpdGlvbmFsQ2xh
c3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5kbGVBZGRp
dGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb25QdHI+KENGQnVuZGxlR2V0RnVu
Y3Rpb25Qb2ludGVyRm9yTmFtZShbbV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5kbGVdLCBDRlNUUigi
V0tCdW5kbGVBZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyIikpKTsKKworICAgIC8v
IFVwZGF0ZSBsaXN0IG9mIHZhbGlkIGNsYXNzZXMgZm9yIHRoZSBwYXJhbWV0ZXIgY29kZXIKKyAg
ICBpZiAoYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uKQorICAgICAg
ICBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24odG9BUEkodGhpcyks
IHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgQVNTRVJUKCFpbml0aWFsaXplRnVuY3Rpb24pOworICAgIEFTU0VSVCghYWRkaXRp
b25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uKTsKKyNlbHNlCisgICAgZGVjb2Rl
QnVuZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRhdGEuZ2V0KCkpOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCisg
ICAgLy8gU3dpenpsZSBbTlNFdmVudCBtb2RpZmVyRmxhZ3NdLCBzaW5jZSBpdCBhbHdheXMgcmV0
dXJucyAwIHdoZW4gdGhlIFdpbmRvd1NlcnZlciBpcyBibG9ja2VkLgorICAgIE1ldGhvZCBtZXRo
b2QgPSBjbGFzc19nZXRDbGFzc01ldGhvZChbTlNFdmVudCBjbGFzc10sIEBzZWxlY3Rvcihtb2Rp
ZmllckZsYWdzKSk7CisgICAgbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKG1ldGhvZCwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KGN1cnJlbnRNb2RpZmllckZsYWdzKSk7CisjZW5kaWYKKyAgICAKKyAg
ICBpZiAoIWluaXRpYWxpemVGdW5jdGlvbikKKyAgICAgICAgaW5pdGlhbGl6ZUZ1bmN0aW9uID0g
Yml0d2lzZV9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9uUHRyPihDRkJ1bmRsZUdldEZ1
bmN0aW9uUG9pbnRlckZvck5hbWUoW21fcGxhdGZvcm1CdW5kbGUgX2NmQnVuZGxlXSwgQ0ZTVFIo
IldLQnVuZGxlSW5pdGlhbGl6ZSIpKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IEFTU0VSVCghaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKKyNlbmRpZgorCisgICAgLy8gRmlyc3QgY2hl
Y2sgdG8gc2VlIGlmIHRoZSBidW5kbGUgaGFzIGEgV0tCdW5kbGVJbml0aWFsaXplIGZ1bmN0aW9u
LgorICAgIGlmIChpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgaW5pdGlhbGl6ZUZ1bmN0
aW9uKHRvQVBJKHRoaXMpLCB0b0FQSShpbml0aWFsaXphdGlvblVzZXJEYXRhKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgbG9vayB0byBzZWUgaWYg
dGhlIGJ1bmRsZSBoYXMgYSBwcmluY2lwYWwgY2xhc3MKKyAgICBDbGFzcyBwcmluY2lwYWxDbGFz
cyA9IFttX3BsYXRmb3JtQnVuZGxlIHByaW5jaXBhbENsYXNzXTsKKyAgICBpZiAoIXByaW5jaXBh
bENsYXNzKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFp
bGVkIC0gTm8gaW5pdGlhbGl6ZSBmdW5jdGlvbiBvciBwcmluY2lwYWwgY2xhc3MgZm91bmQgaW4g
dGhlIGJ1bmRsZSBleGVjdXRhYmxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIVtwcmluY2lwYWxDbGFzcyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29s
KFdLV2ViUHJvY2Vzc1BsdWdJbildKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRC
dW5kbGU6OmxvYWQgZmFpbGVkIC0gUHJpbmNpcGFsIGNsYXNzIGRvZXMgbm90IGNvbmZvcm0gdG8g
dGhlIFdLV2ViUHJvY2Vzc1BsdWdJbiBwcm90b2NvbC5cbiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbj4gaW5zdGFuY2UgPSAoaWQg
PFdLV2ViUHJvY2Vzc1BsdWdJbj4pWyhOU09iamVjdCAqKVtwcmluY2lwYWxDbGFzcyBhbGxvY10g
aW5pdF07CisgICAgaWYgKCFpbnN0YW5jZSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVj
dGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBpbml0aWFsaXplIGFuIGluc3RhbmNl
IG9mIHRoZSBwcmluY2lwYWwgY2xhc3MuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFdLV2ViUHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIqIHBsdWdJbkNvbnRyb2xsZXIg
PSBXZWJLaXQ6OndyYXBwZXIoKnRoaXMpOworICAgIFtwbHVnSW5Db250cm9sbGVyIF9zZXRQcmlu
Y2lwYWxDbGFzc0luc3RhbmNlOmluc3RhbmNlXTsKKworICAgIGlmIChbaW5zdGFuY2UgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVy
KV0pIHsKKyAgICAgICAgW3BsdWdJbkNvbnRyb2xsZXIgZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyOltpbnN0YW5jZSBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyXV07Cisg
ICAgICAgIGRlY29kZUJ1bmRsZVBhcmFtZXRlcnMocGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJE
YXRhLmdldCgpKTsKKyAgICB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBlbHNlCisg
ICAgICAgIGRlY29kZUJ1bmRsZVBhcmFtZXRlcnMocGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJE
YXRhLmdldCgpKTsKKyNlbmRpZgorCisgICAgaWYgKFtpbnN0YW5jZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlByb2Nlc3NQbHVnSW46aW5pdGlhbGl6ZVdpdGhPYmplY3Q6KV0pIHsK
KyAgICAgICAgUmV0YWluUHRyPGlkPiBvYmpDSW5pdGlhbGl6YXRpb25Vc2VyRGF0YTsKKyAgICAg
ICAgaWYgKGluaXRpYWxpemF0aW9uVXNlckRhdGEgJiYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YS0+
dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpPYmpDT2JqZWN0R3JhcGgpCisgICAgICAgICAg
ICBvYmpDSW5pdGlhbGl6YXRpb25Vc2VyRGF0YSA9IHN0YXRpY19jYXN0PE9iakNPYmplY3RHcmFw
aCo+KGluaXRpYWxpemF0aW9uVXNlckRhdGEpLT5yb290T2JqZWN0KCk7CisgICAgICAgIFtpbnN0
YW5jZSB3ZWJQcm9jZXNzUGx1Z0luOnBsdWdJbkNvbnRyb2xsZXIgaW5pdGlhbGl6ZVdpdGhPYmpl
Y3Q6b2JqQ0luaXRpYWxpemF0aW9uVXNlckRhdGEuZ2V0KCldOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzICpJbmplY3RlZEJ1bmRs
ZTo6YnVuZGxlUGFyYW1ldGVycygpCit7CisgICAgLy8gV2UgbXVzdCBub3QgcmV0dXJuIG5pbCBl
dmVuIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBzZXQsIGluIG9yZGVyIHRvIGFsbG93
IHRoZSBjbGllbnQKKyAgICAvLyB0byB1c2UgS1ZPLgorICAgIGlmICghbV9idW5kbGVQYXJhbWV0
ZXJzKQorICAgICAgICBtX2J1bmRsZVBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbV0tXZWJQcm9jZXNz
QnVuZGxlUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhEaWN0aW9uYXJ5OkB7IH1dKTsKKworICAg
IHJldHVybiBtX2J1bmRsZVBhcmFtZXRlcnMuZ2V0KCk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmV4dGVuZENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlcihBUEk6OkFycmF5JiBjbGFzc2VzKQor
eworICAgIHNpemVfdCBzaXplID0gY2xhc3Nlcy5zaXplKCk7CisKKyAgICBhdXRvIG11dGFibGVT
ZXQgPSBhZG9wdE5TKFtjbGFzc2VzRm9yQ29kZXIoKSBtdXRhYmxlQ29weV0pOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQVBJOjpTdHJpbmcqIGNs
YXNzTmFtZVN0cmluZyA9IGNsYXNzZXMuYXQ8QVBJOjpTdHJpbmc+KGkpOworICAgICAgICBpZiAo
IWNsYXNzTmFtZVN0cmluZykgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1
bmRsZTo6ZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyIC0gTm8gY2xhc3MgcHJvdmlkZWQg
YXMgYXJndW1lbnQgJWQuXG4iLCBpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgCisgICAgICAgIENTdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NOYW1lU3RyaW5nLT5zdHJpbmco
KS51dGY4KCk7CisgICAgICAgIENsYXNzIG9iamVjdENsYXNzID0gb2JqY19sb29rVXBDbGFzcyhj
bGFzc05hbWUuZGF0YSgpKTsKKyAgICAgICAgaWYgKCFvYmplY3RDbGFzcykgeworICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6ZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyIC0gQ2xhc3MgJXMgaXMgbm90IGEgdmFsaWQgT2JqZWN0aXZlIEMgY2xhc3MuXG4iLCBj
bGFzc05hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgW211dGFibGVTZXQuZ2V0KCkgYWRkT2JqZWN0Om9iamVjdENsYXNzXTsKKyAgICB9CisKKyAg
ICBtX2NsYXNzZXNGb3JDb2RlciA9IG11dGFibGVTZXQ7Cit9CisKK05TU2V0KiBJbmplY3RlZEJ1
bmRsZTo6Y2xhc3Nlc0ZvckNvZGVyKCkKK3sKKyAgICBpZiAoIW1fY2xhc3Nlc0ZvckNvZGVyKQor
ICAgICAgICBtX2NsYXNzZXNGb3JDb2RlciA9IFtOU1NldCBzZXRXaXRoT2JqZWN0czpbTlNBcnJh
eSBjbGFzc10sIFtOU0RhdGEgY2xhc3NdLCBbTlNEYXRlIGNsYXNzXSwgW05TRGljdGlvbmFyeSBj
bGFzc10sIFtOU051bGwgY2xhc3NdLCBbTlNOdW1iZXIgY2xhc3NdLCBbTlNTZXQgY2xhc3NdLCBb
TlNTdHJpbmcgY2xhc3NdLCBbTlNUaW1lWm9uZSBjbGFzc10sIFtOU1VSTCBjbGFzc10sIFtOU1VV
SUQgY2xhc3NdLCBuaWxdOworCisgICAgcmV0dXJuIG1fY2xhc3Nlc0ZvckNvZGVyLmdldCgpOwor
fQorCit2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRCdW5kbGVQYXJhbWV0ZXIoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgdmFsdWUpCit7CisgICAgaWQgcGFyYW1l
dGVyID0gbmlsOworICAgIGF1dG8gdW5hcmNoaXZlciA9IGNyZWF0ZVVuYXJjaGl2ZXIodmFsdWUp
OworICAgIEB0cnkgeworICAgICAgICBwYXJhbWV0ZXIgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmpl
Y3RPZkNsYXNzZXM6Y2xhc3Nlc0ZvckNvZGVyKCkgZm9yS2V5OkAicGFyYW1ldGVyIl07CisgICAg
fSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZGVjb2RlIGJ1bmRsZSBwYXJhbWV0ZXI6ICVAIiwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9idW5kbGVQYXJhbWV0ZXJzICYmIHBhcmFt
ZXRlcikKKyAgICAgICAgbV9idW5kbGVQYXJhbWV0ZXJzID0gYWRvcHROUyhbW1dLV2ViUHJvY2Vz
c0J1bmRsZVBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpAeyB9XSk7CisKKyAg
ICBbbV9idW5kbGVQYXJhbWV0ZXJzIHNldFBhcmFtZXRlcjpwYXJhbWV0ZXIgZm9yS2V5OmtleV07
Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEJ1bmRsZVBhcmFtZXRlcnMoY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiB2YWx1ZSkKK3sKKyAgICBOU0RpY3Rpb25hcnkgKnBhcmFtZXRlcnMg
PSBuaWw7CisgICAgYXV0byB1bmFyY2hpdmVyID0gY3JlYXRlVW5hcmNoaXZlcih2YWx1ZSk7Cisg
ICAgQHRyeSB7CisgICAgICAgIHBhcmFtZXRlcnMgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RP
ZkNsYXNzZXM6Y2xhc3Nlc0ZvckNvZGVyKCkgZm9yS2V5OkAicGFyYW1ldGVycyJdOworICAgIH0g
QGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGRlY29kZSBidW5kbGUgcGFyYW1ldGVyOiAlQCIsIGV4Y2VwdGlvbik7CisgICAgfQor
CisgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKFtwYXJhbWV0ZXJzIGlzS2luZE9mQ2xhc3M6
W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKworICAgIGlmICghbV9idW5kbGVQYXJhbWV0ZXJzKSB7
CisgICAgICAgIG1fYnVuZGxlUGFyYW1ldGVycyA9IGFkb3B0TlMoW1tXS1dlYlByb2Nlc3NCdW5k
bGVQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6cGFyYW1ldGVyc10pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fYnVuZGxlUGFyYW1ldGVycyBzZXRQYXJhbWV0
ZXJzRm9yS2V5V2l0aERpY3Rpb25hcnk6cGFyYW1ldGVyc107Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMyMDcyMDdhYzUwNWQ5NTRhN2I3OWJjZTA2NGMwYTAwMjk1MTQzMzEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCi0KLSNpbXBvcnQgIkFQSUFycmF5
LmgiCi0jaW1wb3J0ICJBUElEYXRhLmgiCi0jaW1wb3J0ICJPYmpDT2JqZWN0R3JhcGguaCIKLSNp
bXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tCdW5kbGVJbml0aWFsaXplLmgi
Ci0jaW1wb3J0ICJXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJXS1dl
YlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIgotI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZVUkwuaD4KLSNpbXBvcnQgPEZv
dW5kYXRpb24vTlNCdW5kbGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2
ZW50Lmg+Ci0jaW1wb3J0IDxkbGZjbi5oPgotI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+Ci0jaW1w
b3J0IDxzdGRpby5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLUBpbnRlcmZh
Y2UgTlNCdW5kbGUgKFdLQXBwRGV0YWlscykKLS0gKENGQnVuZGxlUmVmKV9jZkJ1bmRsZTsKLUBl
bmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotI2lm
IEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykKLQotc3RhdGljIE5TRXZl
bnRNb2RpZmllckZsYWdzIGN1cnJlbnRNb2RpZmllckZsYWdzKGlkIHNlbGYsIFNFTCBfY21kKQot
ewotICAgIGF1dG8gY3VycmVudE1vZGlmaWVycyA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3Vy
cmVudFN0YXRlT2ZNb2RpZmllcktleXMoKTsKLSAgICBOU0V2ZW50TW9kaWZpZXJGbGFncyBtb2Rp
ZmllcnMgPSAwOwotICAgIAotICAgIGlmIChjdXJyZW50TW9kaWZpZXJzLmNvbnRhaW5zKFBsYXRm
b3JtRXZlbnQ6Ok1vZGlmaWVyOjpTaGlmdEtleSkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBOU0V2
ZW50TW9kaWZpZXJGbGFnU2hpZnQ7Ci0gICAgaWYgKGN1cnJlbnRNb2RpZmllcnMuY29udGFpbnMo
UGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkNvbnRyb2xLZXkpKQotICAgICAgICBtb2RpZmllcnMg
fD0gTlNFdmVudE1vZGlmaWVyRmxhZ0NvbnRyb2w7Ci0gICAgaWYgKGN1cnJlbnRNb2RpZmllcnMu
Y29udGFpbnMoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkFsdEtleSkpCi0gICAgICAgIG1vZGlm
aWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uOwotICAgIGlmIChjdXJyZW50TW9kaWZp
ZXJzLmNvbnRhaW5zKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyOjpNZXRhS2V5KSkKLSAgICAgICAg
bW9kaWZpZXJzIHw9IE5TRXZlbnRNb2RpZmllckZsYWdDb21tYW5kOwotICAgIGlmIChjdXJyZW50
TW9kaWZpZXJzLmNvbnRhaW5zKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyOjpDYXBzTG9ja0tleSkp
Ci0gICAgICAgIG1vZGlmaWVycyB8PSBOU0V2ZW50TW9kaWZpZXJGbGFnQ2Fwc0xvY2s7Ci0gICAg
Ci0gICAgcmV0dXJuIG1vZGlmaWVyczsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBSZXRhaW5QdHI8
TlNLZXllZFVuYXJjaGl2ZXI+IGNyZWF0ZVVuYXJjaGl2ZXIoY29uc3QgdW5zaWduZWQgY2hhciog
Ynl0ZXMsIE5TVUludGVnZXIgbGVuZ3RoKQotewotICAgIGF1dG8gZGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3RfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oYnl0ZXMpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7Ci0gICAgYXV0byB1bmFy
Y2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRVbmFyY2hpdmVyIGFsbG9jXSBpbml0Rm9yUmVhZGlu
Z0Zyb21EYXRhOmRhdGEuZ2V0KCkgZXJyb3I6bnVsbHB0cl0pOwotICAgIHVuYXJjaGl2ZXIuZ2V0
KCkuZGVjb2RpbmdGYWlsdXJlUG9saWN5ID0gTlNEZWNvZGluZ0ZhaWx1cmVQb2xpY3lSYWlzZUV4
Y2VwdGlvbjsKLSAgICByZXR1cm4gdW5hcmNoaXZlcjsKLX0KLQotc3RhdGljIFJldGFpblB0cjxO
U0tleWVkVW5hcmNoaXZlcj4gY3JlYXRlVW5hcmNoaXZlcihjb25zdCBBUEk6OkRhdGEmIGRhdGEp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVVuYXJjaGl2ZXIoZGF0YS5ieXRlcygpLCBkYXRhLnNpemUo
KSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNLZXllZFVuYXJjaGl2ZXI+IGNyZWF0ZVVuYXJj
aGl2ZXIoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIHJldHVybiBjcmVh
dGVVbmFyY2hpdmVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci19Ci0KLWJvb2wgSW5qZWN0
ZWRCdW5kbGU6OmRlY29kZUJ1bmRsZVBhcmFtZXRlcnMoQVBJOjpEYXRhKiBidW5kbGVQYXJhbWV0
ZXJEYXRhUHRyKQotewotICAgIGlmICghYnVuZGxlUGFyYW1ldGVyRGF0YVB0cikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIHVuYXJjaGl2ZXIgPSBjcmVhdGVVbmFyY2hpdmVyKCpi
dW5kbGVQYXJhbWV0ZXJEYXRhUHRyKTsKLQotICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9
IG5pbDsKLSAgICBAdHJ5IHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBkaWN0
aW9uYXJ5ID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzczpbTlNPYmplY3QgY2xhc3Nd
IGZvcktleTpAInBhcmFtZXRlcnMiXTsKLSAgICAgICAgQVNTRVJUKFtkaWN0aW9uYXJ5IGlzS2lu
ZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKLSNlbHNlCi0gICAgICAgIGRpY3Rpb25h
cnkgPSBbdW5hcmNoaXZlci5nZXQoKSBkZWNvZGVPYmplY3RPZkNsYXNzZXM6Y2xhc3Nlc0ZvckNv
ZGVyKCkgZm9yS2V5OkAicGFyYW1ldGVycyJdOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChbZGlj
dGlvbmFyeSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7Ci0gICAgfSBAY2F0
Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gZGVjb2RlIGJ1bmRsZSBwYXJhbWV0ZXJzOiAlQC4iICwgZXhjZXB0aW9uKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoIW1fYnVuZGxlUGFyYW1ldGVy
cyB8fCBtX2J1bmRsZVBhcmFtZXRlcnMuZ2V0KCkpOwotICAgIG1fYnVuZGxlUGFyYW1ldGVycyA9
IGFkb3B0TlMoW1tXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aERp
Y3Rpb25hcnk6ZGljdGlvbmFyeV0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEluamVj
dGVkQnVuZGxlOjppbml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIEFQSTo6T2JqZWN0KiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQotewotICAg
IGlmIChtX3NhbmRib3hFeHRlbnNpb24pIHsKLSAgICAgICAgaWYgKCFtX3NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWVQZXJtYW5lbnRseSgpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIklu
amVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjb25zdW1lIGJ1bmRsZSBzYW5k
Ym94IGV4dGVuc2lvbiBmb3IgWyVzXS5cbiIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbiA9IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
aW5qZWN0ZWRCdW5kbGVQYXRoU3RyID0gbV9wYXRoLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgaWYg
KCFpbmplY3RlZEJ1bmRsZVBhdGhTdHIpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3Rl
ZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgY3JlYXRlIHRoZSBwYXRoIHN0cmluZy5c
biIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gYnVuZGxlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0
aCgwLCBpbmplY3RlZEJ1bmRsZVBhdGhTdHIuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBm
YWxzZSkpOwotICAgIGlmICghYnVuZGxlVVJMKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW5q
ZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgdXJsIGZyb20g
dGhlIHBhdGggc3RyaW5nLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBtX3BsYXRmb3JtQnVuZGxlID0gW1tOU0J1bmRsZSBhbGxvY10gaW5pdFdpdGhVUkw6KF9fYnJp
ZGdlIE5TVVJMICopYnVuZGxlVVJMLmdldCgpXTsKLSAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUp
IHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBD
b3VsZCBub3QgY3JlYXRlIHRoZSBidW5kbGUuXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFdLQnVuZGxlQWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1
bmN0aW9uUHRyIGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXJGdW5jdGlvbiA9IG51
bGxwdHI7Ci0gICAgV0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIgaW5pdGlhbGl6ZUZ1bmN0
aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoUmV0YWluUHRyPENGVVJMUmVmPiBleGVjdXRhYmxlVVJM
ID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlFeGVjdXRhYmxlVVJMKFttX3BsYXRmb3JtQnVuZGxlIF9j
ZkJ1bmRsZV0pKSkgewotICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhQYXRoU2l6
ZSA9IDQwOTY7Ci0gICAgICAgIGNoYXIgcGF0aFRvRXhlY3V0YWJsZVttYXhQYXRoU2l6ZV07Ci0g
ICAgICAgIGlmIChDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihleGVjdXRhYmxlVVJM
LmdldCgpLCB0cnVlLCBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KHBhdGhUb0V4ZWN1dGFibGUpLCBt
YXhQYXRoU2l6ZSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGhvbGQgb250byB0aGlzIGhh
bmRsZSBhbnl3aGVyZSBtb3JlIHBlcm1hbmVudCBzaW5jZSB3ZSBuZXZlciBkbGNvc2UuCi0gICAg
ICAgICAgICBpZiAodm9pZCogaGFuZGxlID0gZGxvcGVuKHBhdGhUb0V4ZWN1dGFibGUsIFJUTERf
TEFaWSB8IFJUTERfR0xPQkFMIHwgUlRMRF9GSVJTVCkpIHsKLSAgICAgICAgICAgICAgICBhZGRp
dGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tC
dW5kbGVBZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb25QdHI+KGRsc3lt
KGhhbmRsZSwgIldLQnVuZGxlQWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlciIpKTsK
LSAgICAgICAgICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5k
bGVJbml0aWFsaXplRnVuY3Rpb25QdHI+KGRsc3ltKGhhbmRsZSwgIldLQnVuZGxlSW5pdGlhbGl6
ZSIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgaWYg
KCFpbml0aWFsaXplRnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKCFbbV9wbGF0Zm9ybUJ1bmRsZSBs
b2FkXSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBm
YWlsZWQgLSBDb3VsZCBub3QgbG9hZCB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBidW5kbGUuXG4i
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uKQotICAgICAgICBh
ZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8
V0tCdW5kbGVBZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb25QdHI+KENG
QnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShbbV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5k
bGVdLCBDRlNUUigiV0tCdW5kbGVBZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyIikp
KTsKLQotICAgIC8vIFVwZGF0ZSBsaXN0IG9mIHZhbGlkIGNsYXNzZXMgZm9yIHRoZSBwYXJhbWV0
ZXIgY29kZXIKLSAgICBpZiAoYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0
aW9uKQotICAgICAgICBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24o
dG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKLQotICAgIGRlY29k
ZUJ1bmRsZVBhcmFtZXRlcnMocGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJEYXRhLmdldCgpKTsK
LSAgICAKLSNpZiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCi0gICAg
Ly8gU3dpenpsZSBbTlNFdmVudCBtb2RpZmVyRmxhZ3NdLCBzaW5jZSBpdCBhbHdheXMgcmV0dXJu
cyAwIHdoZW4gdGhlIFdpbmRvd1NlcnZlciBpcyBibG9ja2VkLgotICAgIE1ldGhvZCBtZXRob2Qg
PSBjbGFzc19nZXRDbGFzc01ldGhvZChbTlNFdmVudCBjbGFzc10sIEBzZWxlY3Rvcihtb2RpZmll
ckZsYWdzKSk7Ci0gICAgbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKG1ldGhvZCwgcmVpbnRlcnBy
ZXRfY2FzdDxJTVA+KGN1cnJlbnRNb2RpZmllckZsYWdzKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBp
ZiAoIWluaXRpYWxpemVGdW5jdGlvbikKLSAgICAgICAgaW5pdGlhbGl6ZUZ1bmN0aW9uID0gYml0
d2lzZV9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9uUHRyPihDRkJ1bmRsZUdldEZ1bmN0
aW9uUG9pbnRlckZvck5hbWUoW21fcGxhdGZvcm1CdW5kbGUgX2NmQnVuZGxlXSwgQ0ZTVFIoIldL
QnVuZGxlSW5pdGlhbGl6ZSIpKSk7Ci0KLSAgICAvLyBGaXJzdCBjaGVjayB0byBzZWUgaWYgdGhl
IGJ1bmRsZSBoYXMgYSBXS0J1bmRsZUluaXRpYWxpemUgZnVuY3Rpb24uCi0gICAgaWYgKGluaXRp
YWxpemVGdW5jdGlvbikgewotICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24odG9BUEkodGhpcyks
IHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlLCBsb29rIHRvIHNlZSBpZiB0aGUgYnVuZGxlIGhhcyBh
IHByaW5jaXBhbCBjbGFzcwotICAgIENsYXNzIHByaW5jaXBhbENsYXNzID0gW21fcGxhdGZvcm1C
dW5kbGUgcHJpbmNpcGFsQ2xhc3NdOwotICAgIGlmICghcHJpbmNpcGFsQ2xhc3MpIHsKLSAgICAg
ICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBObyBpbml0aWFs
aXplIGZ1bmN0aW9uIG9yIHByaW5jaXBhbCBjbGFzcyBmb3VuZCBpbiB0aGUgYnVuZGxlIGV4ZWN1
dGFibGUuXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghW3By
aW5jaXBhbENsYXNzIGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV0tXZWJQcm9jZXNzUGx1
Z0luKV0pIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWls
ZWQgLSBQcmluY2lwYWwgY2xhc3MgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgV0tXZWJQcm9jZXNz
UGx1Z0luIHByb3RvY29sLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZCA8V0tXZWJQcm9jZXNzUGx1Z0luPiBpbnN0YW5jZSA9IChpZCA8V0tXZWJQcm9jZXNzUGx1
Z0luPilbKE5TT2JqZWN0ICopW3ByaW5jaXBhbENsYXNzIGFsbG9jXSBpbml0XTsKLSAgICBpZiAo
IWluc3RhbmNlKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQg
ZmFpbGVkIC0gQ291bGQgbm90IGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgdGhlIHByaW5jaXBh
bCBjbGFzcy5cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgV0tXZWJQ
cm9jZXNzUGx1Z0luQ29udHJvbGxlciogcGx1Z0luQ29udHJvbGxlciA9IFdlYktpdDo6d3JhcHBl
cigqdGhpcyk7Ci0gICAgW3BsdWdJbkNvbnRyb2xsZXIgX3NldFByaW5jaXBhbENsYXNzSW5zdGFu
Y2U6aW5zdGFuY2VdOwotCi0gICAgaWYgKFtpbnN0YW5jZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIpXSkgewotICAgICAgICBb
cGx1Z0luQ29udHJvbGxlciBleHRlbmRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXI6W2luc3RhbmNl
IGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXJdXTsKLSAgICAgICAgZGVjb2RlQnVu
ZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRhdGEuZ2V0KCkpOwotICAg
IH0KLQotICAgIGlmIChbaW5zdGFuY2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQ
cm9jZXNzUGx1Z0luOmluaXRpYWxpemVXaXRoT2JqZWN0OildKSB7Ci0gICAgICAgIFJldGFpblB0
cjxpZD4gb2JqQ0luaXRpYWxpemF0aW9uVXNlckRhdGE7Ci0gICAgICAgIGlmIChpbml0aWFsaXph
dGlvblVzZXJEYXRhICYmIGluaXRpYWxpemF0aW9uVXNlckRhdGEtPnR5cGUoKSA9PSBBUEk6Ok9i
amVjdDo6VHlwZTo6T2JqQ09iamVjdEdyYXBoKQotICAgICAgICAgICAgb2JqQ0luaXRpYWxpemF0
aW9uVXNlckRhdGEgPSBzdGF0aWNfY2FzdDxPYmpDT2JqZWN0R3JhcGgqPihpbml0aWFsaXphdGlv
blVzZXJEYXRhKS0+cm9vdE9iamVjdCgpOwotICAgICAgICBbaW5zdGFuY2Ugd2ViUHJvY2Vzc1Bs
dWdJbjpwbHVnSW5Db250cm9sbGVyIGluaXRpYWxpemVXaXRoT2JqZWN0Om9iakNJbml0aWFsaXph
dGlvblVzZXJEYXRhLmdldCgpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV0tX
ZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycyAqSW5qZWN0ZWRCdW5kbGU6OmJ1bmRsZVBhcmFtZXRl
cnMoKQotewotICAgIC8vIFdlIG11c3Qgbm90IHJldHVybiBuaWwgZXZlbiBpZiBubyBwYXJhbWV0
ZXJzIGFyZSBjdXJyZW50bHkgc2V0LCBpbiBvcmRlciB0byBhbGxvdyB0aGUgY2xpZW50Ci0gICAg
Ly8gdG8gdXNlIEtWTy4KLSAgICBpZiAoIW1fYnVuZGxlUGFyYW1ldGVycykKLSAgICAgICAgbV9i
dW5kbGVQYXJhbWV0ZXJzID0gYWRvcHROUyhbW1dLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMg
YWxsb2NdIGluaXRXaXRoRGljdGlvbmFyeTpAeyB9XSk7Ci0KLSAgICByZXR1cm4gbV9idW5kbGVQ
YXJhbWV0ZXJzLmdldCgpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpleHRlbmRDbGFzc2Vz
Rm9yUGFyYW1ldGVyQ29kZXIoQVBJOjpBcnJheSYgY2xhc3NlcykKLXsKLSAgICBzaXplX3Qgc2l6
ZSA9IGNsYXNzZXMuc2l6ZSgpOwotCi0gICAgYXV0byBtdXRhYmxlU2V0ID0gYWRvcHROUyhbY2xh
c3Nlc0ZvckNvZGVyKCkgbXV0YWJsZUNvcHldKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEFQSTo6U3RyaW5nKiBjbGFzc05hbWVTdHJpbmcgPSBj
bGFzc2VzLmF0PEFQSTo6U3RyaW5nPihpKTsKLSAgICAgICAgaWYgKCFjbGFzc05hbWVTdHJpbmcp
IHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmV4dGVuZENsYXNz
ZXNGb3JQYXJhbWV0ZXJDb2RlciAtIE5vIGNsYXNzIHByb3ZpZGVkIGFzIGFyZ3VtZW50ICVkLlxu
IiwgaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIAotICAgICAgICBDU3Ry
aW5nIGNsYXNzTmFtZSA9IGNsYXNzTmFtZVN0cmluZy0+c3RyaW5nKCkudXRmOCgpOwotICAgICAg
ICBDbGFzcyBvYmplY3RDbGFzcyA9IG9iamNfbG9va1VwQ2xhc3MoY2xhc3NOYW1lLmRhdGEoKSk7
Ci0gICAgICAgIGlmICghb2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygi
SW5qZWN0ZWRCdW5kbGU6OmV4dGVuZENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlciAtIENsYXNzICVz
IGlzIG5vdCBhIHZhbGlkIE9iamVjdGl2ZSBDIGNsYXNzLlxuIiwgY2xhc3NOYW1lLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFttdXRhYmxlU2V0Lmdl
dCgpIGFkZE9iamVjdDpvYmplY3RDbGFzc107Ci0gICAgfQotCi0gICAgbV9jbGFzc2VzRm9yQ29k
ZXIgPSBtdXRhYmxlU2V0OwotfQotCi1OU1NldCogSW5qZWN0ZWRCdW5kbGU6OmNsYXNzZXNGb3JD
b2RlcigpCi17Ci0gICAgaWYgKCFtX2NsYXNzZXNGb3JDb2RlcikKLSAgICAgICAgbV9jbGFzc2Vz
Rm9yQ29kZXIgPSBbTlNTZXQgc2V0V2l0aE9iamVjdHM6W05TQXJyYXkgY2xhc3NdLCBbTlNEYXRh
IGNsYXNzXSwgW05TRGF0ZSBjbGFzc10sIFtOU0RpY3Rpb25hcnkgY2xhc3NdLCBbTlNOdWxsIGNs
YXNzXSwgW05TTnVtYmVyIGNsYXNzXSwgW05TU2V0IGNsYXNzXSwgW05TU3RyaW5nIGNsYXNzXSwg
W05TVGltZVpvbmUgY2xhc3NdLCBbTlNVUkwgY2xhc3NdLCBbTlNVVUlEIGNsYXNzXSwgbmlsXTsK
LQotICAgIHJldHVybiBtX2NsYXNzZXNGb3JDb2Rlci5nZXQoKTsKLX0KLQotdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6c2V0QnVuZGxlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIHZhbHVlKQotewotICAgIGlkIHBhcmFtZXRlciA9IG5pbDsKLSAgICBh
dXRvIHVuYXJjaGl2ZXIgPSBjcmVhdGVVbmFyY2hpdmVyKHZhbHVlKTsKLSAgICBAdHJ5IHsKLSAg
ICAgICAgcGFyYW1ldGVyID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmNsYXNz
ZXNGb3JDb2RlcigpIGZvcktleTpAInBhcmFtZXRlciJdOwotICAgIH0gQGNhdGNoIChOU0V4Y2Vw
dGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBi
dW5kbGUgcGFyYW1ldGVyOiAlQCIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fYnVuZGxlUGFyYW1ldGVycyAmJiBwYXJhbWV0ZXIpCi0gICAgICAgIG1f
YnVuZGxlUGFyYW1ldGVycyA9IGFkb3B0TlMoW1tXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJz
IGFsbG9jXSBpbml0V2l0aERpY3Rpb25hcnk6QHsgfV0pOwotCi0gICAgW21fYnVuZGxlUGFyYW1l
dGVycyBzZXRQYXJhbWV0ZXI6cGFyYW1ldGVyIGZvcktleTprZXldOwotfQotCi12b2lkIEluamVj
dGVkQnVuZGxlOjpzZXRCdW5kbGVQYXJhbWV0ZXJzKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
dmFsdWUpCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJzID0gbmlsOwotICAgIGF1dG8g
dW5hcmNoaXZlciA9IGNyZWF0ZVVuYXJjaGl2ZXIodmFsdWUpOwotICAgIEB0cnkgewotICAgICAg
ICBwYXJhbWV0ZXJzID0gW3VuYXJjaGl2ZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmNsYXNzZXNG
b3JDb2RlcigpIGZvcktleTpAInBhcmFtZXRlcnMiXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRp
b24gKmV4Y2VwdGlvbikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUgYnVu
ZGxlIHBhcmFtZXRlcjogJUAiLCBleGNlcHRpb24pOwotICAgIH0KLQotICAgIGlmICghcGFyYW1l
dGVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihbcGFyYW1ldGVycyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xh
c3NdXSk7Ci0KLSAgICBpZiAoIW1fYnVuZGxlUGFyYW1ldGVycykgewotICAgICAgICBtX2J1bmRs
ZVBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycyBhbGxv
Y10gaW5pdFdpdGhEaWN0aW9uYXJ5OnBhcmFtZXRlcnNdKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFttX2J1bmRsZVBhcmFtZXRlcnMgc2V0UGFyYW1ldGVyc0ZvcktleVdpdGhEaWN0
aW9uYXJ5OnBhcmFtZXRlcnNdOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396623</attachid>
            <date>2020-04-15 22:40:36 -0700</date>
            <delta_ts>2020-04-16 10:40:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210582-20200415224036.patch</filename>
            <type>text/plain</type>
            <size>4260</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5YWE2ZGRkMDQwYjZhNDYz
YmJkNjA2OGM3MDMzZGIxM2YxOGFhMzcuLjAxMDc3YzIyYWE4YmVmYTllMDUxNTdlYWEwM2ZjOTA0
MDA4Njc2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDQtMTUgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjYwMDgx
KSBCcm9rZSBpT1MgUExUIGR1ZSB0byBJbmplY3RlZEJ1bmRsZSBpbml0aWFsaXphdGlvbiAoZWRp
dCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDU4
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjE4Mzg1ODQ+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNoYW5nZXMgaW4gcjI2MDA4MSBiZWdh
biBlbmZvcmNpbmcgTlNTZWN1cmVDb2RpbmcgYmVzdCBwcmFjdGljZXMsIHRyaWdnZXJpbmcKKyAg
ICAgICAgYSBidWcgaW4gSW5qZWN0ZWRCdW5kbGVNYWMubW0sIHdoaWNoIGlzIHVzZWQgYnkgaU9T
IGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dpbmc6CisKKyAg
ICAgICAgMS4gRGVsYXlzIHBhcmFtZXRlciBkZWNvZGluZyB1bnRpbCB0aGUgYXBwcm9wcmlhdGUg
cGxhdGZvcm0gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gZm91
bmQgYW5kIHVzZWQuCisgICAgICAgIDIuIFJlbW92ZXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBu
ZWVkZWQgdG8gZ2V0IFBMVCBydW5uaW5nIG9uIGlPUyBhZ2Fpbi4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6ZGVjb2RlQnVuZGxlUGFyYW1ldGVycyk6IFJlbW92ZSB0
ZW1wb3Jhcnkgd29ya2Fyb3VuZAorICAgICAgICBuZWVkZWQgdG8gZ2V0IFBMVCB3b3JraW5nIGFn
YWluLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6IERlbGF5
IGRlY29kaW5nIHRoZSBidW5kbGUgcGFyYW1ldGVycyBvbgorICAgICAgICBpT1MgdW50aWwgdGhl
IFBsdWdpbidzIGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIgbWV0aG9kIGNhbiBi
ZSBjYWxsZWQuCisKIDIwMjAtMDQtMTUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBbSVBDIEhhcmRlbmluZ10gTWFjaE1lc3NhZ2U6OmNyZWF0ZSgpIHNob3Vs
ZCB1c2UgY2hlY2tlZCBhcml0aG1ldGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQpp
bmRleCAzMjA3MjA3YWM1MDVkOTU0YTdiNzliY2UwNjRjMGEwMDI5NTE0MzMxLi5iMTU0OWE3Zjlm
MGE1OTA5MzNhYjkyMjcxOGQ5NWE0ZDg4NWM5NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5k
bGVNYWMubW0KQEAgLTEwMSwxMiArMTAxLDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6ZGVjb2Rl
QnVuZGxlUGFyYW1ldGVycyhBUEk6OkRhdGEqIGJ1bmRsZVBhcmFtZXRlckRhdGFQdHIpCiAKICAg
ICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBuaWw7CiAgICAgQHRyeSB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgZGljdGlvbmFyeSA9IFt1bmFyY2hpdmVyIGRlY29kZU9i
amVjdE9mQ2xhc3M6W05TT2JqZWN0IGNsYXNzXSBmb3JLZXk6QCJwYXJhbWV0ZXJzIl07Ci0gICAg
ICAgIEFTU0VSVChbZGljdGlvbmFyeSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3Nd
XSk7Ci0jZWxzZQogICAgICAgICBkaWN0aW9uYXJ5ID0gW3VuYXJjaGl2ZXIuZ2V0KCkgZGVjb2Rl
T2JqZWN0T2ZDbGFzc2VzOmNsYXNzZXNGb3JDb2RlcigpIGZvcktleTpAInBhcmFtZXRlcnMiXTsK
LSNlbmRpZgogICAgICAgICBBU1NFUlQoW2RpY3Rpb25hcnkgaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pOwogICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSBidW5kbGUgcGFyYW1ldGVyczog
JUAuIiAsIGV4Y2VwdGlvbik7CkBAIC0xNzUsOCArMTcwLDEzIEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGU6OmluaXRpYWxpemUoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycywKICAgICBpZiAoYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9u
KQogICAgICAgICBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyRnVuY3Rpb24odG9B
UEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKIAorI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgQVNTRVJUKCFpbml0aWFsaXplRnVuY3Rpb24pOworICAgIEFTU0VS
VCghYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0ZXJDb2RlckZ1bmN0aW9uKTsKKyNlbHNlCiAg
ICAgZGVjb2RlQnVuZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRhdGEu
Z2V0KCkpOwotICAgIAorI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJW
RVJfQkxPQ0tJTkcpCiAgICAgLy8gU3dpenpsZSBbTlNFdmVudCBtb2RpZmVyRmxhZ3NdLCBzaW5j
ZSBpdCBhbHdheXMgcmV0dXJucyAwIHdoZW4gdGhlIFdpbmRvd1NlcnZlciBpcyBibG9ja2VkLgog
ICAgIE1ldGhvZCBtZXRob2QgPSBjbGFzc19nZXRDbGFzc01ldGhvZChbTlNFdmVudCBjbGFzc10s
IEBzZWxlY3Rvcihtb2RpZmllckZsYWdzKSk7CkBAIC0xODYsNiArMTg2LDEwIEBAIGJvb2wgSW5q
ZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycywKICAgICBpZiAoIWluaXRpYWxpemVGdW5jdGlvbikKICAgICAgICAgaW5p
dGlhbGl6ZUZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9u
UHRyPihDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoW21fcGxhdGZvcm1CdW5kbGUg
X2NmQnVuZGxlXSwgQ0ZTVFIoIldLQnVuZGxlSW5pdGlhbGl6ZSIpKSk7CiAKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIEFTU0VSVCghaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKKyNlbmRpZgor
CiAgICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidW5kbGUgaGFzIGEgV0tCdW5kbGVJ
bml0aWFsaXplIGZ1bmN0aW9uLgogICAgIGlmIChpbml0aWFsaXplRnVuY3Rpb24pIHsKICAgICAg
ICAgaW5pdGlhbGl6ZUZ1bmN0aW9uKHRvQVBJKHRoaXMpLCB0b0FQSShpbml0aWFsaXphdGlvblVz
ZXJEYXRhKSk7CkBAIC0yMTcsNiArMjIxLDEwIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmluaXRp
YWxpemUoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywKICAg
ICAgICAgW3BsdWdJbkNvbnRyb2xsZXIgZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyOltp
bnN0YW5jZSBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyXV07CiAgICAgICAgIGRl
Y29kZUJ1bmRsZVBhcmFtZXRlcnMocGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJEYXRhLmdldCgp
KTsKICAgICB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBlbHNlCisgICAgICAgIGRl
Y29kZUJ1bmRsZVBhcmFtZXRlcnMocGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJEYXRhLmdldCgp
KTsKKyNlbmRpZgogCiAgICAgaWYgKFtpbnN0YW5jZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlByb2Nlc3NQbHVnSW46aW5pdGlhbGl6ZVdpdGhPYmplY3Q6KV0pIHsKICAgICAgICAg
UmV0YWluUHRyPGlkPiBvYmpDSW5pdGlhbGl6YXRpb25Vc2VyRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396669</attachid>
            <date>2020-04-16 10:40:38 -0700</date>
            <delta_ts>2020-04-16 13:02:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210582-20200416104037.patch</filename>
            <type>text/plain</type>
            <size>6092</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5YWE2ZGRkMDQwYjZhNDYz
YmJkNjA2OGM3MDMzZGIxM2YxOGFhMzcuLjMyMTE5ZTgwNzE3YTY1MmM1OTY0ZGMzOTM2ZjhhNzBk
YjBhMDY2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDQtMTYgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjYwMDgx
KSBCcm9rZSBpT1MgUExUIGR1ZSB0byBJbmplY3RlZEJ1bmRsZSBpbml0aWFsaXphdGlvbiAoZWRp
dCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDU4
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjE4Mzg1ODQ+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNoYW5nZXMgaW4gcjI2MDA4MSBiZWdh
biBlbmZvcmNpbmcgTlNTZWN1cmVDb2RpbmcgYmVzdCBwcmFjdGljZXMsIHRyaWdnZXJpbmcKKyAg
ICAgICAgYSBidWcgaW4gSW5qZWN0ZWRCdW5kbGVNYWMubW0sIHdoaWNoIGlzIHVzZWQgYnkgaU9T
IGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dpbmc6CisKKyAg
ICAgICAgMS4gRGVsYXlzIHBhcmFtZXRlciBkZWNvZGluZyB1bnRpbCB3ZSB1c2UgdGhlIGFwcHJv
cHJpYXRlIEluamVjdGVkQnVuZGxlIG1lY2hhbmlzbQorICAgICAgICAgICBmb3IgZXhwcmVzc2lu
ZyB0aGUgdmFsaWQgY2xhc3NlcyB0byB1c2UgaW4gdGhlIFVuYXJjaGl2ZXIuCisgICAgICAgIDIu
IFJlbW92ZXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBuZWVkZWQgdG8gZ2V0IFBMVCBydW5uaW5n
IG9uIGlPUyBhZ2Fpbi4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbW92ZXMgdGhlIGNoZWNr
IG9mIHRoZSBDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUgc2xpZ2h0bHkgZWFybGll
cgorICAgICAgICBzbyB3ZSBjYW4gdXNlIGEgc2luZ2xlIGZ1bmN0aW9uIHBvaW50ZXIgY2hlY2ss
IGFuZCBvbmx5IGludm9rZSB0aGUgcGFyYW1ldGVyIGRlY29kaW5nCisgICAgICAgIGlmIHdlIGFy
ZSB1c2luZyB0aGUgQyBBUEkuCisgICAgICAgIAorICAgICAgICBJZiBub3QsIHdlIGRlbGF5IHBh
cmFtZXRlciBkZWNvZGluZyB1bnRpbCB3ZSBoYXZlIGNvbnN0cnVjdGVkIHRoZSBXS1dlYlByb2Nl
c3NQbHVnSW4KKyAgICAgICAgb2JqZWN0IHNvIHdlIGNhbiBjb25zdW1lIGl0J3MgJ2FkZGl0aW9u
YWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXInIGJlZm9yZSBjYWxsaW5nCisgICAgICAgIGl0cyBp
bml0aWFsaXphdGlvbiBtZXRob2QuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGU6OmRlY29kZUJ1bmRsZVBhcmFtZXRlcnMpOiBSZW1vdmUgdGVtcG9yYXJ5IHdvcmthcm91
bmQKKyAgICAgICAgbmVlZGVkIHRvIGdldCBQTFQgd29ya2luZyBhZ2Fpbi4gSW5zdGVhZCBvZiB1
c2luZyBhIGRlYnVnIGFzc2VydCwgcmV0dXJuIGFzCisgICAgICAgIGEgZGVjb2RpbmcgZmFpbHVy
ZSBpZiB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyBub3QgYW4gTlNEaWN0aW9uYXJ5LgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6IERlbGF5IGRlY29kaW5nIHRo
ZSBidW5kbGUgcGFyYW1ldGVycyBvbgorICAgICAgICBpT1MgdW50aWwgdGhlIFBsdWdpbidzIGFk
ZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIgbWV0aG9kIGNhbiBiZSBjYWxsZWQuCisK
IDIwMjAtMDQtMTUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSVBDIEhhcmRlbmluZ10gTWFjaE1lc3NhZ2U6OmNyZWF0ZSgpIHNob3VsZCB1c2UgY2hlY2tl
ZCBhcml0aG1ldGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQppbmRleCAzMjA3MjA3
YWM1MDVkOTU0YTdiNzliY2UwNjRjMGEwMDI5NTE0MzMxLi42MjEwMzAzYmQ4NzllNzdmMDk0OWZj
YTRjZGU4MDY4NmYzYmM2NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0KQEAg
LTEwMSwxNSArMTAxLDEzIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmRlY29kZUJ1bmRsZVBhcmFt
ZXRlcnMoQVBJOjpEYXRhKiBidW5kbGVQYXJhbWV0ZXJEYXRhUHRyKQogCiAgICAgTlNEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gbmlsOwogICAgIEB0cnkgewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGRpY3Rpb25hcnkgPSBbdW5hcmNoaXZlciBkZWNvZGVPYmplY3RPZkNsYXNz
OltOU09iamVjdCBjbGFzc10gZm9yS2V5OkAicGFyYW1ldGVycyJdOwotICAgICAgICBBU1NFUlQo
W2RpY3Rpb25hcnkgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOwotI2Vsc2UK
ICAgICAgICAgZGljdGlvbmFyeSA9IFt1bmFyY2hpdmVyLmdldCgpIGRlY29kZU9iamVjdE9mQ2xh
c3NlczpjbGFzc2VzRm9yQ29kZXIoKSBmb3JLZXk6QCJwYXJhbWV0ZXJzIl07Ci0jZW5kaWYKLSAg
ICAgICAgQVNTRVJUKFtkaWN0aW9uYXJ5IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFz
c11dKTsKKyAgICAgICAgaWYgKCFbZGljdGlvbmFyeSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25h
cnkgY2xhc3NdXSkgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6
ZGVjb2RlQnVuZGxlUGFyYW1ldGVycyBmYWlsZWQgLSBSZXN1bHRpbmcgb2JqZWN0IHdhcyBub3Qg
YW4gTlNEaWN0aW9uYXJ5LlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBkZWNvZGUgYnVuZGxlIHBhcmFtZXRlcnM6ICVALiIgLCBleGNlcHRp
b24pOworICAgICAgICBMT0dfRVJST1IoIkluamVjdGVkQnVuZGxlOjpkZWNvZGVCdW5kbGVQYXJh
bWV0ZXJzIGZhaWxlZCB0byBkZWNvZGUgYnVuZGxlIHBhcmFtZXRlcnM6ICVALiIgLCBleGNlcHRp
b24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMTY4LDYgKzE2Niw5
IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoY29uc3QgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICgh
aW5pdGlhbGl6ZUZ1bmN0aW9uKQorICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24gPSBiaXR3aXNl
X2Nhc3Q8V0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHI+KENGQnVuZGxlR2V0RnVuY3Rpb25Q
b2ludGVyRm9yTmFtZShbbV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5kbGVdLCBDRlNUUigiV0tCdW5k
bGVJbml0aWFsaXplIikpKTsKKwogICAgIGlmICghYWRkaXRpb25hbENsYXNzZXNGb3JQYXJhbWV0
ZXJDb2RlckZ1bmN0aW9uKQogICAgICAgICBhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNv
ZGVyRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5kbGVBZGRpdGlvbmFsQ2xhc3Nlc0ZvclBh
cmFtZXRlckNvZGVyRnVuY3Rpb25QdHI+KENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFt
ZShbbV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5kbGVdLCBDRlNUUigiV0tCdW5kbGVBZGRpdGlvbmFs
Q2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyIikpKTsKIApAQCAtMTc1LDE5ICsxNzYsMTYgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLAogICAgIGlmIChhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyRnVuY3Rpb24pCiAgICAgICAgIGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFyYW1ldGVyQ29k
ZXJGdW5jdGlvbih0b0FQSSh0aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkpOwog
Ci0gICAgZGVjb2RlQnVuZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRh
dGEuZ2V0KCkpOwotICAgIAogI2lmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9D
S0lORykKICAgICAvLyBTd2l6emxlIFtOU0V2ZW50IG1vZGlmZXJGbGFnc10sIHNpbmNlIGl0IGFs
d2F5cyByZXR1cm5zIDAgd2hlbiB0aGUgV2luZG93U2VydmVyIGlzIGJsb2NrZWQuCiAgICAgTWV0
aG9kIG1ldGhvZCA9IGNsYXNzX2dldENsYXNzTWV0aG9kKFtOU0V2ZW50IGNsYXNzXSwgQHNlbGVj
dG9yKG1vZGlmaWVyRmxhZ3MpKTsKICAgICBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24obWV0aG9k
LCByZWludGVycHJldF9jYXN0PElNUD4oY3VycmVudE1vZGlmaWVyRmxhZ3MpKTsKICNlbmRpZgot
ICAgIAotICAgIGlmICghaW5pdGlhbGl6ZUZ1bmN0aW9uKQotICAgICAgICBpbml0aWFsaXplRnVu
Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8V0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHI+KENGQnVu
ZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShbbV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5kbGVd
LCBDRlNUUigiV0tCdW5kbGVJbml0aWFsaXplIikpKTsKIAogICAgIC8vIEZpcnN0IGNoZWNrIHRv
IHNlZSBpZiB0aGUgYnVuZGxlIGhhcyBhIFdLQnVuZGxlSW5pdGlhbGl6ZSBmdW5jdGlvbi4KICAg
ICBpZiAoaW5pdGlhbGl6ZUZ1bmN0aW9uKSB7CisgICAgICAgIGlmICghZGVjb2RlQnVuZGxlUGFy
YW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRhdGEuZ2V0KCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24odG9BUEkodGhpcyks
IHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMjEzLDEwICsyMTEsMTEgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6
ZShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLAogICAgIFdL
V2ViUHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIqIHBsdWdJbkNvbnRyb2xsZXIgPSBXZWJLaXQ6Ondy
YXBwZXIoKnRoaXMpOwogICAgIFtwbHVnSW5Db250cm9sbGVyIF9zZXRQcmluY2lwYWxDbGFzc0lu
c3RhbmNlOmluc3RhbmNlXTsKIAotICAgIGlmIChbaW5zdGFuY2UgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihhZGRpdGlvbmFsQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyKV0pIHsKKyAgICBp
ZiAoW2luc3RhbmNlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYWRkaXRpb25hbENsYXNz
ZXNGb3JQYXJhbWV0ZXJDb2RlcildKQogICAgICAgICBbcGx1Z0luQ29udHJvbGxlciBleHRlbmRD
bGFzc2VzRm9yUGFyYW1ldGVyQ29kZXI6W2luc3RhbmNlIGFkZGl0aW9uYWxDbGFzc2VzRm9yUGFy
YW1ldGVyQ29kZXJdXTsKLSAgICAgICAgZGVjb2RlQnVuZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJz
LmJ1bmRsZVBhcmFtZXRlckRhdGEuZ2V0KCkpOwotICAgIH0KKworICAgIGlmICghZGVjb2RlQnVu
ZGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzLmJ1bmRsZVBhcmFtZXRlckRhdGEuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoW2luc3RhbmNlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3Iod2ViUHJvY2Vzc1BsdWdJbjppbml0aWFsaXplV2l0aE9iamVjdDopXSkgewog
ICAgICAgICBSZXRhaW5QdHI8aWQ+IG9iakNJbml0aWFsaXphdGlvblVzZXJEYXRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>