<?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>210425</bug_id>
          
          <creation_ts>2020-04-13 07:50:42 -0700</creation_ts>
          <short_desc>Add slack-aware WKR implementation</short_desc>
          <delta_ts>2020-07-09 23:56:52 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>211682</dependson>
    
    <dependson>211685</dependson>
    
    <dependson>211687</dependson>
    
    <dependson>211688</dependson>
    
    <dependson>211689</dependson>
    
    <dependson>211690</dependson>
    
    <dependson>211710</dependson>
    
    <dependson>214175</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>jbedard</cc>
    
    <cc>lingho</cc>
    
    <cc>mark.lam</cc>
    
    <cc>repstein</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640861</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 07:50:42 -0700</bug_when>
    <thetext>Currently, it is running in my home server :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640877</commentid>
    <comment_count>1</comment_count>
      <attachid>396281</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 08:17:04 -0700</bug_when>
    <thetext>Created attachment 396281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640885</commentid>
    <comment_count>2</comment_count>
      <attachid>396285</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 08:24:17 -0700</bug_when>
    <thetext>Created attachment 396285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640886</commentid>
    <comment_count>3</comment_count>
      <attachid>396286</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 08:27:20 -0700</bug_when>
    <thetext>Created attachment 396286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640889</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 08:37:04 -0700</bug_when>
    <thetext>The resulted message is something like this. https://webkit.slack.com/archives/CU5MVMDT6/p1586791477092600

We can extend it further, but for now, this patch is focusing on implementing the mechanism to post things :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640920</commentid>
    <comment_count>5</comment_count>
      <attachid>396286</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-13 09:39:50 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        Add slack-aware WKR implementation

What does WKR stand for?

&gt; Tools/WKR/WKR.mjs:31
&gt; +import axios from &quot;axios&quot;

Is this a slack package?

&gt; Tools/WKR/WKR.mjs:65
&gt; +const contributors = new Contributors(JSON.parse(fs.readFileSync(path.join(rootDirectory, &quot;..&quot;, &quot;Scripts/webkitpy/common/config/contributors.json&quot;))));

It almost feels like this should be pulled from the web on each commit

&gt; Tools/WKR/WKR.mjs:197
&gt; +        this.revision = await storage.getItem(&quot;revision&quot;);

How does this get bootstrapped? Or does it just start as undefined/null and handled with that branch above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640924</commentid>
    <comment_count>6</comment_count>
      <attachid>396286</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 09:43:23 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

&gt;&gt; Tools/ChangeLog:3
&gt;&gt; +        Add slack-aware WKR implementation
&gt; 
&gt; What does WKR stand for?

TBH, I&apos;m not sure too :)
Historically, bot posting changes to IRC, was named as WKR. So this is just following to that name. My best guess is WebKit Revisions =&gt; WKR

&gt;&gt; Tools/WKR/WKR.mjs:31
&gt;&gt; +import axios from &quot;axios&quot;
&gt; 
&gt; Is this a slack package?

This is a package to easily does HTTP requests. https://github.com/axios/axios

&gt;&gt; Tools/WKR/WKR.mjs:65
&gt;&gt; +const contributors = new Contributors(JSON.parse(fs.readFileSync(path.join(rootDirectory, &quot;..&quot;, &quot;Scripts/webkitpy/common/config/contributors.json&quot;))));
&gt; 
&gt; It almost feels like this should be pulled from the web on each commit

Sounds good.

&gt;&gt; Tools/WKR/WKR.mjs:197
&gt;&gt; +        this.revision = await storage.getItem(&quot;revision&quot;);
&gt; 
&gt; How does this get bootstrapped? Or does it just start as undefined/null and handled with that branch above?

Yes, it starts with undefined and well handled in &quot;action&quot; code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640929</commentid>
    <comment_count>7</comment_count>
      <attachid>396286</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-04-13 09:47:51 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

Nice. OK to land as, since it&apos;s already running on your server, and thus should be checked in. But I do have comments.

&gt; Tools/ChangeLog:10
&gt; +        this bot is introducing post-commit hook, but for now, this polling strategy just works.

We&apos;ll want a post-commit hook mode before deploying to webkit.org I think.

&gt; Tools/ChangeLog:14
&gt; +        * WKR/WKR.mjs: Added.

node.js is not a technology that we use anywhere in infrastructure (other than PLT code), so not sure if we want to add another thing to learn how to maintain. I&apos;d be very interested in opinions from people who would be keeping this up and running.

How does one test a new deployment or a new version, other than putting it in production and waiting for commits to show up on Slack?

&gt; Tools/WKR/ReadMe.md:1
&gt; +# WKR

We have almost zero text in Markdown format in WebKit, should we start using it everywhere?

./PerformanceTests/SixSpeed/ReadMe.md
./ReadMe.md
./Websites/perf.webkit.org/ReadMe.md

&gt; Tools/WKR/ReadMe.md:6
&gt; +## Steps to run

Not sure how useful this is. The real deployment needs an Ansible playbook, not manual steps.

&gt; Tools/WKR/ReadMe.md:14
&gt; +The lastest posted revision data is stored in `data/` directory. You can clean up state if you remove files in `data/`.

This means that the service will depend on frequent backups for recovery, as otherwise it will re-announce everything since last backup.

What happens when the service is brought up from scratch without a data directory? Will it just start announcing new commits, and nothing from the past? It&apos;s worth documenting operational aspects like this one a bit more.

&gt; Tools/WKR/WKR.mjs:36
&gt; +const DEBUG = false;

How is this debugging mode used? Does one need to change the code, or is there a way to trigger it at runtime?

&gt; Tools/WKR/WKR.mjs:65
&gt; +const contributors = new Contributors(JSON.parse(fs.readFileSync(path.join(rootDirectory, &quot;..&quot;, &quot;Scripts/webkitpy/common/config/contributors.json&quot;))));

I don&apos;t see where the checkout is being updated. In fact, we probably shouldn&apos;t rely on a checkout, and should fetch the data from the repository or from Trac directly each time.

Can git do this?

svn cat https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json

&gt; Tools/WKR/WKR.mjs:126
&gt; +                // to-be-implemented.

Please make this comment more specific.

&gt; Tools/WKR/WKR.mjs:150
&gt; +        this.interval = 60 * 1000;
&gt; +        this.url = &quot;https://git.webkit.org/?p=WebKit-https.git;a=atom&quot;;

These look like beginning of file constants.

&gt; Tools/WKR/WKR.mjs:162
&gt; +        await sleep(Math.random() * 1000);

Why the random wait?

&gt; Tools/WKR/WKR.mjs:186
&gt; +            // Exponential back-off capped with 1 hour.

That&apos;s a huge cap. Why is it desirable to delay recovery by up to an hour?

&gt; Tools/WKR/package-lock.json:8
&gt; +      &quot;version&quot;: &quot;0.19.2&quot;,

How were all these hardcoded versions chosen? Should we be upgrading anything ever, and if so, what will the process be?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640932</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-04-13 09:50:47 -0700</bug_when>
    <thetext>&gt; TBH, I&apos;m not sure too :)
&gt; Historically, bot posting changes to IRC, was named as WKR. So this is just
&gt; following to that name. My best guess is WebKit Revisions =&gt; WKR

I also don&apos;t know. FWIW, it was named in https://trac.webkit.org/r143126 by Ryosuke.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641005</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-13 11:21:06 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #8)
&gt; &gt; TBH, I&apos;m not sure too :)
&gt; &gt; Historically, bot posting changes to IRC, was named as WKR. So this is just
&gt; &gt; following to that name. My best guess is WebKit Revisions =&gt; WKR
&gt; 
&gt; I also don&apos;t know. FWIW, it was named in https://trac.webkit.org/r143126 by
&gt; Ryosuke.

Maybe we can do everyone a favor and name it something which isn&apos;t an acronym</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641011</commentid>
    <comment_count>10</comment_count>
      <attachid>396286</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-13 11:32:53 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

&gt; Tools/WKR/ReadMe.md:9
&gt; +2. Put `.env` file, which includes `slackURL=&quot;&lt;Slack Endpoint URL&gt;&quot;`

can you say how to find this endpoint?

&gt;&gt; Tools/WKR/ReadMe.md:14
&gt;&gt; +The lastest posted revision data is stored in `data/` directory. You can clean up state if you remove files in `data/`.
&gt; 
&gt; This means that the service will depend on frequent backups for recovery, as otherwise it will re-announce everything since last backup.
&gt; 
&gt; What happens when the service is brought up from scratch without a data directory? Will it just start announcing new commits, and nothing from the past? It&apos;s worth documenting operational aspects like this one a bit more.

I believe it&apos;ll only announce new commits from my understanding of the code.

&gt; Tools/WKR/WKR.mjs:72
&gt; +            change = change.replace(regExp, &quot;&quot;);

what&apos;s the point of this assignment here? Isn&apos;t &quot;change&quot; a string?

&gt;&gt; Tools/WKR/WKR.mjs:150
&gt;&gt; +        this.url = &quot;https://git.webkit.org/?p=WebKit-https.git;a=atom&quot;;
&gt; 
&gt; These look like beginning of file constants.

nit: You could pick a more descriptive name here than &quot;url&quot;. Maybe &quot;commitEndpointURL&quot;? Or something that describes what the URL is for.

&gt; Tools/WKR/WKR.mjs:170
&gt; +            let response = await parser.parseURL(this.url);

This library named their function very badly :-)
(The url isn&apos;t being parsed...)

&gt;&gt; Tools/WKR/WKR.mjs:186
&gt;&gt; +            // Exponential back-off capped with 1 hour.
&gt; 
&gt; That&apos;s a huge cap. Why is it desirable to delay recovery by up to an hour?

I also don&apos;t really see the point of this. It&apos;d make more sense if this were a resource constrained server, but it&apos;s not.

&gt;&gt; Tools/WKR/package-lock.json:8
&gt;&gt; +      &quot;version&quot;: &quot;0.19.2&quot;,
&gt; 
&gt; How were all these hardcoded versions chosen? Should we be upgrading anything ever, and if so, what will the process be?

I believe npm has a way of generating this file, but I don&apos;t remember how.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641013</commentid>
    <comment_count>11</comment_count>
    <who name="lingho@apple.com">lingho</who>
    <bug_when>2020-04-13 11:37:38 -0700</bug_when>
    <thetext>To have this application considered for deployment on webkit.org, please open a Radar and assign to me.

The server needs to be Centos 7 based and verified to work under Centos 7, and packages need to be installed using Yum, not NPM.

Otherwise, a lot of reworks may need to be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641014</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-04-13 11:41:10 -0700</bug_when>
    <thetext>FWIW, it was named WKR because there was CIA before my not and I wanted to keep three letter name. I was initially running it at home so the name of it was never discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641039</commentid>
    <comment_count>13</comment_count>
      <attachid>396286</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 12:40:05 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

Thanks, will upload the revised version soon.

&gt;&gt; Tools/ChangeLog:10
&gt;&gt; +        this bot is introducing post-commit hook, but for now, this polling strategy just works.
&gt; 
&gt; We&apos;ll want a post-commit hook mode before deploying to webkit.org I think.

Yes, I can help when doing this. I think large part of this implementation can be reused (parsing etc.).

&gt;&gt; Tools/ChangeLog:14
&gt;&gt; +        * WKR/WKR.mjs: Added.
&gt; 
&gt; node.js is not a technology that we use anywhere in infrastructure (other than PLT code), so not sure if we want to add another thing to learn how to maintain. I&apos;d be very interested in opinions from people who would be keeping this up and running.
&gt; 
&gt; How does one test a new deployment or a new version, other than putting it in production and waiting for commits to show up on Slack?

Yeah, I&apos;ve just hacked up this one with node.js just because JSC team was expertised with JavaScript :)

&gt;&gt; Tools/WKR/ReadMe.md:1
&gt;&gt; +# WKR
&gt; 
&gt; We have almost zero text in Markdown format in WebKit, should we start using it everywhere?
&gt; 
&gt; ./PerformanceTests/SixSpeed/ReadMe.md
&gt; ./ReadMe.md
&gt; ./Websites/perf.webkit.org/ReadMe.md

We recently start using ReadMe.md as I showed in slack :)

&gt;&gt; Tools/WKR/ReadMe.md:6
&gt;&gt; +## Steps to run
&gt; 
&gt; Not sure how useful this is. The real deployment needs an Ansible playbook, not manual steps.

I think this is useful for trying this locally for enhancement.

&gt;&gt; Tools/WKR/ReadMe.md:9
&gt;&gt; +2. Put `.env` file, which includes `slackURL=&quot;&lt;Slack Endpoint URL&gt;&quot;`
&gt; 
&gt; can you say how to find this endpoint?

Yes, documented.

&gt;&gt;&gt; Tools/WKR/ReadMe.md:14
&gt;&gt;&gt; +The lastest posted revision data is stored in `data/` directory. You can clean up state if you remove files in `data/`.
&gt;&gt; 
&gt;&gt; This means that the service will depend on frequent backups for recovery, as otherwise it will re-announce everything since last backup.
&gt;&gt; 
&gt;&gt; What happens when the service is brought up from scratch without a data directory? Will it just start announcing new commits, and nothing from the past? It&apos;s worth documenting operational aspects like this one a bit more.
&gt; 
&gt; I believe it&apos;ll only announce new commits from my understanding of the code.

If it is brought up from the scratch, then what happens is that we skip everything and record the latest revision as ToT. And after this ToT, this bot starts reporting.

&gt;&gt; Tools/WKR/WKR.mjs:36
&gt;&gt; +const DEBUG = false;
&gt; 
&gt; How is this debugging mode used? Does one need to change the code, or is there a way to trigger it at runtime?

It is just added to suppress slack posting. If this is true, bot works without posting to slack.

&gt;&gt;&gt;&gt; Tools/WKR/WKR.mjs:65
&gt;&gt;&gt;&gt; +const contributors = new Contributors(JSON.parse(fs.readFileSync(path.join(rootDirectory, &quot;..&quot;, &quot;Scripts/webkitpy/common/config/contributors.json&quot;))));
&gt;&gt;&gt; 
&gt;&gt;&gt; It almost feels like this should be pulled from the web on each commit
&gt;&gt; 
&gt;&gt; Sounds good.
&gt; 
&gt; I don&apos;t see where the checkout is being updated. In fact, we probably shouldn&apos;t rely on a checkout, and should fetch the data from the repository or from Trac directly each time.
&gt; 
&gt; Can git do this?
&gt; 
&gt; svn cat https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json

Yeah, sounds fine. I&apos;m currently doing `await axios.get(&quot;https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json&quot;);`, as we are doing this in https://webkit.org/team/ page.

&gt;&gt; Tools/WKR/WKR.mjs:72
&gt;&gt; +            change = change.replace(regExp, &quot;&quot;);
&gt; 
&gt; what&apos;s the point of this assignment here? Isn&apos;t &quot;change&quot; a string?

Oops, right. I should return [change, matched[1]];

&gt;&gt;&gt; Tools/WKR/WKR.mjs:150
&gt;&gt;&gt; +        this.url = &quot;https://git.webkit.org/?p=WebKit-https.git;a=atom&quot;;
&gt;&gt; 
&gt;&gt; These look like beginning of file constants.
&gt; 
&gt; nit: You could pick a more descriptive name here than &quot;url&quot;. Maybe &quot;commitEndpointURL&quot;? Or something that describes what the URL is for.

Sounds nice, fixed.

&gt;&gt; Tools/WKR/WKR.mjs:162
&gt;&gt; +        await sleep(Math.random() * 1000);
&gt; 
&gt; Why the random wait?

To avoid DDoS to slack, I introduced some wait here.

&gt;&gt; Tools/WKR/WKR.mjs:170
&gt;&gt; +            let response = await parser.parseURL(this.url);
&gt; 
&gt; This library named their function very badly :-)
&gt; (The url isn&apos;t being parsed...)

Yeah, agree :)

&gt;&gt;&gt; Tools/WKR/WKR.mjs:186
&gt;&gt;&gt; +            // Exponential back-off capped with 1 hour.
&gt;&gt; 
&gt;&gt; That&apos;s a huge cap. Why is it desirable to delay recovery by up to an hour?
&gt; 
&gt; I also don&apos;t really see the point of this. It&apos;d make more sense if this were a resource constrained server, but it&apos;s not.

Maybe, some network failure could occur, then, we do exponential back-off here, 1min, 2min, 4min, 8min, ... and 1hour cap.

&gt;&gt;&gt; Tools/WKR/package-lock.json:8
&gt;&gt;&gt; +      &quot;version&quot;: &quot;0.19.2&quot;,
&gt;&gt; 
&gt;&gt; How were all these hardcoded versions chosen? Should we be upgrading anything ever, and if so, what will the process be?
&gt; 
&gt; I believe npm has a way of generating this file, but I don&apos;t remember how.

This file iis automatically generated by npm. Updating process of package is

1. Changing package.json&apos;s versions
2. Run `npm install`

This is following to the default procedure of node.js project.

So long as this package-lock.json is commited &amp; package.json is not changed, `npm install` will pick the same version packages.
And this package-lock.json is intented to be landed into source tree.

https://docs.npmjs.com/files/package-lock.json
&gt; This file is intended to be committed into source repositories</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641048</commentid>
    <comment_count>14</comment_count>
      <attachid>396286</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 12:51:07 -0700</bug_when>
    <thetext>Comment on attachment 396286
Patch

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

&gt;&gt;&gt;&gt; Tools/WKR/WKR.mjs:186
&gt;&gt;&gt;&gt; +            // Exponential back-off capped with 1 hour.
&gt;&gt;&gt; 
&gt;&gt;&gt; That&apos;s a huge cap. Why is it desirable to delay recovery by up to an hour?
&gt;&gt; 
&gt;&gt; I also don&apos;t really see the point of this. It&apos;d make more sense if this were a resource constrained server, but it&apos;s not.
&gt; 
&gt; Maybe, some network failure could occur, then, we do exponential back-off here, 1min, 2min, 4min, 8min, ... and 1hour cap.

One of the example is maintenance. Then during maintenance, we will just request once per 1hour, so after the maintenance finishes, it gets the result, and interval becomes normal 60s again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641076</commentid>
    <comment_count>15</comment_count>
      <attachid>396326</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 13:35:03 -0700</bug_when>
    <thetext>Created attachment 396326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641087</commentid>
    <comment_count>16</comment_count>
      <attachid>396328</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 13:47:41 -0700</bug_when>
    <thetext>Created attachment 396328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641089</commentid>
    <comment_count>17</comment_count>
      <attachid>396329</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 13:50:07 -0700</bug_when>
    <thetext>Created attachment 396329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641090</commentid>
    <comment_count>18</comment_count>
      <attachid>396329</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-13 13:51:32 -0700</bug_when>
    <thetext>Comment on attachment 396329
Patch

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

&gt; Tools/WKR/WKR.mjs:176
&gt; +            let parser = new RSS;
&gt; +            let response = await parser.parseURL(commitEndpointURL);
&gt; +            let commits = response.items.map((feedItem) =&gt; new Commit(feedItem, contributors));

We can parallel them, but I didn&apos;t do that, maybe, not worth doing since it is already so quick.

let [contributors, response] = await Promise.all([Contributors.create(), (new RSS).parseURL(commitEndpointURL)]);

for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641097</commentid>
    <comment_count>19</comment_count>
      <attachid>396329</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-04-13 14:09:00 -0700</bug_when>
    <thetext>Comment on attachment 396329
Patch

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

I&apos;m going to say r+ because this is already running in production, and the patch isn&apos;t introducing anything terrible like security problems. It does appear that substantial changes or even a complete rewrite will be necessary before moving to webkit.org infrastructure.

&gt; Tools/WKR/WKR.mjs:36
&gt; +const DEBUG = false;

You explained what this does, but my question was about how this is used. Would a comment like this be accurate: &quot;// Change to true before starting to avoid posting notifications to Slack.&quot;?

&gt; Tools/WKR/WKR.mjs:166
&gt; +        await sleep(Math.random() * 1000);

I don&apos;t understand how using random() here &quot;avoids DDoS to Slack&quot;.

&gt; Tools/WKR/WKR.mjs:191
&gt; +            // Exponential back-off capped with 1 hour.

You explained how &quot;exponential back-off&quot; behaves, but did not explain why a cap of 1 hour is desirable. I still think that it is undesirable to delay coming back up for up to an hour.

I think that this is addressing multiple scenarios:

1. git.webkit.org is not responding. It would be perfectly OK to keep making the request every minute until it comes back up.

2. slack.com is not responding. It might be a problem if the whole world was retrying every minute, to overwhelm Slack with all accumulated requests once it&apos;s back up. Still, an hour is excessive.

3. Someone lands a syntax error in contributors.json, so it fails to parse. It is desirable to keep checking frequently, no reason for exponential back-off. Maybe WKR should handle this gracefully, by reusing the previous version of contributors.json if trunk doesn&apos;t parse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642415</commentid>
    <comment_count>20</comment_count>
      <attachid>396329</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-16 13:14:29 -0700</bug_when>
    <thetext>Comment on attachment 396329
Patch

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

&gt;&gt; Tools/WKR/WKR.mjs:36
&gt;&gt; +const DEBUG = false;
&gt; 
&gt; You explained what this does, but my question was about how this is used. Would a comment like this be accurate: &quot;// Change to true before starting to avoid posting notifications to Slack.&quot;?

Yes, this is for debugging purpose boolean in the local development. Added the comment.

&gt;&gt; Tools/WKR/WKR.mjs:166
&gt;&gt; +        await sleep(Math.random() * 1000);
&gt; 
&gt; I don&apos;t understand how using random() here &quot;avoids DDoS to Slack&quot;.

I&apos;m mentioning to adding some wait to stop repeatedly posting messages without any wait. Changed to inserting 500ms wait.

&gt;&gt; Tools/WKR/WKR.mjs:191
&gt;&gt; +            // Exponential back-off capped with 1 hour.
&gt; 
&gt; You explained how &quot;exponential back-off&quot; behaves, but did not explain why a cap of 1 hour is desirable. I still think that it is undesirable to delay coming back up for up to an hour.
&gt; 
&gt; I think that this is addressing multiple scenarios:
&gt; 
&gt; 1. git.webkit.org is not responding. It would be perfectly OK to keep making the request every minute until it comes back up.
&gt; 
&gt; 2. slack.com is not responding. It might be a problem if the whole world was retrying every minute, to overwhelm Slack with all accumulated requests once it&apos;s back up. Still, an hour is excessive.
&gt; 
&gt; 3. Someone lands a syntax error in contributors.json, so it fails to parse. It is desirable to keep checking frequently, no reason for exponential back-off. Maybe WKR should handle this gracefully, by reusing the previous version of contributors.json if trunk doesn&apos;t parse.

I think it is OK to remove this exponential back-off if we are OK to repeatedly accessing to webkit.org &amp; slack.com, and maybe this is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642425</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-16 13:42:23 -0700</bug_when>
    <thetext>Committed r260220: &lt;https://trac.webkit.org/changeset/260220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642426</commentid>
    <comment_count>22</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-16 13:43:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/61901789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651036</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-09 21:11:13 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 211682</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651059</commentid>
    <comment_count>24</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-10 00:16:20 -0700</bug_when>
    <thetext>I was using this bug to test rollout feature of webkitbot. I&apos;ll try the last one, and if it worked well, I don&apos;t do further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651063</commentid>
    <comment_count>25</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-10 00:23:56 -0700</bug_when>
    <thetext>Tested. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651172</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-10 21:02:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 211710</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670377</commentid>
    <comment_count>27</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-07-09 23:51:57 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 214175</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396281</attachid>
            <date>2020-04-13 08:17:04 -0700</date>
            <delta_ts>2020-04-13 08:24:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413081703.patch</filename>
            <type>text/plain</type>
            <size>15044</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDAzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmMzYzMyYzJlYjNjMDc5NzEzY2IyZDYzZjVmYjFhM2Zj
ODRkOTdlOS4uYmZiZDI2N2JjZDNiODM0MDgxYjZkYjlhNDg4MjdjOWQ3ZGNlNTU1YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGtlZXA6IEFkZGVkLgorICAgICAgICAqIFdLUi9wYWNrYWdlLWxvY2suanNvbjogQWRkZWQuCisg
ICAgICAgICogV0tSL3BhY2thZ2UuanNvbjogQWRkZWQuCisKIDIwMjAtMDQtMTEgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBbV0sxXSBU
b3VjaCBCYXIgZmxhc2hlcyB3aGVuIHR5cGluZyBpbiBWaWV0bmFtZXNlIGluIE1haWwKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dLUi8uZ2l0aWdub3JlIGIvVG9vbHMvV0tSLy5naXRpZ25vcmUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGM1NGY2MDRmYzFiZWM3OGQzOTg5MDk1ZWNjMTdjYzMxZWNhMDYwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1dLUi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorZGF0YS8KKy5l
bnYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9SZWFkTWUubWQgYi9Ub29scy9XS1IvUmVhZE1lLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE0MzU0YTg0NWZiZGUzZjkwOGUzNTlkMmIyNjUzZTA3YzQxZmI2MGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvUmVhZE1lLm1kCkBAIC0wLDAgKzEsMTQgQEAKKyMg
V0tSCisKK05ldyBXS1IgYm90IGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQgU2xhY2sgI2NoYW5n
ZXMgY2hhbm5lbC4KK1RoaXMgYm90IGlzIGZldGNoaW5nIGdpdC53ZWJraXQub3JnIFJTUyBmZWVk
IHBlcmlvZGljYWxseSwgZXh0cmFjdGluZyBkYXRhIGZyb20gdGhhdCwgYW5kIHBvc3RpbmcgdGhl
bSB0byAjY2hhbmdlcyBjaGFubmVsIHRvIHJlcGxhY2UgSVJDJ3MgV0tSIGJvdCBwdXJwb3NlLgor
CisjIyBTdGVwcyB0byBydW4KKworMS4gUnVuIGBucG0gaW5zdGFsbGAgdG8gaW5zdGFsbCBsaWJy
YXJpZXMKKzIuIFB1dCBgLmVudmAgZmlsZSwgd2hpY2ggaW5jbHVkZXMgYHNsYWNrVVJMPSI8U2xh
Y2sgRW5kcG9pbnQgVVJMPiJgCiszLiBSdW4gYG5wbSBzdGFydGAKKworIyMgRGV0YWlscworCitU
aGUgbGFzdGVzdCBwb3N0ZWQgcmV2aXNpb24gZGF0YSBpcyBzdG9yZWQgaW4gYGRhdGEvYCBkaXJl
Y3RvcnkuIFlvdSBjYW4gY2xlYW4gdXAgc3RhdGUgaWYgeW91IHJlbW92ZSBmaWxlcyBpbiBgZGF0
YS9gLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1dLUi5tanMgYi9Ub29scy9XS1IvV0tSLm1qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xYTlmY2UxOTZkNjZjZjcxNTE4ZDM2ZTQ1YmViNjMxZTVlMDYwZTk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvV0tSL1dLUi5tanMKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbXBvcnQgZnMgZnJvbSAi
ZnMiCitpbXBvcnQgcGF0aCBmcm9tICJwYXRoIgoraW1wb3J0IFJTUyBmcm9tICJyc3MtcGFyc2Vy
IgoraW1wb3J0IHJlcGxhY2VBbGwgZnJvbSAicmVwbGFjZWFsbCIKK2ltcG9ydCBzdG9yYWdlIGZy
b20gIm5vZGUtcGVyc2lzdCIKK2ltcG9ydCBheGlvcyBmcm9tICJheGlvcyIKK2ltcG9ydCBkb3Rl
bnYgZnJvbSAiZG90ZW52IgorCitkb3RlbnYuY29uZmlnKCk7CisKK2NvbnN0IERFQlVHID0gZmFs
c2U7CisKK2NvbnN0IHJvb3REaXJlY3RvcnkgPSAgcGF0aC5kaXJuYW1lKG5ldyBVUkwoaW1wb3J0
Lm1ldGEudXJsKS5wYXRobmFtZSk7CisKK2FzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25k
cykKK3sKKyAgICBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeworICAgICAg
ICBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcyk7CisgICAgfSk7Cit9CisKK2NsYXNz
IENvbnRyaWJ1dG9ycyB7CisgICAgY29uc3RydWN0b3IoZGF0YSkKKyAgICB7CisgICAgICAgIHRo
aXMuZW1haWxzID0gbmV3IE1hcCgpOworICAgICAgICB0aGlzLmVudHJpZXMgPSBPYmplY3QudmFs
dWVzKGRhdGEpOworICAgICAgICBmb3IgKGxldCBbZnVsbE5hbWUsIGVudHJ5XSBvZiBPYmplY3Qu
ZW50cmllcyhkYXRhKSkgeworICAgICAgICAgICAgZW50cnkuZnVsbE5hbWUgPSBmdWxsTmFtZTsK
KyAgICAgICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVtYWlscykKKyAgICAgICAgICAg
ICAgICB0aGlzLmVtYWlscy5zZXQoZW1haWwsIGVudHJ5KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHF1ZXJ5V2l0aEVtYWlsKGVtYWlsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW1h
aWxzLmdldChlbWFpbCk7CisgICAgfQorfQorCitjb25zdCBjb250cmlidXRvcnMgPSBuZXcgQ29u
dHJpYnV0b3JzKEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihyb290RGlyZWN0
b3J5LCAiLi4iLCAiU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1dG9ycy5q
c29uIikpKSk7CisKK2NsYXNzIENvbW1pdCB7CisgICAgc3RhdGljIGZpbmRBbmRSZW1vdmUoY2hh
bmdlLCByZWdFeHApCisgICAgeworICAgICAgICBsZXQgbWF0Y2hlZCA9IGNoYW5nZS5tYXRjaChy
ZWdFeHApOworICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgY2hhbmdlID0gY2hh
bmdlLnJlcGxhY2UocmVnRXhwLCAiIik7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlZFsxXTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBzdGF0aWMgY2xl
YW5VcENoYW5nZShjaGFuZ2UpCisgICAgeworICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBjb250
cmlidXRvcnMuZW50cmllcykgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5uaWNrcykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBuYW1lV2l0aE5pY2tzID0gYCR7
ZW50cnkuZnVsbE5hbWV9IChAJHtlbnRyeS5uaWNrc1swXX0pYDsKKyAgICAgICAgICAgIGlmIChj
aGFuZ2UuaW5jbHVkZXMoZW50cnkuZnVsbE5hbWUpKSB7CisgICAgICAgICAgICAgICAgY2hhbmdl
ID0gcmVwbGFjZUFsbChlbnRyeS5mdWxsTmFtZSwgbmFtZVdpdGhOaWNrcywgY2hhbmdlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGxldCBlbWFpbCBvZiBlbnRyeS5lbWFpbHMpCisgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZSA9IHJlcGxhY2VBbGwoYDwke2VtYWlsfT5gLCAiIiwgY2hhbmdlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgZW1haWwgb2Yg
ZW50cnkuZW1haWxzKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSByZXBsYWNlQWxsKGAg
JHtlbWFpbH0gYCwgYCAke25hbWVXaXRoTmlja3N9IGAsIGNoYW5nZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZTsKKyAgICB9CisKKyAgICBjb25zdHJ1
Y3RvcihmZWVkSXRlbSkKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW5hbENoYW5nZSA9IGZlZWRJ
dGVtLmNvbnRlbnRTbmlwcGV0OworICAgICAgICBsZXQgY2hhbmdlID0gQ29tbWl0LmNsZWFuVXBD
aGFuZ2Uob3JpZ2luYWxDaGFuZ2UpOworICAgICAgICB0aGlzLnJldmlzaW9uID0gQ29tbWl0LmZp
bmRBbmRSZW1vdmUoY2hhbmdlLCAvXmdpdC1zdm4taWQ6IGh0dHBzOlwvXC9zdm5cLndlYmtpdFwu
b3JnXC9yZXBvc2l0b3J5XC93ZWJraXRcL3RydW5rQChcZCspIC9pbSk7CisgICAgICAgIHRoaXMu
cGF0Y2hCeSA9IENvbW1pdC5maW5kQW5kUmVtb3ZlKGNoYW5nZSwgL15QYXRjaFxzK2J5XHMrKC4r
Pylccytvbig/OlxzK1xkezR9LVxkezJ9LVxkezJ9KT9cbj8vaW0pOworICAgICAgICB0aGlzLnJl
dmVydCA9IENvbW1pdC5maW5kQW5kUmVtb3ZlKGNoYW5nZSwgLyg/OnJvbGxpbmcgb3V0fHJldmVy
dGluZykgKHI/XGQrKD86KD86LFxzKnwsP1xzKmFuZFxzKyk/cj9cZCspKilcLj9ccyovaW0pOwor
ICAgICAgICB0aGlzLmJ1Z3ppbGxhID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvaHR0
cHM/OlwvXC8oPzpidWdzXC53ZWJraXRcLm9yZ1wvc2hvd19idWdcLmNnaVw/aWQ9fHdlYmtpdFwu
b3JnXC9iXC8pKFxkKykvaW0pOworICAgICAgICB0aGlzLmVtYWlsID0gZmVlZEl0ZW0uYXV0aG9y
OworCisgICAgICAgIGxldCBsaW5lcyA9IG9yaWdpbmFsQ2hhbmdlLnNwbGl0KCdcbicpOworICAg
ICAgICB0aGlzLnRpdGxlID0gZmVlZEl0ZW0udGl0bGU7CisgICAgICAgIGlmIChsaW5lcy5sZW5n
dGgpCisgICAgICAgICAgICB0aGlzLnRpdGxlID0gbGluZXNbMF07CisKKyAgICAgICAgaWYgKHRo
aXMucGF0Y2hCeSkKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhpcy5wYXRjaEJ5OworICAg
ICAgICBpZiAoIXRoaXMuYXV0aG9yKSB7CisgICAgICAgICAgICB0aGlzLmF1dGhvciA9IHRoaXMu
ZW1haWw7CisgICAgICAgICAgICBpZiAodGhpcy5lbWFpbCkgeworICAgICAgICAgICAgICAgIGxl
dCBlbnRyeSA9IGNvbnRyaWJ1dG9ycy5xdWVyeVdpdGhFbWFpbCh0aGlzLmVtYWlsKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkubmlja3MgJiYgZW50cnkubmlja3NbMF0pCisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gYCR7ZW50cnkuZnVsbE5hbWV9IChAJHtl
bnRyeS5uaWNrc1swXX0pYDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5yZXZlcnQpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNoKC9e
XCI/KC4rPylcIj8gXChSZXF1ZXN0ZWRccytieVxzKyguKz8pXHMrb25ccysjd2Via2l0XClcLi9p
bSk7CisgICAgICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgICAgIGxldCByZWFz
b24gPSBtYXRjaGVkWzBdOworICAgICAgICAgICAgICAgIGxldCBhdXRob3IgPSBtYXRjaGVkWzFd
OworICAgICAgICAgICAgICAgIC8vIHRvLWJlLWltcGxlbWVudGVkLgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5yZXZpc2lvbikKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcihgQ2Fub250IGZpbmQgcmV2aXNpb25gKTsKKyAgICAgICAgdGhpcy5yZXZpc2lv
biA9IE51bWJlci5wYXJzZUludCh0aGlzLnJldmlzaW9uLCAxMCk7CisgICAgICAgIHRoaXMudXJs
ID0gYGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3Ike3RoaXMucmV2aXNpb259YDsKKyAgICB9CisK
KyAgICBtZXNzYWdlKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHRzID0gW107CisgICAgICAg
IHJlc3VsdHMucHVzaChgJHt0aGlzLnRpdGxlfWApOworICAgICAgICByZXN1bHRzLnB1c2goYCR7
dGhpcy51cmx9IGJ5ICR7dGhpcy5hdXRob3J9YCk7CisgICAgICAgIGlmICh0aGlzLmJ1Z3ppbGxh
KQorICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGBodHRwczovL3dlYmtpdC5vcmcvYi8ke3RoaXMu
YnVnemlsbGF9YCk7CisgICAgICAgIHJldHVybiByZXN1bHRzLmpvaW4oJ1xuJyk7CisgICAgfQor
fQorCitjbGFzcyBXS1IgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMu
aW50ZXJ2YWwgPSA2MCAqIDEwMDA7CisgICAgICAgIHRoaXMudXJsID0gImh0dHBzOi8vZ2l0Lndl
YmtpdC5vcmcvP3A9V2ViS2l0LWh0dHBzLmdpdDthPWF0b20iOworICAgICAgICB0aGlzLnJldmlz
aW9uID0gbnVsbDsKKyAgICB9CisKKyAgICBhc3luYyBwb3N0VG9TbGFjayhjb21taXQpCisgICAg
eworICAgICAgICBsZXQgZGF0YSA9IHsKKyAgICAgICAgICAgICJ0ZXh0IjogY29tbWl0Lm1lc3Nh
Z2UoKQorICAgICAgICB9OworICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgaWYg
KCFERUJVRykKKyAgICAgICAgICAgIGF3YWl0IGF4aW9zLnBvc3QocHJvY2Vzcy5lbnYuc2xhY2tV
UkwsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKKyAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5yYW5k
b20oKSAqIDEwMDApOworICAgIH0KKworICAgIGFzeW5jIGFjdGlvbihpbnRlcnZhbCkKKyAgICB7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtEYXRlLm5vdygpfTog
cG9sbCBkYXRhYCk7CisgICAgICAgICAgICBsZXQgcGFyc2VyID0gbmV3IFJTUzsKKyAgICAgICAg
ICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHBhcnNlci5wYXJzZVVSTCh0aGlzLnVybCk7CisgICAg
ICAgICAgICBsZXQgY29tbWl0cyA9IHJlc3BvbnNlLml0ZW1zLm1hcCgoZmVlZEl0ZW0pID0+IG5l
dyBDb21taXQoZmVlZEl0ZW0pKTsKKyAgICAgICAgICAgIGNvbW1pdHMuc29ydCgoYSwgYikgPT4g
YS5yZXZpc2lvbiAtIGIucmV2aXNpb24pOworICAgICAgICAgICAgaWYgKHRoaXMucmV2aXNpb24p
IHsKKyAgICAgICAgICAgICAgICBjb21taXRzID0gY29tbWl0cy5maWx0ZXIoKGNvbW1pdCkgPT4g
Y29tbWl0LnJldmlzaW9uID4gdGhpcy5yZXZpc2lvbik7CisgICAgICAgICAgICAgICAgZm9yIChs
ZXQgY29tbWl0IG9mIGNvbW1pdHMpCisgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9z
dFRvU2xhY2soY29tbWl0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IGxhdGVz
dENvbW1pdCA9IGNvbW1pdHNbY29tbWl0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGlmIChs
YXRlc3RDb21taXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJldmlzaW9uID0gbGF0ZXN0Q29t
bWl0LnJldmlzaW9uOworICAgICAgICAgICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0SXRlbSgicmV2
aXNpb24iLCB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAo
ZXJyb3IpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoU3RyaW5nKGVycm9yKSk7CisgICAg
ICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrLW9mZiBjYXBwZWQgd2l0aCAxIGhvdXIuCisgICAg
ICAgICAgICByZXR1cm4gTWF0aC5taW4oaW50ZXJ2YWwgKiAyLCAxMDAwICogNjAgKiA2MCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJ2YWw7IC8vIERlZmF1bHQgb25lLgor
ICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKQorICAgIHsKKyAgICAgICAgYXdhaXQgc3Rv
cmFnZS5pbml0KHsKKyAgICAgICAgICAgIGRpcjogJ2RhdGEnLAorICAgICAgICB9KTsKKyAgICAg
ICAgdGhpcy5yZXZpc2lvbiA9IGF3YWl0IHN0b3JhZ2UuZ2V0SXRlbSgicmV2aXNpb24iKTsKKyAg
ICAgICAgY29uc29sZS5sb2coYFByZXZpb3VzIFJldmlzaW9uOiAke3RoaXMucmV2aXNpb259YCk7
CisgICAgICAgIGNvbnNvbGUubG9nKGBFbmRwb2ludDogJHtwcm9jZXNzLmVudi5zbGFja1VSTH1g
KTsKKyAgICAgICAgY29uc29sZS5sb2coYFJvb3REaXJlY3Rvcnk6ICR7cm9vdERpcmVjdG9yeX1g
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXN5bmMgbWFpbigpCisgICAgeworICAgICAgICBsZXQg
Ym90ID0gbmV3IFdLUjsKKyAgICAgICAgYXdhaXQgYm90LmluaXRpYWxpemUoKTsKKyAgICAgICAg
bGV0IGludGVydmFsID0gYm90LmludGVydmFsOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgICAgICAgICAgaW50ZXJ2YWwgPSBhd2Fp
dCBib3QuYWN0aW9uKGludGVydmFsKTsKKyAgICAgICAgICAgIGF3YWl0IHNsZWVwKE1hdGgubWF4
KGludGVydmFsIC0gKERhdGUubm93KCkgLSBzdGFydCksIDApKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworV0tSLm1haW4oKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9kYXRhLy5naXRrZWVwIGIv
VG9vbHMvV0tSL2RhdGEvLmdpdGtlZXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQxZDY0MzRiOGIy
OWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5q
c29uIGIvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NzE5ZjJiMDJh
ZjAxNzM2NDU4YTNjN2Y5MDQzZmUyMWNlNDI3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9X
S1IvcGFja2FnZS1sb2NrLmpzb24KQEAgLTAsMCArMSwxMDEgQEAKK3sKKyAgIm5hbWUiOiAiV0tS
IiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAibG9ja2ZpbGVWZXJzaW9uIjogMSwKKyAgInJl
cXVpcmVzIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiYXhpb3MiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2F4aW9zLy0vYXhpb3MtMC4xOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTUxMi1mamdtNU12UkhMaHgrb3NFMnhvZWtZNzBBaEFSazNhNmhrTiszSW8xamMwMGp0
cXVHdnhZbEtsc0ZVaG1VRVQwVjV0ZTZDY1pJN2xjdjJZbTYxbWpIQT09IiwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImZvbGxvdy1yZWRpcmVjdHMiOiAiMS41LjEwIgorICAgICAgfQor
ICAgIH0sCisgICAgImRlYnVnIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4x
LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9YOFhxUDcvMWE5Y3FreFl3MnlY
c3MxNWYyNk5LV0JwRFhRZDAvdUsvS1BxZFFoeGJQYTk5NGhuempjRTJWcVFwRHNsZjU1NzIzY0tQ
VU9HU21NWTNnPT0iLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAibXMiOiAiMi4wLjAi
CisgICAgICB9CisgICAgfSwKKyAgICAiZG90ZW52IjogeworICAgICAgInZlcnNpb24iOiAiOC4y
LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVu
di8tL2RvdGVudi04LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOHNKNzhF
bHBiREpCSE5lQnpVYlVWTHNxS2RjY2FhL0JYRjF1UFR3M0dydlFUQmdyUXJ0T2JyMm1VckUzOHZ6
WWQ4Y0V2K20vSkJmRExpb1ljZlhvYXc9PSIKKyAgICB9LAorICAgICJlbnRpdGllcyI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0aWVzLTEuMS4yLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1mMkxaTVlsMUZ6dTdZU0JLZytSb1JPZWxwT2FOcmNHbUU5QVp1YmVE
ZnJDRWlhNDgzb1c0TUk0VnlGZDVWTkhJZ1EvN3FtMUkwd1VISzFlSm5uMnkydz09IgorICAgIH0s
CisgICAgImZvbGxvdy1yZWRpcmVjdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjUuMTAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvbGxvdy1yZWRp
cmVjdHMvLS9mb2xsb3ctcmVkaXJlY3RzLTEuNS4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGE1MTItMFY1bDRDaXp6dnF0NUQ0NGFUWGJGWnorRnR5WFYxdnJETjZxcmVseHRmWVFLVzBL
TzBXMlQvaGtFOHh2R2EvNTQwTGtabGthVWpPNGFpbFlURnRIVlE9PSIsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICI9My4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAi
bWluaW1pc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNSIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1pc3QvLS9taW5pbWlzdC0xLjIuNS50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRk05bk5VWXJSQkFFTFpRVDN4ZVpRN2Zt
TU9CZzZuV05tSktUY2dzSmVhTHN0UC9VT0RWcEdzcjVPaFhoaFhnNmYrcXRKOHVpWitQVXhrRFdj
Z0lYTHc9PSIKKyAgICB9LAorICAgICJta2RpcnAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUu
NSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJw
Ly0vbWtkaXJwLTAuNS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVT
ZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09GUHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdp
djlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
Im1pbmltaXN0IjogIl4xLjIuNSIKKyAgICAgIH0KKyAgICB9LAorICAgICJtcyI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
VmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIKKyAgICB9LAorICAgICJub2RlLXBlcnNpc3Qi
OiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1wZXJzaXN0Ly0vbm9kZS1wZXJzaXN0LTMuMC41LnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16Sm1CQTU4a0k5UUF4WExNYzROTHN3Z3pY
VklxS2ZzZlF0aXlTTUY2ZUVRM2tWdm9NM1lIemNQMC8vTDl1MzBGcXgzY1llMUZML2ErZnlCM1Z3
Ty9vUT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEi
CisgICAgICB9CisgICAgfSwKKyAgICAicmVwbGFjZWFsbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjAuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9y
ZXBsYWNlYWxsLy0vcmVwbGFjZWFsbC0wLjEuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLWdkZ2F4NjYzTFg5Y1NVS3Q4bWw2TWlCb2pZND0iCisgICAgfSwKKyAgICAicnNzLXBhcnNl
ciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNy42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3MtcGFyc2VyLy0vcnNzLXBhcnNlci0zLjcuNi50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1dXaDMvcFBMQVBnV3lma0NDOWpCODNqU0Jl
blU2VlBNeW1mWGl5c2k4d0p4YU43S05rVzR2VTNKbThqUXhFeEFyaWJGdlhSRXkrUnRhTDNYUXVi
ZUE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJlbnRpdGllcyI6ICJeMS4xLjEi
LAorICAgICAgICAieG1sMmpzIjogIl4wLjQuMTkiCisgICAgICB9CisgICAgfSwKKyAgICAic2F4
IjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8tL3NheC0xLjIuNC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVqRm0wTjh1TTVHeEwzNlVnS2k5L2F0WncreDdZRm5R
OGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAxa1VibllnTG9wcVdOU1JoV3c9PSIKKyAgICB9LAor
ICAgICJ4bWwyanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMjMiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbDJqcy8tL3htbDJqcy0wLjQuMjMu
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlTUGlNak0wK3BMRGZ0SGdYWTRCeTB1
c3dJM1NQS0xEdy9pM1VYYm5POE0vcDI4enFleENVb1BtUUZyWUQrLzFCemhHSlNzMmkxRVJXS0pB
dGlMcnVnPT0iLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAic2F4IjogIj49MC42LjAi
LAorICAgICAgICAieG1sYnVpbGRlciI6ICJ+MTEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAg
InhtbGJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4wLjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbGJ1aWxkZXIvLS94bWxidWlsZGVy
LTExLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZkRsc0kva0ZFeDdnTHZi
ZWNjMC9vaExHNTBmdWdRcDhyeUh6TVR1Vzl2U2ExR0owWFlXS25oc1V4N29pZTNHOTgrcjU2YVRR
SVVCNGtodDQyUjNKdkE9PSIKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9w
YWNrYWdlLmpzb24gYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMDFhNTJh
YTUwZTgyZTFlYjUzNWMzMGQzOTFhMWE4ZmVjZTU1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9XS1IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwK
KyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAiZGVzY3JpcHRpb24iOiAiV0tSIGJvdCBpbXBsZW1l
bnRhdGlvbiIsCisgICJtYWluIjogIldLUi5qcyIsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAg
ImF4aW9zIjogIl4wLjE5LjIiLAorICAgICJkb3RlbnYiOiAiXjguMi4wIiwKKyAgICAibm9kZS1w
ZXJzaXN0IjogIl4zLjAuNSIsCisgICAgInJlcGxhY2VhbGwiOiAiXjAuMS42IiwKKyAgICAicnNz
LXBhcnNlciI6ICJeMy43LjYiCisgIH0sCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInNj
cmlwdHMiOiB7CisgICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwi
ICYmIGV4aXQgMSIsCisgICAgInN0YXJ0IjogIiROT0RFIC4vV0tSLm1qcyIKKyAgfSwKKyAgImF1
dGhvciI6ICJ3ZWJraXQub3JnIiwKKyAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIgorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396285</attachid>
            <date>2020-04-13 08:24:17 -0700</date>
            <delta_ts>2020-04-13 08:27:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413082416.patch</filename>
            <type>text/plain</type>
            <size>15128</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDAzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmMzYzMyYzJlYjNjMDc5NzEzY2IyZDYzZjVmYjFhM2Zj
ODRkOTdlOS4uMDJhMmI1MTVhZTVhOTZiMGE5YjRhZWUzMzhmMTgwYmI5NjlhNjBjYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGlnbm9yZTogQWRkZWQuCisgICAgICAgICogV0tSL3BhY2thZ2UtbG9jay5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBXS1IvcGFja2FnZS5qc29uOiBBZGRlZC4KKwogMjAyMC0wNC0xMSAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFtXSzFd
IFRvdWNoIEJhciBmbGFzaGVzIHdoZW4gdHlwaW5nIGluIFZpZXRuYW1lc2UgaW4gTWFpbApkaWZm
IC0tZ2l0IGEvVG9vbHMvV0tSLy5naXRpZ25vcmUgYi9Ub29scy9XS1IvLmdpdGlnbm9yZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wYzU0ZjYwNGZjMWJlYzc4ZDM5ODkwOTVlY2MxN2NjMzFlY2EwNjA5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvV0tSLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitkYXRhLwor
LmVudgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1JlYWRNZS5tZCBiL1Rvb2xzL1dLUi9SZWFkTWUu
bWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTQzNTRhODQ1ZmJkZTNmOTA4ZTM1OWQyYjI2NTNlMDdjNDFmYjYwYgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKQEAgLTAsMCArMSwxNCBAQAor
IyBXS1IKKworTmV3IFdLUiBib3QgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdCBTbGFjayAjY2hh
bmdlcyBjaGFubmVsLgorVGhpcyBib3QgaXMgZmV0Y2hpbmcgZ2l0LndlYmtpdC5vcmcgUlNTIGZl
ZWQgcGVyaW9kaWNhbGx5LCBleHRyYWN0aW5nIGRhdGEgZnJvbSB0aGF0LCBhbmQgcG9zdGluZyB0
aGVtIHRvICNjaGFuZ2VzIGNoYW5uZWwgdG8gcmVwbGFjZSBJUkMncyBXS1IgYm90IHB1cnBvc2Uu
CisKKyMjIFN0ZXBzIHRvIHJ1bgorCisxLiBSdW4gYG5wbSBpbnN0YWxsYCB0byBpbnN0YWxsIGxp
YnJhcmllcworMi4gUHV0IGAuZW52YCBmaWxlLCB3aGljaCBpbmNsdWRlcyBgc2xhY2tVUkw9IjxT
bGFjayBFbmRwb2ludCBVUkw+ImAKKzMuIFJ1biBgbnBtIHN0YXJ0YAorCisjIyBEZXRhaWxzCisK
K1RoZSBsYXN0ZXN0IHBvc3RlZCByZXZpc2lvbiBkYXRhIGlzIHN0b3JlZCBpbiBgZGF0YS9gIGRp
cmVjdG9yeS4gWW91IGNhbiBjbGVhbiB1cCBzdGF0ZSBpZiB5b3UgcmVtb3ZlIGZpbGVzIGluIGBk
YXRhL2AuCmRpZmYgLS1naXQgYS9Ub29scy9XS1IvV0tSLm1qcyBiL1Rvb2xzL1dLUi9XS1IubWpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFhOWZjZTE5NmQ2NmNmNzE1MThkMzZlNDViZWI2MzFlNWUwNjBlOTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvV0tSLm1qcwpAQCAtMCwwICsxLDIxNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCBmcyBmcm9t
ICJmcyIKK2ltcG9ydCBwYXRoIGZyb20gInBhdGgiCitpbXBvcnQgUlNTIGZyb20gInJzcy1wYXJz
ZXIiCitpbXBvcnQgcmVwbGFjZUFsbCBmcm9tICJyZXBsYWNlYWxsIgoraW1wb3J0IHN0b3JhZ2Ug
ZnJvbSAibm9kZS1wZXJzaXN0IgoraW1wb3J0IGF4aW9zIGZyb20gImF4aW9zIgoraW1wb3J0IGRv
dGVudiBmcm9tICJkb3RlbnYiCisKK2RvdGVudi5jb25maWcoKTsKKworY29uc3QgREVCVUcgPSBm
YWxzZTsKKworY29uc3Qgcm9vdERpcmVjdG9yeSA9ICBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBv
cnQubWV0YS51cmwpLnBhdGhuYW1lKTsKKworYXN5bmMgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNv
bmRzKQoreworICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CisgICAg
ICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTsKKyAgICB9KTsKK30KKworY2xh
c3MgQ29udHJpYnV0b3JzIHsKKyAgICBjb25zdHJ1Y3RvcihkYXRhKQorICAgIHsKKyAgICAgICAg
dGhpcy5lbWFpbHMgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuZW50cmllcyA9IE9iamVjdC52
YWx1ZXMoZGF0YSk7CisgICAgICAgIGZvciAobGV0IFtmdWxsTmFtZSwgZW50cnldIG9mIE9iamVj
dC5lbnRyaWVzKGRhdGEpKSB7CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGZ1bGxOYW1l
OworICAgICAgICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAg
ICAgICAgIHRoaXMuZW1haWxzLnNldChlbWFpbCwgZW50cnkpOworICAgICAgICB9CisgICAgfQor
CisgICAgcXVlcnlXaXRoRW1haWwoZW1haWwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5l
bWFpbHMuZ2V0KGVtYWlsKTsKKyAgICB9Cit9CisKK2NvbnN0IGNvbnRyaWJ1dG9ycyA9IG5ldyBD
b250cmlidXRvcnMoSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHJvb3REaXJl
Y3RvcnksICIuLiIsICJTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29udHJpYnV0b3Jz
Lmpzb24iKSkpKTsKKworY2xhc3MgQ29tbWl0IHsKKyAgICBzdGF0aWMgZmluZEFuZFJlbW92ZShj
aGFuZ2UsIHJlZ0V4cCkKKyAgICB7CisgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNo
KHJlZ0V4cCk7CisgICAgICAgIGlmIChtYXRjaGVkKSB7CisgICAgICAgICAgICBjaGFuZ2UgPSBj
aGFuZ2UucmVwbGFjZShyZWdFeHAsICIiKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkWzFd
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBj
bGVhblVwQ2hhbmdlKGNoYW5nZSkKKyAgICB7CisgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGNv
bnRyaWJ1dG9ycy5lbnRyaWVzKSB7CisgICAgICAgICAgICBpZiAoIWVudHJ5Lm5pY2tzKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGV0IG5hbWVXaXRoTmlja3MgPSBg
JHtlbnRyeS5mdWxsTmFtZX0gKEAke2VudHJ5Lm5pY2tzWzBdfSlgOworICAgICAgICAgICAgaWYg
KGNoYW5nZS5pbmNsdWRlcyhlbnRyeS5mdWxsTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjaGFu
Z2UgPSByZXBsYWNlQWxsKGVudHJ5LmZ1bGxOYW1lLCBuYW1lV2l0aE5pY2tzLCBjaGFuZ2UpOwor
ICAgICAgICAgICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVtYWlscykKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlID0gcmVwbGFjZUFsbChgPCR7ZW1haWx9PmAsICIiLCBjaGFuZ2Up
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBlbWFpbCBv
ZiBlbnRyeS5lbWFpbHMpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHJlcGxhY2VBbGwo
YCAke2VtYWlsfSBgLCBgICR7bmFtZVdpdGhOaWNrc30gYCwgY2hhbmdlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlOworICAgIH0KKworICAgIGNvbnN0
cnVjdG9yKGZlZWRJdGVtKQorICAgIHsKKyAgICAgICAgbGV0IG9yaWdpbmFsQ2hhbmdlID0gZmVl
ZEl0ZW0uY29udGVudFNuaXBwZXQ7CisgICAgICAgIGxldCBjaGFuZ2UgPSBDb21taXQuY2xlYW5V
cENoYW5nZShvcmlnaW5hbENoYW5nZSk7CisgICAgICAgIHRoaXMucmV2aXNpb24gPSBDb21taXQu
ZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9eZ2l0LXN2bi1pZDogaHR0cHM6XC9cL3N2blwud2Via2l0
XC5vcmdcL3JlcG9zaXRvcnlcL3dlYmtpdFwvdHJ1bmtAKFxkKykgL2ltKTsKKyAgICAgICAgdGhp
cy5wYXRjaEJ5ID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvXlBhdGNoXHMrYnlccyso
Lis/KVxzK29uKD86XHMrXGR7NH0tXGR7Mn0tXGR7Mn0pP1xuPy9pbSk7CisgICAgICAgIHRoaXMu
cmV2ZXJ0ID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvKD86cm9sbGluZyBvdXR8cmV2
ZXJ0aW5nKSAocj9cZCsoPzooPzosXHMqfCw/XHMqYW5kXHMrKT9yP1xkKykqKVwuP1xzKi9pbSk7
CisgICAgICAgIHRoaXMuYnVnemlsbGEgPSBDb21taXQuZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9o
dHRwcz86XC9cLyg/OmJ1Z3NcLndlYmtpdFwub3JnXC9zaG93X2J1Z1wuY2dpXD9pZD18d2Via2l0
XC5vcmdcL2JcLykoXGQrKS9pbSk7CisgICAgICAgIHRoaXMuZW1haWwgPSBmZWVkSXRlbS5hdXRo
b3I7CisKKyAgICAgICAgbGV0IGxpbmVzID0gb3JpZ2luYWxDaGFuZ2Uuc3BsaXQoJ1xuJyk7Cisg
ICAgICAgIHRoaXMudGl0bGUgPSBmZWVkSXRlbS50aXRsZTsKKyAgICAgICAgaWYgKGxpbmVzLmxl
bmd0aCkKKyAgICAgICAgICAgIHRoaXMudGl0bGUgPSBsaW5lc1swXTsKKworICAgICAgICBpZiAo
dGhpcy5wYXRjaEJ5KQorICAgICAgICAgICAgdGhpcy5hdXRob3IgPSB0aGlzLnBhdGNoQnk7Cisg
ICAgICAgIGlmICghdGhpcy5hdXRob3IpIHsKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhp
cy5lbWFpbDsKKyAgICAgICAgICAgIGlmICh0aGlzLmVtYWlsKSB7CisgICAgICAgICAgICAgICAg
bGV0IGVudHJ5ID0gY29udHJpYnV0b3JzLnF1ZXJ5V2l0aEVtYWlsKHRoaXMuZW1haWwpOworICAg
ICAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5uaWNrcyAmJiBlbnRyeS5uaWNrc1swXSkK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRob3IgPSBgJHtlbnRyeS5mdWxsTmFtZX0gKEAk
e2VudHJ5Lm5pY2tzWzBdfSlgOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICh0aGlzLnJldmVydCkgeworICAgICAgICAgICAgbGV0IG1hdGNoZWQgPSBjaGFuZ2UubWF0Y2go
L15cIj8oLis/KVwiPyBcKFJlcXVlc3RlZFxzK2J5XHMrKC4rPylccytvblxzKyN3ZWJraXRcKVwu
L2ltKTsKKyAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7CisgICAgICAgICAgICAgICAgbGV0IHJl
YXNvbiA9IG1hdGNoZWRbMF07CisgICAgICAgICAgICAgICAgbGV0IGF1dGhvciA9IG1hdGNoZWRb
MV07CisgICAgICAgICAgICAgICAgLy8gdG8tYmUtaW1wbGVtZW50ZWQuCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLnJldmlzaW9uKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBDYW5vbnQgZmluZCByZXZpc2lvbmApOworICAgICAgICB0aGlzLnJldmlz
aW9uID0gTnVtYmVyLnBhcnNlSW50KHRoaXMucmV2aXNpb24sIDEwKTsKKyAgICAgICAgdGhpcy51
cmwgPSBgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvciR7dGhpcy5yZXZpc2lvbn1gOworICAgIH0K
KworICAgIG1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTsKKyAgICAg
ICAgcmVzdWx0cy5wdXNoKGAke3RoaXMudGl0bGV9YCk7CisgICAgICAgIHJlc3VsdHMucHVzaChg
JHt0aGlzLnVybH0gYnkgJHt0aGlzLmF1dGhvcn1gKTsKKyAgICAgICAgaWYgKHRoaXMuYnVnemls
bGEpCisgICAgICAgICAgICByZXN1bHRzLnB1c2goYGh0dHBzOi8vd2Via2l0Lm9yZy9iLyR7dGhp
cy5idWd6aWxsYX1gKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMuam9pbignXG4nKTsKKyAgICB9
Cit9CisKK2NsYXNzIFdLUiB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhp
cy5pbnRlcnZhbCA9IDYwICogMTAwMDsKKyAgICAgICAgdGhpcy51cmwgPSAiaHR0cHM6Ly9naXQu
d2Via2l0Lm9yZy8/cD1XZWJLaXQtaHR0cHMuZ2l0O2E9YXRvbSI7CisgICAgICAgIHRoaXMucmV2
aXNpb24gPSBudWxsOworICAgIH0KKworICAgIGFzeW5jIHBvc3RUb1NsYWNrKGNvbW1pdCkKKyAg
ICB7CisgICAgICAgIGxldCBkYXRhID0geworICAgICAgICAgICAgInRleHQiOiBjb21taXQubWVz
c2FnZSgpCisgICAgICAgIH07CisgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpOworICAgICAgICBp
ZiAoIURFQlVHKQorICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwcm9jZXNzLmVudi5zbGFj
a1VSTCwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOworICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnJh
bmRvbSgpICogMTAwMCk7CisgICAgfQorCisgICAgYXN5bmMgYWN0aW9uKGludGVydmFsKQorICAg
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke0RhdGUubm93KCl9
OiBwb2xsIGRhdGFgKTsKKyAgICAgICAgICAgIGxldCBwYXJzZXIgPSBuZXcgUlNTOworICAgICAg
ICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgcGFyc2VyLnBhcnNlVVJMKHRoaXMudXJsKTsKKyAg
ICAgICAgICAgIGxldCBjb21taXRzID0gcmVzcG9uc2UuaXRlbXMubWFwKChmZWVkSXRlbSkgPT4g
bmV3IENvbW1pdChmZWVkSXRlbSkpOworICAgICAgICAgICAgY29tbWl0cy5zb3J0KChhLCBiKSA9
PiBhLnJldmlzaW9uIC0gYi5yZXZpc2lvbik7CisgICAgICAgICAgICBpZiAodGhpcy5yZXZpc2lv
bikgeworICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzLmZpbHRlcigoY29tbWl0KSA9
PiBjb21taXQucmV2aXNpb24gPiB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGxldCBjb21taXQgb2YgY29tbWl0cykKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5w
b3N0VG9TbGFjayhjb21taXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQgbGF0
ZXN0Q29tbWl0ID0gY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYg
KGxhdGVzdENvbW1pdCkgeworICAgICAgICAgICAgICAgIHRoaXMucmV2aXNpb24gPSBsYXRlc3RD
b21taXQucmV2aXNpb247CisgICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKCJy
ZXZpc2lvbiIsIHRoaXMucmV2aXNpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNo
IChlcnJvcikgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcihTdHJpbmcoZXJyb3IpKTsKKyAg
ICAgICAgICAgIC8vIEV4cG9uZW50aWFsIGJhY2stb2ZmIGNhcHBlZCB3aXRoIDEgaG91ci4KKyAg
ICAgICAgICAgIHJldHVybiBNYXRoLm1pbihpbnRlcnZhbCAqIDIsIDEwMDAgKiA2MCAqIDYwKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnZhbDsgLy8gRGVmYXVsdCBvbmUu
CisgICAgfQorCisgICAgYXN5bmMgaW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgICBhd2FpdCBz
dG9yYWdlLmluaXQoeworICAgICAgICAgICAgZGlyOiAnZGF0YScsCisgICAgICAgIH0pOworICAg
ICAgICB0aGlzLnJldmlzaW9uID0gYXdhaXQgc3RvcmFnZS5nZXRJdGVtKCJyZXZpc2lvbiIpOwor
ICAgICAgICBjb25zb2xlLmxvZyhgUHJldmlvdXMgUmV2aXNpb246ICR7dGhpcy5yZXZpc2lvbn1g
KTsKKyAgICAgICAgY29uc29sZS5sb2coYEVuZHBvaW50OiAke3Byb2Nlc3MuZW52LnNsYWNrVVJM
fWApOworICAgICAgICBjb25zb2xlLmxvZyhgUm9vdERpcmVjdG9yeTogJHtyb290RGlyZWN0b3J5
fWApOworICAgIH0KKworICAgIHN0YXRpYyBhc3luYyBtYWluKCkKKyAgICB7CisgICAgICAgIGxl
dCBib3QgPSBuZXcgV0tSOworICAgICAgICBhd2FpdCBib3QuaW5pdGlhbGl6ZSgpOworICAgICAg
ICBsZXQgaW50ZXJ2YWwgPSBib3QuaW50ZXJ2YWw7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgICAgICAgICBpbnRlcnZhbCA9IGF3
YWl0IGJvdC5hY3Rpb24oaW50ZXJ2YWwpOworICAgICAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5t
YXgoaW50ZXJ2YWwgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSwgMCkpOworICAgICAgICB9CisgICAg
fQorfQorCitXS1IubWFpbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL2RhdGEvLmdpdGlnbm9y
ZSBiL1Rvb2xzL1dLUi9kYXRhLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZiN2VmMzJjODQ3OGE0
OGMzOTk0ZGNhZGM4NjgzN2Y0MzcxMTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9k
YXRhLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisqCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5qc29uIGIvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI1NzE5ZjJiMDJhZjAxNzM2NDU4YTNjN2Y5MDQzZmUyMWNlNDI3NzMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS1sb2NrLmpzb24KQEAgLTAsMCAr
MSwxMDEgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAi
bG9ja2ZpbGVWZXJzaW9uIjogMSwKKyAgInJlcXVpcmVzIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAiYXhpb3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F4aW9zLy0vYXhpb3MtMC4x
OS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mamdtNU12UkhMaHgrb3NFMnhv
ZWtZNzBBaEFSazNhNmhrTiszSW8xamMwMGp0cXVHdnhZbEtsc0ZVaG1VRVQwVjV0ZTZDY1pJN2xj
djJZbTYxbWpIQT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZvbGxvdy1yZWRp
cmVjdHMiOiAiMS41LjEwIgorICAgICAgfQorICAgIH0sCisgICAgImRlYnVnIjogeworICAgICAg
InZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLU9YOFhxUDcvMWE5Y3FreFl3MnlYc3MxNWYyNk5LV0JwRFhRZDAvdUsvS1BxZFFoeGJQ
YTk5NGhuempjRTJWcVFwRHNsZjU1NzIzY0tQVU9HU21NWTNnPT0iLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAibXMiOiAiMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZG90ZW52
IjogeworICAgICAgInZlcnNpb24iOiAiOC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVudi8tL2RvdGVudi04LjIuMC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGE1MTItOHNKNzhFbHBiREpCSE5lQnpVYlVWTHNxS2RjY2FhL0JYRjF1
UFR3M0dydlFUQmdyUXJ0T2JyMm1VckUzOHZ6WWQ4Y0V2K20vSkJmRExpb1ljZlhvYXc9PSIKKyAg
ICB9LAorICAgICJlbnRpdGllcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0
aWVzLTEuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMkxaTVlsMUZ6dTdZ
U0JLZytSb1JPZWxwT2FOcmNHbUU5QVp1YmVEZnJDRWlhNDgzb1c0TUk0VnlGZDVWTkhJZ1EvN3Ft
MUkwd1VISzFlSm5uMnkydz09IgorICAgIH0sCisgICAgImZvbGxvdy1yZWRpcmVjdHMiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIxLjUuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ZvbGxvdy1yZWRpcmVjdHMvLS9mb2xsb3ctcmVkaXJlY3RzLTEuNS4x
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFY1bDRDaXp6dnF0NUQ0NGFUWGJG
WnorRnR5WFYxdnJETjZxcmVseHRmWVFLVzBLTzBXMlQvaGtFOHh2R2EvNTQwTGtabGthVWpPNGFp
bFlURnRIVlE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICI9My4x
LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibWluaW1pc3QiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjIuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bWluaW1pc3QvLS9taW5pbWlzdC0xLjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItRk05bk5VWXJSQkFFTFpRVDN4ZVpRN2ZtTU9CZzZuV05tSktUY2dzSmVhTHN0UC9VT0RWcEdz
cjVPaFhoaFhnNmYrcXRKOHVpWitQVXhrRFdjZ0lYTHc9PSIKKyAgICB9LAorICAgICJta2RpcnAi
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS41LnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09G
UHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKKyAgICAgIH0K
KyAgICB9LAorICAgICJtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIK
KyAgICB9LAorICAgICJub2RlLXBlcnNpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNSIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1wZXJz
aXN0Ly0vbm9kZS1wZXJzaXN0LTMuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUx
Mi16Sm1CQTU4a0k5UUF4WExNYzROTHN3Z3pYVklxS2ZzZlF0aXlTTUY2ZUVRM2tWdm9NM1lIemNQ
MC8vTDl1MzBGcXgzY1llMUZML2ErZnlCM1Z3Ty9vUT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEiCisgICAgICB9CisgICAgfSwKKyAgICAicmVwbGFj
ZWFsbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBsYWNlYWxsLy0vcmVwbGFjZWFsbC0wLjEuNi50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWdkZ2F4NjYzTFg5Y1NVS3Q4bWw2TWlCb2pZ
ND0iCisgICAgfSwKKyAgICAicnNzLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNy42
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3MtcGFy
c2VyLy0vcnNzLXBhcnNlci0zLjcuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIt
d1dXaDMvcFBMQVBnV3lma0NDOWpCODNqU0JlblU2VlBNeW1mWGl5c2k4d0p4YU43S05rVzR2VTNK
bThqUXhFeEFyaWJGdlhSRXkrUnRhTDNYUXViZUE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJlbnRpdGllcyI6ICJeMS4xLjEiLAorICAgICAgICAieG1sMmpzIjogIl4wLjQuMTki
CisgICAgICB9CisgICAgfSwKKyAgICAic2F4IjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjQi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8tL3Nh
eC0xLjIuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVqRm0w
Tjh1TTVHeEwzNlVnS2k5L2F0WncreDdZRm5ROGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAxa1Vi
bllnTG9wcVdOU1JoV3c9PSIKKyAgICB9LAorICAgICJ4bWwyanMiOiB7CisgICAgICAidmVyc2lv
biI6ICIwLjQuMjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3htbDJqcy8tL3htbDJqcy0wLjQuMjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
NTEyLXlTUGlNak0wK3BMRGZ0SGdYWTRCeTB1c3dJM1NQS0xEdy9pM1VYYm5POE0vcDI4enFleENV
b1BtUUZyWUQrLzFCemhHSlNzMmkxRVJXS0pBdGlMcnVnPT0iLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAic2F4IjogIj49MC42LjAiLAorICAgICAgICAieG1sYnVpbGRlciI6ICJ+MTEu
MC4wIgorICAgICAgfQorICAgIH0sCisgICAgInhtbGJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lv
biI6ICIxMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3htbGJ1aWxkZXIvLS94bWxidWlsZGVyLTExLjAuMS50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGE1MTItZkRsc0kva0ZFeDdnTHZiZWNjMC9vaExHNTBmdWdRcDhyeUh6TVR1Vzl2U2Ex
R0owWFlXS25oc1V4N29pZTNHOTgrcjU2YVRRSVVCNGtodDQyUjNKdkE9PSIKKyAgICB9CisgIH0K
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24gYi9Ub29scy9XS1IvcGFja2Fn
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQzMDFhNTJhYTUwZTgyZTFlYjUzNWMzMGQzOTFhMWE4ZmVjZTU1
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEs
MjAgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAiZGVz
Y3JpcHRpb24iOiAiV0tSIGJvdCBpbXBsZW1lbnRhdGlvbiIsCisgICJtYWluIjogIldLUi5qcyIs
CisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImF4aW9zIjogIl4wLjE5LjIiLAorICAgICJkb3Rl
bnYiOiAiXjguMi4wIiwKKyAgICAibm9kZS1wZXJzaXN0IjogIl4zLjAuNSIsCisgICAgInJlcGxh
Y2VhbGwiOiAiXjAuMS42IiwKKyAgICAicnNzLXBhcnNlciI6ICJeMy43LjYiCisgIH0sCisgICJk
ZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInNjcmlwdHMiOiB7CisgICAgInRlc3QiOiAiZWNobyBc
IkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIsCisgICAgInN0YXJ0IjogIiRO
T0RFIC4vV0tSLm1qcyIKKyAgfSwKKyAgImF1dGhvciI6ICJ3ZWJraXQub3JnIiwKKyAgImxpY2Vu
c2UiOiAiQlNELTItQ2xhdXNlIgorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396286</attachid>
            <date>2020-04-13 08:27:20 -0700</date>
            <delta_ts>2020-04-13 13:35:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413082719.patch</filename>
            <type>text/plain</type>
            <size>15119</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDAzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmMzYzMyYzJlYjNjMDc5NzEzY2IyZDYzZjVmYjFhM2Zj
ODRkOTdlOS4uMDJhMmI1MTVhZTVhOTZiMGE5YjRhZWUzMzhmMTgwYmI5NjlhNjBjYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGlnbm9yZTogQWRkZWQuCisgICAgICAgICogV0tSL3BhY2thZ2UtbG9jay5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBXS1IvcGFja2FnZS5qc29uOiBBZGRlZC4KKwogMjAyMC0wNC0xMSAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFtXSzFd
IFRvdWNoIEJhciBmbGFzaGVzIHdoZW4gdHlwaW5nIGluIFZpZXRuYW1lc2UgaW4gTWFpbApkaWZm
IC0tZ2l0IGEvVG9vbHMvV0tSLy5naXRpZ25vcmUgYi9Ub29scy9XS1IvLmdpdGlnbm9yZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YzQ5YmQ3OGYxZDA4ZjJiYzA5ZmEwYmQ4MTkxZWQzOGI3ZGNlNWUzCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvV0tSLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorLmVudgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV0tSL1JlYWRNZS5tZCBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTQzNTRhODQ1ZmJkZTNmOTA4ZTM1OWQyYjI2NTNlMDdjNDFmYjYwYgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKQEAgLTAsMCArMSwxNCBAQAorIyBXS1IKKwor
TmV3IFdLUiBib3QgaW1wbGVtZW50YXRpb24gZm9yIFdlYktpdCBTbGFjayAjY2hhbmdlcyBjaGFu
bmVsLgorVGhpcyBib3QgaXMgZmV0Y2hpbmcgZ2l0LndlYmtpdC5vcmcgUlNTIGZlZWQgcGVyaW9k
aWNhbGx5LCBleHRyYWN0aW5nIGRhdGEgZnJvbSB0aGF0LCBhbmQgcG9zdGluZyB0aGVtIHRvICNj
aGFuZ2VzIGNoYW5uZWwgdG8gcmVwbGFjZSBJUkMncyBXS1IgYm90IHB1cnBvc2UuCisKKyMjIFN0
ZXBzIHRvIHJ1bgorCisxLiBSdW4gYG5wbSBpbnN0YWxsYCB0byBpbnN0YWxsIGxpYnJhcmllcwor
Mi4gUHV0IGAuZW52YCBmaWxlLCB3aGljaCBpbmNsdWRlcyBgc2xhY2tVUkw9IjxTbGFjayBFbmRw
b2ludCBVUkw+ImAKKzMuIFJ1biBgbnBtIHN0YXJ0YAorCisjIyBEZXRhaWxzCisKK1RoZSBsYXN0
ZXN0IHBvc3RlZCByZXZpc2lvbiBkYXRhIGlzIHN0b3JlZCBpbiBgZGF0YS9gIGRpcmVjdG9yeS4g
WW91IGNhbiBjbGVhbiB1cCBzdGF0ZSBpZiB5b3UgcmVtb3ZlIGZpbGVzIGluIGBkYXRhL2AuCmRp
ZmYgLS1naXQgYS9Ub29scy9XS1IvV0tSLm1qcyBiL1Rvb2xzL1dLUi9XS1IubWpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFhOWZjZTE5NmQ2NmNmNzE1MThkMzZlNDViZWI2MzFlNWUwNjBlOTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9XS1IvV0tSLm1qcwpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCBmcyBmcm9tICJmcyIKK2lt
cG9ydCBwYXRoIGZyb20gInBhdGgiCitpbXBvcnQgUlNTIGZyb20gInJzcy1wYXJzZXIiCitpbXBv
cnQgcmVwbGFjZUFsbCBmcm9tICJyZXBsYWNlYWxsIgoraW1wb3J0IHN0b3JhZ2UgZnJvbSAibm9k
ZS1wZXJzaXN0IgoraW1wb3J0IGF4aW9zIGZyb20gImF4aW9zIgoraW1wb3J0IGRvdGVudiBmcm9t
ICJkb3RlbnYiCisKK2RvdGVudi5jb25maWcoKTsKKworY29uc3QgREVCVUcgPSBmYWxzZTsKKwor
Y29uc3Qgcm9vdERpcmVjdG9yeSA9ICBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51
cmwpLnBhdGhuYW1lKTsKKworYXN5bmMgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNvbmRzKQorewor
ICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CisgICAgICAgIHNldFRp
bWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTsKKyAgICB9KTsKK30KKworY2xhc3MgQ29udHJp
YnV0b3JzIHsKKyAgICBjb25zdHJ1Y3RvcihkYXRhKQorICAgIHsKKyAgICAgICAgdGhpcy5lbWFp
bHMgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuZW50cmllcyA9IE9iamVjdC52YWx1ZXMoZGF0
YSk7CisgICAgICAgIGZvciAobGV0IFtmdWxsTmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVz
KGRhdGEpKSB7CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGZ1bGxOYW1lOworICAgICAg
ICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAgICAgIHRo
aXMuZW1haWxzLnNldChlbWFpbCwgZW50cnkpOworICAgICAgICB9CisgICAgfQorCisgICAgcXVl
cnlXaXRoRW1haWwoZW1haWwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbWFpbHMuZ2V0
KGVtYWlsKTsKKyAgICB9Cit9CisKK2NvbnN0IGNvbnRyaWJ1dG9ycyA9IG5ldyBDb250cmlidXRv
cnMoSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHJvb3REaXJlY3RvcnksICIu
LiIsICJTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29udHJpYnV0b3JzLmpzb24iKSkp
KTsKKworY2xhc3MgQ29tbWl0IHsKKyAgICBzdGF0aWMgZmluZEFuZFJlbW92ZShjaGFuZ2UsIHJl
Z0V4cCkKKyAgICB7CisgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNoKHJlZ0V4cCk7
CisgICAgICAgIGlmIChtYXRjaGVkKSB7CisgICAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UucmVw
bGFjZShyZWdFeHAsICIiKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkWzFdOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHN0YXRpYyBjbGVhblVwQ2hh
bmdlKGNoYW5nZSkKKyAgICB7CisgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGNvbnRyaWJ1dG9y
cy5lbnRyaWVzKSB7CisgICAgICAgICAgICBpZiAoIWVudHJ5Lm5pY2tzKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGV0IG5hbWVXaXRoTmlja3MgPSBgJHtlbnRyeS5m
dWxsTmFtZX0gKEAke2VudHJ5Lm5pY2tzWzBdfSlgOworICAgICAgICAgICAgaWYgKGNoYW5nZS5p
bmNsdWRlcyhlbnRyeS5mdWxsTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjaGFuZ2UgPSByZXBs
YWNlQWxsKGVudHJ5LmZ1bGxOYW1lLCBuYW1lV2l0aE5pY2tzLCBjaGFuZ2UpOworICAgICAgICAg
ICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVtYWlscykKKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlID0gcmVwbGFjZUFsbChgPCR7ZW1haWx9PmAsICIiLCBjaGFuZ2UpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBlbWFpbCBvZiBlbnRyeS5l
bWFpbHMpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHJlcGxhY2VBbGwoYCAke2VtYWls
fSBgLCBgICR7bmFtZVdpdGhOaWNrc30gYCwgY2hhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlOworICAgIH0KKworICAgIGNvbnN0cnVjdG9yKGZl
ZWRJdGVtKQorICAgIHsKKyAgICAgICAgbGV0IG9yaWdpbmFsQ2hhbmdlID0gZmVlZEl0ZW0uY29u
dGVudFNuaXBwZXQ7CisgICAgICAgIGxldCBjaGFuZ2UgPSBDb21taXQuY2xlYW5VcENoYW5nZShv
cmlnaW5hbENoYW5nZSk7CisgICAgICAgIHRoaXMucmV2aXNpb24gPSBDb21taXQuZmluZEFuZFJl
bW92ZShjaGFuZ2UsIC9eZ2l0LXN2bi1pZDogaHR0cHM6XC9cL3N2blwud2Via2l0XC5vcmdcL3Jl
cG9zaXRvcnlcL3dlYmtpdFwvdHJ1bmtAKFxkKykgL2ltKTsKKyAgICAgICAgdGhpcy5wYXRjaEJ5
ID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvXlBhdGNoXHMrYnlccysoLis/KVxzK29u
KD86XHMrXGR7NH0tXGR7Mn0tXGR7Mn0pP1xuPy9pbSk7CisgICAgICAgIHRoaXMucmV2ZXJ0ID0g
Q29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvKD86cm9sbGluZyBvdXR8cmV2ZXJ0aW5nKSAo
cj9cZCsoPzooPzosXHMqfCw/XHMqYW5kXHMrKT9yP1xkKykqKVwuP1xzKi9pbSk7CisgICAgICAg
IHRoaXMuYnVnemlsbGEgPSBDb21taXQuZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9odHRwcz86XC9c
Lyg/OmJ1Z3NcLndlYmtpdFwub3JnXC9zaG93X2J1Z1wuY2dpXD9pZD18d2Via2l0XC5vcmdcL2Jc
LykoXGQrKS9pbSk7CisgICAgICAgIHRoaXMuZW1haWwgPSBmZWVkSXRlbS5hdXRob3I7CisKKyAg
ICAgICAgbGV0IGxpbmVzID0gb3JpZ2luYWxDaGFuZ2Uuc3BsaXQoJ1xuJyk7CisgICAgICAgIHRo
aXMudGl0bGUgPSBmZWVkSXRlbS50aXRsZTsKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHRoaXMudGl0bGUgPSBsaW5lc1swXTsKKworICAgICAgICBpZiAodGhpcy5wYXRj
aEJ5KQorICAgICAgICAgICAgdGhpcy5hdXRob3IgPSB0aGlzLnBhdGNoQnk7CisgICAgICAgIGlm
ICghdGhpcy5hdXRob3IpIHsKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhpcy5lbWFpbDsK
KyAgICAgICAgICAgIGlmICh0aGlzLmVtYWlsKSB7CisgICAgICAgICAgICAgICAgbGV0IGVudHJ5
ID0gY29udHJpYnV0b3JzLnF1ZXJ5V2l0aEVtYWlsKHRoaXMuZW1haWwpOworICAgICAgICAgICAg
ICAgIGlmIChlbnRyeSAmJiBlbnRyeS5uaWNrcyAmJiBlbnRyeS5uaWNrc1swXSkKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5hdXRob3IgPSBgJHtlbnRyeS5mdWxsTmFtZX0gKEAke2VudHJ5Lm5p
Y2tzWzBdfSlgOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJl
dmVydCkgeworICAgICAgICAgICAgbGV0IG1hdGNoZWQgPSBjaGFuZ2UubWF0Y2goL15cIj8oLis/
KVwiPyBcKFJlcXVlc3RlZFxzK2J5XHMrKC4rPylccytvblxzKyN3ZWJraXRcKVwuL2ltKTsKKyAg
ICAgICAgICAgIGlmIChtYXRjaGVkKSB7CisgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9IG1h
dGNoZWRbMF07CisgICAgICAgICAgICAgICAgbGV0IGF1dGhvciA9IG1hdGNoZWRbMV07CisgICAg
ICAgICAgICAgICAgLy8gdG8tYmUtaW1wbGVtZW50ZWQuCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCF0aGlzLnJldmlzaW9uKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGBDYW5vbnQgZmluZCByZXZpc2lvbmApOworICAgICAgICB0aGlzLnJldmlzaW9uID0gTnVt
YmVyLnBhcnNlSW50KHRoaXMucmV2aXNpb24sIDEwKTsKKyAgICAgICAgdGhpcy51cmwgPSBgaHR0
cHM6Ly90cmFjLndlYmtpdC5vcmcvciR7dGhpcy5yZXZpc2lvbn1gOworICAgIH0KKworICAgIG1l
c3NhZ2UoKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTsKKyAgICAgICAgcmVzdWx0
cy5wdXNoKGAke3RoaXMudGl0bGV9YCk7CisgICAgICAgIHJlc3VsdHMucHVzaChgJHt0aGlzLnVy
bH0gYnkgJHt0aGlzLmF1dGhvcn1gKTsKKyAgICAgICAgaWYgKHRoaXMuYnVnemlsbGEpCisgICAg
ICAgICAgICByZXN1bHRzLnB1c2goYGh0dHBzOi8vd2Via2l0Lm9yZy9iLyR7dGhpcy5idWd6aWxs
YX1gKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMuam9pbignXG4nKTsKKyAgICB9Cit9CisKK2Ns
YXNzIFdLUiB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhpcy5pbnRlcnZh
bCA9IDYwICogMTAwMDsKKyAgICAgICAgdGhpcy51cmwgPSAiaHR0cHM6Ly9naXQud2Via2l0Lm9y
Zy8/cD1XZWJLaXQtaHR0cHMuZ2l0O2E9YXRvbSI7CisgICAgICAgIHRoaXMucmV2aXNpb24gPSBu
dWxsOworICAgIH0KKworICAgIGFzeW5jIHBvc3RUb1NsYWNrKGNvbW1pdCkKKyAgICB7CisgICAg
ICAgIGxldCBkYXRhID0geworICAgICAgICAgICAgInRleHQiOiBjb21taXQubWVzc2FnZSgpCisg
ICAgICAgIH07CisgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpOworICAgICAgICBpZiAoIURFQlVH
KQorICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwcm9jZXNzLmVudi5zbGFja1VSTCwgSlNP
Ti5zdHJpbmdpZnkoZGF0YSkpOworICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnJhbmRvbSgpICog
MTAwMCk7CisgICAgfQorCisgICAgYXN5bmMgYWN0aW9uKGludGVydmFsKQorICAgIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke0RhdGUubm93KCl9OiBwb2xsIGRh
dGFgKTsKKyAgICAgICAgICAgIGxldCBwYXJzZXIgPSBuZXcgUlNTOworICAgICAgICAgICAgbGV0
IHJlc3BvbnNlID0gYXdhaXQgcGFyc2VyLnBhcnNlVVJMKHRoaXMudXJsKTsKKyAgICAgICAgICAg
IGxldCBjb21taXRzID0gcmVzcG9uc2UuaXRlbXMubWFwKChmZWVkSXRlbSkgPT4gbmV3IENvbW1p
dChmZWVkSXRlbSkpOworICAgICAgICAgICAgY29tbWl0cy5zb3J0KChhLCBiKSA9PiBhLnJldmlz
aW9uIC0gYi5yZXZpc2lvbik7CisgICAgICAgICAgICBpZiAodGhpcy5yZXZpc2lvbikgeworICAg
ICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzLmZpbHRlcigoY29tbWl0KSA9PiBjb21taXQu
cmV2aXNpb24gPiB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBjb21t
aXQgb2YgY29tbWl0cykKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb3N0VG9TbGFj
ayhjb21taXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQgbGF0ZXN0Q29tbWl0
ID0gY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYgKGxhdGVzdENv
bW1pdCkgeworICAgICAgICAgICAgICAgIHRoaXMucmV2aXNpb24gPSBsYXRlc3RDb21taXQucmV2
aXNpb247CisgICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKCJyZXZpc2lvbiIs
IHRoaXMucmV2aXNpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlcnJvcikg
eworICAgICAgICAgICAgY29uc29sZS5lcnJvcihTdHJpbmcoZXJyb3IpKTsKKyAgICAgICAgICAg
IC8vIEV4cG9uZW50aWFsIGJhY2stb2ZmIGNhcHBlZCB3aXRoIDEgaG91ci4KKyAgICAgICAgICAg
IHJldHVybiBNYXRoLm1pbihpbnRlcnZhbCAqIDIsIDEwMDAgKiA2MCAqIDYwKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnZhbDsgLy8gRGVmYXVsdCBvbmUuCisgICAgfQor
CisgICAgYXN5bmMgaW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgICBhd2FpdCBzdG9yYWdlLmlu
aXQoeworICAgICAgICAgICAgZGlyOiAnZGF0YScsCisgICAgICAgIH0pOworICAgICAgICB0aGlz
LnJldmlzaW9uID0gYXdhaXQgc3RvcmFnZS5nZXRJdGVtKCJyZXZpc2lvbiIpOworICAgICAgICBj
b25zb2xlLmxvZyhgUHJldmlvdXMgUmV2aXNpb246ICR7dGhpcy5yZXZpc2lvbn1gKTsKKyAgICAg
ICAgY29uc29sZS5sb2coYEVuZHBvaW50OiAke3Byb2Nlc3MuZW52LnNsYWNrVVJMfWApOworICAg
ICAgICBjb25zb2xlLmxvZyhgUm9vdERpcmVjdG9yeTogJHtyb290RGlyZWN0b3J5fWApOworICAg
IH0KKworICAgIHN0YXRpYyBhc3luYyBtYWluKCkKKyAgICB7CisgICAgICAgIGxldCBib3QgPSBu
ZXcgV0tSOworICAgICAgICBhd2FpdCBib3QuaW5pdGlhbGl6ZSgpOworICAgICAgICBsZXQgaW50
ZXJ2YWwgPSBib3QuaW50ZXJ2YWw7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGxl
dCBzdGFydCA9IERhdGUubm93KCk7CisgICAgICAgICAgICBpbnRlcnZhbCA9IGF3YWl0IGJvdC5h
Y3Rpb24oaW50ZXJ2YWwpOworICAgICAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5tYXgoaW50ZXJ2
YWwgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSwgMCkpOworICAgICAgICB9CisgICAgfQorfQorCitX
S1IubWFpbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL2RhdGEvLmdpdGlnbm9yZSBiL1Rvb2xz
L1dLUi9kYXRhLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZiN2VmMzJjODQ3OGE0OGMzOTk0ZGNh
ZGM4NjgzN2Y0MzcxMTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9kYXRhLy5naXRp
Z25vcmUKQEAgLTAsMCArMSwyIEBACisqCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
V0tSL3BhY2thZ2UtbG9jay5qc29uIGIvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI1NzE5ZjJiMDJhZjAxNzM2NDU4YTNjN2Y5MDQzZmUyMWNlNDI3NzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS1sb2NrLmpzb24KQEAgLTAsMCArMSwxMDEgQEAK
K3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAibG9ja2ZpbGVW
ZXJzaW9uIjogMSwKKyAgInJlcXVpcmVzIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAg
ICAiYXhpb3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F4aW9zLy0vYXhpb3MtMC4xOS4yLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mamdtNU12UkhMaHgrb3NFMnhvZWtZNzBBaEFS
azNhNmhrTiszSW8xamMwMGp0cXVHdnhZbEtsc0ZVaG1VRVQwVjV0ZTZDY1pJN2xjdjJZbTYxbWpI
QT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZvbGxvdy1yZWRpcmVjdHMiOiAi
MS41LjEwIgorICAgICAgfQorICAgIH0sCisgICAgImRlYnVnIjogeworICAgICAgInZlcnNpb24i
OiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2RlYnVnLy0vZGVidWctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9Y
OFhxUDcvMWE5Y3FreFl3MnlYc3MxNWYyNk5LV0JwRFhRZDAvdUsvS1BxZFFoeGJQYTk5NGhuempj
RTJWcVFwRHNsZjU1NzIzY0tQVU9HU21NWTNnPT0iLAorICAgICAgInJlcXVpcmVzIjogeworICAg
ICAgICAibXMiOiAiMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZG90ZW52IjogeworICAg
ICAgInZlcnNpb24iOiAiOC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2RvdGVudi8tL2RvdGVudi04LjIuMC50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGE1MTItOHNKNzhFbHBiREpCSE5lQnpVYlVWTHNxS2RjY2FhL0JYRjF1UFR3M0dydlFU
QmdyUXJ0T2JyMm1VckUzOHZ6WWQ4Y0V2K20vSkJmRExpb1ljZlhvYXc9PSIKKyAgICB9LAorICAg
ICJlbnRpdGllcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0aWVzLTEuMS4y
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMkxaTVlsMUZ6dTdZU0JLZytSb1JP
ZWxwT2FOcmNHbUU5QVp1YmVEZnJDRWlhNDgzb1c0TUk0VnlGZDVWTkhJZ1EvN3FtMUkwd1VISzFl
Sm5uMnkydz09IgorICAgIH0sCisgICAgImZvbGxvdy1yZWRpcmVjdHMiOiB7CisgICAgICAidmVy
c2lvbiI6ICIxLjUuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2ZvbGxvdy1yZWRpcmVjdHMvLS9mb2xsb3ctcmVkaXJlY3RzLTEuNS4xMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFY1bDRDaXp6dnF0NUQ0NGFUWGJGWnorRnR5WFYx
dnJETjZxcmVseHRmWVFLVzBLTzBXMlQvaGtFOHh2R2EvNTQwTGtabGthVWpPNGFpbFlURnRIVlE9
PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICI9My4xLjAiCisgICAg
ICB9CisgICAgfSwKKyAgICAibWluaW1pc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNSIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1pc3Qv
LS9taW5pbWlzdC0xLjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRk05bk5V
WXJSQkFFTFpRVDN4ZVpRN2ZtTU9CZzZuV05tSktUY2dzSmVhTHN0UC9VT0RWcEdzcjVPaFhoaFhn
NmYrcXRKOHVpWitQVXhrRFdjZ0lYTHc9PSIKKyAgICB9LAorICAgICJta2RpcnAiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09GUHdSYWh2ZWEw
Z01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKKyAgICAgIH0KKyAgICB9LAor
ICAgICJtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIKKyAgICB9LAor
ICAgICJub2RlLXBlcnNpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1wZXJzaXN0Ly0vbm9k
ZS1wZXJzaXN0LTMuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16Sm1CQTU4
a0k5UUF4WExNYzROTHN3Z3pYVklxS2ZzZlF0aXlTTUY2ZUVRM2tWdm9NM1lIemNQMC8vTDl1MzBG
cXgzY1llMUZML2ErZnlCM1Z3Ty9vUT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
Im1rZGlycCI6ICJ+MC41LjEiCisgICAgICB9CisgICAgfSwKKyAgICAicmVwbGFjZWFsbCI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9yZXBsYWNlYWxsLy0vcmVwbGFjZWFsbC0wLjEuNi50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLWdkZ2F4NjYzTFg5Y1NVS3Q4bWw2TWlCb2pZND0iCisgICAg
fSwKKyAgICAicnNzLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNy42IiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3MtcGFyc2VyLy0vcnNz
LXBhcnNlci0zLjcuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1dXaDMvcFBM
QVBnV3lma0NDOWpCODNqU0JlblU2VlBNeW1mWGl5c2k4d0p4YU43S05rVzR2VTNKbThqUXhFeEFy
aWJGdlhSRXkrUnRhTDNYUXViZUE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJl
bnRpdGllcyI6ICJeMS4xLjEiLAorICAgICAgICAieG1sMmpzIjogIl4wLjQuMTkiCisgICAgICB9
CisgICAgfSwKKyAgICAic2F4IjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8tL3NheC0xLjIuNC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVqRm0wTjh1TTVHeEwz
NlVnS2k5L2F0WncreDdZRm5ROGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAxa1VibllnTG9wcVdO
U1JoV3c9PSIKKyAgICB9LAorICAgICJ4bWwyanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQu
MjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbDJq
cy8tL3htbDJqcy0wLjQuMjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlTUGlN
ak0wK3BMRGZ0SGdYWTRCeTB1c3dJM1NQS0xEdy9pM1VYYm5POE0vcDI4enFleENVb1BtUUZyWUQr
LzFCemhHSlNzMmkxRVJXS0pBdGlMcnVnPT0iLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAic2F4IjogIj49MC42LjAiLAorICAgICAgICAieG1sYnVpbGRlciI6ICJ+MTEuMC4wIgorICAg
ICAgfQorICAgIH0sCisgICAgInhtbGJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4w
LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbGJ1
aWxkZXIvLS94bWxidWlsZGVyLTExLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItZkRsc0kva0ZFeDdnTHZiZWNjMC9vaExHNTBmdWdRcDhyeUh6TVR1Vzl2U2ExR0owWFlXS25o
c1V4N29pZTNHOTgrcjU2YVRRSVVCNGtodDQyUjNKdkE9PSIKKyAgICB9CisgIH0KK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24gYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQzMDFhNTJhYTUwZTgyZTFlYjUzNWMzMGQzOTFhMWE4ZmVjZTU1NTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sK
KyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAiZGVzY3JpcHRpb24i
OiAiV0tSIGJvdCBpbXBsZW1lbnRhdGlvbiIsCisgICJtYWluIjogIldLUi5qcyIsCisgICJkZXBl
bmRlbmNpZXMiOiB7CisgICAgImF4aW9zIjogIl4wLjE5LjIiLAorICAgICJkb3RlbnYiOiAiXjgu
Mi4wIiwKKyAgICAibm9kZS1wZXJzaXN0IjogIl4zLjAuNSIsCisgICAgInJlcGxhY2VhbGwiOiAi
XjAuMS42IiwKKyAgICAicnNzLXBhcnNlciI6ICJeMy43LjYiCisgIH0sCisgICJkZXZEZXBlbmRl
bmNpZXMiOiB7fSwKKyAgInNjcmlwdHMiOiB7CisgICAgInRlc3QiOiAiZWNobyBcIkVycm9yOiBu
byB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIsCisgICAgInN0YXJ0IjogIiROT0RFIC4vV0tS
Lm1qcyIKKyAgfSwKKyAgImF1dGhvciI6ICJ3ZWJraXQub3JnIiwKKyAgImxpY2Vuc2UiOiAiQlNE
LTItQ2xhdXNlIgorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396326</attachid>
            <date>2020-04-13 13:35:03 -0700</date>
            <delta_ts>2020-04-13 13:47:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413133502.patch</filename>
            <type>text/plain</type>
            <size>15397</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTA0NjQzY2VmYzhhY2RlZDI2OWY3ZjczNTYyNDFhNmMx
Y2U0YzcwNS4uZTYxYWM5MmY4NmZkYjE0MDE1YzVkMTNlNTc3NDM1ODU2MjJjOTQyNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGlnbm9yZTogQWRkZWQuCisgICAgICAgICogV0tSL3BhY2thZ2UtbG9jay5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBXS1IvcGFja2FnZS5qc29uOiBBZGRlZC4KKwogMjAyMC0wNC0xMyAgUGVyIEFy
bmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVu
dXNlZCBVVFR5cGUgc3dpenpsZXIgY29kZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSLy5naXRpZ25v
cmUgYi9Ub29scy9XS1IvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzQ5YmQ3OGYxZDA4ZjJiYzA5
ZmEwYmQ4MTkxZWQzOGI3ZGNlNWUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSLy5naXRp
Z25vcmUKQEAgLTAsMCArMSBAQAorLmVudgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1JlYWRNZS5t
ZCBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwZDQ5M2E5MWJhMjA5ZDNhZjZl
NDJlZTllYzg1ZmZkNDk3Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9SZWFkTWUu
bWQKQEAgLTAsMCArMSwxNCBAQAorIyBXS1IKKworTmV3IFdLUiBib3QgaW1wbGVtZW50YXRpb24g
Zm9yIFdlYktpdCBTbGFjayAjY2hhbmdlcyBjaGFubmVsLgorVGhpcyBib3QgaXMgZmV0Y2hpbmcg
Z2l0LndlYmtpdC5vcmcgUlNTIGZlZWQgcGVyaW9kaWNhbGx5LCBleHRyYWN0aW5nIGRhdGEgZnJv
bSB0aGF0LCBhbmQgcG9zdGluZyB0aGVtIHRvICNjaGFuZ2VzIGNoYW5uZWwgdG8gcmVwbGFjZSBJ
UkMncyBXS1IgYm90IHB1cnBvc2UuCisKKyMjIFN0ZXBzIHRvIHJ1bgorCisxLiBSdW4gYG5wbSBp
bnN0YWxsYCB0byBpbnN0YWxsIGxpYnJhcmllcworMi4gUHV0IGAuZW52YCBmaWxlLCB3aGljaCBp
bmNsdWRlcyBgc2xhY2tVUkw9IjxTbGFjayBFbmRwb2ludCBVUkw+ImAgKFNlZSBbaHR0cHM6Ly93
ZWJraXQuc2xhY2suY29tL2FwcHMvQTBGN1hEVUFaLWluY29taW5nLXdlYmhvb2tzP25leHRfaWQ9
MF0odGhpcyBwYWdlKSBmb3IgZ2V0dGluZyB0aGlzIFVSTCkuCiszLiBSdW4gYG5wbSBzdGFydGAK
KworIyMgRGV0YWlscworCitUaGUgbGFzdGVzdCBwb3N0ZWQgcmV2aXNpb24gZGF0YSBpcyBzdG9y
ZWQgaW4gYGRhdGEvYCBkaXJlY3RvcnkuIFlvdSBjYW4gY2xlYW4gdXAgc3RhdGUgaWYgeW91IHJl
bW92ZSBmaWxlcyBpbiBgZGF0YS9gLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1dLUi5tanMgYi9U
b29scy9XS1IvV0tSLm1qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjk3MjM5MjFhMTRhNDI4NTU0NjM0MmMwZWZk
ZTQ2ZTk5MWJiMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSL1dLUi5tanMKQEAgLTAs
MCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitpbXBvcnQgZnMgZnJvbSAiZnMiCitpbXBvcnQgcGF0aCBmcm9tICJwYXRoIgoraW1wb3J0IFJT
UyBmcm9tICJyc3MtcGFyc2VyIgoraW1wb3J0IHJlcGxhY2VBbGwgZnJvbSAicmVwbGFjZWFsbCIK
K2ltcG9ydCBzdG9yYWdlIGZyb20gIm5vZGUtcGVyc2lzdCIKK2ltcG9ydCBheGlvcyBmcm9tICJh
eGlvcyIKK2ltcG9ydCBkb3RlbnYgZnJvbSAiZG90ZW52IgorCitkb3RlbnYuY29uZmlnKCk7CisK
K2NvbnN0IERFQlVHID0gZmFsc2U7CisKK2NvbnN0IGNvbnRyaWJ1dG9yc1VSTCA9ICJodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRvcnMuanNvbiI7Citjb25zdCBjb21taXRFbmRw
b2ludFVSTCA9ICJodHRwczovL2dpdC53ZWJraXQub3JnLz9wPVdlYktpdC1odHRwcy5naXQ7YT1h
dG9tIjsKK2NvbnN0IGRlZmF1bHRJbnRlcnZhbCA9IDYwICogMTAwMDsKKworYXN5bmMgZnVuY3Rp
b24gc2xlZXAobWlsbGlzZWNvbmRzKQoreworICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9u
IChyZXNvbHZlKSB7CisgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTsK
KyAgICB9KTsKK30KKworY2xhc3MgQ29udHJpYnV0b3JzIHsKKyAgICBzdGF0aWMgYXN5bmMgY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChjb250
cmlidXRvcnNVUkwpOworICAgICAgICByZXR1cm4gbmV3IENvbnRyaWJ1dG9ycyhyZXNwb25zZS5k
YXRhKTsKKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvcihkYXRhKQorICAgIHsKKyAgICAgICAgdGhp
cy5lbWFpbHMgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuZW50cmllcyA9IE9iamVjdC52YWx1
ZXMoZGF0YSk7CisgICAgICAgIGZvciAobGV0IFtmdWxsTmFtZSwgZW50cnldIG9mIE9iamVjdC5l
bnRyaWVzKGRhdGEpKSB7CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGZ1bGxOYW1lOwor
ICAgICAgICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAg
ICAgIHRoaXMuZW1haWxzLnNldChlbWFpbCwgZW50cnkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcXVlcnlXaXRoRW1haWwoZW1haWwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbWFp
bHMuZ2V0KGVtYWlsKTsKKyAgICB9Cit9CisKK2NsYXNzIENvbW1pdCB7CisgICAgc3RhdGljIGZp
bmRBbmRSZW1vdmUoY2hhbmdlLCByZWdFeHApCisgICAgeworICAgICAgICBsZXQgbWF0Y2hlZCA9
IGNoYW5nZS5tYXRjaChyZWdFeHApOworICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAg
ICAgY2hhbmdlID0gY2hhbmdlLnJlcGxhY2UocmVnRXhwLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gW21hdGNoZWRbMV0sIGNoYW5nZV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtudWxs
LCBjaGFuZ2VdOworICAgIH0KKworICAgIHN0YXRpYyBjbGVhblVwQ2hhbmdlKGNoYW5nZSwgY29u
dHJpYnV0b3JzKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgY29udHJpYnV0b3Jz
LmVudHJpZXMpIHsKKyAgICAgICAgICAgIGlmICghZW50cnkubmlja3MpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsZXQgbmFtZVdpdGhOaWNrcyA9IGAke2VudHJ5LmZ1
bGxOYW1lfSAoQCR7ZW50cnkubmlja3NbMF19KWA7CisgICAgICAgICAgICBpZiAoY2hhbmdlLmlu
Y2x1ZGVzKGVudHJ5LmZ1bGxOYW1lKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZSA9IHJlcGxh
Y2VBbGwoZW50cnkuZnVsbE5hbWUsIG5hbWVXaXRoTmlja3MsIGNoYW5nZSk7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2UgPSByZXBsYWNlQWxsKGA8JHtlbWFpbH0+YCwgIiIsIGNoYW5nZSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVt
YWlscykKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gcmVwbGFjZUFsbChgICR7ZW1haWx9
IGAsIGAgJHtuYW1lV2l0aE5pY2tzfSBgLCBjaGFuZ2UpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjaGFuZ2U7CisgICAgfQorCisgICAgY29uc3RydWN0b3IoZmVl
ZEl0ZW0sIGNvbnRyaWJ1dG9ycykKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW5hbENoYW5nZSA9
IGZlZWRJdGVtLmNvbnRlbnRTbmlwcGV0OworICAgICAgICBsZXQgY2hhbmdlID0gQ29tbWl0LmNs
ZWFuVXBDaGFuZ2Uob3JpZ2luYWxDaGFuZ2UsIGNvbnRyaWJ1dG9ycyk7CisgICAgICAgIFt0aGlz
LnJldmlzaW9uLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvXmdpdC1z
dm4taWQ6IGh0dHBzOlwvXC9zdm5cLndlYmtpdFwub3JnXC9yZXBvc2l0b3J5XC93ZWJraXRcL3Ry
dW5rQChcZCspIC9pbSk7CisgICAgICAgIFt0aGlzLnBhdGNoQnksIGNoYW5nZV0gPSBDb21taXQu
ZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9eUGF0Y2hccytieVxzKyguKz8pXHMrb24oPzpccytcZHs0
fS1cZHsyfS1cZHsyfSk/XG4/L2ltKTsKKyAgICAgICAgW3RoaXMucmV2ZXJ0LCBjaGFuZ2VdID0g
Q29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvKD86cm9sbGluZyBvdXR8cmV2ZXJ0aW5nKSAo
cj9cZCsoPzooPzosXHMqfCw/XHMqYW5kXHMrKT9yP1xkKykqKVwuP1xzKi9pbSk7CisgICAgICAg
IFt0aGlzLmJ1Z3ppbGxhLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAv
aHR0cHM/OlwvXC8oPzpidWdzXC53ZWJraXRcLm9yZ1wvc2hvd19idWdcLmNnaVw/aWQ9fHdlYmtp
dFwub3JnXC9iXC8pKFxkKykvaW0pOworICAgICAgICB0aGlzLmVtYWlsID0gZmVlZEl0ZW0uYXV0
aG9yOworCisgICAgICAgIGxldCBsaW5lcyA9IG9yaWdpbmFsQ2hhbmdlLnNwbGl0KCdcbicpOwor
ICAgICAgICB0aGlzLnRpdGxlID0gZmVlZEl0ZW0udGl0bGU7CisgICAgICAgIGlmIChsaW5lcy5s
ZW5ndGgpCisgICAgICAgICAgICB0aGlzLnRpdGxlID0gbGluZXNbMF07CisKKyAgICAgICAgaWYg
KHRoaXMucGF0Y2hCeSkKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhpcy5wYXRjaEJ5Owor
ICAgICAgICBpZiAoIXRoaXMuYXV0aG9yKSB7CisgICAgICAgICAgICB0aGlzLmF1dGhvciA9IHRo
aXMuZW1haWw7CisgICAgICAgICAgICBpZiAodGhpcy5lbWFpbCkgeworICAgICAgICAgICAgICAg
IGxldCBlbnRyeSA9IGNvbnRyaWJ1dG9ycy5xdWVyeVdpdGhFbWFpbCh0aGlzLmVtYWlsKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkubmlja3MgJiYgZW50cnkubmlja3NbMF0p
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gYCR7ZW50cnkuZnVsbE5hbWV9IChA
JHtlbnRyeS5uaWNrc1swXX0pYDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5yZXZlcnQpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNo
KC9eXCI/KC4rPylcIj8gXChSZXF1ZXN0ZWRccytieVxzKyguKz8pXHMrb25ccysjd2Via2l0XClc
Li9pbSk7CisgICAgICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgICAgIGxldCBy
ZWFzb24gPSBtYXRjaGVkWzBdOworICAgICAgICAgICAgICAgIGxldCBhdXRob3IgPSBtYXRjaGVk
WzFdOworICAgICAgICAgICAgICAgIC8vIHRvLWJlLWltcGxlbWVudGVkLgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5yZXZpc2lvbikKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgQ2Fub250IGZpbmQgcmV2aXNpb25gKTsKKyAgICAgICAgdGhpcy5yZXZp
c2lvbiA9IE51bWJlci5wYXJzZUludCh0aGlzLnJldmlzaW9uLCAxMCk7CisgICAgICAgIHRoaXMu
dXJsID0gYGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3Ike3RoaXMucmV2aXNpb259YDsKKyAgICB9
CisKKyAgICBtZXNzYWdlKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHRzID0gW107CisgICAg
ICAgIHJlc3VsdHMucHVzaChgJHt0aGlzLnRpdGxlfWApOworICAgICAgICByZXN1bHRzLnB1c2go
YCR7dGhpcy51cmx9IGJ5ICR7dGhpcy5hdXRob3J9YCk7CisgICAgICAgIGlmICh0aGlzLmJ1Z3pp
bGxhKQorICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGBodHRwczovL3dlYmtpdC5vcmcvYi8ke3Ro
aXMuYnVnemlsbGF9YCk7CisgICAgICAgIHJldHVybiByZXN1bHRzLmpvaW4oJ1xuJyk7CisgICAg
fQorfQorCitjbGFzcyBXS1IgeworICAgIGNvbnN0cnVjdG9yKHJldmlzaW9uKQorICAgIHsKKyAg
ICAgICAgdGhpcy5yZXZpc2lvbiA9IHJldmlzaW9uOworICAgIH0KKworICAgIGFzeW5jIHBvc3RU
b1NsYWNrKGNvbW1pdCkKKyAgICB7CisgICAgICAgIGxldCBkYXRhID0geworICAgICAgICAgICAg
InRleHQiOiBjb21taXQubWVzc2FnZSgpCisgICAgICAgIH07CisgICAgICAgIGNvbnNvbGUubG9n
KGRhdGEpOworICAgICAgICBpZiAoIURFQlVHKQorICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9z
dChwcm9jZXNzLmVudi5zbGFja1VSTCwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOworICAgICAgICBh
d2FpdCBzbGVlcChNYXRoLnJhbmRvbSgpICogMTAwMCk7CisgICAgfQorCisgICAgYXN5bmMgYWN0
aW9uKGludGVydmFsKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbnNvbGUu
bG9nKGAke0RhdGUubm93KCl9OiBwb2xsIGRhdGFgKTsKKyAgICAgICAgICAgIGxldCBjb250cmli
dXRvcnMgPSBhd2FpdCBDb250cmlidXRvcnMuY3JlYXRlKCk7CisgICAgICAgICAgICBsZXQgcGFy
c2VyID0gbmV3IFJTUzsKKyAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHBhcnNlci5w
YXJzZVVSTChjb21taXRFbmRwb2ludFVSTCk7CisgICAgICAgICAgICBsZXQgY29tbWl0cyA9IHJl
c3BvbnNlLml0ZW1zLm1hcCgoZmVlZEl0ZW0pID0+IG5ldyBDb21taXQoZmVlZEl0ZW0sIGNvbnRy
aWJ1dG9ycykpOworICAgICAgICAgICAgY29tbWl0cy5zb3J0KChhLCBiKSA9PiBhLnJldmlzaW9u
IC0gYi5yZXZpc2lvbik7CisgICAgICAgICAgICBpZiAodGhpcy5yZXZpc2lvbikgeworICAgICAg
ICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzLmZpbHRlcigoY29tbWl0KSA9PiBjb21taXQucmV2
aXNpb24gPiB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBjb21taXQg
b2YgY29tbWl0cykKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb3N0VG9TbGFjayhj
b21taXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQgbGF0ZXN0Q29tbWl0ID0g
Y29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYgKGxhdGVzdENvbW1p
dCkgeworICAgICAgICAgICAgICAgIHRoaXMucmV2aXNpb24gPSBsYXRlc3RDb21taXQucmV2aXNp
b247CisgICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRJdGVtKCJyZXZpc2lvbiIsIHRo
aXMucmV2aXNpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlcnJvcikgewor
ICAgICAgICAgICAgY29uc29sZS5lcnJvcihTdHJpbmcoZXJyb3IpKTsKKyAgICAgICAgICAgIC8v
IEV4cG9uZW50aWFsIGJhY2stb2ZmIGNhcHBlZCB3aXRoIDEgaG91ci4KKyAgICAgICAgICAgIHJl
dHVybiBNYXRoLm1pbihpbnRlcnZhbCAqIDIsIDEwMDAgKiA2MCAqIDYwKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZGVmYXVsdEludGVydmFsOworICAgIH0KKworICAgIHN0YXRpYyBhc3lu
YyBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgYXdhaXQgc3RvcmFnZS5pbml0KHsKKyAgICAgICAg
ICAgIGRpcjogJ2RhdGEnLAorICAgICAgICB9KTsKKyAgICAgICAgbGV0IHJldmlzaW9uID0gYXdh
aXQgc3RvcmFnZS5nZXRJdGVtKCJyZXZpc2lvbiIpOworICAgICAgICBjb25zb2xlLmxvZyhgUHJl
dmlvdXMgUmV2aXNpb246ICR7cmV2aXNpb259YCk7CisgICAgICAgIGNvbnNvbGUubG9nKGBFbmRw
b2ludDogJHtwcm9jZXNzLmVudi5zbGFja1VSTH1gKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXS1Io
cmV2aXNpb24pOworICAgIH0KKworICAgIHN0YXRpYyBhc3luYyBtYWluKCkKKyAgICB7CisgICAg
ICAgIGxldCBib3QgPSBhd2FpdCBXS1IuY3JlYXRlKCk7CisgICAgICAgIGxldCBpbnRlcnZhbCA9
IGJvdC5pbnRlcnZhbDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgbGV0IHN0YXJ0
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgICAgIGludGVydmFsID0gYXdhaXQgYm90LmFjdGlvbihp
bnRlcnZhbCk7CisgICAgICAgICAgICBhd2FpdCBzbGVlcChNYXRoLm1heChpbnRlcnZhbCAtIChE
YXRlLm5vdygpIC0gc3RhcnQpLCAwKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dLUi5tYWlu
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9XS1IvZGF0YS8uZ2l0aWdub3JlIGIvVG9vbHMvV0tSL2Rh
dGEvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmI3ZWYzMmM4NDc4YTQ4YzM5OTRkY2FkYzg2ODM3
ZjQzNzExODRkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSL2RhdGEvLmdpdGlnbm9yZQpA
QCAtMCwwICsxLDIgQEAKKyoKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9Ub29scy9XS1IvcGFj
a2FnZS1sb2NrLmpzb24gYi9Ub29scy9XS1IvcGFja2FnZS1sb2NrLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjU3MTlmMmIwMmFmMDE3MzY0NThhM2M3ZjkwNDNmZTIxY2U0Mjc3MwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1dLUi9wYWNrYWdlLWxvY2suanNvbgpAQCAtMCwwICsxLDEwMSBAQAoreworICAi
bmFtZSI6ICJXS1IiLAorICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICJsb2NrZmlsZVZlcnNpb24i
OiAxLAorICAicmVxdWlyZXMiOiB0cnVlLAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJheGlv
cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTkuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXhpb3MvLS9heGlvcy0wLjE5LjIudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZqZ201TXZSSExoeCtvc0UyeG9la1k3MEFoQVJrM2E2aGtO
KzNJbzFqYzAwanRxdUd2eFlsS2xzRlVobVVFVDBWNXRlNkNjWkk3bGN2MlltNjFtakhBPT0iLAor
ICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6ICIxLjUuMTAi
CisgICAgICB9CisgICAgfSwKKyAgICAiZGVidWciOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcv
LS9kZWJ1Zy0zLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1g4WHFQNy8x
YTljcWt4WXcyeVhzczE1ZjI2TktXQnBEWFFkMC91Sy9LUHFkUWh4YlBhOTk0aG56amNFMlZxUXBE
c2xmNTU3MjNjS1BVT0dTbU1ZM2c9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJt
cyI6ICIyLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJkb3RlbnYiOiB7CisgICAgICAidmVy
c2lvbiI6ICI4LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZG90ZW52Ly0vZG90ZW52LTguMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTUxMi04c0o3OEVscGJESkJITmVCelViVVZMc3FLZGNjYWEvQlhGMXVQVHczR3J2UVRCZ3JRcnRP
YnIybVVyRTM4dnpZZDhjRXYrbS9KQmZETGlvWWNmWG9hdz09IgorICAgIH0sCisgICAgImVudGl0
aWVzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VudGl0aWVzLy0vZW50aXRpZXMtMS4xLjIudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYyTFpNWWwxRnp1N1lTQktnK1JvUk9lbHBPYU5y
Y0dtRTlBWnViZURmckNFaWE0ODNvVzRNSTRWeUZkNVZOSElnUS83cW0xSTB3VUhLMWVKbm4yeTJ3
PT0iCisgICAgfSwKKyAgICAiZm9sbG93LXJlZGlyZWN0cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjEuNS4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Zm9sbG93LXJlZGlyZWN0cy8tL2ZvbGxvdy1yZWRpcmVjdHMtMS41LjEwLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi0wVjVsNENpenp2cXQ1RDQ0YVRYYkZaeitGdHlYVjF2ckRONnFy
ZWx4dGZZUUtXMEtPMFcyVC9oa0U4eHZHYS81NDBMa1psa2FVak80YWlsWVRGdEhWUT09IiwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImRlYnVnIjogIj0zLjEuMCIKKyAgICAgIH0KKyAg
ICB9LAorICAgICJtaW5pbWlzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi41IiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmlt
aXN0LTEuMi41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GTTluTlVZclJCQUVM
WlFUM3hlWlE3Zm1NT0JnNm5XTm1KS1RjZ3NKZWFMc3RQL1VPRFZwR3NyNU9oWGhoWGc2ZitxdEo4
dWlaK1BVeGtEV2NnSVhMdz09IgorICAgIH0sCisgICAgIm1rZGlycCI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuNS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9ta2RpcnAvLS9ta2RpcnAtMC41LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
NTEyLU5LbUFsRVNmNmpNR3ltMSsrUjBSYTd3dmhWK3dGVzYzRmFTT0ZQd1JhaHZlYTBnTVVjR1Vo
VmVBZy8wQkMwd2l2OWloNU5ZUEIxV24xVUVJMS9MK3hRPT0iLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAibWluaW1pc3QiOiAiXjEuMi41IgorICAgICAgfQorICAgIH0sCisgICAgIm1z
IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1WZ2l1cmZ3QXZtd3BBZDlmbUdGNGplRFZsOGc9IgorICAgIH0sCisgICAgIm5v
ZGUtcGVyc2lzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC41IiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLXBlcnNpc3QvLS9ub2RlLXBlcnNp
c3QtMy4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpKbUJBNThrSTlRQXhY
TE1jNE5Mc3dnelhWSXFLZnNmUXRpeVNNRjZlRVEza1Z2b00zWUh6Y1AwLy9MOXUzMEZxeDNjWWUx
RkwvYStmeUIzVndPL29RPT0iLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAibWtkaXJw
IjogIn4wLjUuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJyZXBsYWNlYWxsIjogeworICAgICAg
InZlcnNpb24iOiAiMC4xLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3JlcGxhY2VhbGwvLS9yZXBsYWNlYWxsLTAuMS42LnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtZ2RnYXg2NjNMWDljU1VLdDhtbDZNaUJvalk0PSIKKyAgICB9LAorICAg
ICJyc3MtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiMy43LjYiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jzcy1wYXJzZXIvLS9yc3MtcGFyc2Vy
LTMuNy42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13V1doMy9wUExBUGdXeWZr
Q0M5akI4M2pTQmVuVTZWUE15bWZYaXlzaTh3SnhhTjdLTmtXNHZVM0ptOGpReEV4QXJpYkZ2WFJF
eStSdGFMM1hRdWJlQT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImVudGl0aWVz
IjogIl4xLjEuMSIsCisgICAgICAgICJ4bWwyanMiOiAiXjAuNC4xOSIKKyAgICAgIH0KKyAgICB9
LAorICAgICJzYXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2F4Ly0vc2F4LTEuMi40LnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OcVZEdjlUcEFOVWpGbTBOOHVNNUd4TDM2VWdLaTkv
YXRadyt4N1lGblE4Y2t3RkdLcmw0eFg0eVd0cmV5M1VKbTVuUDFrVWJuWWdMb3BxV05TUmhXdz09
IgorICAgIH0sCisgICAgInhtbDJqcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNC4yMyIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sMmpzLy0veG1s
MmpzLTAuNC4yMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVNQaU1qTTArcExE
ZnRIZ1hZNEJ5MHVzd0kzU1BLTER3L2kzVVhibk84TS9wMjh6cWV4Q1VvUG1RRnJZRCsvMUJ6aEdK
U3MyaTFFUldLSkF0aUxydWc9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJzYXgi
OiAiPj0wLjYuMCIsCisgICAgICAgICJ4bWxidWlsZGVyIjogIn4xMS4wLjAiCisgICAgICB9Cisg
ICAgfSwKKyAgICAieG1sYnVpbGRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjExLjAuMSIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sYnVpbGRlci8t
L3htbGJ1aWxkZXItMTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mRGxz
SS9rRkV4N2dMdmJlY2MwL29oTEc1MGZ1Z1FwOHJ5SHpNVHVXOXZTYTFHSjBYWVdLbmhzVXg3b2ll
M0c5OCtyNTZhVFFJVUI0a2h0NDJSM0p2QT09IgorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV0tSL3BhY2thZ2UuanNvbiBiL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDMwMWE1MmFhNTBlODJlMWViNTM1YzMwZDM5MWExYThmZWNlNTU1MQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwyMCBAQAoreworICAibmFt
ZSI6ICJXS1IiLAorICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICJkZXNjcmlwdGlvbiI6ICJXS1Ig
Ym90IGltcGxlbWVudGF0aW9uIiwKKyAgIm1haW4iOiAiV0tSLmpzIiwKKyAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAiYXhpb3MiOiAiXjAuMTkuMiIsCisgICAgImRvdGVudiI6ICJeOC4yLjAiLAor
ICAgICJub2RlLXBlcnNpc3QiOiAiXjMuMC41IiwKKyAgICAicmVwbGFjZWFsbCI6ICJeMC4xLjYi
LAorICAgICJyc3MtcGFyc2VyIjogIl4zLjcuNiIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6
IHt9LAorICAic2NyaXB0cyI6IHsKKyAgICAidGVzdCI6ICJlY2hvIFwiRXJyb3I6IG5vIHRlc3Qg
c3BlY2lmaWVkXCIgJiYgZXhpdCAxIiwKKyAgICAic3RhcnQiOiAiJE5PREUgLi9XS1IubWpzIgor
ICB9LAorICAiYXV0aG9yIjogIndlYmtpdC5vcmciLAorICAibGljZW5zZSI6ICJCU0QtMi1DbGF1
c2UiCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396328</attachid>
            <date>2020-04-13 13:47:41 -0700</date>
            <delta_ts>2020-04-13 13:50:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413134741.patch</filename>
            <type>text/plain</type>
            <size>15470</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTA0NjQzY2VmYzhhY2RlZDI2OWY3ZjczNTYyNDFhNmMx
Y2U0YzcwNS4uZTYxYWM5MmY4NmZkYjE0MDE1YzVkMTNlNTc3NDM1ODU2MjJjOTQyNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGlnbm9yZTogQWRkZWQuCisgICAgICAgICogV0tSL3BhY2thZ2UtbG9jay5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBXS1IvcGFja2FnZS5qc29uOiBBZGRlZC4KKwogMjAyMC0wNC0xMyAgUGVyIEFy
bmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVu
dXNlZCBVVFR5cGUgc3dpenpsZXIgY29kZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSLy5naXRpZ25v
cmUgYi9Ub29scy9XS1IvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzQ5YmQ3OGYxZDA4ZjJiYzA5
ZmEwYmQ4MTkxZWQzOGI3ZGNlNWUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSLy5naXRp
Z25vcmUKQEAgLTAsMCArMSBAQAorLmVudgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1JlYWRNZS5t
ZCBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwZDQ5M2E5MWJhMjA5ZDNhZjZl
NDJlZTllYzg1ZmZkNDk3Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9SZWFkTWUu
bWQKQEAgLTAsMCArMSwxNCBAQAorIyBXS1IKKworTmV3IFdLUiBib3QgaW1wbGVtZW50YXRpb24g
Zm9yIFdlYktpdCBTbGFjayAjY2hhbmdlcyBjaGFubmVsLgorVGhpcyBib3QgaXMgZmV0Y2hpbmcg
Z2l0LndlYmtpdC5vcmcgUlNTIGZlZWQgcGVyaW9kaWNhbGx5LCBleHRyYWN0aW5nIGRhdGEgZnJv
bSB0aGF0LCBhbmQgcG9zdGluZyB0aGVtIHRvICNjaGFuZ2VzIGNoYW5uZWwgdG8gcmVwbGFjZSBJ
UkMncyBXS1IgYm90IHB1cnBvc2UuCisKKyMjIFN0ZXBzIHRvIHJ1bgorCisxLiBSdW4gYG5wbSBp
bnN0YWxsYCB0byBpbnN0YWxsIGxpYnJhcmllcworMi4gUHV0IGAuZW52YCBmaWxlLCB3aGljaCBp
bmNsdWRlcyBgc2xhY2tVUkw9IjxTbGFjayBFbmRwb2ludCBVUkw+ImAgKFNlZSBbaHR0cHM6Ly93
ZWJraXQuc2xhY2suY29tL2FwcHMvQTBGN1hEVUFaLWluY29taW5nLXdlYmhvb2tzP25leHRfaWQ9
MF0odGhpcyBwYWdlKSBmb3IgZ2V0dGluZyB0aGlzIFVSTCkuCiszLiBSdW4gYG5wbSBzdGFydGAK
KworIyMgRGV0YWlscworCitUaGUgbGFzdGVzdCBwb3N0ZWQgcmV2aXNpb24gZGF0YSBpcyBzdG9y
ZWQgaW4gYGRhdGEvYCBkaXJlY3RvcnkuIFlvdSBjYW4gY2xlYW4gdXAgc3RhdGUgaWYgeW91IHJl
bW92ZSBmaWxlcyBpbiBgZGF0YS9gLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1dLUi5tanMgYi9U
b29scy9XS1IvV0tSLm1qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjc0M2Q1MjU1NzQzYzUxNThiZWMxYmM4MzY2
YWY2NGNiYmFlNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSL1dLUi5tanMKQEAgLTAs
MCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitpbXBvcnQgZnMgZnJvbSAiZnMiCitpbXBvcnQgcGF0aCBmcm9tICJwYXRoIgoraW1wb3J0IFJT
UyBmcm9tICJyc3MtcGFyc2VyIgoraW1wb3J0IHJlcGxhY2VBbGwgZnJvbSAicmVwbGFjZWFsbCIK
K2ltcG9ydCBzdG9yYWdlIGZyb20gIm5vZGUtcGVyc2lzdCIKK2ltcG9ydCBheGlvcyBmcm9tICJh
eGlvcyIKK2ltcG9ydCBkb3RlbnYgZnJvbSAiZG90ZW52IgorCitkb3RlbnYuY29uZmlnKCk7CisK
K2NvbnN0IERFQlVHID0gZmFsc2U7CisKK2NvbnN0IGNvbnRyaWJ1dG9yc1VSTCA9ICJodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRvcnMuanNvbiI7Citjb25zdCBjb21taXRFbmRw
b2ludFVSTCA9ICJodHRwczovL2dpdC53ZWJraXQub3JnLz9wPVdlYktpdC1odHRwcy5naXQ7YT1h
dG9tIjsKK2NvbnN0IGRlZmF1bHRJbnRlcnZhbCA9IDYwICogMTAwMDsKKworYXN5bmMgZnVuY3Rp
b24gc2xlZXAobWlsbGlzZWNvbmRzKQoreworICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9u
IChyZXNvbHZlKSB7CisgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTsK
KyAgICB9KTsKK30KKworY2xhc3MgQ29udHJpYnV0b3JzIHsKKyAgICBzdGF0aWMgYXN5bmMgY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChjb250
cmlidXRvcnNVUkwpOworICAgICAgICByZXR1cm4gbmV3IENvbnRyaWJ1dG9ycyhyZXNwb25zZS5k
YXRhKTsKKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvcihkYXRhKQorICAgIHsKKyAgICAgICAgdGhp
cy5lbWFpbHMgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuZW50cmllcyA9IE9iamVjdC52YWx1
ZXMoZGF0YSk7CisgICAgICAgIGZvciAobGV0IFtmdWxsTmFtZSwgZW50cnldIG9mIE9iamVjdC5l
bnRyaWVzKGRhdGEpKSB7CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGZ1bGxOYW1lOwor
ICAgICAgICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAg
ICAgIHRoaXMuZW1haWxzLnNldChlbWFpbCwgZW50cnkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcXVlcnlXaXRoRW1haWwoZW1haWwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbWFp
bHMuZ2V0KGVtYWlsKTsKKyAgICB9Cit9CisKK2NsYXNzIENvbW1pdCB7CisgICAgc3RhdGljIGZp
bmRBbmRSZW1vdmUoY2hhbmdlLCByZWdFeHApCisgICAgeworICAgICAgICBsZXQgbWF0Y2hlZCA9
IGNoYW5nZS5tYXRjaChyZWdFeHApOworICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAg
ICAgY2hhbmdlID0gY2hhbmdlLnJlcGxhY2UocmVnRXhwLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gW21hdGNoZWRbMV0sIGNoYW5nZV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtudWxs
LCBjaGFuZ2VdOworICAgIH0KKworICAgIHN0YXRpYyBjbGVhblVwQ2hhbmdlKGNoYW5nZSwgY29u
dHJpYnV0b3JzKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgY29udHJpYnV0b3Jz
LmVudHJpZXMpIHsKKyAgICAgICAgICAgIGlmICghZW50cnkubmlja3MpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsZXQgbmFtZVdpdGhOaWNrcyA9IGAke2VudHJ5LmZ1
bGxOYW1lfSAoQCR7ZW50cnkubmlja3NbMF19KWA7CisgICAgICAgICAgICBpZiAoY2hhbmdlLmlu
Y2x1ZGVzKGVudHJ5LmZ1bGxOYW1lKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZSA9IHJlcGxh
Y2VBbGwoZW50cnkuZnVsbE5hbWUsIG5hbWVXaXRoTmlja3MsIGNoYW5nZSk7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2UgPSByZXBsYWNlQWxsKGA8JHtlbWFpbH0+YCwgIiIsIGNoYW5nZSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVt
YWlscykKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gcmVwbGFjZUFsbChgICR7ZW1haWx9
IGAsIGAgJHtuYW1lV2l0aE5pY2tzfSBgLCBjaGFuZ2UpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjaGFuZ2U7CisgICAgfQorCisgICAgY29uc3RydWN0b3IoZmVl
ZEl0ZW0sIGNvbnRyaWJ1dG9ycykKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW5hbENoYW5nZSA9
IGZlZWRJdGVtLmNvbnRlbnRTbmlwcGV0OworICAgICAgICBsZXQgY2hhbmdlID0gQ29tbWl0LmNs
ZWFuVXBDaGFuZ2Uob3JpZ2luYWxDaGFuZ2UsIGNvbnRyaWJ1dG9ycyk7CisgICAgICAgIFt0aGlz
LnJldmlzaW9uLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvXmdpdC1z
dm4taWQ6IGh0dHBzOlwvXC9zdm5cLndlYmtpdFwub3JnXC9yZXBvc2l0b3J5XC93ZWJraXRcL3Ry
dW5rQChcZCspIC9pbSk7CisgICAgICAgIFt0aGlzLnBhdGNoQnksIGNoYW5nZV0gPSBDb21taXQu
ZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9eUGF0Y2hccytieVxzKyguKz8pXHMrb24oPzpccytcZHs0
fS1cZHsyfS1cZHsyfSk/XG4/L2ltKTsKKyAgICAgICAgW3RoaXMucmV2ZXJ0LCBjaGFuZ2VdID0g
Q29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvKD86cm9sbGluZyBvdXR8cmV2ZXJ0aW5nKSAo
cj9cZCsoPzooPzosXHMqfCw/XHMqYW5kXHMrKT9yP1xkKykqKVwuP1xzKi9pbSk7CisgICAgICAg
IFt0aGlzLmJ1Z3ppbGxhLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAv
aHR0cHM/OlwvXC8oPzpidWdzXC53ZWJraXRcLm9yZ1wvc2hvd19idWdcLmNnaVw/aWQ9fHdlYmtp
dFwub3JnXC9iXC8pKFxkKykvaW0pOworICAgICAgICB0aGlzLmVtYWlsID0gZmVlZEl0ZW0uYXV0
aG9yOworCisgICAgICAgIGxldCBsaW5lcyA9IG9yaWdpbmFsQ2hhbmdlLnNwbGl0KCdcbicpOwor
ICAgICAgICB0aGlzLnRpdGxlID0gZmVlZEl0ZW0udGl0bGU7CisgICAgICAgIGlmIChsaW5lcy5s
ZW5ndGgpCisgICAgICAgICAgICB0aGlzLnRpdGxlID0gbGluZXNbMF07CisKKyAgICAgICAgaWYg
KHRoaXMucGF0Y2hCeSkKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhpcy5wYXRjaEJ5Owor
ICAgICAgICBpZiAoIXRoaXMuYXV0aG9yKSB7CisgICAgICAgICAgICB0aGlzLmF1dGhvciA9IHRo
aXMuZW1haWw7CisgICAgICAgICAgICBpZiAodGhpcy5lbWFpbCkgeworICAgICAgICAgICAgICAg
IGxldCBlbnRyeSA9IGNvbnRyaWJ1dG9ycy5xdWVyeVdpdGhFbWFpbCh0aGlzLmVtYWlsKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkubmlja3MgJiYgZW50cnkubmlja3NbMF0p
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gYCR7ZW50cnkuZnVsbE5hbWV9IChA
JHtlbnRyeS5uaWNrc1swXX0pYDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5yZXZlcnQpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNo
KC9eXCI/KC4rPylcIj8gXChSZXF1ZXN0ZWRccytieVxzKyguKz8pXHMrb25ccysjd2Via2l0XClc
Li9pbSk7CisgICAgICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgICAgIGxldCBy
ZWFzb24gPSBtYXRjaGVkWzBdOworICAgICAgICAgICAgICAgIGxldCBhdXRob3IgPSBtYXRjaGVk
WzFdOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSBkZXNjcmlwdGl2
ZSBtZXNzYWdlIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhpcyBjb21taXQgaXMgcmV2ZXJ0IGNvbW1p
dC4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucmV2aXNpb24p
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm9udCBmaW5kIHJldmlzaW9uYCk7Cisg
ICAgICAgIHRoaXMucmV2aXNpb24gPSBOdW1iZXIucGFyc2VJbnQodGhpcy5yZXZpc2lvbiwgMTAp
OworICAgICAgICB0aGlzLnVybCA9IGBodHRwczovL3RyYWMud2Via2l0Lm9yZy9yJHt0aGlzLnJl
dmlzaW9ufWA7CisgICAgfQorCisgICAgbWVzc2FnZSgpCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0cyA9IFtdOworICAgICAgICByZXN1bHRzLnB1c2goYCR7dGhpcy50aXRsZX1gKTsKKyAgICAg
ICAgcmVzdWx0cy5wdXNoKGAke3RoaXMudXJsfSBieSAke3RoaXMuYXV0aG9yfWApOworICAgICAg
ICBpZiAodGhpcy5idWd6aWxsYSkKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChgaHR0cHM6Ly93
ZWJraXQub3JnL2IvJHt0aGlzLmJ1Z3ppbGxhfWApOworICAgICAgICByZXR1cm4gcmVzdWx0cy5q
b2luKCdcbicpOworICAgIH0KK30KKworY2xhc3MgV0tSIHsKKyAgICBjb25zdHJ1Y3RvcihyZXZp
c2lvbikKKyAgICB7CisgICAgICAgIHRoaXMucmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICB9CisK
KyAgICBhc3luYyBwb3N0VG9TbGFjayhjb21taXQpCisgICAgeworICAgICAgICBsZXQgZGF0YSA9
IHsKKyAgICAgICAgICAgICJ0ZXh0IjogY29tbWl0Lm1lc3NhZ2UoKQorICAgICAgICB9OworICAg
ICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgaWYgKCFERUJVRykKKyAgICAgICAgICAg
IGF3YWl0IGF4aW9zLnBvc3QocHJvY2Vzcy5lbnYuc2xhY2tVUkwsIEpTT04uc3RyaW5naWZ5KGRh
dGEpKTsKKyAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5yYW5kb20oKSAqIDEwMDApOworICAgIH0K
KworICAgIGFzeW5jIGFjdGlvbihpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZyhgJHtEYXRlLm5vdygpfTogcG9sbCBkYXRhYCk7CisgICAgICAg
ICAgICBsZXQgY29udHJpYnV0b3JzID0gYXdhaXQgQ29udHJpYnV0b3JzLmNyZWF0ZSgpOworICAg
ICAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBSU1M7CisgICAgICAgICAgICBsZXQgcmVzcG9uc2Ug
PSBhd2FpdCBwYXJzZXIucGFyc2VVUkwoY29tbWl0RW5kcG9pbnRVUkwpOworICAgICAgICAgICAg
bGV0IGNvbW1pdHMgPSByZXNwb25zZS5pdGVtcy5tYXAoKGZlZWRJdGVtKSA9PiBuZXcgQ29tbWl0
KGZlZWRJdGVtLCBjb250cmlidXRvcnMpKTsKKyAgICAgICAgICAgIGNvbW1pdHMuc29ydCgoYSwg
YikgPT4gYS5yZXZpc2lvbiAtIGIucmV2aXNpb24pOworICAgICAgICAgICAgaWYgKHRoaXMucmV2
aXNpb24pIHsKKyAgICAgICAgICAgICAgICBjb21taXRzID0gY29tbWl0cy5maWx0ZXIoKGNvbW1p
dCkgPT4gY29tbWl0LnJldmlzaW9uID4gdGhpcy5yZXZpc2lvbik7CisgICAgICAgICAgICAgICAg
Zm9yIChsZXQgY29tbWl0IG9mIGNvbW1pdHMpCisgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRo
aXMucG9zdFRvU2xhY2soY29tbWl0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0
IGxhdGVzdENvbW1pdCA9IGNvbW1pdHNbY29tbWl0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAg
IGlmIChsYXRlc3RDb21taXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJldmlzaW9uID0gbGF0
ZXN0Q29tbWl0LnJldmlzaW9uOworICAgICAgICAgICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0SXRl
bSgicmV2aXNpb24iLCB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBj
YXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoU3RyaW5nKGVycm9yKSk7
CisgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrLW9mZiBjYXBwZWQgd2l0aCAxIGhvdXIu
CisgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oaW50ZXJ2YWwgKiAyLCAxMDAwICogNjAgKiA2
MCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZmF1bHRJbnRlcnZhbDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYXN5bmMgY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGF3YWl0IHN0b3JhZ2Uu
aW5pdCh7CisgICAgICAgICAgICBkaXI6ICdkYXRhJywKKyAgICAgICAgfSk7CisgICAgICAgIGxl
dCByZXZpc2lvbiA9IGF3YWl0IHN0b3JhZ2UuZ2V0SXRlbSgicmV2aXNpb24iKTsKKyAgICAgICAg
Y29uc29sZS5sb2coYFByZXZpb3VzIFJldmlzaW9uOiAke3JldmlzaW9ufWApOworICAgICAgICBj
b25zb2xlLmxvZyhgRW5kcG9pbnQ6ICR7cHJvY2Vzcy5lbnYuc2xhY2tVUkx9YCk7CisgICAgICAg
IHJldHVybiBuZXcgV0tSKHJldmlzaW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXN5bmMgbWFp
bigpCisgICAgeworICAgICAgICBsZXQgYm90ID0gYXdhaXQgV0tSLmNyZWF0ZSgpOworICAgICAg
ICBsZXQgaW50ZXJ2YWwgPSBib3QuaW50ZXJ2YWw7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgICAgICAgICBpbnRlcnZhbCA9IGF3
YWl0IGJvdC5hY3Rpb24oaW50ZXJ2YWwpOworICAgICAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5t
YXgoaW50ZXJ2YWwgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSwgMCkpOworICAgICAgICB9CisgICAg
fQorfQorCitXS1IubWFpbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL2RhdGEvLmdpdGlnbm9y
ZSBiL1Rvb2xzL1dLUi9kYXRhLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZiN2VmMzJjODQ3OGE0
OGMzOTk0ZGNhZGM4NjgzN2Y0MzcxMTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9k
YXRhLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisqCishLmdpdGlnbm9yZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5qc29uIGIvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI1NzE5ZjJiMDJhZjAxNzM2NDU4YTNjN2Y5MDQzZmUyMWNlNDI3NzMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS1sb2NrLmpzb24KQEAgLTAsMCAr
MSwxMDEgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAi
bG9ja2ZpbGVWZXJzaW9uIjogMSwKKyAgInJlcXVpcmVzIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAiYXhpb3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F4aW9zLy0vYXhpb3MtMC4x
OS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mamdtNU12UkhMaHgrb3NFMnhv
ZWtZNzBBaEFSazNhNmhrTiszSW8xamMwMGp0cXVHdnhZbEtsc0ZVaG1VRVQwVjV0ZTZDY1pJN2xj
djJZbTYxbWpIQT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZvbGxvdy1yZWRp
cmVjdHMiOiAiMS41LjEwIgorICAgICAgfQorICAgIH0sCisgICAgImRlYnVnIjogeworICAgICAg
InZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLU9YOFhxUDcvMWE5Y3FreFl3MnlYc3MxNWYyNk5LV0JwRFhRZDAvdUsvS1BxZFFoeGJQ
YTk5NGhuempjRTJWcVFwRHNsZjU1NzIzY0tQVU9HU21NWTNnPT0iLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAibXMiOiAiMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZG90ZW52
IjogeworICAgICAgInZlcnNpb24iOiAiOC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVudi8tL2RvdGVudi04LjIuMC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGE1MTItOHNKNzhFbHBiREpCSE5lQnpVYlVWTHNxS2RjY2FhL0JYRjF1
UFR3M0dydlFUQmdyUXJ0T2JyMm1VckUzOHZ6WWQ4Y0V2K20vSkJmRExpb1ljZlhvYXc9PSIKKyAg
ICB9LAorICAgICJlbnRpdGllcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0
aWVzLTEuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMkxaTVlsMUZ6dTdZ
U0JLZytSb1JPZWxwT2FOcmNHbUU5QVp1YmVEZnJDRWlhNDgzb1c0TUk0VnlGZDVWTkhJZ1EvN3Ft
MUkwd1VISzFlSm5uMnkydz09IgorICAgIH0sCisgICAgImZvbGxvdy1yZWRpcmVjdHMiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIxLjUuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ZvbGxvdy1yZWRpcmVjdHMvLS9mb2xsb3ctcmVkaXJlY3RzLTEuNS4x
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFY1bDRDaXp6dnF0NUQ0NGFUWGJG
WnorRnR5WFYxdnJETjZxcmVseHRmWVFLVzBLTzBXMlQvaGtFOHh2R2EvNTQwTGtabGthVWpPNGFp
bFlURnRIVlE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICI9My4x
LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibWluaW1pc3QiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjIuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bWluaW1pc3QvLS9taW5pbWlzdC0xLjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItRk05bk5VWXJSQkFFTFpRVDN4ZVpRN2ZtTU9CZzZuV05tSktUY2dzSmVhTHN0UC9VT0RWcEdz
cjVPaFhoaFhnNmYrcXRKOHVpWitQVXhrRFdjZ0lYTHc9PSIKKyAgICB9LAorICAgICJta2RpcnAi
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS41LnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09G
UHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKKyAgICAgIH0K
KyAgICB9LAorICAgICJtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIK
KyAgICB9LAorICAgICJub2RlLXBlcnNpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNSIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1wZXJz
aXN0Ly0vbm9kZS1wZXJzaXN0LTMuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUx
Mi16Sm1CQTU4a0k5UUF4WExNYzROTHN3Z3pYVklxS2ZzZlF0aXlTTUY2ZUVRM2tWdm9NM1lIemNQ
MC8vTDl1MzBGcXgzY1llMUZML2ErZnlCM1Z3Ty9vUT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEiCisgICAgICB9CisgICAgfSwKKyAgICAicmVwbGFj
ZWFsbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBsYWNlYWxsLy0vcmVwbGFjZWFsbC0wLjEuNi50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWdkZ2F4NjYzTFg5Y1NVS3Q4bWw2TWlCb2pZ
ND0iCisgICAgfSwKKyAgICAicnNzLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNy42
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3MtcGFy
c2VyLy0vcnNzLXBhcnNlci0zLjcuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIt
d1dXaDMvcFBMQVBnV3lma0NDOWpCODNqU0JlblU2VlBNeW1mWGl5c2k4d0p4YU43S05rVzR2VTNK
bThqUXhFeEFyaWJGdlhSRXkrUnRhTDNYUXViZUE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJlbnRpdGllcyI6ICJeMS4xLjEiLAorICAgICAgICAieG1sMmpzIjogIl4wLjQuMTki
CisgICAgICB9CisgICAgfSwKKyAgICAic2F4IjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjQi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8tL3Nh
eC0xLjIuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVqRm0w
Tjh1TTVHeEwzNlVnS2k5L2F0WncreDdZRm5ROGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAxa1Vi
bllnTG9wcVdOU1JoV3c9PSIKKyAgICB9LAorICAgICJ4bWwyanMiOiB7CisgICAgICAidmVyc2lv
biI6ICIwLjQuMjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3htbDJqcy8tL3htbDJqcy0wLjQuMjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
NTEyLXlTUGlNak0wK3BMRGZ0SGdYWTRCeTB1c3dJM1NQS0xEdy9pM1VYYm5POE0vcDI4enFleENV
b1BtUUZyWUQrLzFCemhHSlNzMmkxRVJXS0pBdGlMcnVnPT0iLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAic2F4IjogIj49MC42LjAiLAorICAgICAgICAieG1sYnVpbGRlciI6ICJ+MTEu
MC4wIgorICAgICAgfQorICAgIH0sCisgICAgInhtbGJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lv
biI6ICIxMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3htbGJ1aWxkZXIvLS94bWxidWlsZGVyLTExLjAuMS50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGE1MTItZkRsc0kva0ZFeDdnTHZiZWNjMC9vaExHNTBmdWdRcDhyeUh6TVR1Vzl2U2Ex
R0owWFlXS25oc1V4N29pZTNHOTgrcjU2YVRRSVVCNGtodDQyUjNKdkE9PSIKKyAgICB9CisgIH0K
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24gYi9Ub29scy9XS1IvcGFja2Fn
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQzMDFhNTJhYTUwZTgyZTFlYjUzNWMzMGQzOTFhMWE4ZmVjZTU1
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEs
MjAgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAiZGVz
Y3JpcHRpb24iOiAiV0tSIGJvdCBpbXBsZW1lbnRhdGlvbiIsCisgICJtYWluIjogIldLUi5qcyIs
CisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImF4aW9zIjogIl4wLjE5LjIiLAorICAgICJkb3Rl
bnYiOiAiXjguMi4wIiwKKyAgICAibm9kZS1wZXJzaXN0IjogIl4zLjAuNSIsCisgICAgInJlcGxh
Y2VhbGwiOiAiXjAuMS42IiwKKyAgICAicnNzLXBhcnNlciI6ICJeMy43LjYiCisgIH0sCisgICJk
ZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInNjcmlwdHMiOiB7CisgICAgInRlc3QiOiAiZWNobyBc
IkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIsCisgICAgInN0YXJ0IjogIiRO
T0RFIC4vV0tSLm1qcyIKKyAgfSwKKyAgImF1dGhvciI6ICJ3ZWJraXQub3JnIiwKKyAgImxpY2Vu
c2UiOiAiQlNELTItQ2xhdXNlIgorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396329</attachid>
            <date>2020-04-13 13:50:07 -0700</date>
            <delta_ts>2020-04-13 14:09:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210425-20200413135006.patch</filename>
            <type>text/plain</type>
            <size>15473</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDM1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTA0NjQzY2VmYzhhY2RlZDI2OWY3ZjczNTYyNDFhNmMx
Y2U0YzcwNS4uZTYxYWM5MmY4NmZkYjE0MDE1YzVkMTNlNTc3NDM1ODU2MjJjOTQyNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDIwLTA0LTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHNsYWNrLWF3YXJlIFdLUiBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDI1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIG5ldyBXS1Ig
aW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHBvc3RpbmcgY2hhbmdlcyB0byAjY2hhbmdlcyBpbiBX
ZWJLaXQgc2xhY2suCisgICAgICAgIEN1cnJlbnRseSwgd2UgYXJlIHBvbGxpbmcgZ2l0LndlYmtp
dC5vcmcncyBmZWVkIG9uY2UgYSBtaW51dGUuIFRoZSBtb3JlIGVmZmljaWVudCB3YXkgdG8gaW1w
bGVtZW50CisgICAgICAgIHRoaXMgYm90IGlzIGludHJvZHVjaW5nIHBvc3QtY29tbWl0IGhvb2ss
IGJ1dCBmb3Igbm93LCB0aGlzIHBvbGxpbmcgc3RyYXRlZ3kganVzdCB3b3Jrcy4KKworICAgICAg
ICAqIFdLUi8uZ2l0aWdub3JlOiBBZGRlZC4KKyAgICAgICAgKiBXS1IvUmVhZE1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBXS1IvV0tSLm1qczogQWRkZWQuCisgICAgICAgICogV0tSL2RhdGEvLmdp
dGlnbm9yZTogQWRkZWQuCisgICAgICAgICogV0tSL3BhY2thZ2UtbG9jay5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBXS1IvcGFja2FnZS5qc29uOiBBZGRlZC4KKwogMjAyMC0wNC0xMyAgUGVyIEFy
bmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVu
dXNlZCBVVFR5cGUgc3dpenpsZXIgY29kZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSLy5naXRpZ25v
cmUgYi9Ub29scy9XS1IvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzQ5YmQ3OGYxZDA4ZjJiYzA5
ZmEwYmQ4MTkxZWQzOGI3ZGNlNWUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSLy5naXRp
Z25vcmUKQEAgLTAsMCArMSBAQAorLmVudgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1JlYWRNZS5t
ZCBiL1Rvb2xzL1dLUi9SZWFkTWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwZDQ5M2E5MWJhMjA5ZDNhZjZl
NDJlZTllYzg1ZmZkNDk3Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dLUi9SZWFkTWUu
bWQKQEAgLTAsMCArMSwxNCBAQAorIyBXS1IKKworTmV3IFdLUiBib3QgaW1wbGVtZW50YXRpb24g
Zm9yIFdlYktpdCBTbGFjayAjY2hhbmdlcyBjaGFubmVsLgorVGhpcyBib3QgaXMgZmV0Y2hpbmcg
Z2l0LndlYmtpdC5vcmcgUlNTIGZlZWQgcGVyaW9kaWNhbGx5LCBleHRyYWN0aW5nIGRhdGEgZnJv
bSB0aGF0LCBhbmQgcG9zdGluZyB0aGVtIHRvICNjaGFuZ2VzIGNoYW5uZWwgdG8gcmVwbGFjZSBJ
UkMncyBXS1IgYm90IHB1cnBvc2UuCisKKyMjIFN0ZXBzIHRvIHJ1bgorCisxLiBSdW4gYG5wbSBp
bnN0YWxsYCB0byBpbnN0YWxsIGxpYnJhcmllcworMi4gUHV0IGAuZW52YCBmaWxlLCB3aGljaCBp
bmNsdWRlcyBgc2xhY2tVUkw9IjxTbGFjayBFbmRwb2ludCBVUkw+ImAgKFNlZSBbaHR0cHM6Ly93
ZWJraXQuc2xhY2suY29tL2FwcHMvQTBGN1hEVUFaLWluY29taW5nLXdlYmhvb2tzP25leHRfaWQ9
MF0odGhpcyBwYWdlKSBmb3IgZ2V0dGluZyB0aGlzIFVSTCkuCiszLiBSdW4gYG5wbSBzdGFydGAK
KworIyMgRGV0YWlscworCitUaGUgbGFzdGVzdCBwb3N0ZWQgcmV2aXNpb24gZGF0YSBpcyBzdG9y
ZWQgaW4gYGRhdGEvYCBkaXJlY3RvcnkuIFlvdSBjYW4gY2xlYW4gdXAgc3RhdGUgaWYgeW91IHJl
bW92ZSBmaWxlcyBpbiBgZGF0YS9gLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL1dLUi5tanMgYi9U
b29scy9XS1IvV0tSLm1qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDEwMTgxYmJjYzU5ZTA2NzI2NWQzM2M2YTE0
YTU1NDZlY2I4YjdlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV0tSL1dLUi5tanMKQEAgLTAs
MCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitpbXBvcnQgZnMgZnJvbSAiZnMiCitpbXBvcnQgcGF0aCBmcm9tICJwYXRoIgoraW1wb3J0IFJT
UyBmcm9tICJyc3MtcGFyc2VyIgoraW1wb3J0IHJlcGxhY2VBbGwgZnJvbSAicmVwbGFjZWFsbCIK
K2ltcG9ydCBzdG9yYWdlIGZyb20gIm5vZGUtcGVyc2lzdCIKK2ltcG9ydCBheGlvcyBmcm9tICJh
eGlvcyIKK2ltcG9ydCBkb3RlbnYgZnJvbSAiZG90ZW52IgorCitkb3RlbnYuY29uZmlnKCk7CisK
K2NvbnN0IERFQlVHID0gZmFsc2U7CisKK2NvbnN0IGNvbnRyaWJ1dG9yc1VSTCA9ICJodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRvcnMuanNvbiI7Citjb25zdCBjb21taXRFbmRw
b2ludFVSTCA9ICJodHRwczovL2dpdC53ZWJraXQub3JnLz9wPVdlYktpdC1odHRwcy5naXQ7YT1h
dG9tIjsKK2NvbnN0IGRlZmF1bHRJbnRlcnZhbCA9IDYwICogMTAwMDsKKworYXN5bmMgZnVuY3Rp
b24gc2xlZXAobWlsbGlzZWNvbmRzKQoreworICAgIGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9u
IChyZXNvbHZlKSB7CisgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTsK
KyAgICB9KTsKK30KKworY2xhc3MgQ29udHJpYnV0b3JzIHsKKyAgICBzdGF0aWMgYXN5bmMgY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChjb250
cmlidXRvcnNVUkwpOworICAgICAgICByZXR1cm4gbmV3IENvbnRyaWJ1dG9ycyhyZXNwb25zZS5k
YXRhKTsKKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvcihkYXRhKQorICAgIHsKKyAgICAgICAgdGhp
cy5lbWFpbHMgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuZW50cmllcyA9IE9iamVjdC52YWx1
ZXMoZGF0YSk7CisgICAgICAgIGZvciAobGV0IFtmdWxsTmFtZSwgZW50cnldIG9mIE9iamVjdC5l
bnRyaWVzKGRhdGEpKSB7CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGZ1bGxOYW1lOwor
ICAgICAgICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAg
ICAgIHRoaXMuZW1haWxzLnNldChlbWFpbCwgZW50cnkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcXVlcnlXaXRoRW1haWwoZW1haWwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbWFp
bHMuZ2V0KGVtYWlsKTsKKyAgICB9Cit9CisKK2NsYXNzIENvbW1pdCB7CisgICAgc3RhdGljIGZp
bmRBbmRSZW1vdmUoY2hhbmdlLCByZWdFeHApCisgICAgeworICAgICAgICBsZXQgbWF0Y2hlZCA9
IGNoYW5nZS5tYXRjaChyZWdFeHApOworICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAg
ICAgY2hhbmdlID0gY2hhbmdlLnJlcGxhY2UocmVnRXhwLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gW21hdGNoZWRbMV0sIGNoYW5nZV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtudWxs
LCBjaGFuZ2VdOworICAgIH0KKworICAgIHN0YXRpYyBjbGVhblVwQ2hhbmdlKGNoYW5nZSwgY29u
dHJpYnV0b3JzKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgY29udHJpYnV0b3Jz
LmVudHJpZXMpIHsKKyAgICAgICAgICAgIGlmICghZW50cnkubmlja3MpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsZXQgbmFtZVdpdGhOaWNrcyA9IGAke2VudHJ5LmZ1
bGxOYW1lfSAoQCR7ZW50cnkubmlja3NbMF19KWA7CisgICAgICAgICAgICBpZiAoY2hhbmdlLmlu
Y2x1ZGVzKGVudHJ5LmZ1bGxOYW1lKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZSA9IHJlcGxh
Y2VBbGwoZW50cnkuZnVsbE5hbWUsIG5hbWVXaXRoTmlja3MsIGNoYW5nZSk7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgZW1haWwgb2YgZW50cnkuZW1haWxzKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2UgPSByZXBsYWNlQWxsKGA8JHtlbWFpbH0+YCwgIiIsIGNoYW5nZSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGVtYWlsIG9mIGVudHJ5LmVt
YWlscykKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gcmVwbGFjZUFsbChgICR7ZW1haWx9
IGAsIGAgJHtuYW1lV2l0aE5pY2tzfSBgLCBjaGFuZ2UpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjaGFuZ2U7CisgICAgfQorCisgICAgY29uc3RydWN0b3IoZmVl
ZEl0ZW0sIGNvbnRyaWJ1dG9ycykKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW5hbENoYW5nZSA9
IGZlZWRJdGVtLmNvbnRlbnRTbmlwcGV0OworICAgICAgICBsZXQgY2hhbmdlID0gQ29tbWl0LmNs
ZWFuVXBDaGFuZ2Uob3JpZ2luYWxDaGFuZ2UsIGNvbnRyaWJ1dG9ycyk7CisgICAgICAgIFt0aGlz
LnJldmlzaW9uLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvXmdpdC1z
dm4taWQ6IGh0dHBzOlwvXC9zdm5cLndlYmtpdFwub3JnXC9yZXBvc2l0b3J5XC93ZWJraXRcL3Ry
dW5rQChcZCspIC9pbSk7CisgICAgICAgIFt0aGlzLnBhdGNoQnksIGNoYW5nZV0gPSBDb21taXQu
ZmluZEFuZFJlbW92ZShjaGFuZ2UsIC9eUGF0Y2hccytieVxzKyguKz8pXHMrb24oPzpccytcZHs0
fS1cZHsyfS1cZHsyfSk/XG4/L2ltKTsKKyAgICAgICAgW3RoaXMucmV2ZXJ0LCBjaGFuZ2VdID0g
Q29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAvKD86cm9sbGluZyBvdXR8cmV2ZXJ0aW5nKSAo
cj9cZCsoPzooPzosXHMqfCw/XHMqYW5kXHMrKT9yP1xkKykqKVwuP1xzKi9pbSk7CisgICAgICAg
IFt0aGlzLmJ1Z3ppbGxhLCBjaGFuZ2VdID0gQ29tbWl0LmZpbmRBbmRSZW1vdmUoY2hhbmdlLCAv
aHR0cHM/OlwvXC8oPzpidWdzXC53ZWJraXRcLm9yZ1wvc2hvd19idWdcLmNnaVw/aWQ9fHdlYmtp
dFwub3JnXC9iXC8pKFxkKykvaW0pOworICAgICAgICB0aGlzLmVtYWlsID0gZmVlZEl0ZW0uYXV0
aG9yOworCisgICAgICAgIGxldCBsaW5lcyA9IG9yaWdpbmFsQ2hhbmdlLnNwbGl0KCdcbicpOwor
ICAgICAgICB0aGlzLnRpdGxlID0gZmVlZEl0ZW0udGl0bGU7CisgICAgICAgIGlmIChsaW5lcy5s
ZW5ndGgpCisgICAgICAgICAgICB0aGlzLnRpdGxlID0gbGluZXNbMF07CisKKyAgICAgICAgaWYg
KHRoaXMucGF0Y2hCeSkKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gdGhpcy5wYXRjaEJ5Owor
ICAgICAgICBpZiAoIXRoaXMuYXV0aG9yKSB7CisgICAgICAgICAgICB0aGlzLmF1dGhvciA9IHRo
aXMuZW1haWw7CisgICAgICAgICAgICBpZiAodGhpcy5lbWFpbCkgeworICAgICAgICAgICAgICAg
IGxldCBlbnRyeSA9IGNvbnRyaWJ1dG9ycy5xdWVyeVdpdGhFbWFpbCh0aGlzLmVtYWlsKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkubmlja3MgJiYgZW50cnkubmlja3NbMF0p
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yID0gYCR7ZW50cnkuZnVsbE5hbWV9IChA
JHtlbnRyeS5uaWNrc1swXX0pYDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5yZXZlcnQpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaGVkID0gY2hhbmdlLm1hdGNo
KC9eXCI/KC4rPylcIj8gXChSZXF1ZXN0ZWRccytieVxzKyguKz8pXHMrb25ccysjd2Via2l0XClc
Li9pbSk7CisgICAgICAgICAgICBpZiAobWF0Y2hlZCkgeworICAgICAgICAgICAgICAgIGxldCBy
ZWFzb24gPSBtYXRjaGVkWzBdOworICAgICAgICAgICAgICAgIGxldCBhdXRob3IgPSBtYXRjaGVk
WzFdOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSBkZXNjcmlwdGl2
ZSBtZXNzYWdlIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhpcyBjb21taXQgaXMgcmV2ZXJ0IGNvbW1p
dC4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMucmV2aXNpb24p
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm9udCBmaW5kIHJldmlzaW9uYCk7Cisg
ICAgICAgIHRoaXMucmV2aXNpb24gPSBOdW1iZXIucGFyc2VJbnQodGhpcy5yZXZpc2lvbiwgMTAp
OworICAgICAgICB0aGlzLnVybCA9IGBodHRwczovL3RyYWMud2Via2l0Lm9yZy9yJHt0aGlzLnJl
dmlzaW9ufWA7CisgICAgfQorCisgICAgbWVzc2FnZSgpCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0cyA9IFtdOworICAgICAgICByZXN1bHRzLnB1c2goYCR7dGhpcy50aXRsZX1gKTsKKyAgICAg
ICAgcmVzdWx0cy5wdXNoKGAke3RoaXMudXJsfSBieSAke3RoaXMuYXV0aG9yfWApOworICAgICAg
ICBpZiAodGhpcy5idWd6aWxsYSkKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChgaHR0cHM6Ly93
ZWJraXQub3JnL2IvJHt0aGlzLmJ1Z3ppbGxhfWApOworICAgICAgICByZXR1cm4gcmVzdWx0cy5q
b2luKCdcbicpOworICAgIH0KK30KKworY2xhc3MgV0tSIHsKKyAgICBjb25zdHJ1Y3RvcihyZXZp
c2lvbikKKyAgICB7CisgICAgICAgIHRoaXMucmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICB9CisK
KyAgICBhc3luYyBwb3N0VG9TbGFjayhjb21taXQpCisgICAgeworICAgICAgICBsZXQgZGF0YSA9
IHsKKyAgICAgICAgICAgICJ0ZXh0IjogY29tbWl0Lm1lc3NhZ2UoKQorICAgICAgICB9OworICAg
ICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgaWYgKCFERUJVRykKKyAgICAgICAgICAg
IGF3YWl0IGF4aW9zLnBvc3QocHJvY2Vzcy5lbnYuc2xhY2tVUkwsIEpTT04uc3RyaW5naWZ5KGRh
dGEpKTsKKyAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5yYW5kb20oKSAqIDEwMDApOworICAgIH0K
KworICAgIGFzeW5jIGFjdGlvbihpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZyhgJHtEYXRlLm5vdygpfTogcG9sbCBkYXRhYCk7CisgICAgICAg
ICAgICBsZXQgY29udHJpYnV0b3JzID0gYXdhaXQgQ29udHJpYnV0b3JzLmNyZWF0ZSgpOworICAg
ICAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBSU1M7CisgICAgICAgICAgICBsZXQgcmVzcG9uc2Ug
PSBhd2FpdCBwYXJzZXIucGFyc2VVUkwoY29tbWl0RW5kcG9pbnRVUkwpOworICAgICAgICAgICAg
bGV0IGNvbW1pdHMgPSByZXNwb25zZS5pdGVtcy5tYXAoKGZlZWRJdGVtKSA9PiBuZXcgQ29tbWl0
KGZlZWRJdGVtLCBjb250cmlidXRvcnMpKTsKKyAgICAgICAgICAgIGNvbW1pdHMuc29ydCgoYSwg
YikgPT4gYS5yZXZpc2lvbiAtIGIucmV2aXNpb24pOworICAgICAgICAgICAgaWYgKHRoaXMucmV2
aXNpb24pIHsKKyAgICAgICAgICAgICAgICBjb21taXRzID0gY29tbWl0cy5maWx0ZXIoKGNvbW1p
dCkgPT4gY29tbWl0LnJldmlzaW9uID4gdGhpcy5yZXZpc2lvbik7CisgICAgICAgICAgICAgICAg
Zm9yIChsZXQgY29tbWl0IG9mIGNvbW1pdHMpCisgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRo
aXMucG9zdFRvU2xhY2soY29tbWl0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0
IGxhdGVzdENvbW1pdCA9IGNvbW1pdHNbY29tbWl0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAg
IGlmIChsYXRlc3RDb21taXQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJldmlzaW9uID0gbGF0
ZXN0Q29tbWl0LnJldmlzaW9uOworICAgICAgICAgICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0SXRl
bSgicmV2aXNpb24iLCB0aGlzLnJldmlzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBj
YXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoU3RyaW5nKGVycm9yKSk7
CisgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrLW9mZiBjYXBwZWQgd2l0aCAxIGhvdXIu
CisgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oaW50ZXJ2YWwgKiAyLCAxMDAwICogNjAgKiA2
MCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZmF1bHRJbnRlcnZhbDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYXN5bmMgY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGF3YWl0IHN0b3JhZ2Uu
aW5pdCh7CisgICAgICAgICAgICBkaXI6ICdkYXRhJywKKyAgICAgICAgfSk7CisgICAgICAgIGxl
dCByZXZpc2lvbiA9IGF3YWl0IHN0b3JhZ2UuZ2V0SXRlbSgicmV2aXNpb24iKTsKKyAgICAgICAg
Y29uc29sZS5sb2coYFByZXZpb3VzIFJldmlzaW9uOiAke3JldmlzaW9ufWApOworICAgICAgICBj
b25zb2xlLmxvZyhgRW5kcG9pbnQ6ICR7cHJvY2Vzcy5lbnYuc2xhY2tVUkx9YCk7CisgICAgICAg
IHJldHVybiBuZXcgV0tSKHJldmlzaW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXN5bmMgbWFp
bigpCisgICAgeworICAgICAgICBsZXQgYm90ID0gYXdhaXQgV0tSLmNyZWF0ZSgpOworICAgICAg
ICBsZXQgaW50ZXJ2YWwgPSBkZWZhdWx0SW50ZXJ2YWw7CisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgICAgICAgICBpbnRlcnZhbCA9
IGF3YWl0IGJvdC5hY3Rpb24oaW50ZXJ2YWwpOworICAgICAgICAgICAgYXdhaXQgc2xlZXAoTWF0
aC5tYXgoaW50ZXJ2YWwgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSwgMCkpOworICAgICAgICB9Cisg
ICAgfQorfQorCitXS1IubWFpbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV0tSL2RhdGEvLmdpdGln
bm9yZSBiL1Rvb2xzL1dLUi9kYXRhLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZiN2VmMzJjODQ3
OGE0OGMzOTk0ZGNhZGM4NjgzN2Y0MzcxMTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dL
Ui9kYXRhLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisqCishLmdpdGlnbm9yZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV0tSL3BhY2thZ2UtbG9jay5qc29uIGIvVG9vbHMvV0tSL3BhY2thZ2UtbG9j
ay5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI1NzE5ZjJiMDJhZjAxNzM2NDU4YTNjN2Y5MDQzZmUyMWNlNDI3
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS1sb2NrLmpzb24KQEAgLTAs
MCArMSwxMDEgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAor
ICAibG9ja2ZpbGVWZXJzaW9uIjogMSwKKyAgInJlcXVpcmVzIjogdHJ1ZSwKKyAgImRlcGVuZGVu
Y2llcyI6IHsKKyAgICAiYXhpb3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F4aW9zLy0vYXhpb3Mt
MC4xOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mamdtNU12UkhMaHgrb3NF
MnhvZWtZNzBBaEFSazNhNmhrTiszSW8xamMwMGp0cXVHdnhZbEtsc0ZVaG1VRVQwVjV0ZTZDY1pJ
N2xjdjJZbTYxbWpIQT09IiwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZvbGxvdy1y
ZWRpcmVjdHMiOiAiMS41LjEwIgorICAgICAgfQorICAgIH0sCisgICAgImRlYnVnIjogeworICAg
ICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHki
OiAic2hhNTEyLU9YOFhxUDcvMWE5Y3FreFl3MnlYc3MxNWYyNk5LV0JwRFhRZDAvdUsvS1BxZFFo
eGJQYTk5NGhuempjRTJWcVFwRHNsZjU1NzIzY0tQVU9HU21NWTNnPT0iLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAibXMiOiAiMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZG90
ZW52IjogeworICAgICAgInZlcnNpb24iOiAiOC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVudi8tL2RvdGVudi04LjIuMC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItOHNKNzhFbHBiREpCSE5lQnpVYlVWTHNxS2RjY2FhL0JY
RjF1UFR3M0dydlFUQmdyUXJ0T2JyMm1VckUzOHZ6WWQ4Y0V2K20vSkJmRExpb1ljZlhvYXc9PSIK
KyAgICB9LAorICAgICJlbnRpdGllcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2Vu
dGl0aWVzLTEuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMkxaTVlsMUZ6
dTdZU0JLZytSb1JPZWxwT2FOcmNHbUU5QVp1YmVEZnJDRWlhNDgzb1c0TUk0VnlGZDVWTkhJZ1Ev
N3FtMUkwd1VISzFlSm5uMnkydz09IgorICAgIH0sCisgICAgImZvbGxvdy1yZWRpcmVjdHMiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjUuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2ZvbGxvdy1yZWRpcmVjdHMvLS9mb2xsb3ctcmVkaXJlY3RzLTEu
NS4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFY1bDRDaXp6dnF0NUQ0NGFU
WGJGWnorRnR5WFYxdnJETjZxcmVseHRmWVFLVzBLTzBXMlQvaGtFOHh2R2EvNTQwTGtabGthVWpP
NGFpbFlURnRIVlE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICI9
My4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibWluaW1pc3QiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjIuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvbWluaW1pc3QvLS9taW5pbWlzdC0xLjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGE1MTItRk05bk5VWXJSQkFFTFpRVDN4ZVpRN2ZtTU9CZzZuV05tSktUY2dzSmVhTHN0UC9VT0RW
cEdzcjVPaFhoaFhnNmYrcXRKOHVpWitQVXhrRFdjZ0lYTHc9PSIKKyAgICB9LAorICAgICJta2Rp
cnAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS41LnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0Zh
U09GUHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKKyAgICAg
IH0KKyAgICB9LAorICAgICJtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhn
PSIKKyAgICB9LAorICAgICJub2RlLXBlcnNpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAu
NSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1w
ZXJzaXN0Ly0vbm9kZS1wZXJzaXN0LTMuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTUxMi16Sm1CQTU4a0k5UUF4WExNYzROTHN3Z3pYVklxS2ZzZlF0aXlTTUY2ZUVRM2tWdm9NM1lI
emNQMC8vTDl1MzBGcXgzY1llMUZML2ErZnlCM1Z3Ty9vUT09IiwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEiCisgICAgICB9CisgICAgfSwKKyAgICAicmVw
bGFjZWFsbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBsYWNlYWxsLy0vcmVwbGFjZWFsbC0wLjEu
Ni50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWdkZ2F4NjYzTFg5Y1NVS3Q4bWw2TWlC
b2pZND0iCisgICAgfSwKKyAgICAicnNzLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMu
Ny42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3Mt
cGFyc2VyLy0vcnNzLXBhcnNlci0zLjcuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItd1dXaDMvcFBMQVBnV3lma0NDOWpCODNqU0JlblU2VlBNeW1mWGl5c2k4d0p4YU43S05rVzR2
VTNKbThqUXhFeEFyaWJGdlhSRXkrUnRhTDNYUXViZUE9PSIsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJlbnRpdGllcyI6ICJeMS4xLjEiLAorICAgICAgICAieG1sMmpzIjogIl4wLjQu
MTkiCisgICAgICB9CisgICAgfSwKKyAgICAic2F4IjogeworICAgICAgInZlcnNpb24iOiAiMS4y
LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8t
L3NheC0xLjIuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVq
Rm0wTjh1TTVHeEwzNlVnS2k5L2F0WncreDdZRm5ROGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAx
a1VibllnTG9wcVdOU1JoV3c9PSIKKyAgICB9LAorICAgICJ4bWwyanMiOiB7CisgICAgICAidmVy
c2lvbiI6ICIwLjQuMjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3htbDJqcy8tL3htbDJqcy0wLjQuMjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLXlTUGlNak0wK3BMRGZ0SGdYWTRCeTB1c3dJM1NQS0xEdy9pM1VYYm5POE0vcDI4enFl
eENVb1BtUUZyWUQrLzFCemhHSlNzMmkxRVJXS0pBdGlMcnVnPT0iLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAic2F4IjogIj49MC42LjAiLAorICAgICAgICAieG1sYnVpbGRlciI6ICJ+
MTEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgInhtbGJ1aWxkZXIiOiB7CisgICAgICAidmVy
c2lvbiI6ICIxMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3htbGJ1aWxkZXIvLS94bWxidWlsZGVyLTExLjAuMS50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGE1MTItZkRsc0kva0ZFeDdnTHZiZWNjMC9vaExHNTBmdWdRcDhyeUh6TVR1Vzl2
U2ExR0owWFlXS25oc1V4N29pZTNHOTgrcjU2YVRRSVVCNGtodDQyUjNKdkE9PSIKKyAgICB9Cisg
IH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1dLUi9wYWNrYWdlLmpzb24gYi9Ub29scy9XS1IvcGFj
a2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMDFhNTJhYTUwZTgyZTFlYjUzNWMzMGQzOTFhMWE4ZmVj
ZTU1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XS1IvcGFja2FnZS5qc29uCkBAIC0wLDAg
KzEsMjAgQEAKK3sKKyAgIm5hbWUiOiAiV0tSIiwKKyAgInZlcnNpb24iOiAiMS4wLjAiLAorICAi
ZGVzY3JpcHRpb24iOiAiV0tSIGJvdCBpbXBsZW1lbnRhdGlvbiIsCisgICJtYWluIjogIldLUi5q
cyIsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImF4aW9zIjogIl4wLjE5LjIiLAorICAgICJk
b3RlbnYiOiAiXjguMi4wIiwKKyAgICAibm9kZS1wZXJzaXN0IjogIl4zLjAuNSIsCisgICAgInJl
cGxhY2VhbGwiOiAiXjAuMS42IiwKKyAgICAicnNzLXBhcnNlciI6ICJeMy43LjYiCisgIH0sCisg
ICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInNjcmlwdHMiOiB7CisgICAgInRlc3QiOiAiZWNo
byBcIkVycm9yOiBubyB0ZXN0IHNwZWNpZmllZFwiICYmIGV4aXQgMSIsCisgICAgInN0YXJ0Ijog
IiROT0RFIC4vV0tSLm1qcyIKKyAgfSwKKyAgImF1dGhvciI6ICJ3ZWJraXQub3JnIiwKKyAgImxp
Y2Vuc2UiOiAiQlNELTItQ2xhdXNlIgorfQo=
</data>
<flag name="review"
          id="411744"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>