<?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>184271</bug_id>
          
          <creation_ts>2018-04-03 10:51:33 -0700</creation_ts>
          <short_desc>[iOS] Paste is missing from callout bar when pasteboard only contains custom data</short_desc>
          <delta_ts>2018-09-30 17:09:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>Safari 11</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>iOS 11</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=143776</see_also>
          <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="Chet Corcos">ccorcos</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>realdawei</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>thorton</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411470</commentid>
    <comment_count>0</comment_count>
    <who name="Chet Corcos">ccorcos</who>
    <bug_when>2018-04-03 10:51:33 -0700</bug_when>
    <thetext>It appears that in iOS, only a limited set of pasteboard types are allowed. See the supportedWebContentPasteboardTypes method inside https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.0.7/platform/ios/PasteboardIOS.mm.auto.html

Whereas on desktop, you can create whatever pasteboard types that you want.

This is very important in rich text applications that rely on copy-paste of structured content that needs to be treated differently when pasting inside the application vs outside the application.

I&apos;ve created a simple demonstration of this in a CodePen which you can open in iOS Safari and I&apos;ve copied the source code below: https://codepen.io/ccorcos/pen/KooVZB?editors=1010

When you create a selection in the contenteditable input and select copy, we save some structured information in a custom pasteboard type, and when we paste, we parse it back out. This works fine in desktop Safari, but does not work on iOS.

```html

&lt;div id=&quot;input&quot; contenteditable&gt;Hello world&lt;/div&gt;

```


```js

const input = document.getElementById(&quot;input&quot;)

window.addEventListener(&quot;copy&quot;, event =&gt; {
  event.preventDefault()
  const data = JSON.stringify({data: input.textContent})
  console.log(&quot;copy&quot;, data)
  event.clipboardData.setData(&quot;app/custom-key&quot;, data)
})

window.addEventListener(&quot;paste&quot;, event =&gt; {
  event.preventDefault()
  console.log(event)
  const data = event.clipboardData.getData(&quot;app/custom-key&quot;)
  console.log(&quot;pasteData&quot;, data)
  if (!data) {
    console.log(&quot;no data&quot;)
    return
  }
  const result = JSON.parse(data)
  input.innerHTML = result.data
})

```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412567</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-06 21:01:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/39256708&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412570</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-06 21:03:32 -0700</bug_when>
    <thetext>Is this on iOS 11.0? Have you tried it on iOS 11.3? We just made a lot of improvements on iOS 11.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412574</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-04-06 23:00:16 -0700</bug_when>
    <thetext>Thanks for the report, Chet! Responses inline.

(In reply to Chet Corcos from comment #0)
&gt; It appears that in iOS, only a limited set of pasteboard types are allowed.
&gt; See the supportedWebContentPasteboardTypes method inside
&gt; https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.0.7/platform/
&gt; ios/PasteboardIOS.mm.auto.html

So this is the special list of types that WebKit provides out-of-the-box support for pasting or dropping in editable web content. Custom pasteboard data types (setData(), getData() with types that are not &quot;text/plain&quot;, &quot;text/uri-list&quot; and &quot;text/html&quot;) take a totally different codepath than this one (search for &quot;customPasteboardData&quot;)

Could you try copying the &quot;3 Custom Copy Types&quot; text on https://whsieh.github.io/examples/custom-pasteboard-data and pasting in the gray dashed area below?

&gt; 
&gt; Whereas on desktop, you can create whatever pasteboard types that you want.
&gt; 
&gt; This is very important in rich text applications that rely on copy-paste of
&gt; structured content that needs to be treated differently when pasting inside
&gt; the application vs outside the application.
&gt; 
&gt; I&apos;ve created a simple demonstration of this in a CodePen which you can open
&gt; in iOS Safari and I&apos;ve copied the source code below:
&gt; https://codepen.io/ccorcos/pen/KooVZB?editors=1010
&gt; 
&gt; When you create a selection in the contenteditable input and select copy, we
&gt; save some structured information in a custom pasteboard type, and when we
&gt; paste, we parse it back out. This works fine in desktop Safari, but does not
&gt; work on iOS.
&gt; 
&gt; ```html
&gt; 
&gt; &lt;div id=&quot;input&quot; contenteditable&gt;Hello world&lt;/div&gt;
&gt; 
&gt; ```
&gt; 
&gt; 
&gt; ```js
&gt; 
&gt; const input = document.getElementById(&quot;input&quot;)
&gt; 
&gt; window.addEventListener(&quot;copy&quot;, event =&gt; {
&gt;   event.preventDefault()
&gt;   const data = JSON.stringify({data: input.textContent})
&gt;   console.log(&quot;copy&quot;, data)
&gt;   event.clipboardData.setData(&quot;app/custom-key&quot;, data)
&gt; })
&gt; 
&gt; window.addEventListener(&quot;paste&quot;, event =&gt; {
&gt;   event.preventDefault()
&gt;   console.log(event)
&gt;   const data = event.clipboardData.getData(&quot;app/custom-key&quot;)
&gt;   console.log(&quot;pasteData&quot;, data)
&gt;   if (!data) {
&gt;     console.log(&quot;no data&quot;)
&gt;     return
&gt;   }
&gt;   const result = JSON.parse(data)
&gt;   input.innerHTML = result.data
&gt; })
&gt; 
&gt; ```

Hm...I just tried this on a recent version of iOS, and cannot paste. I think we may have a bug where the callout action bar doesn&apos;t give the user the option to paste if there are only custom types on the pasteboard. If you are testing on iOS 11.3, could you try setting &quot;text/plain&quot; to something as well, and let me know if the problem still reproduces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413446</commentid>
    <comment_count>4</comment_count>
    <who name="Chet Corcos">ccorcos</who>
    <bug_when>2018-04-10 16:11:50 -0700</bug_when>
    <thetext>&gt; Is this on iOS 11.0? Have you tried it on iOS 11.3? We just made a lot of improvements on iOS 11.3.

Yes. iOS 11.3


&gt; Hm...I just tried this on a recent version of iOS, and cannot paste. I think we may have a bug where the callout action bar doesn&apos;t give the user the option to paste if there are only custom types on the pasteboard. If you are testing on iOS 11.3, could you try setting &quot;text/plain&quot; to something as well, and let me know if the problem still reproduces?

Yes. When I copy &quot;text/plain&quot; in addition to custom keys, the custom keys are not copied to the clipboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419370</commentid>
    <comment_count>5</comment_count>
    <who name="Chet Corcos">ccorcos</who>
    <bug_when>2018-05-01 12:14:12 -0700</bug_when>
    <thetext>Any update on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450567</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-15 20:12:17 -0700</bug_when>
    <thetext>We still cannot reproduce what you&apos;re reporting. We see that the callout / popover doesn&apos;t list &quot;paste&quot; as an option. Is that the bug you&apos;re reporting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450762</commentid>
    <comment_count>7</comment_count>
    <who name="Chet Corcos">ccorcos</who>
    <bug_when>2018-08-16 11:30:45 -0700</bug_when>
    <thetext>Hey @Ryosuke

Have you tried the attached codepen link? The callout / popover does not appear with a paste option because the clipboard data was never copied. If you look at the logs, you will see that the custom keys are never added to the clipboard.

It has been over 4 months since reporting this bug. If you actually plan on fixing this as opposed to kicking the can down the road, feel free to give me a call and I will walk you through everything. 916 548 9415

Cheers,

Chet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450807</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-16 12:39:01 -0700</bug_when>
    <thetext>(In reply to Chet Corcos from comment #7)
&gt; Have you tried the attached codepen link? The callout / popover does not
&gt; appear with a paste option because the clipboard data was never copied. If
&gt; you look at the logs, you will see that the custom keys are never added to
&gt; the clipboard.

Right, the callout doesn&apos;t show up but the data is copied. In fact, I can paste it in macOS on the same page using Universal Clipboard (ability to copy content in iOS and paste it in macOS) and it shows that the custom data is there.

If the only issue here is that the callout doesn&apos;t show up, that&apos;s definitely a bug we can reproduce and we would track that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450989</commentid>
    <comment_count>9</comment_count>
    <who name="Chet Corcos">ccorcos</who>
    <bug_when>2018-08-16 19:09:02 -0700</bug_when>
    <thetext>Interesting. You&apos;re right! Just verified here... If you copy some plain text in there then it will show the callout.

https://codepen.io/anon/pen/VBJJXX?editors=1010#anon-login

So the callout thing is still a bug, but the original bug I reported here appears half-way fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451195</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-17 12:23:03 -0700</bug_when>
    <thetext>I think we should probably allow the -paste: action if the pasteboard contains custom pasteboard data with an origin matching the origin of the currently focused frame&apos;s document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451372</commentid>
    <comment_count>11</comment_count>
      <attachid>347440</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-18 01:59:32 -0700</bug_when>
    <thetext>Created attachment 347440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451408</commentid>
    <comment_count>12</comment_count>
      <attachid>347440</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-18 14:06:54 -0700</bug_when>
    <thetext>Comment on attachment 347440
Patch

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2279
&gt; +    auto&amp; editorState = _page-&gt;editorState();

It looks like editorState() returns a new object each time?
In that case, I don&apos;t think it makes much sense to use auto&amp;. Just use auto.

Also, if it were really returning a reference,
I&apos;m afraid that the object could get destroyed by some of the code below.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:260
&gt; +TEST(PasteMixedContent, CopyAndPasteWithCustomPasteboardDataOnly)

I would have preferred to write a layout test for something like this but okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451409</commentid>
    <comment_count>13</comment_count>
      <attachid>347440</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-18 14:38:31 -0700</bug_when>
    <thetext>Comment on attachment 347440
Patch

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

Thanks for the review!

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2279
&gt;&gt; +    auto&amp; editorState = _page-&gt;editorState();
&gt; 
&gt; It looks like editorState() returns a new object each time?
&gt; In that case, I don&apos;t think it makes much sense to use auto&amp;. Just use auto.
&gt; 
&gt; Also, if it were really returning a reference,
&gt; I&apos;m afraid that the object could get destroyed by some of the code below.

Good point! Changed to just `auto`.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:260
&gt;&gt; +TEST(PasteMixedContent, CopyAndPasteWithCustomPasteboardDataOnly)
&gt; 
&gt; I would have preferred to write a layout test for something like this but okay.

Yeah, I had considered this too. I went with an API test in the end because the root cause of this bug is that WebKit API (namely, -[WKWebView canPerformAction:withSender:]) is returning the wrong result, which causes the UICalloutBar to not show &quot;Paste&quot; as an option. In this case, it was a little bit simpler to just test the API directly rather than route through UIScriptController for a layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451413</commentid>
    <comment_count>14</comment_count>
      <attachid>347452</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-18 15:19:49 -0700</bug_when>
    <thetext>Created attachment 347452
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451415</commentid>
    <comment_count>15</comment_count>
      <attachid>347452</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-18 15:59:28 -0700</bug_when>
    <thetext>Comment on attachment 347452
Patch for landing

Clearing flags on attachment: 347452

Committed r235011: &lt;https://trac.webkit.org/changeset/235011&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451424</commentid>
    <comment_count>16</comment_count>
      <attachid>347452</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-08-18 16:35:25 -0700</bug_when>
    <thetext>Comment on attachment 347452
Patch for landing

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

&gt; Source/WebKit/ChangeLog:23
&gt; +        * Shared/EditorState.h:
&gt; +
&gt; +        Add a originIdentifierForPasteboard field, and add support for encoding it when propagating EditorState via IPC.

Like everything in UI process, origin cached in EditorState can get out of sync with WebContent. What is the worst problem that can happen in this situation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451436</commentid>
    <comment_count>17</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-18 17:29:54 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #16)
&gt; Comment on attachment 347452 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=347452&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:23
&gt; &gt; +        * Shared/EditorState.h:
&gt; &gt; +
&gt; &gt; +        Add a originIdentifierForPasteboard field, and add support for encoding it when propagating EditorState via IPC.
&gt; 
&gt; Like everything in UI process, origin cached in EditorState can get out of
&gt; sync with WebContent. What is the worst problem that can happen in this
&gt; situation?

The worst that could happen if the EditorState&apos;s cached origin is out of sync is that we might show an option to &quot;paste&quot; when we shouldn&apos;t, but only when the pasteboard contains only custom data (the opposite is also possible, although before this fix, we&apos;d simply never show the option to &quot;paste&quot; anyways).

If the user were to try and hit &quot;Paste&quot; in this scenario, we would not allow the page to read cross-origin custom pasteboard data, because after we call out to the web process to handle the paste, DataTransfer would check the up-to-date origin identifier against the contents of the custom pasteboard data and bail as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451602</commentid>
    <comment_count>18</comment_count>
    <who name="Dawei Fenton (:realdawei)">realdawei</who>
    <bug_when>2018-08-20 07:59:41 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #15)
&gt; Comment on attachment 347452 [details]
&gt; Patch for landing
&gt; 
&gt; Clearing flags on attachment: 347452
&gt; 
&gt; Committed r235011: &lt;https://trac.webkit.org/changeset/235011&gt;

Seeing API failures on Mac after this revision

sample output:
https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20WK2%20%28Tests%29/builds/6244/steps/run-api-tests/logs/stdio

Failed

    TestWebKitAPI.PasteMixedContent.CopyAndPasteWithCustomPasteboardDataOnly
        
        /Volumes/Data/slave/highsierra-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:285
        Value of: [destination stringByEvaluatingJavaScript:@&quot;document.querySelector(&apos;input&apos;).value&quot;]
          Actual: &quot;bar&quot;
        Expected: &quot;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451604</commentid>
    <comment_count>19</comment_count>
      <attachid>347498</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-20 08:35:35 -0700</bug_when>
    <thetext>Created attachment 347498
API test fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451619</commentid>
    <comment_count>20</comment_count>
      <attachid>347498</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-20 09:43:36 -0700</bug_when>
    <thetext>Comment on attachment 347498
API test fix

Clearing flags on attachment: 347498

Committed r235079: &lt;https://trac.webkit.org/changeset/235079&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347440</attachid>
            <date>2018-08-18 01:59:32 -0700</date>
            <delta_ts>2018-08-18 14:06:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184271-20180818015931.patch</filename>
            <type>text/plain</type>
            <size>20558</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0OTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNiNzdjOGYzMTVjYTAy
MmRmNzIyNDlkNTE3ODRkZjdjYjdmZmU2Ni4uYzk3YzcxMGI1NDZhZGJmMTEyZDdlMmRlMWFjMDgx
ZGYzYTJkMDk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE4LTA4LTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFBhc3Rl
IGlzIG1pc3NpbmcgZnJvbSBjYWxsb3V0IGJhciB3aGVuIHBhc3RlYm9hcmQgb25seSBjb250YWlu
cyBjdXN0b20gZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg0MjcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTI1NjcwOD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvcnQgYSBjb3VwbGUg
b2YgV2ViQ29yZSBmdW5jdGlvbnMgZm9yIHVzZSBpbiBXZWJLaXQuCisKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisKIDIwMTgtMDgt
MTcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4gYW5kIEZ1amlp
IEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRk
IEdQUlJlZzo6SW52YWxpZEdQUlJlZyBhbmQgRlBSUmVnOjpJbnZhbGlkRlBSUmVnCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDhlNzY5YWZjZmYxYTFjMmQxNjIyODllMzNhNGU3ZGJiNTkxY2UwZjMuLjJhNjZjYjhiYTdj
ZTI1NzJkMmNkM2M1NzdkNDdmOGY4MWQzZjU4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAK
KzIwMTgtMDgtMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW2lPU10gUGFzdGUgaXMgbWlzc2luZyBmcm9tIGNhbGxvdXQgYmFyIHdoZW4gcGFzdGVi
b2FyZCBvbmx5IGNvbnRhaW5zIGN1c3RvbSBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5
MjU2NzA4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEN1cnJlbnRseSwgdGhlICJwYXN0ZToiIHNlbGVjdG9yIGFjdGlvbiBjYW5ub3QgYmUgcGVyZm9y
bWVkIGR1cmluZyBlZGl0aW5nIGlmIHRoZSBwYXN0ZWJvYXJkIG9ubHkgY29udGFpbnMKKyAgICAg
ICAgY3VzdG9tIHBhc3RlYm9hcmQgZGF0YS4gVGhpcyBpcyBiZWNhdXNlIGxvZ2ljIGluIC1bV0tD
b250ZW50VmlldyBjYW5QZXJmb3JtQWN0aW9uRm9yV2ViVmlldzp3aXRoU2VuZGVyOl0gb25seQor
ICAgICAgICBjaGVja3MgYWdhaW5zdCBhIGxpc3Qgb2YgcGFzdGVib2FyZCB0eXBlcyB3aGljaCBk
b2VzIG5vdCBpbmNsdWRlIHRoZSB0eXBlIGlkZW50aWZpZXIgZm9yIGN1c3RvbSBwYXN0ZWJvYXJk
IGRhdGEuCisgICAgICAgIFRvIGZpeCB0aGlzLCB3ZSBhbGxvdyBwYXN0aW5nIG9ubHkgaW4gdGhl
IGNhc2Ugd2hlcmUgbm9uZSBvZiB0aGUgb3RoZXIgdHlwZSBpZGVudGlmaWVycyBleGlzdCBpbiB0
aGUgcGFzdGVib2FyZCwKKyAgICAgICAgYXMgbG9uZyBhcyB0aGUgY3VzdG9tIHBhc3RlYm9hcmQg
ZGF0YSB0eXBlIGlkZW50aWZpZXIgaXMgcHJlc2VudCwgYW5kIHRoZSBjdXN0b20gcGFzdGVib2Fy
ZCBkYXRhJ3Mgb3JpZ2luCisgICAgICAgIG1hdGNoZXMgdGhlIG9yaWdpbiBvZiB0aGUgZm9jdXNl
ZCBmcmFtZSdzIGRvY3VtZW50LgorCisgICAgICAgIFRlc3Q6IFBhc3RlTWl4ZWRDb250ZW50LkNv
cHlBbmRQYXN0ZVdpdGhDdXN0b21QYXN0ZWJvYXJkRGF0YU9ubHkKKworICAgICAgICAqIFNoYXJl
ZC9FZGl0b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvRWRpdG9yU3RhdGUuaDoKKworICAgICAgICBBZGQgYSBvcmlnaW5JZGVudGlmaWVy
Rm9yUGFzdGVib2FyZCBmaWVsZCwgYW5kIGFkZCBzdXBwb3J0IGZvciBlbmNvZGluZyBpdCB3aGVu
IHByb3BhZ2F0aW5nIEVkaXRvclN0YXRlIHZpYSBJUEMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBjYW5QZXJmb3JtQWN0aW9uRm9yV2ViVmlldzp3aXRoU2VuZGVyOl0pOgorCisgICAgICAgIElm
IG5vbmUgb2YgdGhlIGNvbnZlbnRpb25hbCBwYXN0ZWJvYXJkIHR5cGUgaWRlbnRpZmllcnMgZm9y
IHJpY2ggb3IgcGxhaW4gdGV4dCBlZGl0aW5nIGFyZSBwcmVzZW50LCBjaGVjayB0byBzZWUKKyAg
ICAgICAgaWYgd2UgaGF2ZSBjdXN0b20gcGFzdGVib2FyZCBkYXRhOyBpZiBzbywgb25seSBhbGxv
dyBwYXN0aW5nIGlmIHRoZSBjdXN0b20gcGFzdGVib2FyZCBkYXRhJ3Mgb3JpZ2luIG1hdGNoZXMg
dGhhdAorICAgICAgICBvZiB0aGUgZm9jdXNlZCBmcmFtZSdzIGRvY3VtZW50IG9yaWdpbi4KKwor
ICAgICAgICBBZGRpdGlvbmFsbHkgcmVmYWN0b3IgYSBiaXQgb2YgbG9naWMgYnkgcHVsbGluZyBv
dXQgYF9wYWdlLT5lZGl0b3JTdGF0ZSgpYCBpbnRvIGEgc2VwYXJhdGUgbG9jYWwgdmFyaWFibGUs
IHVzZWQKKyAgICAgICAgdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUgbWV0aG9kLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjplZGl0b3JTdGF0ZSBjb25zdCk6CisKKyAgICAgICAgU2VuZCB0aGUgZm9jdXNlZCBm
cmFtZSdzIGRvY3VtZW50IG9yaWdpbiB0byB0aGUgVUkgcHJvY2VzcyB2aWEgRWRpdG9yU3RhdGUu
CisKIDIwMTgtMDgtMTcgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzQyNTkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCmluZGV4IDJlM2FmYzIwYjA1OWE4YjZiOTY0Yjg5YjliNTk1ZjRiMDcxYzE4YzEuLmQ3
OWE0NGU5NDgyZTc4NWNjYzUwMDgyZjk5YWIxNGI1NjI3MDhiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCkBAIC0xMDA2LDcgKzEwMDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNET01UcmVlVmVy
c2lvbigpIHsgbV9kb21UcmVlVmVyc2lvbiA9ICsrc19nbG9iYWxUcmVlVmVyc2lvbjsgfQogICAg
IHVpbnQ2NF90IGRvbVRyZWVWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9kb21UcmVlVmVyc2lv
bjsgfQogCi0gICAgU3RyaW5nIG9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIG9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAK
ICAgICAvLyBYUGF0aEV2YWx1YXRvciBtZXRob2RzCiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0
aW9uT3I8UmVmPFhQYXRoRXhwcmVzc2lvbj4+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiYmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuaAppbmRleCAxMTFmM2FmY2VhYTc4NTZiZDcxMjgzYTViOGU3YTA1MzQ4
MzY0MDYzLi5kNTQzM2RkOTIwYWUwZWU1OTJiZDQ1ZmQ1NjBjZGQzZTM4YTM0NzIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RydWN0IFBh
c3RlYm9hcmRDdXN0b21EYXRhIHsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzdGVib2Fy
ZEN1c3RvbURhdGEgZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImKTsKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb2NvYVR5cGUoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FUeXBlKCk7CiAjZW5kaWYK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAppbmRleCAwMmNhMzY3MzU4OTk3
NzA0NTNhN2YxNGYzMjNlZWMxNjEwMWQ1MWFkLi4yZGZhNTE4NjZjNDNlMTQ0MjQ4NmJhMTRhMTVi
YTViOWQ4ZGI5ZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC01Myw2
ICs1Myw4IEBAIHZvaWQgRWRpdG9yU3RhdGU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiAgICAgZW5jb2RlciA8PCBsYXN0TWFya2VkUmVjdDsKICAgICBlbmNvZGVyIDw8IG1h
cmtlZFRleHQ7CiAjZW5kaWYKKworICAgIGVuY29kZXIgPDwgb3JpZ2luSWRlbnRpZmllckZvclBh
c3RlYm9hcmQ7CiB9CiAKIGJvb2wgRWRpdG9yU3RhdGU6OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIsIEVkaXRvclN0YXRlJiByZXN1bHQpCkBAIC05OCw2ICsxMDAsOSBAQCBib29sIEVkaXRv
clN0YXRlOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBFZGl0b3JTdGF0ZSYgcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0VkaXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0
ZS5oCmluZGV4IGEyMTczYTQ5YjQ4MmMxMmM5ODhhNmQxZjJhZTcyNWM3YTg0YTVmOTEuLjIwODVj
MTU4Nzc2MDAyMGUwZWJhZTBiOTk2YTkxNGU4ODUwOGU3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRp
dG9yU3RhdGUuaApAQCAtODAsNiArODAsOCBAQCBzdHJ1Y3QgRWRpdG9yU3RhdGUgewogICAgIFN0
cmluZyBtYXJrZWRUZXh0OwogI2VuZGlmCiAKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllckZv
clBhc3RlYm9hcmQ7CisKICAgICBzdHJ1Y3QgUG9zdExheW91dERhdGEgewogICAgICAgICB1aW50
MzJfdCB0eXBpbmdBdHRyaWJ1dGVzIHsgQXR0cmlidXRlTm9uZSB9OwogI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNDcwNzQxZmU3ZmEzYzZkZDg0
Mzk5MjNhMTc5NTQ0NDVjNmJlMTEyMi4uNmE4ZjA2ZDRjMmFkZWZjNTM2MjA4MGQ3M2ZjYTM1ZmQz
OGY1YWQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yMjc2LDM1ICsyMjc2LDQ5IEBAIEZPUl9FQUNI
X1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLV0VCVklFVykKICAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihfYXJyb3dLZXk6KSkKICAgICAgICAgcmV0dXJuIFtzZWxm
IGlzRmlyc3RSZXNwb25kZXJdOwogICAgICAgICAKKyAgICBhdXRvJiBlZGl0b3JTdGF0ZSA9IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9zaG93VGV4
dFN0eWxlT3B0aW9uczopKQotICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNS
YW5nZSAmJiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOworICAgICAgICByZXR1cm4gZWRpdG9y
U3RhdGUuaXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNS
YW5nZSAmJiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwogICAgIGlmIChfc2hvd2luZ1RleHRT
dHlsZU9wdGlvbnMpCiAgICAgICAgIHJldHVybiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVC
b2xkZmFjZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlSXRhbGljczopIHx8IGFjdGlv
biA9PSBAc2VsZWN0b3IodG9nZ2xlVW5kZXJsaW5lOikpOwogICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHRvZ2dsZUJvbGRmYWNlOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVJdGFs
aWNzOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVVbmRlcmxpbmU6KSkKLSAgICAgICAg
cmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlOworICAg
ICAgICByZXR1cm4gZWRpdG9yU3RhdGUuaXNDb250ZW50UmljaGx5RWRpdGFibGU7CiAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IoY3V0OikpCi0gICAgICAgIHJldHVybiAhX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250
ZW50RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKKyAg
ICAgICAgcmV0dXJuICFlZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAmJiBlZGl0b3JTdGF0
ZS5pc0NvbnRlbnRFZGl0YWJsZSAmJiBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOwogICAg
IAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikpIHsKLSAgICAgICAgaWYgKF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCAhX3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNDb250ZW50RWRpdGFibGUpCisgICAgICAgIGlmIChlZGl0b3JTdGF0ZS5zZWxlY3Rpb25J
c05vbmUgfHwgIWVkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlKQogICAgICAgICAgICAgcmV0
dXJuIE5POwogICAgICAgICBVSVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJk
IGdlbmVyYWxQYXN0ZWJvYXJkXTsKICAgICAgICAgTlNBcnJheSAqdHlwZXMgPSBbc2VsZiBzdXBw
b3J0ZWRQYXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uXTsKICAgICAgICAgTlNJbmRl
eFNldCAqaW5kaWNlcyA9IFtOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4ZXNJblJhbmdlOk5T
TWFrZVJhbmdlKDAsIFtwYXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdKV07Ci0gICAgICAgIHJldHVy
biBbcGFzdGVib2FyZCBjb250YWluc1Bhc3RlYm9hcmRUeXBlczp0eXBlcyBpbkl0ZW1TZXQ6aW5k
aWNlc107CisgICAgICAgIGlmIChbcGFzdGVib2FyZCBjb250YWluc1Bhc3RlYm9hcmRUeXBlczp0
eXBlcyBpbkl0ZW1TZXQ6aW5kaWNlc10pCisgICAgICAgICAgICByZXR1cm4gWUVTOworCisgICAg
ICAgIGF1dG8gZm9jdXNlZERvY3VtZW50T3JpZ2luID0gZWRpdG9yU3RhdGUub3JpZ2luSWRlbnRp
ZmllckZvclBhc3RlYm9hcmQ7CisgICAgICAgIGlmIChmb2N1c2VkRG9jdW1lbnRPcmlnaW4uaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIE5POworCisgICAgICAgIE5TQXJyYXkgKmFsbEN1
c3RvbVBhc3RlYm9hcmREYXRhID0gW3Bhc3RlYm9hcmQgZGF0YUZvclBhc3RlYm9hcmRUeXBlOkAo
UGFzdGVib2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKSBpbkl0ZW1TZXQ6aW5kaWNlc107Cisg
ICAgICAgIGZvciAoTlNEYXRhICpkYXRhIGluIGFsbEN1c3RvbVBhc3RlYm9hcmREYXRhKSB7Cisg
ICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOworICAg
ICAgICAgICAgaWYgKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZl
ci5nZXQoKSkub3JpZ2luID09IGZvY3VzZWREb2N1bWVudE9yaWdpbikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gWUVTOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKICAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5OikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKQorICAgICAgICBpZiAoZWRpdG9yU3RhdGUu
aXNJblBhc3N3b3JkRmllbGQpCiAgICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIHJldHVy
biBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgICAgICByZXR1cm4g
ZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihfZGVmaW5lOikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzSW5QYXNzd29yZEZpZWxkIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1Jh
bmdlKQorICAgICAgICBpZiAoZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgIWVkaXRv
clN0YXRlLnNlbGVjdGlvbklzUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKLSAgICAg
ICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91
dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgICAgIE5TVUludGVnZXIgdGV4dExlbmd0
aCA9IGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0ZWRUZXh0TGVuZ3RoOwogICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNhbGxpbmcgVUlSZWZlcmVuY2VMaWJyYXJ5Vmll
d0NvbnRyb2xsZXIgdG8gY2hlY2sgaWYgdGhlIGxlbmd0aCBpcwogICAgICAgICAvLyBhY2NlcHRh
YmxlLCBidXQgdGhlIGludGVyZmFjZSB0YWtlcyBhIHN0cmluZy4KICAgICAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzE1MjU0NDA2PgpAQCAtMjMyMCw3ICsyMzM0LDcgQEAgRk9SX0VBQ0hfV0tDT05U
RU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tXRUJWSUVXKQogICAgIH0KIAogICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9sb29rdXA6KSkgewotICAgICAgICBpZiAoX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQpCisgICAgICAgIGlmIChlZGl0b3JTdGF0
ZS5pc0luUGFzc3dvcmRGaWVsZCkKICAgICAgICAgICAgIHJldHVybiBOTzsKIAogI2lmICFQTEFU
Rk9STShJT1NNQUMpCkBAIC0yMzI4LDE4ICsyMzQyLDE4IEBAIEZPUl9FQUNIX1dLQ09OVEVOVFZJ
RVdfQUNUSU9OKEZPUldBUkRfQUNUSU9OX1RPX1dLV0VCVklFVykKICAgICAgICAgICAgIHJldHVy
biBOTzsKICNlbmRpZgogCi0gICAgICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxl
Y3Rpb25Jc1JhbmdlOworICAgICAgICByZXR1cm4gZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5n
ZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihfc2hhcmU6KSkgewotICAg
ICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgfHwgIV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpCisgICAgICAgIGlmIChlZGl0b3JTdGF0
ZS5pc0luUGFzc3dvcmRGaWVsZCB8fCAhZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSkKICAg
ICAgICAgICAgIHJldHVybiBOTzsKIAotICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRl
KCkucG9zdExheW91dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGggPiAwOworICAgICAgICByZXR1
cm4gZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGggPiAwOwog
ICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hZGRTaG9ydGN1dDopKSB7Ci0g
ICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCB8fCAhX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSkKKyAgICAgICAgaWYgKGVkaXRvclN0
YXRlLmlzSW5QYXNzd29yZEZpZWxkIHx8ICFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlKQog
ICAgICAgICAgICAgcmV0dXJuIE5POwogCiAgICAgICAgIE5TU3RyaW5nICpzZWxlY3RlZFRleHQg
PSBbc2VsZiBzZWxlY3RlZFRleHRdOwpAQCAtMjM1NCw3ICsyMzY4LDcgQEAgRk9SX0VBQ0hfV0tD
T05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tXRUJWSUVXKQogICAgIH0KIAog
ICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9wcm9tcHRGb3JSZXBsYWNlOikpIHsKLSAgICAg
ICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlIHx8ICFfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmlzUmVwbGFjZUFsbG93ZWQgfHwgIVtbVUlL
ZXlib2FyZEltcGwgYWN0aXZlSW5zdGFuY2VdIGF1dG9jb3JyZWN0U3BlbGxpbmdFbmFibGVkXSkK
KyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlIHx8ICFlZGl0b3JTdGF0
ZS5wb3N0TGF5b3V0RGF0YSgpLmlzUmVwbGFjZUFsbG93ZWQgfHwgIVtbVUlLZXlib2FyZEltcGwg
YWN0aXZlSW5zdGFuY2VdIGF1dG9jb3JyZWN0U3BlbGxpbmdFbmFibGVkXSkKICAgICAgICAgICAg
IHJldHVybiBOTzsKICAgICAgICAgaWYgKFtbc2VsZiBzZWxlY3RlZFRleHRdIF9jb250YWluc0NK
U2NyaXB0c09ubHldKQogICAgICAgICAgICAgcmV0dXJuIE5POwpAQCAtMjM2MiwyNCArMjM3Niwy
NCBAQCBGT1JfRUFDSF9XS0NPTlRFTlRWSUVXX0FDVElPTihGT1JXQVJEX0FDVElPTl9UT19XS1dF
QlZJRVcpCiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX3RyYW5zbGl0ZXJh
dGVDaGluZXNlOikpIHsKLSAgICAgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rp
b25Jc1JhbmdlIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmlzUmVw
bGFjZUFsbG93ZWQgfHwgIVtbVUlLZXlib2FyZEltcGwgYWN0aXZlSW5zdGFuY2VdIGF1dG9jb3Jy
ZWN0U3BlbGxpbmdFbmFibGVkXSkKKyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25J
c1JhbmdlIHx8ICFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmlzUmVwbGFjZUFsbG93ZWQg
fHwgIVtbVUlLZXlib2FyZEltcGwgYWN0aXZlSW5zdGFuY2VdIGF1dG9jb3JyZWN0U3BlbGxpbmdF
bmFibGVkXSkKICAgICAgICAgICAgIHJldHVybiBOTzsKICAgICAgICAgcmV0dXJuIFVJS2V5Ym9h
cmRFbmFibGVkSW5wdXRNb2Rlc0FsbG93Q2hpbmVzZVRyYW5zbGl0ZXJhdGlvbkZvclRleHQoW3Nl
bGYgc2VsZWN0ZWRUZXh0XSk7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
c2VsZWN0OikpIHsKICAgICAgICAgLy8gRGlzYWJsZSBzZWxlY3QgaW4gcGFzc3dvcmQgZmllbGRz
IHNvIHRoYXQgeW91IGNhbid0IHNlZSB3b3JkIGJvdW5kYXJpZXMuCi0gICAgICAgIHJldHVybiAh
X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgW3NlbGYgaGFzQ29udGVu
dF0gJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSAmJiAhX3BhZ2UtPmVk
aXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKKyAgICAgICAgcmV0dXJuICFlZGl0b3JTdGF0
ZS5pc0luUGFzc3dvcmRGaWVsZCAmJiBbc2VsZiBoYXNDb250ZW50XSAmJiAhZWRpdG9yU3RhdGUu
c2VsZWN0aW9uSXNOb25lICYmICFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOwogICAgIH0K
IAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNlbGVjdEFsbDopKSB7Ci0gICAgICAgIGlm
ICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25lICYmICFfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQorICAgICAgICBpZiAoIWVkaXRvclN0YXRlLnNlbGVj
dGlvbklzTm9uZSAmJiAhZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSkKICAgICAgICAgICAg
IHJldHVybiBZRVM7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKICAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihyZXBsYWNlOikpCi0gICAgICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3
b3JkRmllbGQ7CisgICAgICAgIHJldHVybiBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZSAm
JiAhZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQ7CiAKICAgICByZXR1cm4gW3N1cGVyIGNh
blBlcmZvcm1BY3Rpb246YWN0aW9uIHdpdGhTZW5kZXI6c2VuZGVyXTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNTE4YmNmNzI1MDkzZWZi
NWYxNWI4NTIxMDhiNzY0ZTVhMmNhOWEzNC4uODBkM2Y2M2EzODg0NGI1YzU4NzI2YjBiOWFmZGE3
NTAzMjllMWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTkyMSw2ICs5MjEsOSBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0
ZShJbmNsdWRlUG9zdExheW91dERhdGFIaW50IHNob3VsZEluY2x1ZGVQb3N0TGF5bwogICAgIHJl
c3VsdC5oYXNDb21wb3NpdGlvbiA9IGVkaXRvci5oYXNDb21wb3NpdGlvbigpOwogICAgIHJlc3Vs
dC5zaG91bGRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzID0gZWRpdG9yLmlnbm9yZVNlbGVjdGlvbkNo
YW5nZXMoKTsKIAorICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCisg
ICAgICAgIHJlc3VsdC5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCA9IGRvY3VtZW50LT5v
cmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOworCiAgICAgYm9vbCBjYW5JbmNsdWRlUG9z
dExheW91dERhdGEgPSBmcmFtZS52aWV3KCkgJiYgIWZyYW1lLnZpZXcoKS0+bmVlZHNMYXlvdXQo
KTsKICAgICBpZiAoc2hvdWxkSW5jbHVkZVBvc3RMYXlvdXREYXRhID09IEluY2x1ZGVQb3N0TGF5
b3V0RGF0YUhpbnQ6OlllcyAmJiBjYW5JbmNsdWRlUG9zdExheW91dERhdGEpIHsKICAgICAgICAg
YXV0byYgcG9zdExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMjM0M2NiM2M3MjUw
OGYxMjRjODJmNDY5NDU3NzdkZmNlNDkzYjUyLi44Y2I0NTJjMzYwYzhjNjg5Y2NkZmRkYjBhNmFm
MWRhZjgyZDdlNGM3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTgtMDgtMTggIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gUGFzdGUgaXMgbWlzc2luZyBmcm9t
IGNhbGxvdXQgYmFyIHdoZW4gcGFzdGVib2FyZCBvbmx5IGNvbnRhaW5zIGN1c3RvbSBkYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNzEKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5MjU2NzA4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBBUEkgdGVzdCB0byB2ZXJpZnkgdGhh
dCBvbiBib3RoIGlPUyBhbmQgbWFjT1MsIGNvcGllZCBjdXN0b20gcGFzdGVib2FyZCBkYXRhIGNh
biBvbmx5IGJlIHBhc3RlZCBpbiBhCisgICAgICAgIG1hdGNoaW5nIG9yaWdpbi4gQWRkaXRpb25h
bGx5IHZlcmlmeSB0aGF0IG9uIGlPUywgdGhlIHdlYiB2aWV3IGlzIGNhcGFibGUgb2YgcGVyZm9y
bWluZyB0aGUgInBhc3RlOiIgc2VsZWN0b3IuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisgICAgICAgIChpbWFnZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAod3Jp
dGVUeXBlc0FuZERhdGFUb1Bhc3RlYm9hcmQpOiBEZWxldGVkLgorICAgICAgICAoc2V0VXBXZWJW
aWV3KTogRGVsZXRlZC4KKyAgICAgICAgKG1hcmt1cFN0cmluZyk6IERlbGV0ZWQuCisKKyAgICAg
ICAgTWFrZSB0aGlzIHRlc3QgZmlsZSBubyBsb25nZXIgZXhjbHVzaXZlIHRvIG1hY09TLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lmg6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtUZXN0V0tX
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpiYXNlVVJMOl0pOgorCisgICAgICAg
IFR3ZWFrIHRoaXMgaGVscGVyIHRvIGFsc28gdGFrZSBpbiBhIGBiYXNlVVJMYC4gRGVmYXVsdHMg
dG8gdXNpbmcgdGhlIFRlc3RXZWJLaXRBUEkgYnVuZGxlIHJlc291cmNlIFVSTC4KKworICAgICAg
ICAoLVtUZXN0V0tXZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpdKToKKwogMjAx
OC0wOC0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbbWFjT1NdIFtXSzJdIEFkZCBpbmZyYXN0cnVjdHVyZSB0byB0ZXN0IHJlY2VpdmluZyBmaWxl
IHByb21pc2VzIG9uIGRyb3AKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4IDlmNGFlNWYwNzFiM2Mw
YmUxMDQyNGUwZjJjZjIyZmU4MTQ2MTVmYmQuLmI1ZmI0ODFiZTQ3MDVmYzJiNDQ0YzdhNjA4YTNk
YWMwNDRlNmRjZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQpAQCAtMjUsMTUgKzI1LDIxIEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgV0tfQVBJX0VOQUJM
RUQKKyNpZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgor
I2ltcG9ydCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgUExBVEZPUk0oTUFD
KQorCiBzdGF0aWMgTlNTdHJpbmcgKmltYWdlUGF0aCgpCiB7CiAgICAgcmV0dXJuIFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gcGF0aEZvclJlc291cmNlOkAiaWNvbiIgb2ZUeXBlOkAicG5nIiBpbkRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CkBAIC05Niw4ICsxMDIsNiBAQCBz
dGF0aWMgTlNTdHJpbmcgKm1hcmt1cFN0cmluZygpCiAgICAgcmV0dXJuIEAiPHNjcmlwdD5mb28o
KTwvc2NyaXB0PjxzdHJvbmcgb25tb3VzZW92ZXI9J2phdmFzY3JpcHQ6dm9pZCgwKSc+SEVMTE8g
V09STEQ8L3N0cm9uZz4iOwogfQogCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KIFRFU1Qo
UGFzdGVNaXhlZENvbnRlbnQsIEltYWdlRmlsZUFuZFBsYWluVGV4dCkKIHsKICAgICBhdXRvIHdl
YlZpZXcgPSBzZXRVcFdlYlZpZXcoKTsKQEAgLTI1MSw2ICsyNTUsMzkgQEAgVEVTVChQYXN0ZU1p
eGVkQ29udGVudCwgUGFzdGVVUkxXcml0dGVuVG9QYXN0ZWJvYXJkVXNpbmdXcml0ZU9iamVjdHMp
CiAgICAgRVhQRUNUX1dLX1NUUkVRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhJykudGV4dENvbnRlbnQiXSwgdXJsVG9Db3B5
KTsKIH0KIAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworVEVTVChQYXN0ZU1peGVkQ29udGVu
dCwgQ29weUFuZFBhc3RlV2l0aEN1c3RvbVBhc3RlYm9hcmREYXRhT25seSkKK3sKKyAgICBOU1N0
cmluZyAqbWFya3VwRm9yU291cmNlID0gQCI8Ym9keSBvbmNvcHk9XCJldmVudC5wcmV2ZW50RGVm
YXVsdCgpOyBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoJ2ZvbycsICdiYXInKVwiPmhlbGxv
PC9ib2R5PiI7CisgICAgTlNTdHJpbmcgKm1hcmt1cEZvckRlc3RpbmF0aW9uID0gQCI8aW5wdXQg
YXV0b2ZvY3VzIG9ucGFzdGU9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnZhbHVlID0g
ZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdmb28nKVwiPiI7CisKKyAgICBhdXRvIHNjaGVt
ZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsK
KyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
c2NoZW1lSGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJzYW1lIl07CisgICAgW2NvbmZpZ3Vy
YXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVyLmdldCgpIGZvclVSTFNjaGVt
ZTpAImRpZmZlcmVudCJdOworCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbc291cmNlIHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzptYXJrdXBGb3JTb3VyY2UgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAInNhbWU6Ly8iXV07CisgICAgW3NvdXJjZSBzZWxlY3RBbGw6bmlsXTsKKyAgICBbc291
cmNlIF9leGVjdXRlRWRpdENvbW1hbmQ6QCJjb3B5IiBhcmd1bWVudDpuaWwgY29tcGxldGlvbjpu
aWxdOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFtkZXN0aW5hdGlvbiBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmc6bWFya3VwRm9yRGVzdGluYXRpb24gYmFzZVVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAInNhbWU6Ly8iXV07CisgICAgW2Rlc3RpbmF0aW9uIHBhc3RlOm5pbF07CisgICAg
RVhQRUNUX1dLX1NUUkVRKCJiYXIiLCBbZGVzdGluYXRpb24gc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUiXSk7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIEVYUEVDVF9UUlVFKFtkZXN0aW5hdGlvbiBjYW5QZXJmb3JtQWN0
aW9uOkBzZWxlY3RvcihwYXN0ZTopIHdpdGhTZW5kZXI6bmlsXSk7CisjZW5kaWYKKworICAgIFtk
ZXN0aW5hdGlvbiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6bWFya3VwRm9yRGVzdGluYXRp
b24gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImRpZmZlcmVudDovLyJdXTsKKyAgICBb
ZGVzdGluYXRpb24gcGFzdGU6bmlsXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFtkZXN0aW5h
dGlvbiBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignaW5wdXQnKS52YWx1ZSJdKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgRVhQRUNUX0ZBTFNF
KFtkZXN0aW5hdGlvbiBjYW5QZXJmb3JtQWN0aW9uOkBzZWxlY3RvcihwYXN0ZTopIHdpdGhTZW5k
ZXI6bmlsXSk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAorI2VuZGlmIC8vIFdLX0FQ
SV9FTkFCTEVECmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dl
YlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCmluZGV4
IDA1MWZhMjkyZGM3Y2IwNjNmMzIyYTk0NzllMTc2ZDg3NTI0ZTBjNjcuLjYxM2RmYWU4YWExZGZm
NzY0Yzc3M2NmYzUwMTRlNWMzZTE2MzgxNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
VGVzdFdLV2ViVmlldy5oCkBAIC01MSw2ICs1MSw3IEBACiAtICh2b2lkKXBlcmZvcm1BZnRlclJl
Y2VpdmluZ01lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBhY3Rpb246KGRpc3BhdGNoX2Jsb2Nr
X3QpYWN0aW9uOwogLSAodm9pZClsb2FkVGVzdFBhZ2VOYW1lZDooTlNTdHJpbmcgKilwYWdlTmFt
ZTsKIC0gKHZvaWQpc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKWh0bWw7
CistICh2b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilodG1sIGJh
c2VVUkw6KE5TVVJMICopdXJsOwogLSAodm9pZClzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFt
ZWQ6KE5TU3RyaW5nICopcGFnZU5hbWU7CiAtIChpZClvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmlwdDsKIC0gKE5TU3RyaW5nICopc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQ7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3RXS1dlYlZpZXcubW0KaW5kZXggZDA5NmNmMDljNTVjZGYxYzYyNDQ2NjJkMzFhZGFiMTZi
Mjc4ZWM5OC4uNWYyY2E1M2JkMDYyOWMxZGZmMmNjNDA4ZjFmNTJiMjliOWRjZWUxZSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQpAQCAtMjQ2LDEzICsyNDYs
MTcgQEAgTlNFdmVudE1hc2sgX19zaW11bGF0ZWRfZm9yY2VDbGlja0Fzc29jaWF0ZWRFdmVudHNN
YXNrKGlkIHNlbGYsIFNFTCBfY21kKQogICAgIFtzZWxmIGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwog
fQogCi0tICh2b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilodG1s
CistICh2b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilodG1sIGJh
c2VVUkw6KE5TVVJMICopdXJsCiB7Ci0gICAgTlNVUkwgKnRlc3RSZXNvdXJjZVVSTCA9IFtbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVVSTF0gVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKLSAgICBbc2VsZiBsb2FkSFRNTFN0cmluZzpo
dG1sIGJhc2VVUkw6dGVzdFJlc291cmNlVVJMXTsKKyAgICBbc2VsZiBsb2FkSFRNTFN0cmluZzpo
dG1sIGJhc2VVUkw6dXJsXTsKICAgICBbc2VsZiBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdh
dGlvbl07CiB9CiAKKy0gKHZvaWQpc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOihOU1N0cmlu
ZyAqKWh0bWwKK3sKKyAgICBbc2VsZiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6aHRtbCBi
YXNlVVJMOltbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVVSTF0gVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07Cit9CisKIC0gKHZvaWQp
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOihOU1N0cmluZyAqKXBhZ2VOYW1lCiB7CiAg
ICAgW3NlbGYgbG9hZFRlc3RQYWdlTmFtZWQ6cGFnZU5hbWVdOwo=
</data>
<flag name="review"
          id="365218"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347452</attachid>
            <date>2018-08-18 15:19:49 -0700</date>
            <delta_ts>2018-08-18 15:59:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-184271-20180818151947.patch</filename>
            <type>text/plain</type>
            <size>20468</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgxMjg2ZmQyNzQ4NWZk
ZTVjODgyZjRkNWNiOWVmNzAyYmY5YWE2Mi4uYTUxOGM4ZjFmMTU2MWJiM2MyZTQyOTAyNGFkODU2
NWVmZDFiMTlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE4LTA4LTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFBhc3Rl
IGlzIG1pc3NpbmcgZnJvbSBjYWxsb3V0IGJhciB3aGVuIHBhc3RlYm9hcmQgb25seSBjb250YWlu
cyBjdXN0b20gZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg0MjcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTI1NjcwOD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgRXhwb3J0IGEgY291cGxlIG9m
IFdlYkNvcmUgZnVuY3Rpb25zIGZvciB1c2UgaW4gV2ViS2l0LgorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorCiAyMDE4LTA4LTE3
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFBhY2sgYm9vbGVh
bnMgaW4gRXZlbnQgaW50byBhIGJpdGZpZWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg2Y2UxMjA4NjljZTA4ZWY5
ZmU4Y2ExNzUyOTc0NGU3YWM1MTBkNGUuLmYwOWM2NDVlYzFkODZmODBmNmEwNWRhNWE1YzJhNDQ0
NGY2ZDU0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMTggIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gUGFzdGUgaXMg
bWlzc2luZyBmcm9tIGNhbGxvdXQgYmFyIHdoZW4gcGFzdGVib2FyZCBvbmx5IGNvbnRhaW5zIGN1
c3RvbSBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODQyNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5MjU2NzA4PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBDdXJyZW50bHksIHRoZSAicGFzdGU6
IiBzZWxlY3RvciBhY3Rpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBkdXJpbmcgZWRpdGluZyBpZiB0
aGUgcGFzdGVib2FyZCBvbmx5IGNvbnRhaW5zCisgICAgICAgIGN1c3RvbSBwYXN0ZWJvYXJkIGRh
dGEuIFRoaXMgaXMgYmVjYXVzZSBsb2dpYyBpbiAtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFj
dGlvbkZvcldlYlZpZXc6d2l0aFNlbmRlcjpdIG9ubHkKKyAgICAgICAgY2hlY2tzIGFnYWluc3Qg
YSBsaXN0IG9mIHBhc3RlYm9hcmQgdHlwZXMgd2hpY2ggZG9lcyBub3QgaW5jbHVkZSB0aGUgdHlw
ZSBpZGVudGlmaWVyIGZvciBjdXN0b20gcGFzdGVib2FyZCBkYXRhLgorICAgICAgICBUbyBmaXgg
dGhpcywgd2UgYWxsb3cgcGFzdGluZyBvbmx5IGluIHRoZSBjYXNlIHdoZXJlIG5vbmUgb2YgdGhl
IG90aGVyIHR5cGUgaWRlbnRpZmllcnMgZXhpc3QgaW4gdGhlIHBhc3RlYm9hcmQsCisgICAgICAg
IGFzIGxvbmcgYXMgdGhlIGN1c3RvbSBwYXN0ZWJvYXJkIGRhdGEgdHlwZSBpZGVudGlmaWVyIGlz
IHByZXNlbnQsIGFuZCB0aGUgY3VzdG9tIHBhc3RlYm9hcmQgZGF0YSdzIG9yaWdpbgorICAgICAg
ICBtYXRjaGVzIHRoZSBvcmlnaW4gb2YgdGhlIGZvY3VzZWQgZnJhbWUncyBkb2N1bWVudC4KKwor
ICAgICAgICBUZXN0OiBQYXN0ZU1peGVkQ29udGVudC5Db3B5QW5kUGFzdGVXaXRoQ3VzdG9tUGFz
dGVib2FyZERhdGFPbmx5CisKKyAgICAgICAgKiBTaGFyZWQvRWRpdG9yU3RhdGUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yU3RhdGU6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmg6
CisKKyAgICAgICAgQWRkIGEgb3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQgZmllbGQsIGFu
ZCBhZGQgc3VwcG9ydCBmb3IgZW5jb2RpbmcgaXQgd2hlbiBwcm9wYWdhdGluZyBFZGl0b3JTdGF0
ZSB2aWEgSVBDLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuUGVyZm9ybUFjdGlvbkZvcldl
YlZpZXc6d2l0aFNlbmRlcjpdKToKKworICAgICAgICBJZiBub25lIG9mIHRoZSBjb252ZW50aW9u
YWwgcGFzdGVib2FyZCB0eXBlIGlkZW50aWZpZXJzIGZvciByaWNoIG9yIHBsYWluIHRleHQgZWRp
dGluZyBhcmUgcHJlc2VudCwgY2hlY2sgdG8gc2VlCisgICAgICAgIGlmIHdlIGhhdmUgY3VzdG9t
IHBhc3RlYm9hcmQgZGF0YTsgaWYgc28sIG9ubHkgYWxsb3cgcGFzdGluZyBpZiB0aGUgY3VzdG9t
IHBhc3RlYm9hcmQgZGF0YSdzIG9yaWdpbiBtYXRjaGVzIHRoYXQKKyAgICAgICAgb2YgdGhlIGZv
Y3VzZWQgZnJhbWUncyBkb2N1bWVudCBvcmlnaW4uCisKKyAgICAgICAgQWRkaXRpb25hbGx5IHJl
ZmFjdG9yIGEgYml0IG9mIGxvZ2ljIGJ5IHB1bGxpbmcgb3V0IGBfcGFnZS0+ZWRpdG9yU3RhdGUo
KWAgaW50byBhIHNlcGFyYXRlIGxvY2FsIHZhcmlhYmxlLCB1c2VkCisgICAgICAgIHRocm91Z2hv
dXQgdGhlIHJlc3Qgb2YgdGhlIG1ldGhvZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWRpdG9yU3RhdGUgY29u
c3QpOgorCisgICAgICAgIFNlbmQgdGhlIGZvY3VzZWQgZnJhbWUncyBkb2N1bWVudCBvcmlnaW4g
dG8gdGhlIFVJIHByb2Nlc3MgdmlhIEVkaXRvclN0YXRlLgorCiAyMDE4LTA4LTE3ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFN0YXJ0IGJyaW5naW5n
IHVwIFVuaWZpZWQgU291cmNlcyBpbiBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDJl
M2FmYzIwYjA1OWE4YjZiOTY0Yjg5YjliNTk1ZjRiMDcxYzE4YzEuLmQ3OWE0NGU5NDgyZTc4NWNj
YzUwMDgyZjk5YWIxNGI1NjI3MDhiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMDA2LDcg
KzEwMDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNET01UcmVlVmVyc2lvbigpIHsgbV9kb21U
cmVlVmVyc2lvbiA9ICsrc19nbG9iYWxUcmVlVmVyc2lvbjsgfQogICAgIHVpbnQ2NF90IGRvbVRy
ZWVWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9kb21UcmVlVmVyc2lvbjsgfQogCi0gICAgU3Ry
aW5nIG9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIG9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAKICAgICAvLyBYUGF0aEV2
YWx1YXRvciBtZXRob2RzCiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8UmVmPFhQYXRo
RXhwcmVzc2lvbj4+IGNyZWF0ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBS
ZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQu
aAppbmRleCAxMTFmM2FmY2VhYTc4NTZiZDcxMjgzYTViOGU3YTA1MzQ4MzY0MDYzLi5kNTQzM2Rk
OTIwYWUwZWU1OTJiZDQ1ZmQ1NjBjZGQzZTM4YTM0NzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RydWN0IFBhc3RlYm9hcmRDdXN0b21E
YXRhIHsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFzdGVib2FyZEN1c3RvbURhdGEgZnJv
bVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImKTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb2NvYVR5cGUoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgY29uc3QgY2hhciogY29jb2FUeXBlKCk7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0VkaXRvclN0YXRlLmNwcAppbmRleCAwMmNhMzY3MzU4OTk3NzA0NTNhN2YxNGYzMjNl
ZWMxNjEwMWQ1MWFkLi4yZGZhNTE4NjZjNDNlMTQ0MjQ4NmJhMTRhMTViYTViOWQ4ZGI5ZWIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC01Myw2ICs1Myw4IEBAIHZvaWQg
RWRpdG9yU3RhdGU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBsYXN0TWFya2VkUmVjdDsKICAgICBlbmNvZGVyIDw8IG1hcmtlZFRleHQ7CiAjZW5k
aWYKKworICAgIGVuY29kZXIgPDwgb3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQ7CiB9CiAK
IGJvb2wgRWRpdG9yU3RhdGU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEVkaXRvclN0
YXRlJiByZXN1bHQpCkBAIC05OCw2ICsxMDAsOSBAQCBib29sIEVkaXRvclN0YXRlOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9yaWdp
bklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRv
clN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5oCmluZGV4IGEyMTcz
YTQ5YjQ4MmMxMmM5ODhhNmQxZjJhZTcyNWM3YTg0YTVmOTEuLjIwODVjMTU4Nzc2MDAyMGUwZWJh
ZTBiOTk2YTkxNGU4ODUwOGU3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Vk
aXRvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaApAQCAt
ODAsNiArODAsOCBAQCBzdHJ1Y3QgRWRpdG9yU3RhdGUgewogICAgIFN0cmluZyBtYXJrZWRUZXh0
OwogI2VuZGlmCiAKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQ7CisK
ICAgICBzdHJ1Y3QgUG9zdExheW91dERhdGEgewogICAgICAgICB1aW50MzJfdCB0eXBpbmdBdHRy
aWJ1dGVzIHsgQXR0cmlidXRlTm9uZSB9OwogI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0o
R1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggNDcwNzQxZmU3ZmEzYzZkZDg0Mzk5MjNhMTc5NTQ0NDVj
NmJlMTEyMi4uZTgyOWQ0NTAxMjVmMDdjODUyM2E3MzkzNjBhODAxNjU2NmExZjk2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCkBAIC0yMjc2LDM1ICsyMjc2LDQ5IEBAIC0gKEJPT0wpY2FuUGVyZm9ybUFjdGlv
bkZvcldlYlZpZXc6KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCiAgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IoX2Fycm93S2V5OikpCiAgICAgICAgIHJldHVybiBbc2VsZiBpc0Zp
cnN0UmVzcG9uZGVyXTsKICAgICAgICAgCisgICAgYXV0byBlZGl0b3JTdGF0ZSA9IF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9zaG93VGV4dFN0eWxl
T3B0aW9uczopKQotICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50
UmljaGx5RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSAm
JiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOworICAgICAgICByZXR1cm4gZWRpdG9yU3RhdGUu
aXNDb250ZW50UmljaGx5RWRpdGFibGUgJiYgZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSAm
JiAhX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwogICAgIGlmIChfc2hvd2luZ1RleHRTdHlsZU9w
dGlvbnMpCiAgICAgICAgIHJldHVybiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVCb2xkZmFj
ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlSXRhbGljczopIHx8IGFjdGlvbiA9PSBA
c2VsZWN0b3IodG9nZ2xlVW5kZXJsaW5lOikpOwogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KHRvZ2dsZUJvbGRmYWNlOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVJdGFsaWNzOikg
fHwgYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVVbmRlcmxpbmU6KSkKLSAgICAgICAgcmV0dXJu
IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlOworICAgICAgICBy
ZXR1cm4gZWRpdG9yU3RhdGUuaXNDb250ZW50UmljaGx5RWRpdGFibGU7CiAgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IoY3V0OikpCi0gICAgICAgIHJldHVybiAhX3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNJblBhc3N3b3JkRmllbGQgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRp
dGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKKyAgICAgICAg
cmV0dXJuICFlZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAmJiBlZGl0b3JTdGF0ZS5pc0Nv
bnRlbnRFZGl0YWJsZSAmJiBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOwogICAgIAogICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50RWRpdGFibGUpCisgICAgICAgIGlmIChlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUg
fHwgIWVkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIE5P
OwogICAgICAgICBVSVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdlbmVy
YWxQYXN0ZWJvYXJkXTsKICAgICAgICAgTlNBcnJheSAqdHlwZXMgPSBbc2VsZiBzdXBwb3J0ZWRQ
YXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uXTsKICAgICAgICAgTlNJbmRleFNldCAq
aW5kaWNlcyA9IFtOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4ZXNJblJhbmdlOk5TTWFrZVJh
bmdlKDAsIFtwYXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdKV07Ci0gICAgICAgIHJldHVybiBbcGFz
dGVib2FyZCBjb250YWluc1Bhc3RlYm9hcmRUeXBlczp0eXBlcyBpbkl0ZW1TZXQ6aW5kaWNlc107
CisgICAgICAgIGlmIChbcGFzdGVib2FyZCBjb250YWluc1Bhc3RlYm9hcmRUeXBlczp0eXBlcyBp
bkl0ZW1TZXQ6aW5kaWNlc10pCisgICAgICAgICAgICByZXR1cm4gWUVTOworCisgICAgICAgIGF1
dG8gZm9jdXNlZERvY3VtZW50T3JpZ2luID0gZWRpdG9yU3RhdGUub3JpZ2luSWRlbnRpZmllckZv
clBhc3RlYm9hcmQ7CisgICAgICAgIGlmIChmb2N1c2VkRG9jdW1lbnRPcmlnaW4uaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIE5POworCisgICAgICAgIE5TQXJyYXkgKmFsbEN1c3RvbVBh
c3RlYm9hcmREYXRhID0gW3Bhc3RlYm9hcmQgZGF0YUZvclBhc3RlYm9hcmRUeXBlOkAoUGFzdGVi
b2FyZEN1c3RvbURhdGE6OmNvY29hVHlwZSgpKSBpbkl0ZW1TZXQ6aW5kaWNlc107CisgICAgICAg
IGZvciAoTlNEYXRhICpkYXRhIGluIGFsbEN1c3RvbVBhc3RlYm9hcmREYXRhKSB7CisgICAgICAg
ICAgICBhdXRvIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOworICAgICAgICAg
ICAgaWYgKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGJ1ZmZlci5nZXQo
KSkub3JpZ2luID09IGZvY3VzZWREb2N1bWVudE9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1
cm4gWUVTOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKICAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3Rvcihjb3B5OikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKQorICAgICAgICBpZiAoZWRpdG9yU3RhdGUuaXNJblBh
c3N3b3JkRmllbGQpCiAgICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIHJldHVybiBfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgICAgICByZXR1cm4gZWRpdG9y
U3RhdGUuc2VsZWN0aW9uSXNSYW5nZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihfZGVmaW5lOikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5Q
YXNzd29yZEZpZWxkIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQor
ICAgICAgICBpZiAoZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgIWVkaXRvclN0YXRl
LnNlbGVjdGlvbklzUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKLSAgICAgICAgTlNV
SW50ZWdlciB0ZXh0TGVuZ3RoID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEo
KS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IGVk
aXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0ZWRUZXh0TGVuZ3RoOwogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNhbGxpbmcgVUlSZWZlcmVuY2VMaWJyYXJ5Vmlld0NvbnRy
b2xsZXIgdG8gY2hlY2sgaWYgdGhlIGxlbmd0aCBpcwogICAgICAgICAvLyBhY2NlcHRhYmxlLCBi
dXQgdGhlIGludGVyZmFjZSB0YWtlcyBhIHN0cmluZy4KICAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzE1MjU0NDA2PgpAQCAtMjMyMCw3ICsyMzM0LDcgQEAgLSAoQk9PTCljYW5QZXJmb3JtQWN0
aW9uRm9yV2ViVmlldzooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKICAgICB9CiAK
ICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfbG9va3VwOikpIHsKLSAgICAgICAgaWYgKF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKQorICAgICAgICBpZiAoZWRpdG9y
U3RhdGUuaXNJblBhc3N3b3JkRmllbGQpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKICNpZiAh
UExBVEZPUk0oSU9TTUFDKQpAQCAtMjMyOCwxOCArMjM0MiwxOCBAQCAtIChCT09MKWNhblBlcmZv
cm1BY3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogICAg
ICAgICAgICAgcmV0dXJuIE5POwogI2VuZGlmCiAKLSAgICAgICAgcmV0dXJuIF9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7CisgICAgICAgIHJldHVybiBlZGl0b3JTdGF0ZS5z
ZWxlY3Rpb25Jc1JhbmdlOwogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9z
aGFyZTopKSB7Ci0gICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRG
aWVsZCB8fCAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSkKKyAgICAgICAg
aWYgKGVkaXRvclN0YXRlLmlzSW5QYXNzd29yZEZpZWxkIHx8ICFlZGl0b3JTdGF0ZS5zZWxlY3Rp
b25Jc1JhbmdlKQogICAgICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgICAgIHJldHVybiBfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGVkVGV4dExlbmd0aCA+IDA7
CisgICAgICAgIHJldHVybiBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGVkVGV4
dExlbmd0aCA+IDA7CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2FkZFNo
b3J0Y3V0OikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29y
ZEZpZWxkIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQorICAgICAg
ICBpZiAoZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgIWVkaXRvclN0YXRlLnNlbGVj
dGlvbklzUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gTk87CiAKICAgICAgICAgTlNTdHJpbmcg
KnNlbGVjdGVkVGV4dCA9IFtzZWxmIHNlbGVjdGVkVGV4dF07CkBAIC0yMzU0LDcgKzIzNjgsNyBA
QCAtIChCT09MKWNhblBlcmZvcm1BY3Rpb25Gb3JXZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5k
ZXI6KGlkKXNlbmRlcgogICAgIH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9wcm9t
cHRGb3JSZXBsYWNlOikpIHsKLSAgICAgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxl
Y3Rpb25Jc1JhbmdlIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmlz
UmVwbGFjZUFsbG93ZWQgfHwgIVtbVUlLZXlib2FyZEltcGwgYWN0aXZlSW5zdGFuY2VdIGF1dG9j
b3JyZWN0U3BlbGxpbmdFbmFibGVkXSkKKyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5zZWxlY3Rp
b25Jc1JhbmdlIHx8ICFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmlzUmVwbGFjZUFsbG93
ZWQgfHwgIVtbVUlLZXlib2FyZEltcGwgYWN0aXZlSW5zdGFuY2VdIGF1dG9jb3JyZWN0U3BlbGxp
bmdFbmFibGVkXSkKICAgICAgICAgICAgIHJldHVybiBOTzsKICAgICAgICAgaWYgKFtbc2VsZiBz
ZWxlY3RlZFRleHRdIF9jb250YWluc0NKU2NyaXB0c09ubHldKQogICAgICAgICAgICAgcmV0dXJu
IE5POwpAQCAtMjM2MiwyNCArMjM3NiwyNCBAQCAtIChCT09MKWNhblBlcmZvcm1BY3Rpb25Gb3JX
ZWJWaWV3OihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRlcgogICAgIH0KIAogICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKF90cmFuc2xpdGVyYXRlQ2hpbmVzZTopKSB7Ci0gICAgICAg
IGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSB8fCAhX3BhZ2UtPmVk
aXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5pc1JlcGxhY2VBbGxvd2VkIHx8ICFbW1VJS2V5
Ym9hcmRJbXBsIGFjdGl2ZUluc3RhbmNlXSBhdXRvY29ycmVjdFNwZWxsaW5nRW5hYmxlZF0pCisg
ICAgICAgIGlmICghZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZSB8fCAhZWRpdG9yU3RhdGUu
cG9zdExheW91dERhdGEoKS5pc1JlcGxhY2VBbGxvd2VkIHx8ICFbW1VJS2V5Ym9hcmRJbXBsIGFj
dGl2ZUluc3RhbmNlXSBhdXRvY29ycmVjdFNwZWxsaW5nRW5hYmxlZF0pCiAgICAgICAgICAgICBy
ZXR1cm4gTk87CiAgICAgICAgIHJldHVybiBVSUtleWJvYXJkRW5hYmxlZElucHV0TW9kZXNBbGxv
d0NoaW5lc2VUcmFuc2xpdGVyYXRpb25Gb3JUZXh0KFtzZWxmIHNlbGVjdGVkVGV4dF0pOwogICAg
IH0KIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNlbGVjdDopKSB7CiAgICAgICAgIC8v
IERpc2FibGUgc2VsZWN0IGluIHBhc3N3b3JkIGZpZWxkcyBzbyB0aGF0IHlvdSBjYW4ndCBzZWUg
d29yZCBib3VuZGFyaWVzLgotICAgICAgICByZXR1cm4gIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlz
SW5QYXNzd29yZEZpZWxkICYmIFtzZWxmIGhhc0NvbnRlbnRdICYmICFfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5zZWxlY3Rpb25Jc05vbmUgJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklz
UmFuZ2U7CisgICAgICAgIHJldHVybiAhZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgJiYg
W3NlbGYgaGFzQ29udGVudF0gJiYgIWVkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZSAmJiAhZWRp
dG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZTsKICAgICB9CiAKICAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3RvcihzZWxlY3RBbGw6KSkgewotICAgICAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnNlbGVjdGlvbklzTm9uZSAmJiAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5n
ZSkKKyAgICAgICAgaWYgKCFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUgJiYgIWVkaXRvclN0
YXRlLnNlbGVjdGlvbklzUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwogICAgICAgICBy
ZXR1cm4gTk87CiAgICAgfQogCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVwbGFjZTop
KQotICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUg
JiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkOworICAgICAgICByZXR1
cm4gZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFibGUgJiYgIWVkaXRvclN0YXRlLmlzSW5QYXNz
d29yZEZpZWxkOwogCiAgICAgcmV0dXJuIFtzdXBlciBjYW5QZXJmb3JtQWN0aW9uOmFjdGlvbiB3
aXRoU2VuZGVyOnNlbmRlcl07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCmluZGV4IGRmZjg4ZGNjNGM0YmY2ZDEwNDM5MjJiZjUxZGRiMmFkMDI0ZmMz
OTAuLjgyZmZmNDk0OGQyOGM2YTZjOGIyNTU2OGJjNTg5NTA4Yzk2MDNhMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC05MjEsNiArOTIxLDkg
QEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoSW5jbHVkZVBvc3RMYXlvdXREYXRh
SGludCBzaG91bGRJbmNsdWRlUG9zdExheW8KICAgICByZXN1bHQuaGFzQ29tcG9zaXRpb24gPSBl
ZGl0b3IuaGFzQ29tcG9zaXRpb24oKTsKICAgICByZXN1bHQuc2hvdWxkSWdub3JlU2VsZWN0aW9u
Q2hhbmdlcyA9IGVkaXRvci5pZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKCk7CiAKKyAgICBpZiAoYXV0
byogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXN1bHQub3JpZ2luSWRl
bnRpZmllckZvclBhc3RlYm9hcmQgPSBkb2N1bWVudC0+b3JpZ2luSWRlbnRpZmllckZvclBhc3Rl
Ym9hcmQoKTsKKwogICAgIGJvb2wgY2FuSW5jbHVkZVBvc3RMYXlvdXREYXRhID0gZnJhbWUudmll
dygpICYmICFmcmFtZS52aWV3KCktPm5lZWRzTGF5b3V0KCk7CiAgICAgaWYgKHNob3VsZEluY2x1
ZGVQb3N0TGF5b3V0RGF0YSA9PSBJbmNsdWRlUG9zdExheW91dERhdGFIaW50OjpZZXMgJiYgY2Fu
SW5jbHVkZVBvc3RMYXlvdXREYXRhKSB7CiAgICAgICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0g
cmVzdWx0LnBvc3RMYXlvdXREYXRhKCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggODIzNzM3ZTAwNmE4Mzk5NmFmOWJjZmQ4OTlhMDU5OTQxMmNm
N2VjMy4uNzczYzlhYzk3NWZiMDNmMmFhMDI4ZjRlYjM3NjQyYzlkMTE5NzI1OCAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBA
CisyMDE4LTA4LTE4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisg
ICAgICAgIFtpT1NdIFBhc3RlIGlzIG1pc3NpbmcgZnJvbSBjYWxsb3V0IGJhciB3aGVuIHBhc3Rl
Ym9hcmQgb25seSBjb250YWlucyBjdXN0b20gZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
OTI1NjcwOD4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAg
QWRkIGEgbmV3IEFQSSB0ZXN0IHRvIHZlcmlmeSB0aGF0IG9uIGJvdGggaU9TIGFuZCBtYWNPUywg
Y29waWVkIGN1c3RvbSBwYXN0ZWJvYXJkIGRhdGEgY2FuIG9ubHkgYmUgcGFzdGVkIGluIGEKKyAg
ICAgICAgbWF0Y2hpbmcgb3JpZ2luLiBBZGRpdGlvbmFsbHkgdmVyaWZ5IHRoYXQgb24gaU9TLCB0
aGUgd2ViIHZpZXcgaXMgY2FwYWJsZSBvZiBwZXJmb3JtaW5nIHRoZSAicGFzdGU6IiBzZWxlY3Rv
ci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhl
ZENvbnRlbnQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKGlt
YWdlUGF0aCk6IERlbGV0ZWQuCisgICAgICAgICh3cml0ZVR5cGVzQW5kRGF0YVRvUGFzdGVib2Fy
ZCk6IERlbGV0ZWQuCisgICAgICAgIChzZXRVcFdlYlZpZXcpOiBEZWxldGVkLgorICAgICAgICAo
bWFya3VwU3RyaW5nKTogRGVsZXRlZC4KKworICAgICAgICBNYWtlIHRoaXMgdGVzdCBmaWxlIG5v
IGxvbmdlciBleGNsdXNpdmUgdG8gbWFjT1MuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RXS1dlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RX
S1dlYlZpZXcubW06CisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRI
VE1MU3RyaW5nOmJhc2VVUkw6XSk6CisKKyAgICAgICAgVHdlYWsgdGhpcyBoZWxwZXIgdG8gYWxz
byB0YWtlIGluIGEgYGJhc2VVUkxgLiBEZWZhdWx0cyB0byB1c2luZyB0aGUgVGVzdFdlYktpdEFQ
SSBidW5kbGUgcmVzb3VyY2UgVVJMLgorCisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOl0pOgorCiAyMDE4LTA4LTE3ICBKb25hdGhhbiBCZWRhcmQg
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYmFjayAtLXd0Zi1vbmx5IHRvIHJ1
bi1hcGktdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4IDlmNGFlNWYwNzFiM2MwYmUxMDQy
NGUwZjJjZjIyZmU4MTQ2MTVmYmQuLmI1ZmI0ODFiZTQ3MDVmYzJiNDQ0YzdhNjA4YTNkYWMwNDRl
NmRjZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UGFzdGVNaXhlZENvbnRlbnQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQpAQCAtMjUsMTUgKzI1LDIxIEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgV0tfQVBJX0VOQUJMRUQKKyNp
ZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9y
dCAiVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVm
ZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCisjaWYgUExBVEZPUk0oTUFDKQorCiBz
dGF0aWMgTlNTdHJpbmcgKmltYWdlUGF0aCgpCiB7CiAgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gcGF0aEZvclJlc291cmNlOkAiaWNvbiIgb2ZUeXBlOkAicG5nIiBpbkRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CkBAIC05Niw4ICsxMDIsNiBAQCBzdGF0aWMg
TlNTdHJpbmcgKm1hcmt1cFN0cmluZygpCiAgICAgcmV0dXJuIEAiPHNjcmlwdD5mb28oKTwvc2Ny
aXB0PjxzdHJvbmcgb25tb3VzZW92ZXI9J2phdmFzY3JpcHQ6dm9pZCgwKSc+SEVMTE8gV09STEQ8
L3N0cm9uZz4iOwogfQogCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KIFRFU1QoUGFzdGVN
aXhlZENvbnRlbnQsIEltYWdlRmlsZUFuZFBsYWluVGV4dCkKIHsKICAgICBhdXRvIHdlYlZpZXcg
PSBzZXRVcFdlYlZpZXcoKTsKQEAgLTI1MSw2ICsyNTUsMzkgQEAgVEVTVChQYXN0ZU1peGVkQ29u
dGVudCwgUGFzdGVVUkxXcml0dGVuVG9QYXN0ZWJvYXJkVXNpbmdXcml0ZU9iamVjdHMpCiAgICAg
RVhQRUNUX1dLX1NUUkVRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhJykudGV4dENvbnRlbnQiXSwgdXJsVG9Db3B5KTsKIH0K
IAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworVEVTVChQYXN0ZU1peGVkQ29udGVudCwgQ29w
eUFuZFBhc3RlV2l0aEN1c3RvbVBhc3RlYm9hcmREYXRhT25seSkKK3sKKyAgICBOU1N0cmluZyAq
bWFya3VwRm9yU291cmNlID0gQCI8Ym9keSBvbmNvcHk9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgp
OyBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoJ2ZvbycsICdiYXInKVwiPmhlbGxvPC9ib2R5
PiI7CisgICAgTlNTdHJpbmcgKm1hcmt1cEZvckRlc3RpbmF0aW9uID0gQCI8aW5wdXQgYXV0b2Zv
Y3VzIG9ucGFzdGU9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnZhbHVlID0gZXZlbnQu
Y2xpcGJvYXJkRGF0YS5nZXREYXRhKCdmb28nKVwiPiI7CisKKyAgICBhdXRvIHNjaGVtZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6c2NoZW1l
SGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJzYW1lIl07CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAImRp
ZmZlcmVudCJdOworCisgICAgYXV0byBzb3VyY2UgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbc291cmNlIHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzptYXJrdXBGb3JTb3VyY2UgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpA
InNhbWU6Ly8iXV07CisgICAgW3NvdXJjZSBzZWxlY3RBbGw6bmlsXTsKKyAgICBbc291cmNlIF9l
eGVjdXRlRWRpdENvbW1hbmQ6QCJjb3B5IiBhcmd1bWVudDpuaWwgY29tcGxldGlvbjpuaWxdOwor
CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFtkZXN0aW5hdGlvbiBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6bWFya3VwRm9yRGVzdGluYXRpb24gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAInNhbWU6Ly8iXV07CisgICAgW2Rlc3RpbmF0aW9uIHBhc3RlOm5pbF07CisgICAgRVhQRUNU
X1dLX1NUUkVRKCJiYXIiLCBbZGVzdGluYXRpb24gc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUiXSk7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIEVYUEVDVF9UUlVFKFtkZXN0aW5hdGlvbiBjYW5QZXJmb3JtQWN0aW9uOkBz
ZWxlY3RvcihwYXN0ZTopIHdpdGhTZW5kZXI6bmlsXSk7CisjZW5kaWYKKworICAgIFtkZXN0aW5h
dGlvbiBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6bWFya3VwRm9yRGVzdGluYXRpb24gYmFz
ZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImRpZmZlcmVudDovLyJdXTsKKyAgICBbZGVzdGlu
YXRpb24gcGFzdGU6bmlsXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiIsIFtkZXN0aW5hdGlvbiBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5w
dXQnKS52YWx1ZSJdKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgRVhQRUNUX0ZBTFNFKFtkZXN0
aW5hdGlvbiBjYW5QZXJmb3JtQWN0aW9uOkBzZWxlY3RvcihwYXN0ZTopIHdpdGhTZW5kZXI6bmls
XSk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCi0jZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAorI2VuZGlmIC8vIFdLX0FQSV9FTkFC
TEVECmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCmluZGV4IDA1MWZh
MjkyZGM3Y2IwNjNmMzIyYTk0NzllMTc2ZDg3NTI0ZTBjNjcuLjYxM2RmYWU4YWExZGZmNzY0Yzc3
M2NmYzUwMTRlNWMzZTE2MzgxNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvVGVzdFdLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdL
V2ViVmlldy5oCkBAIC01MSw2ICs1MSw3IEBACiAtICh2b2lkKXBlcmZvcm1BZnRlclJlY2Vpdmlu
Z01lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBhY3Rpb246KGRpc3BhdGNoX2Jsb2NrX3QpYWN0
aW9uOwogLSAodm9pZClsb2FkVGVzdFBhZ2VOYW1lZDooTlNTdHJpbmcgKilwYWdlTmFtZTsKIC0g
KHZvaWQpc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKWh0bWw7CistICh2
b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilodG1sIGJhc2VVUkw6
KE5TVVJMICopdXJsOwogLSAodm9pZClzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6KE5T
U3RyaW5nICopcGFnZU5hbWU7CiAtIChpZClvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OihO
U1N0cmluZyAqKXNjcmlwdDsKIC0gKE5TU3RyaW5nICopc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDooTlNTdHJpbmcgKilzY3JpcHQ7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RXS1dlYlZpZXcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RX
S1dlYlZpZXcubW0KaW5kZXggZDA5NmNmMDljNTVjZGYxYzYyNDQ2NjJkMzFhZGFiMTZiMjc4ZWM5
OC4uNWYyY2E1M2JkMDYyOWMxZGZmMmNjNDA4ZjFmNTJiMjliOWRjZWUxZSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQpAQCAtMjQ2LDEzICsyNDYsMTcgQEAg
LSAodm9pZClsb2FkVGVzdFBhZ2VOYW1lZDooTlNTdHJpbmcgKilwYWdlTmFtZQogICAgIFtzZWxm
IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogfQogCi0tICh2b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzooTlNTdHJpbmcgKilodG1sCistICh2b2lkKXN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzooTlNTdHJpbmcgKilodG1sIGJhc2VVUkw6KE5TVVJMICopdXJsCiB7Ci0gICAgTlNVUkwg
KnRlc3RSZXNvdXJjZVVSTCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVVSTF0gVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKLSAg
ICBbc2VsZiBsb2FkSFRNTFN0cmluZzpodG1sIGJhc2VVUkw6dGVzdFJlc291cmNlVVJMXTsKKyAg
ICBbc2VsZiBsb2FkSFRNTFN0cmluZzpodG1sIGJhc2VVUkw6dXJsXTsKICAgICBbc2VsZiBfdGVz
dF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiB9CiAKKy0gKHZvaWQpc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKWh0bWwKK3sKKyAgICBbc2VsZiBzeW5jaHJvbm91
c2x5TG9hZEhUTUxTdHJpbmc6aHRtbCBiYXNlVVJMOltbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1
bmRsZVVSTF0gVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07Cit9CisKIC0gKHZvaWQpc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOihO
U1N0cmluZyAqKXBhZ2VOYW1lCiB7CiAgICAgW3NlbGYgbG9hZFRlc3RQYWdlTmFtZWQ6cGFnZU5h
bWVdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347498</attachid>
            <date>2018-08-20 08:35:35 -0700</date>
            <delta_ts>2018-08-20 09:43:36 -0700</delta_ts>
            <desc>API test fix</desc>
            <filename>bug-184271-20180820083535.patch</filename>
            <type>text/plain</type>
            <size>1889</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MDY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWVmMjUyNGU0ODI4NDhjNTFjM2VhNWQyYTc3N2U2YjVj
MTYzODUwOS4uM2Q4MTViYjZkODM1YWZjNmViZTc0NGIzMTc4NTUzNzk1NDkyNzA4NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDE4LTA4LTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIFtpT1NdIFBhc3RlIGlzIG1pc3NpbmcgZnJvbSBjYWxsb3V0IGJhciB3aGVuIHBh
c3RlYm9hcmQgb25seSBjb250YWlucyBjdXN0b20gZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8zOTI1NjcwOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIEFQSSB0ZXN0IGlzIGZhaWxpbmcgd2hlbiBydW4gYWdhaW5zdCBvbGRlciBtYWNP
UyBidWlsZHMsIHdoZXJlIGN1c3RvbSBwYXN0ZWJvYXJkCisgICAgICAgIGRhdGEgaXMgbm90IGVu
YWJsZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxOC0wOC0yMCAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIEFkZCBXUEUgRGVidWcgY29uZmlndXJhdGlvbiB0byB0aGUgZmxha2luZXNz
IGRhc2hib2FyZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0KaW5kZXggYjVmYjQ4MWJlNDcwNWZjMmI0NDRj
N2E2MDhhM2RhYzA0NGU2ZGNlYS4uYzVlNTBlMmRhYjc4M2M0MDZjOTRhZWZlMGIwZDNiZjY5ZWNk
MmFmMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
YXN0ZU1peGVkQ29udGVudC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCkBAIC0yNjYsNiArMjY2LDcgQEAgVEVTVChQYXN0
ZU1peGVkQ29udGVudCwgQ29weUFuZFBhc3RlV2l0aEN1c3RvbVBhc3RlYm9hcmREYXRhT25seSkK
ICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOwogICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
c2NoZW1lSGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJzYW1lIl07CiAgICAgW2NvbmZpZ3Vy
YXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVyLmdldCgpIGZvclVSTFNjaGVt
ZTpAImRpZmZlcmVudCJdOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0
YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCB0
cnVlKTsKIAogICAgIGF1dG8gc291cmNlID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAsIDQwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3NvdXJjZSBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6bWFya3VwRm9yU291cmNlIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJzYW1l
Oi8vIl1dOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>