<?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>183888</bug_id>
          
          <creation_ts>2018-03-21 20:45:20 -0700</creation_ts>
          <short_desc>Add a bisect button to automatically schedule bisecting A/B tasks.</short_desc>
          <delta_ts>2018-04-19 15:17:39 -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>New Bugs</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>184674</dependson>
    
    <dependson>184368</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1408292</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2018-03-21 20:45:20 -0700</bug_when>
    <thetext>Add a bisect button to automatically schedule bisecting A/B tasks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408294</commentid>
    <comment_count>1</comment_count>
      <attachid>336260</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-03-21 21:13:55 -0700</bug_when>
    <thetext>Created attachment 336260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410445</commentid>
    <comment_count>2</comment_count>
      <attachid>336818</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-03-29 16:52:15 -0700</bug_when>
    <thetext>Created attachment 336818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410742</commentid>
    <comment_count>3</comment_count>
      <attachid>336889</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-03-30 15:00:39 -0700</bug_when>
    <thetext>Created attachment 336889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410797</commentid>
    <comment_count>4</comment_count>
      <attachid>336889</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-30 19:54:26 -0700</bug_when>
    <thetext>Comment on attachment 336889
Patch

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

Here are my comments half way through the review.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:175
&gt; +        const allTestGroupsInTask = TestGroup.findAllByTask(this.id());

What guarantees that we&apos;ve already fetched all the test groups?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:191
&gt; +        try {

I don&apos;t really use try-catch elsewhere.
I&apos;m not certain if it&apos;s a good idea to use it here either because it can swallow unexpected exceptions.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:201
&gt; +    static async performBinaryBisect(commitSetInTestGroup, allCommitSetsInTask, selectBisectionPointStrategy)

First off, &quot;bisection&quot; is a binary search by definition&quot;. &quot;Bi&quot; means two.
Second off, this isn&apos;t performing bisection itself. It&apos;s creating a new test group to bisect.
So I think we need to rename this to something like createTestGroupForBisection.

Finally, the argument to this function doesn&apos;t need to say selectBisectionPointStrategy. selectBisectionPoint would suffice.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:204
&gt; +            throw &apos;Can only bisect a test group with 2 commit sets&apos;;

We can simply return this as a return value in the case we had an error, and null otherwise.
This way, if this function throws an exception (unexpectedly), it would be easier to debug.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:206
&gt; +        const commitSetSortByLatestCommitTime = (oneCommitSet, anotherCommitSet) =&gt; oneCommitSet.latestCommitTime() - anotherCommitSet.latestCommitTime();

Does this fallback to build time for &quot;system&quot; graphs?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:210
&gt; +        if (!allSimpleCommitSets)
&gt; +            throw &apos;Cannot bisect on a range with root/patch/owned commit&apos;;

Is the idea that we&apos;d like to implement the MVP and expand it later?
We certainly want to be able to support this in the future, right?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:242
&gt; +    static async selectBisectionPointWithSimilarRevisionDistance(uniqueSortedCommitSets)

Nit: sortedUniqueCommitSets.
It&apos;s unclear what these commit sets are for. I think the idea here is to pick one commit set out of them?
If so, maybe orderedCommitSet might sufficient. I don&apos;t think &quot;unique&quot; adds much value here.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:91
&gt; +    isCommitSetWithoutRootPatchOrOwnedCommit() {

Nit: { should be on the new line.
Since this is a method on commit set, there is no need to say commit say.
How about containsRootPatchOrOwnedCommit and negate the meaning.
It&apos;s usually better to have a function which tests the positive condition than a negative condition
because then we end up writing code like !isCommitSetWithoutRootPatchOrOwnedCommit, which is harder to read.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:103
&gt; +            if (this.requiresBuildForRepository(repository))
&gt; +                return false;

Why are we checking this condition?

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:169
&gt; +        const allRepositories = new Set(firstCommitSet.repositories());
&gt; +        secondCommitSet.repositories().forEach((repository) =&gt; allRepositories.add(repository));

Why not just new Set([...a, ...b])?

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:170
&gt; +        let nameParts = [];

This should be const.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:186
&gt; +            if (firstCommit == secondCommit &amp;&amp; firstPatch != secondPatch)
&gt; +                nameParts.push(`${repository.name()}: Patch-${firstPatch.id()} - Patch-${secondPatch.id()}`);

I don&apos;t think it makes sense to expose the attachment ID like this. We don&apos;t do elsewhere in the UI.
If we&apos;re concerned about the length of the name, then we can just diff the name with the maximum length of name to show.
e.g. if we had WebKit-WebComponents-A.patch and WebKit-WebComponents-B.patch, we can just show:
WebKit: &quot;...A.patch&quot; - &quot;...B.patch&quot;

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:189
&gt; +                nameParts.push(`${repository.name()}: ${firstCommit.label()}+Patch-${firstPatch.id()} - ${secondCommit.label()}+Patch-${secondPatch.id()}`);

I think &quot;r124 with a.patch&quot; reads better than &quot;r124+Patch a.patch&quot;.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:198
&gt; +            const leftRootFileDescription = uniqueInFirstCommitSet.map((rootFile) =&gt; rootFile.id()).join(&apos;, &apos;);
&gt; +            const rightRootFileDescription = uniqueInSecondCommitSet.map((rootFile) =&gt; rootFile.id()).join(&apos;, &apos;);

Again, I don&apos;t think it makes sense to use attachment IDs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410798</commentid>
    <comment_count>5</comment_count>
      <attachid>336889</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-03-30 20:36:58 -0700</bug_when>
    <thetext>Comment on attachment 336889
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:175
&gt;&gt; +        const allTestGroupsInTask = TestGroup.findAllByTask(this.id());
&gt; 
&gt; What guarantees that we&apos;ve already fetched all the test groups?

It only works for the UI part. I think I need to use fetchForTask instead.

&gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:191
&gt;&gt; +        try {
&gt; 
&gt; I don&apos;t really use try-catch elsewhere.
&gt; I&apos;m not certain if it&apos;s a good idea to use it here either because it can swallow unexpected exceptions.

When will those error eventually get caught?

&gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:210
&gt;&gt; +            throw &apos;Cannot bisect on a range with root/patch/owned commit&apos;;
&gt; 
&gt; Is the idea that we&apos;d like to implement the MVP and expand it later?
&gt; We certainly want to be able to support this in the future, right?

Yes. Maybe I should abstract all those functions into a module. Essentially what we want to do here are:
1. define a bisection range
2. find available commitSets (testable configurations)
3. invoke an algorithm to find the bisection point(s), this algorithm also defines what types of commitSet it can process.

For step 2, currently, we only choose the commitSet either exists in charts(measurementSet) or test groups (CommitSet), but in the future, it is possible that we can get more available binaries.
For step 3, current bisection algorithm requires CommitSet must not have root/patch/owned commits, but this can be changed if more advanced bisection algorithm is developed.

&gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:169
&gt;&gt; +        secondCommitSet.repositories().forEach((repository) =&gt; allRepositories.add(repository));
&gt; 
&gt; Why not just new Set([...a, ...b])?

Nice, I didn&apos;t know this.

&gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:186
&gt;&gt; +                nameParts.push(`${repository.name()}: Patch-${firstPatch.id()} - Patch-${secondPatch.id()}`);
&gt; 
&gt; I don&apos;t think it makes sense to expose the attachment ID like this. We don&apos;t do elsewhere in the UI.
&gt; If we&apos;re concerned about the length of the name, then we can just diff the name with the maximum length of name to show.
&gt; e.g. if we had WebKit-WebComponents-A.patch and WebKit-WebComponents-B.patch, we can just show:
&gt; WebKit: &quot;...A.patch&quot; - &quot;...B.patch&quot;

What if two different patch have the same name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410947</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-01 00:29:48 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #5)
&gt; Comment on attachment 336889 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336889&amp;action=review
&gt; 
&gt; &gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:175
&gt; &gt;&gt; +        const allTestGroupsInTask = TestGroup.findAllByTask(this.id());
&gt; &gt; 
&gt; &gt; What guarantees that we&apos;ve already fetched all the test groups?
&gt; 
&gt; It only works for the UI part. I think I need to use fetchForTask instead.

Okay. Do we cache the results there? We should make sure we don&apos;t end up fetching it over &amp; over.

&gt; &gt;&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:191
&gt; &gt;&gt; +        try {
&gt; &gt; 
&gt; &gt; I don&apos;t really use try-catch elsewhere.
&gt; &gt; I&apos;m not certain if it&apos;s a good idea to use it here either because it can swallow unexpected exceptions.
&gt; 
&gt; When will those error eventually get caught?

The point is that it won&apos;t be caught and shows up on WebInspector.

&gt; &gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:186
&gt; &gt;&gt; +                nameParts.push(`${repository.name()}: Patch-${firstPatch.id()} - Patch-${secondPatch.id()}`);
&gt; &gt; 
&gt; &gt; I don&apos;t think it makes sense to expose the attachment ID like this. We don&apos;t do elsewhere in the UI.
&gt; &gt; If we&apos;re concerned about the length of the name, then we can just diff the name with the maximum length of name to show.
&gt; &gt; e.g. if we had WebKit-WebComponents-A.patch and WebKit-WebComponents-B.patch, we can just show:
&gt; &gt; WebKit: &quot;...A.patch&quot; - &quot;...B.patch&quot;
&gt; 
&gt; What if two different patch have the same name?

We should probably add the file size, uploaded date, etc... This seems like an unlikely scenario though. It would be confusing for humans anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410982</commentid>
    <comment_count>7</comment_count>
      <attachid>336889</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-01 16:22:23 -0700</bug_when>
    <thetext>Comment on attachment 336889
Patch

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

&gt;&gt;&gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:186
&gt;&gt;&gt;&gt; +                nameParts.push(`${repository.name()}: Patch-${firstPatch.id()} - Patch-${secondPatch.id()}`);
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t think it makes sense to expose the attachment ID like this. We don&apos;t do elsewhere in the UI.
&gt;&gt;&gt; If we&apos;re concerned about the length of the name, then we can just diff the name with the maximum length of name to show.
&gt;&gt;&gt; e.g. if we had WebKit-WebComponents-A.patch and WebKit-WebComponents-B.patch, we can just show:
&gt;&gt;&gt; WebKit: &quot;...A.patch&quot; - &quot;...B.patch&quot;
&gt;&gt; 
&gt;&gt; What if two different patch have the same name?
&gt; 
&gt; We should probably add the file size, uploaded date, etc... This seems like an unlikely scenario though. It would be confusing for humans anyway.

How about we use id as a fallback when we got two identical names?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411022</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-02 01:30:34 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #7)
&gt; Comment on attachment 336889 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336889&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:186
&gt; &gt;&gt;&gt;&gt; +                nameParts.push(`${repository.name()}: Patch-${firstPatch.id()} - Patch-${secondPatch.id()}`);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I don&apos;t think it makes sense to expose the attachment ID like this. We don&apos;t do elsewhere in the UI.
&gt; &gt;&gt;&gt; If we&apos;re concerned about the length of the name, then we can just diff the name with the maximum length of name to show.
&gt; &gt;&gt;&gt; e.g. if we had WebKit-WebComponents-A.patch and WebKit-WebComponents-B.patch, we can just show:
&gt; &gt;&gt;&gt; WebKit: &quot;...A.patch&quot; - &quot;...B.patch&quot;
&gt; &gt;&gt; 
&gt; &gt;&gt; What if two different patch have the same name?
&gt; &gt; 
&gt; &gt; We should probably add the file size, uploaded date, etc... This seems like an unlikely scenario though. It would be confusing for humans anyway.
&gt; 
&gt; How about we use id as a fallback when we got two identical names?

I don&apos;t think we should ever use a file ID as a fallback. That&apos;s just a random number we generate as far as the user is concerned. Alternatively, we can automatically add (1), (2), etc... as we do for test groups but is this really a common issue? If it is, we should consider letting people modify the file name instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411975</commentid>
    <comment_count>9</comment_count>
      <attachid>337249</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-04 18:31:11 -0700</bug_when>
    <thetext>Created attachment 337249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411987</commentid>
    <comment_count>10</comment_count>
      <attachid>337249</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-04 19:19:39 -0700</bug_when>
    <thetext>Comment on attachment 337249
Patch

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

&gt; Websites/perf.webkit.org/unit-tests/commit-set-tests.js:199
&gt; +

Will remove this extra line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412001</commentid>
    <comment_count>11</comment_count>
      <attachid>337249</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-04 20:44:53 -0700</bug_when>
    <thetext>Comment on attachment 337249
Patch

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

&gt; Websites/perf.webkit.org/unit-tests/commit-set-tests.js:256
&gt; +            assert.equal(CommitSet.describeDifferencesBetweenCommitSets(oneCommitSet(), commitSetWithAnotherWebKitCommit()), &apos;WebKit: webkit-commit-0 - webkit-commit-1&apos;);

We should make sure Git uses .. and SVN uses - without spaces using CommitLog.diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412281</commentid>
    <comment_count>12</comment_count>
      <attachid>337249</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-05 20:12:52 -0700</bug_when>
    <thetext>Comment on attachment 337249
Patch

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

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:4
&gt; +    static async aggregateCommitSetsFromAnalysisTask(analysisTask)

This should probably just be a method of AnalysisTask.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:20
&gt; +        const startPoint = series.findById(analysisTask.startMeasurementId());
&gt; +        const endPoint = series.findById(analysisTask.endMeasurementId());
&gt; +
&gt; +        const pointAfterEnd = endPoint.series.nextPoint(endPoint);

Just use series.viewBetweenPoints.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:31
&gt; +        if (rangeSpecifiedByCommitSets.length != 2) {

This should just be an assert since we don&apos;t currently have any test group with less or more than two commit sets.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:39
&gt; +            AnalysisStrategies.logger.error(&apos;Cannot bisect a range that is smaller than 3 commit sets&apos;);

This shouldn&apos;t emit an error message since we can legitimately hit this case when there are less than three commits between two commit sets.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:50
&gt; +        if (!commonRepositories.size) {
&gt; +            AnalysisStrategies.logger.error(&apos;No common repository is found among selected commit sets&apos;);
&gt; +            return [];
&gt; +        }

We should just assert.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:56
&gt; +        const commitsByRepository = new Map;
&gt; +        const commitSetsByConfig = new Map;

I think we should extract a helper function which builds these two maps.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:64
&gt; +            try {

Don&apos;t swallow error like this. With this, we don&apos;t get any backtraces when the network or some other kind of an error happens.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:68
&gt; +                AnalysisStrategies.logger.error(`Failed to fetch commits between &quot;${firstCommit.label()}&quot; - &quot;${lastCommit.label()}&quot; due to ${error}`);

You need to use commit.title() instead to include the repository name.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:247
&gt; +const AnalysisStrategies = {
&gt; +    defaultStrategy: bisectRangeWithSimilarRevisionDistanceAmongExistingCommitSets,
&gt; +    bisectRangeWithSimilarRevisionDistanceAmongExistingCommitSets,
&gt; +    CommitSetAggregator,
&gt; +    RangeSplitStrategies,
&gt; +    logger: console
&gt; +};

As we discussed in person, I don&apos;t think there is much benefit to making these things runtime switchable.
So there&apos;s no need to create these strategy objects/maps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412322</commentid>
    <comment_count>13</comment_count>
      <attachid>337249</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-05 23:46:23 -0700</bug_when>
    <thetext>Comment on attachment 337249
Patch

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

This patch is getting really big. Why don&apos;t we split off patches to:
- Add diff&apos;ing function to CommitSet (we can start using it in analysis task pages now!)
- Refactor the logic to create a new test group name for an analysis task (and use it in analysis task page!)

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:89
&gt; +        for (const repository of repositoriesSortedByCommitCountInRange) {

As we discussed in person, we should probably sort all commits based
on commit time across repositories and fallback to time-less commits&apos; ordering.
It&apos;s unfortunate that we don&apos;t necessarily have a guarantee that all commits
in a given repository has commit_time set or not set.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:121
&gt; +        return [
&gt; +            {name: CommitSet.describeDifferencesBetweenCommitSets(firstCommitSet, middleCommitSet), commitSetList: [firstCommitSet, middleCommitSet]},
&gt; +            {name: CommitSet.describeDifferencesBetweenCommitSets(middleCommitSet, lastCommitSet), commitSetList: [middleCommitSet, lastCommitSet]}
&gt; +        ];

This function should really just return middleCommitSet
and let the caller make calls to create test groups.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:124
&gt; +    static async _sortingToolsForCommitSets(rangeSpecifiedByCommitSets, allCommitSets)

What does sortingTools means in this context?
I really don&apos;t like these free-standing utility functions that does a lot of magical things inside.
It&apos;s a lot better if _findAndSortCommitSetsWithSameRepositorySetAsCommitSetInTargetTestGroup fetched commits logs, etc...

r- because this function needs to be broken up &amp; rewritten.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:126
&gt; +        const [oneCommitSet, anotherCommitSet] = rangeSpecifiedByCommitSets;

If rangeSpecifiedByCommitSets is actually a range, these commit sets should surely be called startSet and endSet.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:127
&gt; +        if (oneCommitSet.latestCommitTime() &amp;&amp; anotherCommitSet.latestCommitTime())

It&apos;s super unclear what the trune-ness of latestCommitTime() means.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:130
&gt; +                hasComparingKeys: (commitSet) =&gt; !! commitSet.latestCommitTime()

There should be no space between !! and commitSet.latestCommitTime.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:143
&gt; +            sortingRepositories.push(repository);

So we&apos;d put a repository to sortingRepositories only if it had ordering? That seems backwards.
If anything, we want them if latestCommitTime wasn&apos;t set &amp; order is present.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:185
&gt; +    static async _findAndSortCommitSetsWithSameRepositorySetAsCommitSetInTargetTestGroup(commitSetsInTestGroup, commitSetsToBeFiltered)

I think it&apos;s simpler to make this function take a single commit set, and a list of commits to filter from
since we don&apos;t currently support filtering based on combined set of repositories.
We can restructure the code as needs come up in the future.

In general, I find that the over generalization in code is usually a bad idea because we can&apos;t predict
what the future code &amp; feature would look like until we implement them.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:190
&gt; +        if (commitSetsInTestGroup.length != 2) {
&gt; +            AnalysisStrategies.logger.error(&apos;Can only bisect a test group with 2 commit sets&apos;);
&gt; +            return [];
&gt; +        }

Just assert this.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:192
&gt; +        const bothSimpleCommitSets = commitSetsInTestGroup.every((commitSet) =&gt; commitSet.withoutRootPatchOrOwnedCommit());

What&apos;s the point of having a local variable here?

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:193
&gt; +        if (!bothSimpleCommitSets) {

We should simply return without emitting an error message since we don&apos;t legitimately support this.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:199
&gt; +        const sameRepositories = (commitSet) =&gt; commitSet.repositories().length == allowedRepositories.size &amp;&amp;

This should really be a helper function on CommitSet.
Its name should be a verb, not noun / adjective. e.g. specifiesSameRepositories(commitSet).
In fact, it&apos;s redundant to create a set of repositories out of repositories() here
since CommitSet already has a bunch of sets that maps repository to a commit.
You can just check those sets directly instead.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:204
&gt; +            AnalysisStrategies.logger.error(&apos;CommitSets in test group have different repositories&apos;);
&gt; +            return [];

Again, we should simply exit early without an error message.
In my view, these error messages need to be generated by a higher level.
e.g. there is no use in showing these error messages to an end user in the front end for example.
So there is no reason to generate them.
Whatever backend code we write should be the one generating error messages.

&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:208
&gt; +        const sortingTools = await RangeSplitStrategies._sortingToolsForCommitSets(commitSetsInTestGroup, commitSetsWithSameRepositories);

It&apos;s super confusing that rangeSpecifiedByCommitSets is sometimes called commitSetsInTestGroup.
Also, this isn&apos;t really a &quot;range&quot;. It&apos;s simply a tuple of commit sets.
Why don&apos;t we call it commitSetsToSplit?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:170
&gt; +    async analysisConfigForTestGroup(testGroup)

What the heck is a config? Please don&apos;t make up a word like that.
Every new term we introduce is a new complexity a new maintainer of this codebase has to decipher.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:177
&gt; +        const allTestGroupsInTask = await TestGroup.fetchForTask(this.id());
&gt; +        const existingTestGroupNames = new Set;
&gt; +        for (const group of allTestGroupsInTask)
&gt; +            existingTestGroupNames.add(group.name());

This should really be a method on TestGroup or AnalysisTask.
AnalysisTaskPage&apos;s _hasDuplicateTestGroupName should be replaced by that.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:304
&gt; +    static createNameWithoutCollision(name, hasDuplicateTestGroupName)

As we discussed, we should have this in CommitSet instead.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:309
&gt; +        var nameWithNumberMatch = name.match(/(.+?)\s*\(\s*(\d+)\s*\)\s*$/);
&gt; +        var number = 1;

Please use const &amp; let.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:315
&gt; +        var newName;

Please use let.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:45
&gt; +    order() { return +this._rawData[&apos;order&apos;]; }

It doesn&apos;t make any sense to force it to be a number if it&apos;s null / undefined.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:91
&gt; +    withoutRootPatchOrOwnedCommit()

As we discussed in person, this needs to be a verb; e.g. containsRootPatchOrOwnedCommit().

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:164
&gt; +    static describeDifferencesBetweenCommitSets(firstCommitSet, secondCommitSet)

Why not simply diff?

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:170
&gt; +        const missingPatch = {filename: () =&gt; &apos;missing&apos;};

I think &quot;none&quot; is a more appropriate term to be used here
since it&apos;s okay for one side to be missing a patch.
In fact, we&apos;d expect that in most A/B testing.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:174
&gt; +                const newName = AnalysisTask.createNameWithoutCollision(name, (name) =&gt; existingNameSet.has(name));

As we discussed in person, CommitSet shouldn&apos;t rely on AnalysisTask like this.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:180
&gt; +        for (const repository of Array.from(allRepositories)) {

We should probably use Repository.sortByNamePreferringOnesWithURL here.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:194
&gt; +            const nameForFirstPatch = nameGenerator(firstPatch.filename());
&gt; +            const nameForSecondPath = nameGenerator(secondPatch.filename());

We should probably limit the length of a filename and abbreviate them as needed.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:211
&gt; +            nameParts.push(`Roots: ${leftRootFileDescription.length ? leftRootFileDescription : &apos;missing&apos;} - ${rightRootFileDescription.length ? rightRootFileDescription : &apos;missing&apos;}`);

I think &quot;none&quot; is more appropriate term to be used here
since it&apos;s not like we expect roots to be always present in both sides.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:347
&gt; +            currentGroup.task().analysisConfigForTestGroup(currentGroup).then((analysisConfigs) =&gt;
&gt; +                this.content(&apos;bisect-form&apos;).style.display = analysisConfigs.length ? null : &apos;none&apos;);

Ugh... this would mean that we&apos;d re-comptue this every time currentGroup changes.
That seems highly undesirable given it can end up fetching the data from the server,
and run a whole bunch of computations.
We should compute this result for each test group once and cache the result.
Also, we should never directly update the style attribute asynchronously like this.

This has a bug that if the current test group is changed multiple times,
whichever finished the last would determine whether the button is visible or not.
r- for this serious bug.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:810
&gt; +        const analysisConfigs = await this._task.analysisConfigForTestGroup(testGroup);

We shouldn&apos;t be re-computing this.
Just store the result somewhere the first time we computed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412516</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-06 16:43:46 -0700</bug_when>
    <thetext>I meant that those changes should be landed separately with tests, not in a single patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413064</commentid>
    <comment_count>15</comment_count>
      <attachid>337249</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-09 16:20:54 -0700</bug_when>
    <thetext>Comment on attachment 337249
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:143
&gt;&gt; +            sortingRepositories.push(repository);
&gt; 
&gt; So we&apos;d put a repository to sortingRepositories only if it had ordering? That seems backwards.
&gt; If anything, we want them if latestCommitTime wasn&apos;t set &amp; order is present.

If a commit of one repository had a latestCommitTime, we will hit the early return in line 128.

&gt;&gt; Websites/perf.webkit.org/public/v3/analysis-strategies.js:185
&gt;&gt; +    static async _findAndSortCommitSetsWithSameRepositorySetAsCommitSetInTargetTestGroup(commitSetsInTestGroup, commitSetsToBeFiltered)
&gt; 
&gt; I think it&apos;s simpler to make this function take a single commit set, and a list of commits to filter from
&gt; since we don&apos;t currently support filtering based on combined set of repositories.
&gt; We can restructure the code as needs come up in the future.
&gt; 
&gt; In general, I find that the over generalization in code is usually a bad idea because we can&apos;t predict
&gt; what the future code &amp; feature would look like until we implement them.

Line 216-218 rely on knowing the start and end commits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413874</commentid>
    <comment_count>16</comment_count>
      <attachid>337757</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-11 17:38:35 -0700</bug_when>
    <thetext>Created attachment 337757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413896</commentid>
    <comment_count>17</comment_count>
      <attachid>337764</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-11 18:36:33 -0700</bug_when>
    <thetext>Created attachment 337764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413897</commentid>
    <comment_count>18</comment_count>
      <attachid>337764</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-11 18:39:18 -0700</bug_when>
    <thetext>Comment on attachment 337764
Patch

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

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:49
&gt; +        const repositoriesWithCommitTime = new Set;
&gt; +        const commitRangeByRepository = new Map;
&gt; +        const indexForCommitWithOnlyOrderByRepository = new Map;
&gt; +        const fetchingPromises = [];
&gt; +        const allCommitsWithCommitTime = [];
&gt; +        for (const repository of oneCommitSet.topLevelRepositories()) {
&gt; +            const oneCommit = oneCommitSet.commitForRepository(repository);
&gt; +            const anotherCommit = anotherCommitSet.commitForRepository(repository);
&gt; +            if (oneCommit === anotherCommit)
&gt; +                continue;
&gt; +
&gt; +            if (oneCommit.hasCommitTime() &amp;&amp; anotherCommit.hasCommitTime()) {
&gt; +                const [startCommit, endCommit] = oneCommit.time() &lt; anotherCommit.time() ? [oneCommit, anotherCommit] : [anotherCommit, oneCommit];
&gt; +                commitRangeByRepository.set(repository, [startCommit, endCommit]);
&gt; +                fetchingPromises.push(CommitLog.fetchBetweenRevisions(repository, startCommit.revision(), endCommit.revision()).then((commits) =&gt; {
&gt; +                    allCommitsWithCommitTime.push(startCommit, ...commits)}));
&gt; +                repositoriesWithCommitTime.add(repository);
&gt; +                continue;
&gt; +            }
&gt; +
&gt; +            fetchingPromises.push(Promise.all([CommitLog.fetchForSingleRevision(repository, oneCommit.revision()),
&gt; +                CommitLog.fetchForSingleRevision(repository, anotherCommit.revision())]).then(() =&gt; {
&gt; +                if (!oneCommit.hasCommitOrder() || !anotherCommit.hasCommitOrder())
&gt; +                    return;
&gt; +                const [startCommit, endCommit] = oneCommit.order() &lt; anotherCommit.order() ? [oneCommit, anotherCommit] : [anotherCommit, oneCommit];
&gt; +                commitRangeByRepository.set(repository, [startCommit, endCommit]);
&gt; +                return CommitLog.fetchBetweenRevisions(repository, startCommit.revision(), endCommit.revision()).then((commits) =&gt; {
&gt; +                    const indexByCommit = new Map;
&gt; +                    commits = [startCommit, ...commits];
&gt; +                    commits.forEach((commit, index) =&gt; indexByCommit.set(commit, index));
&gt; +                    indexForCommitWithOnlyOrderByRepository.set(repository, indexByCommit);
&gt; +                });
&gt; +            }));
&gt; +        }
&gt; +        await Promise.all(fetchingPromises);

This does what in step 1 describes.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:54
&gt; +        let sortedCommitSets = MiddleCommitSetFinder._filterSortAndUniqueCommitSets(oneCommitSet, availableCommitSets, commitRangeByRepository, repositoriesWithCommitTime, [...indexForCommitWithOnlyOrderByRepository.keys()]);

This does what in step 2 describes.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:62
&gt; +        let remainingCommitSets = MiddleCommitSetFinder._findCommitSetsClosestToMiddleOfCommitsWithTime(sortedCommitSets.slice(1, -1), repositoriesWithCommitTime, allCommitsWithCommitTime);

This does what in step 3 describes.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:63
&gt; +        remainingCommitSets = MiddleCommitSetFinder._findCommitSetsClosestToMiddleOfCommitsWithOrder(remainingCommitSets, indexForCommitWithOnlyOrderByRepository);

This does what in step 4 describes.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:64
&gt; +        return MiddleCommitSetFinder._chooseCommitSetClosestToMiddleOfSortedCommitSetsAmongRemainingCommitSets(remainingCommitSets, sortedCommitSets);

This does what step 5 describes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414332</commentid>
    <comment_count>19</comment_count>
      <attachid>337764</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-13 00:23:50 -0700</bug_when>
    <thetext>Comment on attachment 337764
Patch

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

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:4
&gt; +class MiddleCommitSetFinder {

I&apos;d call this CommitSetRangeBisector or CommitSetRangeSplitter instead if I were you.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:9
&gt; +        const [oneCommitSet, anotherCommitSet] = commitSetsToSplit;
&gt; +        if (oneCommitSet.containsRootPatchOrOwnedCommit() || anotherCommitSet.containsRootPatchOrOwnedCommit())

&quot;one&quot; and &quot;another&quot; are terrible names.
Call them &quot;first&quot; &amp; &quot;last&quot; or &quot;start&quot; &amp; &quot;end&quot;.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:20
&gt; +        for (const repository of oneCommitSet.topLevelRepositories()) {

It would be cleaner for this to be
filter((repository) =&gt; firstCommitSet.commitForRepository(repository) != lastCommitSet.commitForRepository(repository))
then map since every repository after the identity check results in exactly one promise.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:28
&gt; +                const [startCommit, endCommit] = oneCommit.time() &lt; anotherCommit.time() ? [oneCommit, anotherCommit] : [anotherCommit, oneCommit];
&gt; +                commitRangeByRepository.set(repository, [startCommit, endCommit]);

We should add a helper function to order/sort commits to CommitLog and do:
commitRangeByRepository.set(repository, CommitLog.orderCommits([startCommit, endCommit]));
outside of this if.
We should probably also add CommitLog.hasOrdering(startCommit, endCommit) which returns false
if startCommit.hasCommitTime() != endCommit.hasCommitTime() || startCommit.hasCommitOrder() != endCommit.hasCommitOrder()
(the arguments should probably be called firstCommit &amp; secondCommit).

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:30
&gt; +                    allCommitsWithCommitTime.push(startCommit, ...commits)}));

Missing ; and a new line after push(~).

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:31
&gt; +                repositoriesWithCommitTime.add(repository);

I think it would be cleaner to split the list by filtering twice
to create one list for commits with commit time, and another one with order
instead of updating sets &amp; arrays like this while iterating over repositories.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:40
&gt; +                const [startCommit, endCommit] = oneCommit.order() &lt; anotherCommit.order() ? [oneCommit, anotherCommit] : [anotherCommit, oneCommit];
&gt; +                commitRangeByRepository.set(repository, [startCommit, endCommit]);

Once you have CommitLog.hasOrdering &amp; commitLog.orderCommits,
all of this code should be shared with the code inside the above if statement.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:43
&gt; +                    commits = [startCommit, ...commits];

Why do we need to create a new list?? Can&apos;t we just use -1 for startCommit&apos;s index or + 1 in forEach below?

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:67
&gt; +    static _filterSortAndUniqueCommitSets(oneCommitSetFromTestGroup, availableCommitSets, commitRangeByRepository, repositoriesWithCommitTime, repositoryWithOnlyCommitOrder) {

This doesn&apos;t tell us what criteria is used to filter. Also, passing in this many arguments usually means
this is not the right abstraction layer to extract as a helper function.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:68
&gt; +        const commitSetsInRange = availableCommitSets.filter((commitSet) =&gt; {

This should be its own helper function, and we should directly call it in commitSetClosestToMiddleOfAllCommits

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:69
&gt; +            if (!commitSet.hasSameRepositories(oneCommitSetFromTestGroup))

I don&apos;t think this function cares whether commit set is from the test group or not.
What&apos;s important here is that this is the commit set we use to filter other ones.
So the variable name should reflect that. maybe filteringCommitSet?
Now that think about it, it might be cleaner for this helper function to simply take an array of repositories instead.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:75
&gt; +                const [startCommit, endCommit] = commitRangeByRepository.get(repository);

So commitRangeByRepository is only used by this code to filter commit sets.
Why can&apos;t this store a closure which checks the filtering condition instead.
i.e. why can&apos;t we simply do:
if (!commitRangeByRepository.get(repository)(commit))
    return false;
where the map returns a closure which evaluates to true if the commit was in the range.
Obviously, we should rename the variable if we did do that.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:90
&gt; +        const sortedCommitSets = commitSetsInRange.sort((commitSet0, commitSet1) =&gt; {

Again, this should be a helper function on its own, and be called directly in commitSetClosestToMiddleOfAllCommits.
Why are we so inconsistent in naming function arguments?
We should be calling these firstCommitSet, secondCommitSet.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:115
&gt; +        const sortedUniqueCommitSets = [sortedCommitSets[0]];
&gt; +        for (let i = 1; i &lt; sortedCommitSets.length; i += 1) {
&gt; +            const previousCommitSet = sortedCommitSets[i - 1];
&gt; +            const currentCommitSet = sortedCommitSets[i];
&gt; +            if (!previousCommitSet.equals(currentCommitSet))
&gt; +                sortedUniqueCommitSets.push(currentCommitSet);
&gt; +        }
&gt; +        return sortedUniqueCommitSets;

This can be rewritten more concisely as: commitSets.filter((currentSet, i) =&gt; !i || !currentSet.equals(commitSets[i - 1]));

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:118
&gt; +    static _findCommitSetsClosestToMiddleOfCommitsWithTime(sortedCommitSets, repositoriesWithCommitTime, allCommitsWithCommitTime) {

This function isn&apos;t really finding a commit set closest to the middle. It&apos;s filtering the list of commit sets.
How about _closestCommitSetsToBisectingCommitByTime?
Note that we normally don&apos;t use verbs such as &quot;find&quot; and &quot;get&quot; unless they involve an out argument.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:123
&gt; +        allCommitsWithCommitTime.sort((commit0, commit1) =&gt; commit0.time() - commit1.time())

Please name these as firstCommit and secondCommit.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:126
&gt; +        const commitWithTimeToCommitSets = new Map;

Since this function is named _findCommitSetsClosestToMiddleOfCommitsWithTime,
we can simply call this commitToCommitSetMap.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:150
&gt; +    static _findCommitSetsClosestToMiddleOfCommitsWithOrder(remainingCommitSets, indexForCommitWithOnlyOrderByRepository) {

Nit: all these functions should have { on new line.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:155
&gt; +        for (const repository of indexForCommitWithOnlyOrderByRepository.keys()) {

This is pretty much the exact same code as the one in _findCommitSetsClosestToMiddleOfCommitsWithTime.
We should extract this as a helper function.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:168
&gt; +            for (const commitSet of remainingCommitSets) {

This is pretty much the same code we have in _findCommitSetsClosestToMiddleOfCommitsWithTime.
The only difference being whether we have an enumerable set of commits vs. commit sets.
We should extract a helper function for this.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:185
&gt; +    static _chooseCommitSetClosestToMiddleOfSortedCommitSetsAmongRemainingCommitSets(remainingCommitSets, sortedCommitSets) {

&quot;AmongRemaingCommitSets&quot; doesn&apos;t add any additional information.

&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:193
&gt; +        const indexInSortedCommitSets = new Map;
&gt; +        sortedCommitSets.forEach((commitSet, index) =&gt; indexInSortedCommitSets.set(commitSet, index));

Why can&apos;t simply return remainingCommitSets[Math.floor(remainingCommitSets.length / 2)]?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:170
&gt; +    async middleCommitSetForTestGroup(testGroup)

We shouldn&apos;t be adding a method which relies on MiddleCommitSetFinder to AnalysisTask.
That&apos;s a layering violation if any.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:178
&gt; +    async aggregateCommitSets()

This doesn&apos;t make it clear from where we&apos;re aggregating commit sets.
How about commitSetsFromTestGroupsAndMeasurementSet?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:189
&gt; +        await measurementSet.fetchBetween(this.startTime(), this.endTime());

This will throw an exception on a custom analysis task.
We should check the true-ness of platform &amp; metric.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:38
&gt; +    hasCommitTime() { return this._rawData[&apos;time&apos;] &gt; 0 &amp;&amp; this._rawData[&apos;time&apos;] !== null &amp;&amp; this._rawData[&apos;time&apos;] !== undefined; }

Just use != null. In JS, null == undefined but null !== undefined.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:46
&gt; +    hasCommitOrder() { return this._rawData[&apos;order&apos;] !== null &amp;&amp; this._rawData[&apos;order&apos;] !== undefined; }

Ditto. Note 0 != null and 0 != undefined in JS.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:122
&gt; +    hasSameRepositories(commitSet)

We should probably call this hasSameTopLevelRepositories since we don&apos;t check owned commits&apos; repositories.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:274
&gt; +            this.dispatchAction(&apos;analyzeTestGroup&apos;, this._currentTestGroup, middleCommitSet, repetitionCount);

&quot;analyzeTestGroup&quot; is a very generic/vague name.
We should simply match the name of the part, and call it bisectTestGroup.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:289
&gt; +            await Promise.all(fetchingPromises);

We can&apos;t block the updating of all UI until all commits are fetched.
We need to simply enqueueToRender once this work is done.
r- because this would cause a serious UI rendering delay.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:819
&gt; +    async _analyzeCurrentTestGroup(testGroup, middleCommitSet, repetitionCount)

Ditto abut this generic name. This should be _bisectTestGroup since whether the test group is current or not is irrelevant for this function.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:823
&gt; +        const commitSets = [oneCommitSet, middleCommitSet, anotherCommitSet];

Why don&apos;t we make this function take a list of commit sets instead?

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:824
&gt; +        const platform = this._task.platform() || testGroup.platform();

How can task not have a platform but a test group can for a non-custom analysis task?

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:832
&gt; +                const testGroups =  await TestGroup.createWithCustomConfiguration(this._task, platform, testGroup.test(), testGroupName, repetitionCount, [previousCommitSet, currentCommitSet]);

Nit: Two spaces between = and await.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:835
&gt; +                alert(&apos;Failed to create a new test group: &apos; + error);

We should probably break immediately when the attempt to create the first test group failed
instead of preceding to create the second test groups after showing an error message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414514</commentid>
    <comment_count>20</comment_count>
      <attachid>337764</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-13 14:19:48 -0700</bug_when>
    <thetext>Comment on attachment 337764
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:9
&gt;&gt; +        if (oneCommitSet.containsRootPatchOrOwnedCommit() || anotherCommitSet.containsRootPatchOrOwnedCommit())
&gt; 
&gt; &quot;one&quot; and &quot;another&quot; are terrible names.
&gt; Call them &quot;first&quot; &amp; &quot;last&quot; or &quot;start&quot; &amp; &quot;end&quot;.

&quot;first&quot; &amp; &quot;last&quot; or &quot;start&quot; &amp; &quot;end&quot; may imply the order of commitSetsToSplit. It should be still legitimate that the commitSetToSplit is ordered in descendingly. Personally, I think first and second may be more appropriate here.

&gt;&gt; Websites/perf.webkit.org/public/v3/middle-commit-set-finder.js:115
&gt;&gt; +        return sortedUniqueCommitSets;
&gt; 
&gt; This can be rewritten more concisely as: commitSets.filter((currentSet, i) =&gt; !i || !currentSet.equals(commitSets[i - 1]));

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415072</commentid>
    <comment_count>21</comment_count>
      <attachid>338090</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-17 01:26:31 -0700</bug_when>
    <thetext>Created attachment 338090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415556</commentid>
    <comment_count>22</comment_count>
      <attachid>338218</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-18 09:13:48 -0700</bug_when>
    <thetext>Created attachment 338218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1415870</commentid>
    <comment_count>23</comment_count>
      <attachid>338218</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-18 22:22:21 -0700</bug_when>
    <thetext>Comment on attachment 338218
Patch

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

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:17
&gt; +        const indexForCommitWithOnlyOrderByRepository = new Map;

I think we need to rename this to indexForAllTimelessCommitsWithOrderByRepository,
and explain in the change log that we have to build this map for all commits as opposed to the remaining commits
because we care about the distance between commits considering commits not appearing any of commit sets we have.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:21
&gt; +            .filter((repository) =&gt; firstCommitSet.commitForRepository(repository) !== secondCommitSet.commitForRepository(repository));

Check has ordering here as well.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:32
&gt; +            fetchingPromises.push(CommitLog.fetchBetweenRevisions(repository, startCommit.revision(), endCommit.revision())

And then map the result.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:33
&gt; +                .then((commits) =&gt; {

That way, you can us await here like so:
await Promise.all(topLevelRepositoriesWithCommitChange.map((repository) =&gt; {
    const commits = await CommitLog.fetchBetweenRevisions(repository, startCommit.revision(), endCommit.revision());
    ...
}));

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:54
&gt; +        const commitSetsInRange = CommitSetRangeBisector._findCommitSetsWithinRange(firstCommitSet, availableCommitSets, commitRangeByRepository);

We can just do: this._findCommitSetsWithinRange

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:85
&gt; +    static _sortAndUniqueCommitSets(commitSets, repositoriesWithCommitTime, repositoryWithOnlyCommitOrder)

This function name doesn&apos;t tell us what kind of sorting we&apos;re doing.
It should be renamed to something that describes how we&apos;re sorting; e.g. orderCommitSetsByTimeThenOrder

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:87
&gt; +        const sortedCommitSets = commitSets.sort((firstCommitSet, secondCommitSet) =&gt; {

I think it&apos;s cleaner to first make the copy of commitSets.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:93
&gt; +                if (firstCommit.time() === secondCommit.time())
&gt; +                    continue;
&gt; +                return firstCommit.time() - secondCommit.time();

Just do:
const diff = firstCommit.time() - secondCommit.time();
if (!diff)
   continue;
return diff;

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:100
&gt; +                if (firstCommit.order() === secondCommit.order())
&gt; +                    continue;
&gt; +                return firstCommit.order() - secondCommit.order();

Ditto.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:127
&gt; +        const commitOnlyOrderAvailableToCommitSets = CommitSetRangeBisector._buildCommitToCommitSetMap(indexForCommitWithOnlyOrderByRepository.keys(), remainingCommitSets);

This variable name is rather long &amp; confusing. How about commitWithOrderToCommitSets?

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:130
&gt; +            const commits = remainingCommitSets.map((commitSet) =&gt; commitSet.commitForRepository(repository));

I think should call this one: commitsInRemainingSetsForCurrentRepository.

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:132
&gt; +            const commitSets = commitOnlyOrderAvailableToCommitSets.get(closestCommit);

Since we have so many sets &amp; maps, we should be slightly more explicit than &quot;commitSets&quot;.
How about commitSetsContainingClosestCommit?

&gt; Websites/perf.webkit.org/public/v3/commit-set-range-bisector.js:154
&gt; +    static _findClosestCommitByIndex(indexByCommit, commits)

This doesn&apos;t tell us closest to what.
Maybe _findCommitClosestToMiddleIndex?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:172
&gt; +        const allTestGroupsInTask = await TestGroup.fetchForTask(this.id());

I think this code should be below where measurementSet.fetchBetween happens so that the fetching could be parallelized.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:180
&gt; +        console.assert(platform);
&gt; +        console.assert(metric);

I think we should just return an empty list instead of asserting.

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:183
&gt; +        await measurementSet.fetchBetween(this.startTime(), this.endTime());

Can we have blank lines around await?

&gt; Websites/perf.webkit.org/public/v3/models/analysis-task.js:190
&gt; +        for (const point of timeSeriesView)
&gt; +            allCommitSetsInTask.add(point.commitSet());

I don&apos;t think checking equality with Set is useful because MeasurementAdaptor
creates a unique MeasurementCommitSet for each data point.
Why don&apos;t we just map and extract each commit set instead?

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:100
&gt; +            firstCommit.hasCommitOrder() &amp;&amp; secondCommit.hasCommitOrder();

Nit: || should be on this line, and we should wrap this condition in parentheses as well.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:107
&gt; +        const firstCommitSmaller = (firstCommit.hasCommitTime() &amp;&amp; secondCommit.hasCommitTime()
&gt; +            &amp;&amp; firstCommit.time() &lt; secondCommit.time()) || firstCommit.order() &lt; secondCommit.order();

This is not right. We need to use tertiary expression here:
firstCommit.hasCommitTime() &amp;&amp; secondCommit.hasCommitTime() ? firstCommit.time() &lt; secondCommit.time() : firstCommit.order() &lt; secondCommit.order()
In fact, we can just check firstCommit.hasCommitTime() since we&apos;re asserting that two commits have an order already.

Also, please add a test for this.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:124
&gt; +        return commitSet.repositories().length === this._repositoryToCommitMap.size &amp;&amp;

Nit: &amp;&amp; should be on the new line.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:154
&gt; +    containsRootPatchOrOwnedCommit()

Can we just say containsRootOrPatchOrOwnedCommit?
&quot;RootPatch&quot; sounds like one word as opposed to two words with missing comma.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:261
&gt; +        this._middleCommitSetByTestGroup = null;

I think should call this _bisectingCommitSetByTestGroup to match the terminology elsewhere.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:283
&gt; +        const testGroupIdSet = new Set(testGroups.map((testGroup) =&gt; testGroup.id()));
&gt; +        const sameTestGroups = this._testGroups.length === testGroups.length &amp;&amp; this._testGroups.every((testGroup) =&gt; testGroupIdSet.has(testGroup.id()));

I don&apos;t think this is right because we&apos;re getting the filtered test groups, which is affected by their hidden state.
Use TestGroup.findAllByTask instead.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:290
&gt; +            this._middleCommitSetByTestGroup = new Map;

This should be reset using a lazily evaluated function.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:291
&gt; +            const fetchingPromises = testGroups.map(async (testGroup) =&gt; {

We should probably just compute this for the current test group.

&gt; Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js:831
&gt; +            const testGroupName = CommitSet.createNameWithoutCollision(CommitSet.diff(previousCommitSet, currentCommitSet), existingTestGroupNames);

Use createAndRefetchTestGroups instead since we&apos;re not gonna support custom analysis tasks here.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:7
&gt; +let MockModels = require(&apos;./resources/mock-v3-models.js&apos;).MockModels;
&gt; +let MockRemoteAPI = require(&apos;./resources/mock-remote-api.js&apos;).MockRemoteAPI;

Use const.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:183
&gt; +        let requests = MockRemoteAPI.inject();

Use const.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:200
&gt; +            const promise = CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits([startCommitSet, endCommitSet], allCommitSets);
&gt; +            const middleCommitSet = await promise;

We don&apos;t the local variable &quot;promise&quot;. Just await directly.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:204
&gt; +        it(&apos;should throw exception if failed to fetch commit log&apos;, async () =&gt; {

throw exception when*

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:216
&gt; +                assert.equal(error, rejectReason);

Try using assert.throws instead.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:221
&gt; +        it(&apos;should return &quot;null&quot; if no commit set is find other than the commit sets define the range&apos;, async () =&gt; {

No commit set is found* other than the commit sets that* define

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:225
&gt; +            let promise = CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits([startCommitSet, endCommitSet], [startCommitSet, endCommitSet]);

Use const.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:232
&gt; +                        repository: MockModels.osx.id(),

Can we store MockModels.osx &amp; MockModels.webkit as local variables so that we don&apos;t keep repeating?

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:291
&gt; +        it(&apos;should return bisection point closest to the middle of revision range&apos;, async () =&gt; {

return bisecting* commit set* closest to the middle.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:295
&gt; +            let promise = CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits([startCommitSet, endCommitSet], allCommitSets);

Uset const.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:298
&gt; +            const osx_fetch_request = requests.find((fetch_request) =&gt; fetch_request.url === &apos;/api/commits/9/?precedingRevision=osx-commit-1&amp;lastRevision=osx-commit-3&apos;);
&gt; +            const webkit_fetch_request = requests.find((fetch_request) =&gt; fetch_request.url === &apos;/api/commits/11/?precedingRevision=webkit-commit-1&amp;lastRevision=webkit-commit-6&apos;);

Use camelCase.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:359
&gt; +            const middleCommitSet = await promise;
&gt; +            const expectedMiddleCommitSet = allCommitSets[3];
&gt; +            assert.equal(middleCommitSet, expectedMiddleCommitSet);

I don&apos;t we think we need to split this into three different lines.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:362
&gt; +        it(&apos;should return same bisection point even when two commit sets from original commit set have inversed order&apos;, async () =&gt; {

have inverted* order or inverse* order

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:366
&gt; +            let promise = CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits([endCommitSet, startCommitSet], allCommitSets);

Use const.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:427
&gt; +            const middleCommitSet = await promise;
&gt; +            const expectedMiddleCommitSet = allCommitSets[3];
&gt; +            assert.equal(middleCommitSet, expectedMiddleCommitSet);

Ditto about fitting all of this into a single line.

&gt; Websites/perf.webkit.org/unit-tests/commit-set-range-bisector-tests.js:525
&gt; +});

I think we need a few more test cases.
1. The case when a subset of commit sets contain more owned repositories than others, and vice versa.
2. Cases where the order of commits in two different repositories are reversed in some repositories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416084</commentid>
    <comment_count>24</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-19 15:17:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/34471300&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336260</attachid>
            <date>2018-03-21 21:13:55 -0700</date>
            <delta_ts>2018-03-29 16:52:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180321211355.patch</filename>
            <type>text/plain</type>
            <size>31935</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODQzCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlMTAzMTlkYzM1MmU2Nzg2OTE1MmEwYTUxZDQ0ODkxN2Y5ZDJmZTExLi43NTEzOTJkMTMy
YzJjMTM5MWU4NmRkOWUwZjY3NmNjMDRjYTc3OGYzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxOC0wMy0yMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXRzaW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbi4KKworICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYW5h
bHlzaXMtdGFzay5qczoKKyAgICAgICAgKEFuYWx5c2lzVGFzay5wcm90b3R5cGUuYXN5bmMuYmlz
ZWN0Q29uZmlnRm9yVGVzdEdyb3VwKTogUHJlcGFyZXMgaW5mb3JtYXRpb24gYW5kIGludm9rZXMg
YSBiaXNlY3Rpb24gc3RyYXRlZ3kgdG8gZ2V0IGEgYmlzZWN0aW9uIGNvbmZpZy4KKyAgICAgICAg
VXBkYXRlIHRoZSB0ZXN0IG5hbWUgd2hlbiBuZWNlc3NhcnkgdG8gYXZvaWQgbmFtZSBjb2xsaXNp
b24uCisgICAgICAgIChBbmFseXNpc1Rhc2suYXN5bmMucGVyZm9ybUJpbmFyeUJpc2VjdDogQmFz
ZWQgb24gZXhzdGluZyBkYXRhIHBvaW50cyBhbmQgdGVzdCBncm91cHMsIGludm9rZXMgYSBzZWxl
Y3RCaXNlY3Rpb25Qb2ludFN0cmF0ZWd5IHRvIGZpbmQgYQorICAgICAgICBtaWRkbGUgcG9pbnQg
YW5kIHJldHVybnMgYSBwcm9wb3NlZCBiaXNlY3Rpb24gY29uZmlnLgorICAgICAgICAoQW5hbHlz
aXNUYXNrLmFzeW5jLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3Rh
bmNlKTogSW5zdGVhZCBvZiBuYWl2ZWx5IHJldHVybmluZyB0aGUgbWlkZGxlIG9mIGV4aXN0aW5n
IGNvbW1pdCBzZXQgYXJyYXksCisgICAgICAgIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyBhIGJpc2Vj
dCBiaXNlY3Rpb24gcG9pbnRzIHRoYXQgaXMgY2xvc2VzdCB0byBhY3R1YWxseSBtaWRkbGUgb2Yg
dGhlIHJldmlzaW9uIHJhbmdlIGJhc2VkIG9uIGFsbCByZXZpc2lvbnMgcmVwb3J0ZWQKKyAgICAg
ICAgdG8gcGVyZm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAgICAoQW5hbHlzaXNUYXNrLm5hbWVG
b3JDb21taXRTZXQpOiBCYXNlZCBvbiB0aGUgcGVyZiBjb25maWcsIGl0IHJldHVybnMgdGhlIG5h
bWUgZm9yIHRlc3QgZ3JvdXAgd2hpY2ggb25seSBzaG93cyB0aGUgY2hhbmdlZCByZXBvc2l0b3Jp
ZXMKKyAgICAgICAgYW5kIHJldmlzaW9ucy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2Nv
bW1pdC1zZXQuanM6CisgICAgICAgIChDb21taXRTZXQucHJvdG90eXBlLmlzU2ltcGxlQ29tbWl0
U2V0KTogUmV0dXJucyBmYWxzZSB3aGVuIGEgY29tbWl0IHNldCBoYXMgcm9vdCwgcGF0Y2ggb3Ig
b3duZWQgY29tbWl0LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qczoK
KyAgICAgICAgKFRlc3RHcm91cCk6CisgICAgICAgIChUZXN0R3JvdXAucHJvdG90eXBlLl9jb21w
dXRlUmVxdWVzdGVkQ29tbWl0U2V0cy5zZXQgcmV0dXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFRl
c3RHcm91cC5wcm90b3R5cGUuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLnNldCByZXF1ZXN0
ZWRDb21taXRTZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2Nv
bXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLmNvbnN0LnNldCByZXF1ZXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpz
OiBBZGRlZCBiaXNlY3QgYnV0dG9uLgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFu
ZS5wcm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rh
c2tUZXN0R3JvdXBQYW5lLnByb3RvdHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6CisgICAg
ICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmh0bWxUZW1wbGF0ZSk6CisgICAgICAgIChB
bmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEFuYWx5c2lz
VGFza1Rlc3RHcm91cFBhbmUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUu
ZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3Rv
dHlwZS5fcmV0cnlDdXJyZW50VGVzdEdyb3VwKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2Uu
cHJvdG90eXBlLmFzeW5jLl9iaXNlY3RDdXJyZW50VGVzdEdyb3VwKTogQWRkZWQgdGhpcyBmdWN0
aW9uIHRvIHJlYWN0IHdoZW4gJ2Jpc2VjdCcgYnV0dG9uIGlzIGNsaWNrZWQuCisgICAgICAgIChB
bmFseXNpc1Rhc2tQYWdlLmNyZWF0ZU5hbWVGb3JUZXN0R3JvdXBXaXRob3V0Q29sbGlzaW9uKTog
RXh0ZW5kcyAnX2NyZWF0ZVJldHJ5TmFtZUZvclRlc3RHcm91cCcgc28gdGhhdCBpdCBub3cgaXMg
YSBzdGF0aWMgZnVuY3Rpb24gYW5kCisgICAgICAgIGFjY2VwdHMgYSAnaGFzRHVwbGljYXRlVGVz
dEdyb3VwTmFtZScgZnVuY3Rpb24gYXMgYXJ1Z21lbnQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQ
YWdlLnByb3RvdHlwZS5fY3JlYXRlUmV0cnlOYW1lRm9yVGVzdEdyb3VwKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB1bml0LXRlc3RzL2FuYWx5c2lzLXRhc2stdGVzdHMuanM6IEFkZGVkIHVuaXQgdGVz
dHMuCisKIDIwMTgtMDMtMTkgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVwZGF0ZSBQZXJmIGJ1aWxkYm90IHN5bmNpbmcgc2NyaXB0cyBmb3IgQnVpbGRi
b3QgMC45CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9hbmFseXNpcy10YXNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwppbmRleCA2ZTIyMjg1NjgxNThkZGMxMzg4MmM4YjNk
NzdmYWM0NGY4YmE5MmU5Li4yNDc3MTFjZjdlZjVjYjRjYzhiMTc2ZmZmNzZiNzE3YTUwYzRhYWNj
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9h
bmFseXNpcy10YXNrLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2FuYWx5c2lzLXRhc2suanMKQEAgLTE2Nyw2ICsxNjcsMTc2IEBAIGNsYXNzIEFuYWx5
c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0ZWdvcnk7
CiAgICAgfQogCisgICAgYXN5bmMgYmlzZWN0Q29uZmlnRm9yVGVzdEdyb3VwKHRlc3RHcm91cCwg
bWVhc3VyZW1lbnRTZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0ZXN0R3JvdXAu
dGFzaygpID09IHRoaXMpOworCisgICAgICAgIGNvbnN0IHJlcXVlc3RlZENvbW1pdFNldCA9IHRl
c3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CisgICAgICAgIGNvbnN0IGFsbFRlc3RHcm91
cHNJblRhc2sgPSBUZXN0R3JvdXAuZmluZEFsbEJ5VGFzayh0aGlzLmlkKCkpOworICAgICAgICBj
b25zdCBhbGxDb21taXRTZXRzSW5UYXNrID0gbmV3IFNldDsKKyAgICAgICAgY29uc3QgZXhpc3Rp
bmdUZXN0R3JvdXBOYW1lcyA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Yg
YWxsVGVzdEdyb3Vwc0luVGFzaykgeworICAgICAgICAgICAgZ3JvdXAucmVxdWVzdGVkQ29tbWl0
U2V0cygpLmZvckVhY2goKGNvbW1pdFNldCkgPT4gYWxsQ29tbWl0U2V0c0luVGFzay5hZGQoY29t
bWl0U2V0KSk7CisgICAgICAgICAgICBleGlzdGluZ1Rlc3RHcm91cE5hbWVzLmFkZChncm91cC5u
YW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRT
ZXQuZmV0Y2hlZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBj
b25zdCBzdGFydFBvaW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElk
KCkpOworICAgICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1l
YXN1cmVtZW50SWQoKSk7CisKKyAgICAgICAgY29uc3QgcG9pbnRBZnRlckVuZCA9IGVuZFBvaW50
LnNlcmllcy5uZXh0UG9pbnQoZW5kUG9pbnQpOworICAgICAgICBmb3IgKGxldCBwb2ludCA9IHN0
YXJ0UG9pbnQ7IHBvaW50ICYmIHBvaW50ICE9IHBvaW50QWZ0ZXJFbmQ7IHBvaW50ID0gcG9pbnQu
c2VyaWVzLm5leHRQb2ludChwb2ludCkpCisgICAgICAgICAgICBhbGxDb21taXRTZXRzSW5UYXNr
LmFkZChwb2ludC5jb21taXRTZXQoKSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNv
bnN0IGJpc2VjdENvbmZpZ3MgPSBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2Vj
dChyZXF1ZXN0ZWRDb21taXRTZXQsIFsuLi5hbGxDb21taXRTZXRzSW5UYXNrXSwgQW5hbHlzaXNU
YXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKTsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgYmlzZWN0Q29uZmlnIG9mIGJpc2VjdENvbmZpZ3MpCisgICAg
ICAgICAgICAgICAgYmlzZWN0Q29uZmlnLm5hbWUgPSBBbmFseXNpc1Rhc2tQYWdlLmNyZWF0ZU5h
bWVGb3JUZXN0R3JvdXBXaXRob3V0Q29sbGlzaW9uKGJpc2VjdENvbmZpZy5uYW1lLCAobmFtZSkg
PT4gZXhpc3RpbmdUZXN0R3JvdXBOYW1lcy5oYXMobmFtZSkpOworICAgICAgICAgICAgcmV0dXJu
IGJpc2VjdENvbmZpZ3M7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBh
bGVydChgRmFpbGVkIHRvIEJpc2VjdCB0ZXN0IGdyb3VwICR7dGVzdEdyb3VwLm5hbWUoKX1gKQor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGFzeW5jIHBlcmZvcm1CaW5hcnlCaXNlY3Qo
Y29tbWl0U2V0SW5UZXN0R3JvdXAsIGFsbENvbW1pdFNldHNJblRhc2ssIHNlbGVjdEJpc2VjdGlv
blBvaW50U3RyYXRlZ3kpCisgICAgeworICAgICAgICBpZiAoY29tbWl0U2V0SW5UZXN0R3JvdXAu
bGVuZ3RoICE9IDIpCisgICAgICAgICAgICB0aHJvdyAnQ2FuIG9ubHkgYmlzZWN0IGEgdGVzdCBn
cm91cCB3aXRoIDIgY29tbWl0IHNldHMnOworCisgICAgICAgIGNvbnN0IGNvbW1pdFNldFNvcnRC
eUxhdGVzdENvbW1pdFRpbWUgPSAob25lQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0KSA9PiBv
bmVDb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpIC0gYW5vdGhlckNvbW1pdFNldC5sYXRlc3RD
b21taXRUaW1lKCk7CisgICAgICAgIGNvbnN0IFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0
XSA9IGNvbW1pdFNldEluVGVzdEdyb3VwLnNvcnQoY29tbWl0U2V0U29ydEJ5TGF0ZXN0Q29tbWl0
VGltZSk7CisgICAgICAgIGNvbnN0IGFsbFNpbXBsZUNvbW1pdFNldHMgPSBzdGFydENvbW1pdFNl
dC5pc1NpbXBsZUNvbW1pdFNldCgpICYmIGVuZENvbW1pdFNldC5pc1NpbXBsZUNvbW1pdFNldCgp
OworICAgICAgICBpZiAoIWFsbFNpbXBsZUNvbW1pdFNldHMpCisgICAgICAgICAgICB0aHJvdyAn
Q2Fubm90IGJpc2VjdCBvbiBhIHJhbmdlIHdpdGggcm9vdC9wYXRjaC9vd25lZCBjb21taXQnOwor
CisgICAgICAgIGNvbnN0IGFsbG93ZWRSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KHN0YXJ0Q29tbWl0
U2V0LnJlcG9zaXRvcmllcygpKTsKKyAgICAgICAgaWYgKGVuZENvbW1pdFNldC5yZXBvc2l0b3Jp
ZXMoKS5sZW5ndGggIT0gYWxsb3dlZFJlcG9zaXRvcmllcy5zaXplCisgICAgICAgICAgICB8fCAh
ZW5kQ29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmV2ZXJ5KChyZXBvc2l0b3J5KSA9PiBhbGxvd2Vk
UmVwb3NpdG9yaWVzLmhhcyhyZXBvc2l0b3J5KSkpCisgICAgICAgICAgICB0aHJvdyAnQ29tbWl0
U2V0cyBpbiB0ZXN0IGdyb3VwIGhhdmUgZGlmZmVyZW50IHJlcG9zaXRvcmllcyc7CisKKyAgICAg
ICAgY29uc3QgY29tcGF0aWJsZUNvbW1pdFNldHMgPSBhbGxDb21taXRTZXRzSW5UYXNrLmZpbHRl
cigoY29tbWl0U2V0KSA9PgorICAgICAgICAgICAgY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmxl
bmd0aCA9PSBhbGxvd2VkUmVwb3NpdG9yaWVzLnNpemUKKyAgICAgICAgICAgICYmIGNvbW1pdFNl
dC5yZXBvc2l0b3JpZXMoKS5ldmVyeSgocmVwb3NpdG9yeSkgPT4gYWxsb3dlZFJlcG9zaXRvcmll
cy5oYXMocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAmJiBjb21taXRTZXQubGF0ZXN0Q29tbWl0
VGltZSgpID49IHN0YXJ0Q29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKQorICAgICAgICAgICAg
JiYgY29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKSA8PSBlbmRDb21taXRTZXQubGF0ZXN0Q29t
bWl0VGltZSgpCisgICAgICAgICk7CisgICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHMgPSBj
b21wYXRpYmxlQ29tbWl0U2V0cy5zb3J0KGNvbW1pdFNldFNvcnRCeUxhdGVzdENvbW1pdFRpbWUp
OworICAgICAgICBjb25zdCB1bmlxdWVTb3J0ZWRDb21taXRTZXRzID0gW3NvcnRlZENvbW1pdFNl
dHNbMF1dOworICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNvcnRlZENvbW1pdFNldHMubGVu
Z3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQ29tbWl0U2V0ID0gc29y
dGVkQ29tbWl0U2V0c1tpLTFdOworICAgICAgICAgICAgY29uc3QgY3VycmVudENvbW1pdFNldCA9
IHNvcnRlZENvbW1pdFNldHNbaV07CisgICAgICAgICAgICBpZiAoIXByZXZpb3VzQ29tbWl0U2V0
LmVxdWFscyhjdXJyZW50Q29tbWl0U2V0KSkKKyAgICAgICAgICAgICAgICB1bmlxdWVTb3J0ZWRD
b21taXRTZXRzLnB1c2goY3VycmVudENvbW1pdFNldCk7CisgICAgICAgIH0KKworICAgICAgICBj
b25zb2xlLmFzc2VydCh1bmlxdWVTb3J0ZWRDb21taXRTZXRzWzBdLmVxdWFscyhzdGFydENvbW1p
dFNldCkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh1bmlxdWVTb3J0ZWRDb21taXRTZXRzW3Vu
aXF1ZVNvcnRlZENvbW1pdFNldHMubGVuZ3RoIC0gMV0uZXF1YWxzKGVuZENvbW1pdFNldCkpOwor
ICAgICAgICBsZXQgbWlkZGxlQ29tbWl0U2V0ID0gc2VsZWN0QmlzZWN0aW9uUG9pbnRTdHJhdGVn
eSh1bmlxdWVTb3J0ZWRDb21taXRTZXRzKTsKKyAgICAgICAgaWYgKG1pZGRsZUNvbW1pdFNldCBp
bnN0YW5jZW9mIFByb21pc2UpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
bWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgbWlkZGxlQ29tbWl0U2V0OworICAgICAgICAgICAgfSBj
YXRjaChlcnJvcikgeworICAgICAgICAgICAgICAgIGFsZXJ0KGBGYWlsZWQgdG8gZmluZCBtaWRk
bGUgcG9pbnRzIGZvciBzZWxlY3RlZCByYW5nZSBkdWUgdG86ICR7ZXJyb3J9YCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICghbWlkZGxlQ29tbWl0U2V0KQorICAgICAgICAgICAgdGhyb3cgJ0Nhbm5vdCBmaW5kIGJpc2Vj
dGlvbiBwb2ludCc7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICB7bmFtZTogQW5hbHlz
aXNUYXNrLm5hbWVGb3JDb21taXRTZXQoc3RhcnRDb21taXRTZXQsIG1pZGRsZUNvbW1pdFNldCks
IGNvbW1pdFNldExpc3Q6IFtzdGFydENvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0XX0sCisgICAg
ICAgICAgICB7bmFtZTogQW5hbHlzaXNUYXNrLm5hbWVGb3JDb21taXRTZXQobWlkZGxlQ29tbWl0
U2V0LCBlbmRDb21taXRTZXQpLCBjb21taXRTZXRMaXN0OiBbbWlkZGxlQ29tbWl0U2V0LCBlbmRD
b21taXRTZXRdfQorICAgICAgICBdOworICAgIH0KKworICAgIHN0YXRpYyBhc3luYyBzZWxlY3RC
aXNlY3Rpb25Qb2ludFdpdGhTaW1pbGFyUmV2aXNpb25EaXN0YW5jZSh1bmlxdWVTb3J0ZWRDb21t
aXRTZXRzKQorICAgIHsKKyAgICAgICAgaWYgKHVuaXF1ZVNvcnRlZENvbW1pdFNldHMubGVuZ3Ro
IDwgMykKKyAgICAgICAgICAgIHRocm93ICdDYW5ub3QgYmlzZWN0IGEgcmFuZ2UgdGhhdCBpcyBz
bWFsbGVyIHRoYW4gMyc7CisKKyAgICAgICAgY29uc3QgY29tbW9uUmVwb3NpdG9yaWVzID0gdW5p
cXVlU29ydGVkQ29tbWl0U2V0cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjb21taXRTZXQpID0+Cisg
ICAgICAgICAgICBuZXcgU2V0KGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5maWx0ZXIoKHJlcG9z
aXRvcnkpID0+IGFjY3VtdWxhdG9yLmhhcyhyZXBvc2l0b3J5KSkpLAorICAgICAgICAgICAgbmV3
IFNldCh1bmlxdWVTb3J0ZWRDb21taXRTZXRzWzBdLnJlcG9zaXRvcmllcygpKSk7CisKKyAgICAg
ICAgaWYgKCFjb21tb25SZXBvc2l0b3JpZXMuc2l6ZSkKKyAgICAgICAgICAgIHRocm93ICdObyBj
b21tb24gcmVwb3NpdG9yeSBpcyBmb3VuZCBhbW9uZyBzZWxlY3RlZCBjb21taXQgc2V0cyc7CisK
KyAgICAgICAgY29uc3QgZmlyc3RDb21taXRTZXQgPSB1bmlxdWVTb3J0ZWRDb21taXRTZXRzWzBd
OworICAgICAgICBjb25zdCBsYXN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0c1t1
bmlxdWVTb3J0ZWRDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICBjb25zdCBzZWxlY3Rh
YmxlQ29tbWl0U2V0cyA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldHMuc2xpY2UoMSwgLTEpOworICAg
ICAgICBjb25zdCBjb21taXRzQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKKyAgICAgICAgY29uc3Qg
Y29tbWl0U2V0c0J5Q29uZmlnID0gbmV3IE1hcDsKKworICAgICAgICBmb3IgKGNvbnN0IHJlcG9z
aXRvcnkgb2YgY29tbW9uUmVwb3NpdG9yaWVzKSB7CisgICAgICAgICAgICBjb25zdCBmaXJzdENv
bW1pdCA9IGZpcnN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7Cisg
ICAgICAgICAgICBjb25zdCBsYXN0Q29tbWl0ID0gbGFzdENvbW1pdFNldC5jb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgaWYgKGZpcnN0Q29tbWl0ID09IGxhc3RD
b21taXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsZXQgY29tbWl0
czsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29tbWl0cyA9IGF3YWl0IENv
bW1pdExvZy5mZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZmlyc3RDb21taXQucmV2
aXNpb24oKSwgbGFzdENvbW1pdC5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgICAgICBjb21taXRz
ID0gY29tbWl0cy5zbGljZSgwLCAtMSk7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewor
ICAgICAgICAgICAgICAgIHRocm93IGBGYWlsZWQgdG8gZmV0Y2ggY29tbWl0cyBiZXR3ZWVuICIk
e2ZpcnN0Q29tbWl0LmxhYmVsKCl9IiAtICIke2xhc3RDb21taXQubGFiZWwoKX0iYDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29tbWl0cy5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbW1pdHNCeVJlcG9zaXRvcnkuc2V0KHJlcG9z
aXRvcnksIGNvbW1pdHMpOworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0c0J5Q29tbWl0ID0g
bmV3IE1hcDsKKyAgICAgICAgICAgIGNvbW1pdFNldHNCeUNvbmZpZy5zZXQocmVwb3NpdG9yeSwg
Y29tbWl0U2V0c0J5Q29tbWl0KTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWl0U2V0IG9m
IHNlbGVjdGFibGVDb21taXRTZXRzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0g
Y29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb21taXRTZXRzQnlDb21taXQuaGFzKGNvbW1pdCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdFNldHNCeUNvbW1pdC5zZXQoY29tbWl0LCBuZXcgU2V0KTsKKyAgICAgICAgICAg
ICAgICBjb21taXRTZXRzQnlDb21taXQuZ2V0KGNvbW1pdCkuYWRkKGNvbW1pdFNldCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCByZXBvc2l0b3JpZXNTb3J0ZWRC
eUNvbW1pdENvdW50SW5SYW5nZSA9IFsuLi5jb21taXRzQnlSZXBvc2l0b3J5LmtleXMoKV0KKyAg
ICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21taXRzQnlSZXBvc2l0b3J5LmdldChiKS5sZW5n
dGggLSBjb21taXRzQnlSZXBvc2l0b3J5LmdldChhKS5sZW5ndGgpOworCisgICAgICAgIGxldCBy
ZW1haW5pbmdDb21taXRTZXRzID0gc2VsZWN0YWJsZUNvbW1pdFNldHM7CisgICAgICAgIGZvciAo
Y29uc3QgcmVwb3NpdG9yeSBvZiByZXBvc2l0b3JpZXNTb3J0ZWRCeUNvbW1pdENvdW50SW5SYW5n
ZSkgeworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNCeVJlcG9zaXRvcnkuZ2V0
KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgY29uc3QgZGVzaXJlZENvbW1pdEluZGV4ID0gY29t
bWl0cy5sZW5ndGggLyAyOworICAgICAgICAgICAgbGV0IG1pbkNvbW1pdERpc3RhbmNlID0gY29t
bWl0cy5sZW5ndGg7CisgICAgICAgICAgICBsZXQgbmV3Q29tbWl0U2V0cyA9IG51bGw7CisgICAg
ICAgICAgICBjb25zdCBjb21taXRTZXRzQnlDb21taXQgPSBjb21taXRTZXRzQnlDb25maWcuZ2V0
KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgY29uc3QgaW5kZXhCeUNvbW1pdCA9IG5ldyBNYXA7
CisgICAgICAgICAgICBjb21taXRzLmZvckVhY2goKGNvbW1pdCwgaW5kZXgpID0+IGluZGV4QnlD
b21taXQuc2V0KGNvbW1pdCwgaW5kZXgpKTsKKworICAgICAgICAgICAgZm9yIChjb25zdCBbY29t
bWl0LCBjb21taXRTZXRzXSBvZiBjb21taXRTZXRzQnlDb21taXQpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBjb21taXREaXN0YW5jZSA9IE1hdGguYWJzKGluZGV4QnlDb21taXQuZ2V0KGNvbW1p
dCkgLSBkZXNpcmVkQ29tbWl0SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChjb21taXREaXN0
YW5jZSA8IG1pbkNvbW1pdERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkNvbW1p
dERpc3RhbmNlID0gY29tbWl0RGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbW1p
dFNldHMgPSBjb21taXRTZXRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmVtYWluaW5nQ29tbWl0U2V0cyA9IHJlbWFpbmluZ0NvbW1pdFNldHMuZmls
dGVyKChjb21taXRTZXQpID0+IG5ld0NvbW1pdFNldHMuaGFzKGNvbW1pdFNldCkpOworICAgICAg
ICAgICAgaWYgKHJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoID09IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHNbMF07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgYE5vIGJp
c2VjdGlvbiBwb2ludHMgZm91bmRgOworICAgICAgICByZXR1cm4gcmVtYWluaW5nQ29tbWl0U2V0
c1swXTsKKyAgICB9CisKKyAgICBzdGF0aWMgbmFtZUZvckNvbW1pdFNldChmaXJzdENvbW1pdFNl
dCwgc2Vjb25kQ29tbWl0U2V0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIWZpcnN0
Q29tbWl0U2V0LmVxdWFscyhzZWNvbmRDb21taXRTZXQpKTsKKyAgICAgICAgbGV0IG5hbWVQYXJ0
cyA9IFtdOworICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgZmlyc3RDb21taXRTZXQu
dG9wTGV2ZWxSZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgY29uc3QgZmlyc3RDb21taXQg
PSBmaXJzdENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgY29uc3Qgc2Vjb25kQ29tbWl0ID0gc2Vjb25kQ29tbWl0U2V0LmNvbW1pdEZvclJlcG9z
aXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBpZiAoZmlyc3RDb21taXQgPT0gc2Vjb25k
Q29tbWl0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbmFtZVBhcnRz
LnB1c2goYCR7cmVwb3NpdG9yeS5uYW1lKCl9OiAke2ZpcnN0Q29tbWl0LmxhYmVsKCl9IC0gJHtz
ZWNvbmRDb21taXQubGFiZWwoKX1gKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZVBh
cnRzLmpvaW4oJyAnKTsKKyAgICB9CisKICAgICBzdGF0aWMgY2F0ZWdvcmllcygpCiAgICAgewog
ICAgICAgICByZXR1cm4gWwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggZWU1ZjMzYTBkNWU2NTA3NDY5ZmJl
ZjgzOGYyZmJhNGI3NTM2MWMwZS4uMGY0YmY4YzM5NGM4OTY1ZmI4ZGU3YTMzNjMxNjZjMGEwMWNm
MzA1MiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvY29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzCkBAIC04OCw2ICs4OCwyMiBAQCBjbGFzcyBDb21taXRTZXQg
ZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIHBhdGNoRm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9QYXRjaE1hcC5nZXQocmVwb3NpdG9yeSk7
IH0KICAgICByb290Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBv
c2l0b3J5VG9Sb290TWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIHJlcXVpcmVzQnVpbGRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlSZXF1aXJlc0J1
aWxkTWFwLmdldChyZXBvc2l0b3J5KSB8fCBmYWxzZTsgfQorICAgIGlzU2ltcGxlQ29tbWl0U2V0
KCkgeworICAgICAgICBpZiAodGhpcy5hbGxSb290RmlsZXMoKS5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHRoaXMu
cmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm93bmVyQ29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAodGhpcy5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
dGhpcy5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZXNCdWlsZEZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCByZXR1cm4gYSBEYXRlIG9iamVjdC4KICAgICBsYXRlc3RDb21taXRUaW1lKCkKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAu
anMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3Vw
LmpzCmluZGV4IDBjMGRmYWQ0NzdlMzU3Y2I1NDRkMTMyNzAzY2E2NzJiOGEwMWMyMjUuLmVlMTQ5
NmY1ZTU1NTM5ZTNjNjA4OTJiMDBlNmYyNGFjMjhjNDVjNTIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKKysrIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcwpAQCAt
MTQsNyArMTQsNyBAQCBjbGFzcyBUZXN0R3JvdXAgZXh0ZW5kcyBMYWJlbGVkT2JqZWN0IHsKICAg
ICAgICAgICAgIHJldHVybiBidWlsZFJlcXVlc3RzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIoKSAt
IGIub3JkZXIoKSk7CiAgICAgICAgIH0pOwogICAgICAgICB0aGlzLl9yZXBvc2l0b3JpZXMgPSBu
dWxsOwotICAgICAgICB0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseSA9IG5l
dyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0
cy5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHNM
YXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24oVGVzdEdyb3VwLl9jb21wdXRlUmVx
dWVzdGVkQ29tbWl0U2V0cyk7CiAgICAgICAgIHRoaXMuX3JlcXVlc3RlZENvbW1pdFNldHMgPSBu
dWxsOwogICAgICAgICB0aGlzLl9jb21taXRTZXRUb0xhYmVsID0gbmV3IE1hcDsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQoIW9iamVjdC5wbGF0Zm9ybSB8fCBvYmplY3QucGxhdGZvcm0gaW5zdGFu
Y2VvZiBQbGF0Zm9ybSk7CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFRlc3RHcm91cCBleHRlbmRz
IExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENv
bW1pdFNldHNMYXppbHkuZXZhbHVhdGUoLi4udGhpcy5fb3JkZXJlZEJ1aWxkUmVxdWVzdHMoKSk7
CiAgICAgfQogCi0gICAgX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKC4uLm9yZGVyZWRCdWls
ZFJlcXVlc3RzKQorICAgIHN0YXRpYyBfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMoLi4ub3Jk
ZXJlZEJ1aWxkUmVxdWVzdHMpCiAgICAgewogICAgICAgICBjb25zdCByZXF1ZXN0ZWRDb21taXRT
ZXRzID0gW107CiAgICAgICAgIGNvbnN0IGNvbW1pdFNldExhYmVsTWFwID0gbmV3IE1hcDsKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlz
aXMtdGFzay1wYWdlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9hbmFseXNpcy10YXNrLXBhZ2UuanMKaW5kZXggMGE2YTAyZWZhNjdiNGYxMDEzMWVhMjA5Zjdi
MmE1ZGZjZGVlNTRlZi4uOGVhMGJhM2RmMzIyZjQyOTM1M2RlZDZmOGNhZjI2YTdlYTZlMTdiZCAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFs
eXNpcy10YXNrLXBhZ2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMKQEAgLTI2OCw2ICsyNjgsOSBAQCBjbGFzcyBB
bmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAg
IHRoaXMucGFydCgncmV0cnktZm9ybScpLmxpc3RlblRvQWN0aW9uKCdzdGFydFRlc3RpbmcnLCAo
cmVwZXRpdGlvbkNvdW50KSA9PiB7CiAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdy
ZXRyeVRlc3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCk7
CiAgICAgICAgIH0pOworICAgICAgICB0aGlzLnBhcnQoJ2Jpc2VjdC1mb3JtJykubGlzdGVuVG9B
Y3Rpb24oJ3N0YXJ0VGVzdGluZycsIChyZXBldGl0aW9uQ291bnQpID0+IHsKKyAgICAgICAgICAg
IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2Jpc2VjdFRlc3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0
R3JvdXAsIHJlcGV0aXRpb25Db3VudCk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIHNldFRl
c3RHcm91cHModGVzdEdyb3VwcywgY3VycmVudFRlc3RHcm91cCwgc2hvd0hpZGRlbkdyb3VwcykK
QEAgLTMzNywxMCArMzQwLDE1IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0
ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkKICAgICAgICAg
ICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5nZXQoY3VycmVudEdyb3VwKS5saXN0SXRlbS5jbGFzc0xp
c3QuYWRkKCdzZWxlY3RlZCcpOwogCi0gICAgICAgIGlmIChjdXJyZW50R3JvdXApCisgICAgICAg
IGlmIChjdXJyZW50R3JvdXApIHsKICAgICAgICAgICAgIHRoaXMucGFydCgncmV0cnktZm9ybScp
LnNldFJlcGV0aXRpb25Db3VudChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkpOworICAg
ICAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLnNldFJlcGV0aXRpb25Db3VudChjdXJy
ZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkpOworICAgICAgICB9CiAgICAgICAgIHRoaXMuY29u
dGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50R3JvdXAgPyBudWxsIDog
J25vbmUnOwogCisgICAgICAgIC8vIEZJWE1FOiBiaXNlY3Qgc2hvdWxkIHN1cHBvcnQgY3VzdG9t
IGFuYWx5c2lzIHRhc2sgb25jZSBiZWluZyBhYmxlIHRvIHRlc3QgcmFuZG9tIHJldmlzaW9uIGNv
bWJpbmF0aW9uLgorICAgICAgICB0aGlzLmNvbnRlbnQoJ2Jpc2VjdC1mb3JtJykuc3R5bGUuZGlz
cGxheSA9IGN1cnJlbnRHcm91cCAmJiAhY3VycmVudEdyb3VwLnRhc2soKS5pc0N1c3RvbSgpPyBu
dWxsIDogJ25vbmUnOworCiAgICAgICAgIGNvbnN0IGhpZGVCdXR0b24gPSB0aGlzLmNvbnRlbnQo
J2hpZGUtYnV0dG9uJyk7CiAgICAgICAgIGhpZGVCdXR0b24udGV4dENvbnRlbnQgPSBjdXJyZW50
R3JvdXAgJiYgY3VycmVudEdyb3VwLmlzSGlkZGVuKCkgPyAnVW5oaWRlJyA6ICdIaWRlJzsKICAg
ICAgICAgaGlkZUJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gY3VycmVudEdyb3VwID8gbnVsbCA6ICdu
b25lJzsKQEAgLTM1Niw2ICszNjQsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5l
IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtcmVz
dWx0cy12aWV3ZXIgaWQ9InJlc3VsdHMtdmlld2VyIj48L3Rlc3QtZ3JvdXAtcmVzdWx0cy12aWV3
ZXI+CiAgICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtcmV2aXNpb24tdGFibGUgaWQ9InJldmlz
aW9uLXRhYmxlIj48L3Rlc3QtZ3JvdXAtcmV2aXNpb24tdGFibGU+CiAgICAgICAgICAgICAgICAg
PHRlc3QtZ3JvdXAtZm9ybSBpZD0icmV0cnktZm9ybSI+UmV0cnk8L3Rlc3QtZ3JvdXAtZm9ybT4K
KyAgICAgICAgICAgICAgICA8dGVzdC1ncm91cC1mb3JtIGlkPSJiaXNlY3QtZm9ybSI+QmlzZWN0
PC90ZXN0LWdyb3VwLWZvcm0+CiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iaGlkZS1idXR0
b24iPkhpZGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGVuZGluZy1yZXF1
ZXN0LWNhbmNlbC13YXJuaW5nIj4oY2FuY2VscyBwZW5kaW5nIHJlcXVlc3RzKTwvc3Bhbj4KICAg
ICAgICAgICAgIDwvZGl2PmA7CkBAIC00MjMsNyArNDMyLDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNr
VGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIG1h
cmdpbjogMDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgI3JldHJ5LWZvcm0geworICAg
ICAgICAgICAgI3JldHJ5LWZvcm0sICNiaXNlY3QtZm9ybSB7CiAgICAgICAgICAgICAgICAgZGlz
cGxheTogYmxvY2s7CiAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVyZW07CiAgICAgICAgICAg
ICB9CkBAIC01MDksNiArNTE4LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBh
Z2VXaXRoSGVhZGluZyB7CiAgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigncmVuYW1l
VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgbmV3TmFtZSkgPT4gdGhpcy5fdXBkYXRlVGVzdEdyb3Vw
TmFtZSh0ZXN0R3JvdXAsIG5ld05hbWUpKTsKICAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRvQWN0
aW9uKCd0b2dnbGVUZXN0R3JvdXBWaXNpYmlsaXR5JywgKHRlc3RHcm91cCkgPT4gdGhpcy5faGlk
ZUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwKSk7CiAgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5U
b0FjdGlvbigncmV0cnlUZXN0R3JvdXAnLCAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpID0+
IHRoaXMuX3JldHJ5Q3VycmVudFRlc3RHcm91cCh0ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkp
OworICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ2Jpc2VjdFRlc3RHcm91cCcsICh0
ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkgPT4gdGhpcy5fYmlzZWN0Q3VycmVudFRlc3RHcm91
cCh0ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkpOwogCiAgICAgICAgIHRoaXMucGFydCgnY2F1
c2UtbGlzdCcpLmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHJlcG9zaXRvcnksIHJldmlzaW9u
KSA9PiB7CiAgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVDb21taXQoJ2NhdXNlJywgcmVwb3Np
dG9yeSwgcmV2aXNpb24pOwpAQCAtNzg1LDE0ICs3OTUsMjkgQEAgY2xhc3MgQW5hbHlzaXNUYXNr
UGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAKICAgICBfcmV0cnlDdXJyZW50VGVzdEdy
b3VwKHRlc3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KQogICAgIHsKLSAgICAgICAgY29uc3QgbmV3
TmFtZSA9IHRoaXMuX2NyZWF0ZVJldHJ5TmFtZUZvclRlc3RHcm91cCh0ZXN0R3JvdXAubmFtZSgp
KTsKKyAgICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuY3JlYXRlTmFtZUZvclRlc3RHcm91cFdp
dGhvdXRDb2xsaXNpb24odGVzdEdyb3VwLm5hbWUoKSwgdGhpcy5faGFzRHVwbGljYXRlVGVzdEdy
b3VwTmFtZS5iaW5kKHRoaXMpKTsKICAgICAgICAgY29uc3QgY29tbWl0U2V0TGlzdCA9IHRlc3RH
cm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CiAgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhp
cy5fdGFzay5wbGF0Zm9ybSgpIHx8IHRlc3RHcm91cC5wbGF0Zm9ybSgpOwogICAgICAgICByZXR1
cm4gVGVzdEdyb3VwLmNyZWF0ZVdpdGhDdXN0b21Db25maWd1cmF0aW9uKHRoaXMuX3Rhc2ssIHBs
YXRmb3JtLCB0ZXN0R3JvdXAudGVzdCgpLCBuZXdOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1p
dFNldExpc3QpCiAgICAgICAgICAgICAudGhlbih0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHMuYmlu
ZCh0aGlzKSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRv
IGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwogICAgICAgICB9KTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVRlc3RHcm91cEFmdGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlz
dChuZXdOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCk7CisgICAgfQorCisgICAg
YXN5bmMgX2Jpc2VjdEN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQp
CisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXNrKTsKKyAgICAgICAgY29u
c3QgYmlzZWN0Q29uZmlncyA9IGF3YWl0IHRoaXMuX3Rhc2suYmlzZWN0Q29uZmlnRm9yVGVzdEdy
b3VwKHRlc3RHcm91cCwgdGhpcy5fbWVhc3VyZW1lbnRTZXQpOworICAgICAgICBjb25zdCBwbGF0
Zm9ybSA9IHRoaXMuX3Rhc2sucGxhdGZvcm0oKSB8fCB0ZXN0R3JvdXAucGxhdGZvcm0oKTsKKyAg
ICAgICAgY29uc29sZS5sb2coYmlzZWN0Q29uZmlncyk7CisgICAgICAgIGZvciAoY29uc3QgYmlz
ZWN0Q29uZmlnIG9mIGJpc2VjdENvbmZpZ3MpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgdGVzdEdyb3VwcyA9IGF3YWl0IFRlc3RHcm91cC5jcmVhdGVXaXRoQ3Vz
dG9tQ29uZmlndXJhdGlvbih0aGlzLl90YXNrLCBwbGF0Zm9ybSwgdGVzdEdyb3VwLnRlc3QoKSwg
YmlzZWN0Q29uZmlnLm5hbWUsIHJlcGV0aXRpb25Db3VudCwgYmlzZWN0Q29uZmlnLmNvbW1pdFNl
dExpc3QpOworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RpZEZldGNoVGVzdEdyb3Vwcyh0
ZXN0R3JvdXBzKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgX2NyZWF0ZVRlc3RHcm91cEFm
dGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlzdCh0ZXN0R3JvdXBOYW1lLCByZXBldGl0aW9uQ291bnQs
IGNvbW1pdFNldE1hcCkKQEAgLTg0MSw4ICs4NjYsMTAgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFn
ZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIF9j
cmVhdGVSZXRyeU5hbWVGb3JUZXN0R3JvdXAobmFtZSkKKyAgICBzdGF0aWMgY3JlYXRlTmFtZUZv
clRlc3RHcm91cFdpdGhvdXRDb2xsaXNpb24obmFtZSwgaGFzRHVwbGljYXRlVGVzdEdyb3VwTmFt
ZSkKICAgICB7CisgICAgICAgIGlmICghaGFzRHVwbGljYXRlVGVzdEdyb3VwTmFtZShuYW1lKSkK
KyAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgICB2YXIgbmFtZVdpdGhOdW1iZXJNYXRj
aCA9IG5hbWUubWF0Y2goLyguKz8pXHMqXChccyooXGQrKVxzKlwpXHMqJC8pOwogICAgICAgICB2
YXIgbnVtYmVyID0gMTsKICAgICAgICAgaWYgKG5hbWVXaXRoTnVtYmVyTWF0Y2gpIHsKQEAgLTg1
NCw3ICs4ODEsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFk
aW5nIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgbnVtYmVyKys7CiAgICAgICAgICAgICBu
ZXdOYW1lID0gYCR7bmFtZX0gKCR7bnVtYmVyfSlgOwotICAgICAgICB9IHdoaWxlICh0aGlzLl9o
YXNEdXBsaWNhdGVUZXN0R3JvdXBOYW1lKG5ld05hbWUpKTsKKyAgICAgICAgfSB3aGlsZSAoaGFz
RHVwbGljYXRlVGVzdEdyb3VwTmFtZShuZXdOYW1lKSk7CiAKICAgICAgICAgcmV0dXJuIG5ld05h
bWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVz
dHMvYW5hbHlzaXMtdGFzay10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0
LXRlc3RzL2FuYWx5c2lzLXRhc2stdGVzdHMuanMKaW5kZXggNDE1ZWEwMTdkZjhiYTNkYjkyNmVk
Y2I3MDA1YmQ4NzlmNDZmNjM0Yi4uZmFmZDBhNzVlNGFiZDMzOWNiM2U1YTU3MWU1MTI2YWQ5NDc0
ZjhlZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvYW5h
bHlzaXMtdGFzay10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9hbmFseXNpcy10YXNrLXRlc3RzLmpzCkBAIC0yMjEsNCArMjIxLDIzMyBAQCBkZXNjcmli
ZSgnQW5hbHlzaXNUYXNrJywgKCkgPT4gewogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOworCisgICAgZnVuY3Rpb24gbWFrZUNvbW1pdChpZCwgcmVwb3NpdG9yeSwgcmV2aXNp
b24sIHRpbWUpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmVuc3VyZVNpbmdsZXRv
bihpZCwgeworICAgICAgICAgICAgcmVwb3NpdG9yeSwKKyAgICAgICAgICAgIHJldmlzaW9uLAor
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgdGltZQorICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3J0ZWRDb21taXRTZXRzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEs
IHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAg
IHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1p
dC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsg
Y29tbWl0OiBtYWtlQ29tbWl0KDExLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMScsIDEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMiwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJr
aXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1p
dC0yJywgMiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbigzLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgyLCBNb2NrTW9kZWxzLndlYmtp
dCwgJ3dlYmtpdC1jb21taXQtMicsIDIpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAg
ICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdv
c3gtY29tbWl0LTInLCAyKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDQsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1z
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2Rl
bHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0s
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxz
Lm9zeCwgJ29zeC1jb21taXQtMycsIDMpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAg
ICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oNSwgeworICAgICAgICAgICAgICAgIHJldmlz
aW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwg
TW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTYnLCA2KSwgcmVxdWlyZXNCdWlsZDog
ZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTMsIE1v
Y2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0zJywgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0K
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAor
ICAgICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3QoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFVwbG9hZGVkRmlsZS5lbnN1cmVTaW5nbGV0b24oNDU2LCB7J2NyZWF0ZWRB
dCc6IG5ldyBEYXRlKCcyMDE3LTA1LTAxVDIxOjAzOjI3WicpLCAnZmlsZW5hbWUnOiAncm9vdC5k
YXQnLCAnZXh0ZW5zaW9uJzogJy5kYXQnLCAnYXV0aG9yJzogJ3NvbWUgdXNlcicsCisgICAgICAg
ICAgICBzaXplOiAxNjQ1MjIzNCwgc2hhMjU2OiAnMDNlZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4
ZTU1NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5NjhmNzhmNjU2ZDU4ZCd9KTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjb21taXRTZXRXaXRoUm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0
U2V0LmVuc3VyZVNpbmdsZXRvbigxNSwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sg
Y29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0x
JywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6
IFtjcmVhdGVSb290KCldCisgICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiBjb21taXRT
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTYs
IHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBN
b2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9
CisKKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkgewor
ICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigx
LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAg
ICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21t
aXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAx
KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2lu
Z2xldG9uKDIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMxLCBNb2NrTW9kZWxzLmlvcywgJ2lvcy1j
b21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRT
ZXQuZW5zdXJlU2luZ2xldG9uKDMsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMu
d2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisg
ICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9z
eCwgJ29zeC1jb21taXQtMicsIDIpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KQorICAgICAgICBdOwor
ICAgIH0KKworICAgIGRlc2NyaWJlKCdzZWxlY3RCaXNlY3Rpb25Qb2ludFdpdGhTaW1pbGFyUmV2
aXNpb25EaXN0YW5jZScsICgpID0+IHsKKyAgICAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKKyAg
ICAgICAgbGV0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKyAgICAgICAgaXQo
J3Nob3VsZCByZWplY3QgaWYgbGVzcyB0aGFuIDMgY29tbWl0IHNldHMgYXJlIHByb3ZpZGVkJywg
YXN5bmMgKCkgPT4geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhd2FpdCBB
bmFseXNpc1Rhc2suc2VsZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFu
Y2Uoc29ydGVkQ29tbWl0U2V0cygpLnNsaWNlKDAsMSkpCisgICAgICAgICAgICB9IGNhdGNoKGVy
cm9yKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVycm9yLCAnQ2Fubm90IGJpc2Vj
dCBhIHJhbmdlIHRoYXQgaXMgc21hbGxlciB0aGFuIDMnKQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBubyBjb21tb24gcmVwb3NpdG9y
eSBmb3VuZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgYXdhaXQgQW5hbHlzaXNUYXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZp
c2lvbkRpc3RhbmNlKGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkpOworICAgICAg
ICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoZXJy
b3IsICdObyBjb21tb24gcmVwb3NpdG9yeSBpcyBmb3VuZCBhbW9uZyBzZWxlY3RlZCBjb21taXQg
c2V0cycpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxk
IHJlamVjdCBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0IGxvZycsIGFzeW5jICgpID0+IHsKKyAg
ICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBBbmFseXNpc1Rhc2suc2VsZWN0QmlzZWN0aW9uUG9p
bnRXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2Uoc29ydGVkQ29tbWl0U2V0cygpKTsKKyAgICAg
ICAgICAgIHJlcXVlc3RzWzBdLnJlamVjdCgnNDA0Jyk7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIGF3YWl0IHByb21pc2U7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikg
eworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0ZhaWxlZCB0byBmZXRjaCBj
b21taXRzIGJldHdlZW4gIndlYmtpdC1jb21taXQtMSIgLSAid2Via2l0LWNvbW1pdC02IicpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBi
aXNlY3Rpb24gcG9pbnQgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHJldmlzaW9uIHJhbmdlJywg
YXN5bmMgKCkgPT4geworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBBbmFseXNpc1Rhc2suc2Vs
ZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2Uoc29ydGVkQ29tbWl0
U2V0cygpKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAg
ICAgICdjb21taXRzJzogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWQ6IDIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dl
YmtpdC1jb21taXQtMicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAyCisgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0z
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWU6IDMKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTQnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZTogNAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5p
ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDUsCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtNScsCisgICAgICAgICAgICAgICAgICAgICAg
ICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA1Cisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
OiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlcXVl
c3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9k
ZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDExLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTEnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZTogMQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm9zeC5pZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWQ6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICdvc3gtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1p
dHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMgorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBjb25zdCBiaXNlY3Rpb25Db21taXRTZXQgPSBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGJpc2VjdGlvbkNvbW1pdFNldCwgc29ydGVkQ29tbWl0U2V0cygpWzNdKTsK
KyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnYmFzaWNCaXNlY3Rpb25TdHJh
dGVneScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZWZ1c2UgdG8gYmlzZWN0IGNvbW1p
dCBzZXQgd2l0aCByb290JywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2VjdChbY29tbWl0
U2V0KCksIGNvbW1pdFNldFdpdGhSb290KCldLCBbY29tbWl0U2V0KCksIGNvbW1pdFNldFdpdGhS
b290KCldKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGVycm9yLCAnQ2Fubm90IGJpc2VjdCBvbiBhIHJhbmdlIHdpdGggcm9vdC9w
YXRjaC9vd25lZCBjb21taXQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZWZ1c2UgdG8gYmlzZWN0IHRlc3QgZ3JvdXAgd2l0aCBjb21taXQgc2V0
cyB0aG9zZSBoYXZlIGRpZmZlcmVudCByZXBvc2l0b3JpZXMnLCBhc3luYyAoKSA9PiB7CisgICAg
ICAgICAgICBjb25zdCBvbmVDb21taXRTZXQgPSBjb21taXRTZXQoKTsKKyAgICAgICAgICAgIGNv
bnN0IGFub3RoZXJDb21taXRTZXQgPSBzb3J0ZWRDb21taXRTZXRzKClbMF07CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0IEFuYWx5c2lzVGFzay5wZXJmb3JtQmluYXJ5
QmlzZWN0KFtvbmVDb21taXRTZXQsIGFub3RoZXJDb21taXRTZXRdLCBbb25lQ29tbWl0U2V0LCBh
bm90aGVyQ29tbWl0U2V0XSk7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0NvbW1pdFNldHMgaW4gdGVzdCBncm91cCBo
YXZlIGRpZmZlcmVudCByZXBvc2l0b3JpZXMnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZWZ1c2UgaWYgZmFpbGVkIHRvIGZpbmQgYSBtaWRkbGUg
Y29tbWl0IHNldCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVNvcnRl
ZENvbW1pdFNldCA9IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IGZpcnN0
Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0WzBdOworICAgICAgICAgICAgY29uc3Qg
bGFzdENvbW1pdFNldCA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldFt1bmlxdWVTb3J0ZWRDb21taXRT
ZXQubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0
IEFuYWx5c2lzVGFzay5wZXJmb3JtQmluYXJ5QmlzZWN0KFtmaXJzdENvbW1pdFNldCwgbGFzdENv
bW1pdFNldF0sIHVuaXF1ZVNvcnRlZENvbW1pdFNldCwgKCkgPT4ge3Rocm93ICdDYW5ub3QgZmlu
ZCBiaXNlY3Rpb24gcG9pbnQnfSk7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0Nhbm5vdCBmaW5kIGJpc2VjdGlvbiBw
b2ludCcpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiBiaXNlY3Rpb24gY29uZmlncycsIGFzeW5jKCkgPT4geworICAgICAgICAgICAgY29u
c3QgdW5pcXVlU29ydGVkQ29tbWl0U2V0ID0gc29ydGVkQ29tbWl0U2V0cygpOworICAgICAgICAg
ICAgY29uc3QgZmlyc3RDb21taXRTZXQgPSB1bmlxdWVTb3J0ZWRDb21taXRTZXRbMF07CisgICAg
ICAgICAgICBjb25zdCBsYXN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0W3VuaXF1
ZVNvcnRlZENvbW1pdFNldC5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVk
TWlkZGxlQ29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0WzNdOworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RDb25maWcsIHNlY29uZENvbmZpZ10g
PSBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2VjdChbZmlyc3RDb21taXRTZXQs
IGxhc3RDb21taXRTZXRdLCB1bmlxdWVTb3J0ZWRDb21taXRTZXQsICgpID0+IGV4cGVjdGVkTWlk
ZGxlQ29tbWl0U2V0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGZpcnN0Q29u
ZmlnLmNvbW1pdFNldExpc3QsIFtmaXJzdENvbW1pdFNldCwgZXhwZWN0ZWRNaWRkbGVDb21taXRT
ZXRdKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHNlY29uZENvbmZpZy5jb21t
aXRTZXRMaXN0LCBbZXhwZWN0ZWRNaWRkbGVDb21taXRTZXQsIGxhc3RDb21taXRTZXRdKTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNl
LCAnc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfSk7CiB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336818</attachid>
            <date>2018-03-29 16:52:15 -0700</date>
            <delta_ts>2018-03-30 15:00:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180329165214.patch</filename>
            <type>text/plain</type>
            <size>39297</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlMTAzMTlkYzM1MmU2Nzg2OTE1MmEwYTUxZDQ0ODkxN2Y5ZDJmZTExLi5lY2Y3NGJkNDBi
NzBkOWZiZTE2MDM1NWMwYmIyZDNiNWIwMTMzZDRiIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxOC0wMy0yMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXRzaW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbi4KKworICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYW5h
bHlzaXMtdGFzay5qczoKKyAgICAgICAgKEFuYWx5c2lzVGFzay5wcm90b3R5cGUuYXN5bmMuYmlz
ZWN0Q29uZmlnRm9yVGVzdEdyb3VwKTogUHJlcGFyZXMgaW5mb3JtYXRpb24gYW5kIGludm9rZXMg
YSBiaXNlY3Rpb24gc3RyYXRlZ3kgdG8gZ2V0IGEgYmlzZWN0aW9uIGNvbmZpZy4KKyAgICAgICAg
VXBkYXRlIHRoZSB0ZXN0IG5hbWUgd2hlbiBuZWNlc3NhcnkgdG8gYXZvaWQgbmFtZSBjb2xsaXNp
b24uCisgICAgICAgIChBbmFseXNpc1Rhc2suYXN5bmMucGVyZm9ybUJpbmFyeUJpc2VjdDogQmFz
ZWQgb24gZXhzdGluZyBkYXRhIHBvaW50cyBhbmQgdGVzdCBncm91cHMsIGludm9rZXMgYSBzZWxl
Y3RCaXNlY3Rpb25Qb2ludFN0cmF0ZWd5IHRvIGZpbmQgYQorICAgICAgICBtaWRkbGUgcG9pbnQg
YW5kIHJldHVybnMgYSBwcm9wb3NlZCBiaXNlY3Rpb24gY29uZmlnLgorICAgICAgICAoQW5hbHlz
aXNUYXNrLmFzeW5jLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3Rh
bmNlKTogSW5zdGVhZCBvZiBuYWl2ZWx5IHJldHVybmluZyB0aGUgbWlkZGxlIG9mIGV4aXN0aW5n
IGNvbW1pdCBzZXQgYXJyYXksCisgICAgICAgIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyBhIGJpc2Vj
dCBiaXNlY3Rpb24gcG9pbnRzIHRoYXQgaXMgY2xvc2VzdCB0byBhY3R1YWxseSBtaWRkbGUgb2Yg
dGhlIHJldmlzaW9uIHJhbmdlIGJhc2VkIG9uIGFsbCByZXZpc2lvbnMgcmVwb3J0ZWQKKyAgICAg
ICAgdG8gcGVyZm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMv
Y29tbWl0LXNldC5qczoKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUuaXNDb21taXRTZXRX
aXRob3V0Um9vdFBhdGNoT3JPd25lZENvbW1pdCk6IFJldHVybnMgZmFsc2Ugd2hlbiBhIGNvbW1p
dCBzZXQgaGFzIHJvb3QsIHBhdGNoIG9yIG93bmVkIGNvbW1pdC4KKyAgICAgICAgKENvbW1pdFNl
dC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMpOiBEZXNjcmliZSBkaWZmZXJl
bmNlcyBiZXR3ZWVuIDIgY29tbWl0IHNldHMgaW5jbHVkaW5nIGNvbW1pdCwgcm9vdCBhbmQgcGF0
Y2ggZGlmZmVyZW5jZXMuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpz
OgorICAgICAgICAoVGVzdEdyb3VwKToKKyAgICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2Nv
bXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLnNldCByZXR1cm4pOiBEZWxldGVkLgorICAgICAgICAo
VGVzdEdyb3VwLnByb3RvdHlwZS5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMuc2V0IHJlcXVl
c3RlZENvbW1pdFNldHMpOiBEZWxldGVkLgorICAgICAgICAoVGVzdEdyb3VwLnByb3RvdHlwZS5f
Y29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMuY29uc3Quc2V0IHJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoVGVzdEdyb3VwLnByb3RvdHlwZS5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMp
OiBEZWxldGVkLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2Uu
anM6IEFkZGVkIGJpc2VjdCBidXR0b24uCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQ
YW5lLnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKEFuYWx5c2lz
VGFza1Rlc3RHcm91cFBhbmUucHJvdG90eXBlLl9yZW5kZXJDdXJyZW50VGVzdEdyb3VwKToKKyAg
ICAgICAgKEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUuaHRtbFRlbXBsYXRlKToKKyAgICAgICAg
KEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUuY3NzVGVtcGxhdGUpOgorICAgICAgICAoQW5hbHlz
aXNUYXNrVGVzdEdyb3VwUGFuZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJv
dG90eXBlLl9yZXRyeUN1cnJlbnRUZXN0R3JvdXApOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFn
ZS5wcm90b3R5cGUuYXN5bmMuX2Jpc2VjdEN1cnJlbnRUZXN0R3JvdXApOiBBZGRlZCB0aGlzIGZ1
Y3Rpb24gdG8gcmVhY3Qgd2hlbiAnYmlzZWN0JyBidXR0b24gaXMgY2xpY2tlZC4KKyAgICAgICAg
KEFuYWx5c2lzVGFza1BhZ2UuY3JlYXRlTmFtZUZvclRlc3RHcm91cFdpdGhvdXRDb2xsaXNpb24p
OiBFeHRlbmRzICdfY3JlYXRlUmV0cnlOYW1lRm9yVGVzdEdyb3VwJyBzbyB0aGF0IGl0IG5vdyBp
cyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQKKyAgICAgICAgYWNjZXB0cyBhICdoYXNEdXBsaWNhdGVU
ZXN0R3JvdXBOYW1lJyBmdW5jdGlvbiBhcyBhcnVnbWVudC4KKyAgICAgICAgKEFuYWx5c2lzVGFz
a1BhZ2UucHJvdG90eXBlLl9jcmVhdGVSZXRyeU5hbWVGb3JUZXN0R3JvdXApOiBEZWxldGVkLgor
ICAgICAgICAqIHVuaXQtdGVzdHMvYW5hbHlzaXMtdGFzay10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cy4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVkIHVu
aXQgdGVzdHMgZm9yIENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNl
dHMuCisKIDIwMTgtMDMtMTkgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVwZGF0ZSBQZXJmIGJ1aWxkYm90IHN5bmNpbmcgc2NyaXB0cyBmb3IgQnVpbGRi
b3QgMC45CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9hbmFseXNpcy10YXNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwppbmRleCA2ZTIyMjg1NjgxNThkZGMxMzg4MmM4YjNk
NzdmYWM0NGY4YmE5MmU5Li4zMDM3MzkxOGUzMTgxNzNhNWI2ZTZjYjVkMDkwODBkMDA3YmJiNDcz
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9h
bmFseXNpcy10YXNrLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2FuYWx5c2lzLXRhc2suanMKQEAgLTE2Nyw2ICsxNjcsMTYyIEBAIGNsYXNzIEFuYWx5
c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0ZWdvcnk7
CiAgICAgfQogCisgICAgYXN5bmMgYmlzZWN0Q29uZmlnRm9yVGVzdEdyb3VwKHRlc3RHcm91cCwg
bWVhc3VyZW1lbnRTZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0ZXN0R3JvdXAu
dGFzaygpID09IHRoaXMpOworCisgICAgICAgIGNvbnN0IHJlcXVlc3RlZENvbW1pdFNldCA9IHRl
c3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CisgICAgICAgIGNvbnN0IGFsbFRlc3RHcm91
cHNJblRhc2sgPSBUZXN0R3JvdXAuZmluZEFsbEJ5VGFzayh0aGlzLmlkKCkpOworICAgICAgICBj
b25zdCBhbGxDb21taXRTZXRzSW5UYXNrID0gbmV3IFNldDsKKyAgICAgICAgY29uc3QgZXhpc3Rp
bmdUZXN0R3JvdXBOYW1lcyA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Yg
YWxsVGVzdEdyb3Vwc0luVGFzaykgeworICAgICAgICAgICAgZ3JvdXAucmVxdWVzdGVkQ29tbWl0
U2V0cygpLmZvckVhY2goKGNvbW1pdFNldCkgPT4gYWxsQ29tbWl0U2V0c0luVGFzay5hZGQoY29t
bWl0U2V0KSk7CisgICAgICAgICAgICBleGlzdGluZ1Rlc3RHcm91cE5hbWVzLmFkZChncm91cC5u
YW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRT
ZXQuZmV0Y2hlZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBj
b25zdCBzdGFydFBvaW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElk
KCkpOworICAgICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1l
YXN1cmVtZW50SWQoKSk7CisKKyAgICAgICAgY29uc3QgcG9pbnRBZnRlckVuZCA9IGVuZFBvaW50
LnNlcmllcy5uZXh0UG9pbnQoZW5kUG9pbnQpOworICAgICAgICBmb3IgKGxldCBwb2ludCA9IHN0
YXJ0UG9pbnQ7IHBvaW50ICYmIHBvaW50ICE9IHBvaW50QWZ0ZXJFbmQ7IHBvaW50ID0gcG9pbnQu
c2VyaWVzLm5leHRQb2ludChwb2ludCkpCisgICAgICAgICAgICBhbGxDb21taXRTZXRzSW5UYXNr
LmFkZChwb2ludC5jb21taXRTZXQoKSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNv
bnN0IGJpc2VjdENvbmZpZ3MgPSBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2Vj
dChyZXF1ZXN0ZWRDb21taXRTZXQsIFsuLi5hbGxDb21taXRTZXRzSW5UYXNrXSwgQW5hbHlzaXNU
YXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKTsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgYmlzZWN0Q29uZmlnIG9mIGJpc2VjdENvbmZpZ3MpCisgICAg
ICAgICAgICAgICAgYmlzZWN0Q29uZmlnLm5hbWUgPSBBbmFseXNpc1Rhc2tQYWdlLmNyZWF0ZU5h
bWVGb3JUZXN0R3JvdXBXaXRob3V0Q29sbGlzaW9uKGJpc2VjdENvbmZpZy5uYW1lLCAobmFtZSkg
PT4gZXhpc3RpbmdUZXN0R3JvdXBOYW1lcy5oYXMobmFtZSkpOworICAgICAgICAgICAgcmV0dXJu
IGJpc2VjdENvbmZpZ3M7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBh
bGVydChgRmFpbGVkIHRvIEJpc2VjdCB0ZXN0IGdyb3VwICR7dGVzdEdyb3VwLm5hbWUoKX1gKQor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGFzeW5jIHBlcmZvcm1CaW5hcnlCaXNlY3Qo
Y29tbWl0U2V0SW5UZXN0R3JvdXAsIGFsbENvbW1pdFNldHNJblRhc2ssIHNlbGVjdEJpc2VjdGlv
blBvaW50U3RyYXRlZ3kpCisgICAgeworICAgICAgICBpZiAoY29tbWl0U2V0SW5UZXN0R3JvdXAu
bGVuZ3RoICE9IDIpCisgICAgICAgICAgICB0aHJvdyAnQ2FuIG9ubHkgYmlzZWN0IGEgdGVzdCBn
cm91cCB3aXRoIDIgY29tbWl0IHNldHMnOworCisgICAgICAgIGNvbnN0IGNvbW1pdFNldFNvcnRC
eUxhdGVzdENvbW1pdFRpbWUgPSAob25lQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0KSA9PiBv
bmVDb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpIC0gYW5vdGhlckNvbW1pdFNldC5sYXRlc3RD
b21taXRUaW1lKCk7CisgICAgICAgIGNvbnN0IFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0
XSA9IGNvbW1pdFNldEluVGVzdEdyb3VwLnNvcnQoY29tbWl0U2V0U29ydEJ5TGF0ZXN0Q29tbWl0
VGltZSk7CisgICAgICAgIGNvbnN0IGFsbFNpbXBsZUNvbW1pdFNldHMgPSBzdGFydENvbW1pdFNl
dC5pc0NvbW1pdFNldFdpdGhvdXRSb290UGF0Y2hPck93bmVkQ29tbWl0KCkgJiYgZW5kQ29tbWl0
U2V0LmlzQ29tbWl0U2V0V2l0aG91dFJvb3RQYXRjaE9yT3duZWRDb21taXQoKTsKKyAgICAgICAg
aWYgKCFhbGxTaW1wbGVDb21taXRTZXRzKQorICAgICAgICAgICAgdGhyb3cgJ0Nhbm5vdCBiaXNl
Y3Qgb24gYSByYW5nZSB3aXRoIHJvb3QvcGF0Y2gvb3duZWQgY29tbWl0JzsKKworICAgICAgICBj
b25zdCBhbGxvd2VkUmVwb3NpdG9yaWVzID0gbmV3IFNldChzdGFydENvbW1pdFNldC5yZXBvc2l0
b3JpZXMoKSk7CisgICAgICAgIGlmIChlbmRDb21taXRTZXQucmVwb3NpdG9yaWVzKCkubGVuZ3Ro
ICE9IGFsbG93ZWRSZXBvc2l0b3JpZXMuc2l6ZQorICAgICAgICAgICAgfHwgIWVuZENvbW1pdFNl
dC5yZXBvc2l0b3JpZXMoKS5ldmVyeSgocmVwb3NpdG9yeSkgPT4gYWxsb3dlZFJlcG9zaXRvcmll
cy5oYXMocmVwb3NpdG9yeSkpKQorICAgICAgICAgICAgdGhyb3cgJ0NvbW1pdFNldHMgaW4gdGVz
dCBncm91cCBoYXZlIGRpZmZlcmVudCByZXBvc2l0b3JpZXMnOworCisgICAgICAgIGNvbnN0IGNv
bXBhdGlibGVDb21taXRTZXRzID0gYWxsQ29tbWl0U2V0c0luVGFzay5maWx0ZXIoKGNvbW1pdFNl
dCkgPT4KKyAgICAgICAgICAgIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5sZW5ndGggPT0gYWxs
b3dlZFJlcG9zaXRvcmllcy5zaXplCisgICAgICAgICAgICAmJiBjb21taXRTZXQucmVwb3NpdG9y
aWVzKCkuZXZlcnkoKHJlcG9zaXRvcnkpID0+IGFsbG93ZWRSZXBvc2l0b3JpZXMuaGFzKHJlcG9z
aXRvcnkpKQorICAgICAgICAgICAgJiYgY29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKSA+PSBz
dGFydENvbW1pdFNldC5sYXRlc3RDb21taXRUaW1lKCkKKyAgICAgICAgICAgICYmIGNvbW1pdFNl
dC5sYXRlc3RDb21taXRUaW1lKCkgPD0gZW5kQ29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKQor
ICAgICAgICApOworICAgICAgICBjb25zdCBzb3J0ZWRDb21taXRTZXRzID0gY29tcGF0aWJsZUNv
bW1pdFNldHMuc29ydChjb21taXRTZXRTb3J0QnlMYXRlc3RDb21taXRUaW1lKTsKKyAgICAgICAg
Y29uc3QgdW5pcXVlU29ydGVkQ29tbWl0U2V0cyA9IFtzb3J0ZWRDb21taXRTZXRzWzBdXTsKKyAg
ICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzb3J0ZWRDb21taXRTZXRzLmxlbmd0aDsgaSArPSAx
KSB7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NvbW1pdFNldCA9IHNvcnRlZENvbW1pdFNl
dHNbaS0xXTsKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21taXRTZXQgPSBzb3J0ZWRDb21t
aXRTZXRzW2ldOworICAgICAgICAgICAgaWYgKCFwcmV2aW91c0NvbW1pdFNldC5lcXVhbHMoY3Vy
cmVudENvbW1pdFNldCkpCisgICAgICAgICAgICAgICAgdW5pcXVlU29ydGVkQ29tbWl0U2V0cy5w
dXNoKGN1cnJlbnRDb21taXRTZXQpOworICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQodW5pcXVlU29ydGVkQ29tbWl0U2V0c1swXS5lcXVhbHMoc3RhcnRDb21taXRTZXQpKTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQodW5pcXVlU29ydGVkQ29tbWl0U2V0c1t1bmlxdWVTb3J0ZWRD
b21taXRTZXRzLmxlbmd0aCAtIDFdLmVxdWFscyhlbmRDb21taXRTZXQpKTsKKyAgICAgICAgbGV0
IG1pZGRsZUNvbW1pdFNldCA9IHNlbGVjdEJpc2VjdGlvblBvaW50U3RyYXRlZ3kodW5pcXVlU29y
dGVkQ29tbWl0U2V0cyk7CisgICAgICAgIGlmIChtaWRkbGVDb21taXRTZXQgaW5zdGFuY2VvZiBQ
cm9taXNlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1pZGRsZUNvbW1p
dFNldCA9IGF3YWl0IG1pZGRsZUNvbW1pdFNldDsKKyAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICBhbGVydChgRmFpbGVkIHRvIGZpbmQgbWlkZGxlIHBvaW50cyBm
b3Igc2VsZWN0ZWQgcmFuZ2UgZHVlIHRvOiAke2Vycm9yfWApOworICAgICAgICAgICAgICAgIHJl
dHVybiBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW1pZGRsZUNv
bW1pdFNldCkKKyAgICAgICAgICAgIHRocm93ICdDYW5ub3QgZmluZCBiaXNlY3Rpb24gcG9pbnQn
OworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAge25hbWU6IENvbW1pdFNldC5kZXNjcmli
ZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMoc3RhcnRDb21taXRTZXQsIG1pZGRsZUNvbW1p
dFNldCksIGNvbW1pdFNldExpc3Q6IFtzdGFydENvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0XX0s
CisgICAgICAgICAgICB7bmFtZTogQ29tbWl0U2V0LmRlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVu
Q29tbWl0U2V0cyhtaWRkbGVDb21taXRTZXQsIGVuZENvbW1pdFNldCksIGNvbW1pdFNldExpc3Q6
IFttaWRkbGVDb21taXRTZXQsIGVuZENvbW1pdFNldF19CisgICAgICAgIF07CisgICAgfQorCisg
ICAgc3RhdGljIGFzeW5jIHNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRp
c3RhbmNlKHVuaXF1ZVNvcnRlZENvbW1pdFNldHMpCisgICAgeworICAgICAgICBpZiAodW5pcXVl
U29ydGVkQ29tbWl0U2V0cy5sZW5ndGggPCAzKQorICAgICAgICAgICAgdGhyb3cgJ0Nhbm5vdCBi
aXNlY3QgYSByYW5nZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiAzJzsKKworICAgICAgICBjb25zdCBj
b21tb25SZXBvc2l0b3JpZXMgPSB1bmlxdWVTb3J0ZWRDb21taXRTZXRzLnJlZHVjZSgoYWNjdW11
bGF0b3IsIGNvbW1pdFNldCkgPT4KKyAgICAgICAgICAgIG5ldyBTZXQoY29tbWl0U2V0LnJlcG9z
aXRvcmllcygpLmZpbHRlcigocmVwb3NpdG9yeSkgPT4gYWNjdW11bGF0b3IuaGFzKHJlcG9zaXRv
cnkpKSksCisgICAgICAgICAgICBuZXcgU2V0KHVuaXF1ZVNvcnRlZENvbW1pdFNldHNbMF0ucmVw
b3NpdG9yaWVzKCkpKTsKKworICAgICAgICBpZiAoIWNvbW1vblJlcG9zaXRvcmllcy5zaXplKQor
ICAgICAgICAgICAgdGhyb3cgJ05vIGNvbW1vbiByZXBvc2l0b3J5IGlzIGZvdW5kIGFtb25nIHNl
bGVjdGVkIGNvbW1pdCBzZXRzJzsKKworICAgICAgICBjb25zdCBmaXJzdENvbW1pdFNldCA9IHVu
aXF1ZVNvcnRlZENvbW1pdFNldHNbMF07CisgICAgICAgIGNvbnN0IGxhc3RDb21taXRTZXQgPSB1
bmlxdWVTb3J0ZWRDb21taXRTZXRzW3VuaXF1ZVNvcnRlZENvbW1pdFNldHMubGVuZ3RoIC0gMV07
CisgICAgICAgIGNvbnN0IHNlbGVjdGFibGVDb21taXRTZXRzID0gdW5pcXVlU29ydGVkQ29tbWl0
U2V0cy5zbGljZSgxLCAtMSk7CisgICAgICAgIGNvbnN0IGNvbW1pdHNCeVJlcG9zaXRvcnkgPSBu
ZXcgTWFwOworICAgICAgICBjb25zdCBjb21taXRTZXRzQnlDb25maWcgPSBuZXcgTWFwOworCisg
ICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBjb21tb25SZXBvc2l0b3JpZXMpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGZpcnN0Q29tbWl0ID0gZmlyc3RDb21taXRTZXQuY29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IGxhc3RDb21taXQgPSBsYXN0
Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBp
ZiAoZmlyc3RDb21taXQgPT0gbGFzdENvbW1pdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGxldCBjb21taXRzOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBjb21taXRzID0gYXdhaXQgQ29tbWl0TG9nLmZldGNoQmV0d2VlblJldmlzaW9ucyhyZXBv
c2l0b3J5LCBmaXJzdENvbW1pdC5yZXZpc2lvbigpLCBsYXN0Q29tbWl0LnJldmlzaW9uKCkpOwor
ICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRzLnNsaWNlKDAsIC0xKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgYEZhaWxlZCB0byBm
ZXRjaCBjb21taXRzIGJldHdlZW4gIiR7Zmlyc3RDb21taXQubGFiZWwoKX0iIC0gIiR7bGFzdENv
bW1pdC5sYWJlbCgpfSJgOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjb21taXRz
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY29tbWl0
c0J5UmVwb3NpdG9yeS5zZXQocmVwb3NpdG9yeSwgY29tbWl0cyk7CisgICAgICAgICAgICBjb25z
dCBjb21taXRTZXRzQnlDb21taXQgPSBuZXcgTWFwOworICAgICAgICAgICAgY29tbWl0U2V0c0J5
Q29uZmlnLnNldChyZXBvc2l0b3J5LCBjb21taXRTZXRzQnlDb21taXQpOworICAgICAgICAgICAg
Zm9yIChjb25zdCBjb21taXRTZXQgb2Ygc2VsZWN0YWJsZUNvbW1pdFNldHMpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjb21taXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1pdFNldHNCeUNvbW1pdC5oYXMoY29t
bWl0KSkKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0U2V0c0J5Q29tbWl0LnNldChjb21taXQs
IG5ldyBTZXQpOworICAgICAgICAgICAgICAgIGNvbW1pdFNldHNCeUNvbW1pdC5nZXQoY29tbWl0
KS5hZGQoY29tbWl0U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IHJlcG9zaXRvcmllc1NvcnRlZEJ5Q29tbWl0Q291bnRJblJhbmdlID0gWy4uLmNvbW1pdHNC
eVJlcG9zaXRvcnkua2V5cygpXQorICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbW1pdHNC
eVJlcG9zaXRvcnkuZ2V0KGIpLmxlbmd0aCAtIGNvbW1pdHNCeVJlcG9zaXRvcnkuZ2V0KGEpLmxl
bmd0aCk7CisKKyAgICAgICAgbGV0IHJlbWFpbmluZ0NvbW1pdFNldHMgPSBzZWxlY3RhYmxlQ29t
bWl0U2V0czsKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcmllc1Nv
cnRlZEJ5Q29tbWl0Q291bnRJblJhbmdlKSB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0g
Y29tbWl0c0J5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zdCBk
ZXNpcmVkQ29tbWl0SW5kZXggPSBjb21taXRzLmxlbmd0aCAvIDI7CisgICAgICAgICAgICBsZXQg
bWluQ29tbWl0RGlzdGFuY2UgPSBjb21taXRzLmxlbmd0aDsKKyAgICAgICAgICAgIGxldCBuZXdD
b21taXRTZXRzID0gbnVsbDsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldHNCeUNvbW1pdCA9
IGNvbW1pdFNldHNCeUNvbmZpZy5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zdCBp
bmRleEJ5Q29tbWl0ID0gbmV3IE1hcDsKKyAgICAgICAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29t
bWl0LCBpbmRleCkgPT4gaW5kZXhCeUNvbW1pdC5zZXQoY29tbWl0LCBpbmRleCkpOworCisgICAg
ICAgICAgICBmb3IgKGNvbnN0IFtjb21taXQsIGNvbW1pdFNldHNdIG9mIGNvbW1pdFNldHNCeUNv
bW1pdCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdERpc3RhbmNlID0gTWF0aC5hYnMo
aW5kZXhCeUNvbW1pdC5nZXQoY29tbWl0KSAtIGRlc2lyZWRDb21taXRJbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbW1pdERpc3RhbmNlIDwgbWluQ29tbWl0RGlzdGFuY2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbWluQ29tbWl0RGlzdGFuY2UgPSBjb21taXREaXN0YW5jZTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3Q29tbWl0U2V0cyA9IGNvbW1pdFNldHM7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZW1haW5pbmdDb21taXRTZXRzID0g
cmVtYWluaW5nQ29tbWl0U2V0cy5maWx0ZXIoKGNvbW1pdFNldCkgPT4gbmV3Q29tbWl0U2V0cy5o
YXMoY29tbWl0U2V0KSk7CisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tbWl0U2V0cy5sZW5n
dGggPT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWluaW5nQ29tbWl0U2V0c1swXTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghcmVtYWluaW5nQ29tbWl0U2V0cy5sZW5ndGgpCisg
ICAgICAgICAgICB0aHJvdyBgTm8gYmlzZWN0aW9uIHBvaW50cyBmb3VuZGA7CisgICAgICAgIHJl
dHVybiByZW1haW5pbmdDb21taXRTZXRzWzBdOworICAgIH0KKwogICAgIHN0YXRpYyBjYXRlZ29y
aWVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBbCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwppbmRleCBlZTVmMzNh
MGQ1ZTY1MDc0NjlmYmVmODM4ZjJmYmE0Yjc1MzYxYzBlLi5lYWY5OGNjNTYyYTdkZmJiNzgwYWNm
OGYzYWNlMTJhN2Q4YTcwZDQyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKQEAgLTg4LDYgKzg4LDIyIEBAIGNs
YXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgcGF0Y2hGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb1BhdGNoTWFwLmdl
dChyZXBvc2l0b3J5KTsgfQogICAgIHJvb3RGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0
dXJuIHRoaXMuX3JlcG9zaXRvcnlUb1Jvb3RNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgcmVx
dWlyZXNCdWlsZEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3Np
dG9yeVJlcXVpcmVzQnVpbGRNYXAuZ2V0KHJlcG9zaXRvcnkpIHx8IGZhbHNlOyB9CisgICAgaXND
b21taXRTZXRXaXRob3V0Um9vdFBhdGNoT3JPd25lZENvbW1pdCgpIHsKKyAgICAgICAgaWYgKHRo
aXMuYWxsUm9vdEZpbGVzKCkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiB0aGlzLnJlcG9zaXRvcmllcygpKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5vd25lckNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMub3du
ZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMucGF0Y2hGb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLnJlcXVpcmVzQnVpbGRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGEgRGF0ZSBvYmpl
Y3QuCiAgICAgbGF0ZXN0Q29tbWl0VGltZSgpCkBAIC0xNDUsNiArMTYxLDYyIEBAIGNsYXNzIENv
bW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KKworICAgIHN0YXRpYyBkZXNjcmliZURpZmZlcmVuY2VzQmV0d2Vl
bkNvbW1pdFNldHMoZmlyc3RDb21taXRTZXQsIHNlY29uZENvbW1pdFNldCkKKyAgICB7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCFmaXJzdENvbW1pdFNldC5lcXVhbHMoc2Vjb25kQ29tbWl0U2V0
KSk7CisgICAgICAgIGNvbnN0IGFsbFJlcG9zaXRvcmllcyA9IG5ldyBTZXQoZmlyc3RDb21taXRT
ZXQucmVwb3NpdG9yaWVzKCkpOworICAgICAgICBzZWNvbmRDb21taXRTZXQucmVwb3NpdG9yaWVz
KCkuZm9yRWFjaCgocmVwb3NpdG9yeSkgPT4gYWxsUmVwb3NpdG9yaWVzLmFkZChyZXBvc2l0b3J5
KSk7CisgICAgICAgIGxldCBuYW1lUGFydHMgPSBbXTsKKyAgICAgICAgY29uc3QgbWlzc2luZ0Nv
bW1pdCA9IHtsYWJlbDogKCkgPT4gJ21pc3NpbmcnfTsKKyAgICAgICAgY29uc3QgbWlzc2luZ1Bh
dGNoID0ge2lkOiAoKSA9PiAnbWlzc2luZyd9OworICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRv
cnkgb2YgQXJyYXkuZnJvbShhbGxSZXBvc2l0b3JpZXMpKSB7CisgICAgICAgICAgICBjb25zdCBm
aXJzdENvbW1pdCA9IGZpcnN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSkgfHwgbWlzc2luZ0NvbW1pdDsKKyAgICAgICAgICAgIGNvbnN0IHNlY29uZENvbW1pdCA9IHNl
Y29uZENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHx8IG1pc3NpbmdD
b21taXQ7CisgICAgICAgICAgICBjb25zdCBmaXJzdFBhdGNoID0gZmlyc3RDb21taXRTZXQucGF0
Y2hGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHx8IG1pc3NpbmdQYXRjaDsKKyAgICAgICAgICAg
IGNvbnN0IHNlY29uZFBhdGNoID0gc2Vjb25kQ29tbWl0U2V0LnBhdGNoRm9yUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KSB8fCBtaXNzaW5nUGF0Y2g7CisKKyAgICAgICAgICAgIGlmIChmaXJzdENvbW1p
dCA9PSBzZWNvbmRDb21taXQgJiYgZmlyc3RQYXRjaCA9PSBzZWNvbmRQYXRjaCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGZpcnN0Q29tbWl0ICE9IHNlY29u
ZENvbW1pdCAmJiBmaXJzdFBhdGNoID09IHNlY29uZFBhdGNoKQorICAgICAgICAgICAgICAgIG5h
bWVQYXJ0cy5wdXNoKGAke3JlcG9zaXRvcnkubmFtZSgpfTogJHtmaXJzdENvbW1pdC5sYWJlbCgp
fSAtICR7c2Vjb25kQ29tbWl0LmxhYmVsKCl9YCk7CisKKyAgICAgICAgICAgIGlmIChmaXJzdENv
bW1pdCA9PSBzZWNvbmRDb21taXQgJiYgZmlyc3RQYXRjaCAhPSBzZWNvbmRQYXRjaCkKKyAgICAg
ICAgICAgICAgICBuYW1lUGFydHMucHVzaChgJHtyZXBvc2l0b3J5Lm5hbWUoKX06IFBhdGNoLSR7
Zmlyc3RQYXRjaC5pZCgpfSAtIFBhdGNoLSR7c2Vjb25kUGF0Y2guaWQoKX1gKTsKKworICAgICAg
ICAgICAgaWYgKGZpcnN0Q29tbWl0ICE9IHNlY29uZENvbW1pdCAmJiBmaXJzdFBhdGNoICE9IHNl
Y29uZFBhdGNoKQorICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5wdXNoKGAke3JlcG9zaXRvcnku
bmFtZSgpfTogJHtmaXJzdENvbW1pdC5sYWJlbCgpfStQYXRjaC0ke2ZpcnN0UGF0Y2guaWQoKX0g
LSAke3NlY29uZENvbW1pdC5sYWJlbCgpfStQYXRjaC0ke3NlY29uZFBhdGNoLmlkKCl9YCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICBmdW5jdGlvbiBkZXNjcmliZURpZmZlcmVu
Y2VCZXR3ZWVuTGlzdChmaXJzdExpc3QsIHNlY29uZExpc3QsIGRlc2NyaWJlTGlzdEVudHJ5LCBl
bXB0eURlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBmaXJzdFNldCA9IG5ldyBTZXQo
Zmlyc3RMaXN0KTsKKyAgICAgICAgICAgIGNvbnN0IHNlY29uZFNldCA9IG5ldyBTZXQoc2Vjb25k
TGlzdCk7CisgICAgICAgICAgICBjb25zdCB1bmlxdWVJbkZpcnN0TGlzdCA9IGZpcnN0TGlzdC5m
aWx0ZXIoKGVudHJ5KSA9PiAhc2Vjb25kU2V0LmhhcyhlbnRyeSkpOworICAgICAgICAgICAgY29u
c3QgdW5pcXVlSW5TZWNvbmRMaXN0ID0gc2Vjb25kTGlzdC5maWx0ZXIoKGVudHJ5KSA9PiAhZmly
c3RTZXQuaGFzKGVudHJ5KSk7CisgICAgICAgICAgICBmdW5jdGlvbiBkZXNjcmliZUxpc3QobGlz
dCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gbGlzdC5tYXAoZGVzY3Jp
YmVMaXN0RW50cnkpLmpvaW4oJywgJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0
aW9uLmxlbmd0aCA/IGRlc2NyaXB0aW9uIDogZW1wdHlEZXNjcmlwdGlvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBgJHtkZXNjcmliZUxpc3QodW5pcXVlSW5GaXJzdExpc3Qp
fSAtICR7ZGVzY3JpYmVMaXN0KHVuaXF1ZUluU2Vjb25kTGlzdCl9YDsKKyAgICAgICAgfQorCisg
ICAgICAgIG5hbWVQYXJ0cy5wdXNoKGBSb290OiAke2Rlc2NyaWJlRGlmZmVyZW5jZUJldHdlZW5M
aXN0KGZpcnN0Q29tbWl0U2V0LmFsbFJvb3RGaWxlcygpLCBzZWNvbmRDb21taXRTZXQuYWxsUm9v
dEZpbGVzKCksICh1cGxvYWRlZEZpbGUpID0+IHVwbG9hZGVkRmlsZS5maWxlbmFtZSgpLCAnbWlz
c2luZycpfWApOworICAgICAgICBuYW1lUGFydHMucHVzaChgUm9vdDogJHtkZXNjcmliZURpZmZl
cmVuY2VCZXR3ZWVuTGlzdChmaXJzdENvbW1pdFNldC5hbGxSb290RmlsZXMoKSwgc2Vjb25kQ29t
bWl0U2V0LmFsbFJvb3RGaWxlcygpLCAodXBsb2FkZWRGaWxlKSA9PiB1cGxvYWRlZEZpbGUuZmls
ZW5hbWUoKSwgJ21pc3NpbmcnKX1gKTsKKyovCisgICAgICAgIGlmIChmaXJzdENvbW1pdFNldC5h
bGxSb290RmlsZXMoKS5sZW5ndGggfHwgc2Vjb25kQ29tbWl0U2V0LmFsbFJvb3RGaWxlcygpLmxl
bmd0aCkgeworICAgICAgICAgICAgY29uc3QgZmlyc3RSb290RmlsZVNldCA9IG5ldyBTZXQoZmly
c3RDb21taXRTZXQuYWxsUm9vdEZpbGVzKCkpOworICAgICAgICAgICAgY29uc3Qgc2Vjb25kUm9v
dEZpbGVTZXQgPSBuZXcgU2V0KHNlY29uZENvbW1pdFNldC5hbGxSb290RmlsZXMoKSk7CisgICAg
ICAgICAgICBjb25zdCB1bmlxdWVJbkZpcnN0Q29tbWl0U2V0ID0gZmlyc3RDb21taXRTZXQuYWxs
Um9vdEZpbGVzKCkuZmlsdGVyKChyb290RmlsZSkgPT4gIXNlY29uZFJvb3RGaWxlU2V0Lmhhcyhy
b290RmlsZSkpOworICAgICAgICAgICAgY29uc3QgdW5pcXVlSW5TZWNvbmRDb21taXRTZXQgPSBz
ZWNvbmRDb21taXRTZXQuYWxsUm9vdEZpbGVzKCkuZmlsdGVyKChyb290RmlsZSkgPT4gIWZpcnN0
Um9vdEZpbGVTZXQuaGFzKHJvb3RGaWxlKSk7CisgICAgICAgICAgICBjb25zdCBsZWZ0Um9vdEZp
bGVEZXNjcmlwdGlvbiA9IHVuaXF1ZUluRmlyc3RDb21taXRTZXQubWFwKChyb290RmlsZSkgPT4g
cm9vdEZpbGUuaWQoKSkuam9pbignLCAnKTsKKyAgICAgICAgICAgIGNvbnN0IHJpZ2h0Um9vdEZp
bGVEZXNjcmlwdGlvbiA9IHVuaXF1ZUluU2Vjb25kQ29tbWl0U2V0Lm1hcCgocm9vdEZpbGUpID0+
IHJvb3RGaWxlLmlkKCkpLmpvaW4oJywgJyk7CisgICAgICAgICAgICBuYW1lUGFydHMucHVzaChg
Um9vdHM6ICR7bGVmdFJvb3RGaWxlRGVzY3JpcHRpb24ubGVuZ3RoID8gbGVmdFJvb3RGaWxlRGVz
Y3JpcHRpb24gOiAnbWlzc2luZyd9IC0gJHtyaWdodFJvb3RGaWxlRGVzY3JpcHRpb24ubGVuZ3Ro
ID8gcmlnaHRSb290RmlsZURlc2NyaXB0aW9uIDogJ21pc3NpbmcnfWApOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG5hbWVQYXJ0cy5qb2luKCcgJyk7CisgICAgfQogfQogCiBjbGFzcyBN
ZWFzdXJlbWVudENvbW1pdFNldCBleHRlbmRzIENvbW1pdFNldCB7CmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcwppbmRl
eCAwYzBkZmFkNDc3ZTM1N2NiNTQ0ZDEzMjcwM2NhNjcyYjhhMDFjMjI1Li5lZTE0OTZmNWU1NTUz
OWUzYzYwODkyYjAwZTZmMjRhYzI4YzQ1YzUyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzCisrKyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKQEAgLTE0LDcgKzE0
LDcgQEAgY2xhc3MgVGVzdEdyb3VwIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgICAg
ICByZXR1cm4gYnVpbGRSZXF1ZXN0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyKCkgLSBiLm9yZGVy
KCkpOwogICAgICAgICB9KTsKICAgICAgICAgdGhpcy5fcmVwb3NpdG9yaWVzID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHNMYXppbHkgPSBuZXcgTGF6aWx5
RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMuYmluZCh0
aGlzKSk7CisgICAgICAgIHRoaXMuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzTGF6aWx5ID0g
bmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKFRlc3RHcm91cC5fY29tcHV0ZVJlcXVlc3RlZENv
bW1pdFNldHMpOwogICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRDb21taXRTZXRzID0gbnVsbDsKICAg
ICAgICAgdGhpcy5fY29tbWl0U2V0VG9MYWJlbCA9IG5ldyBNYXA7CiAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCFvYmplY3QucGxhdGZvcm0gfHwgb2JqZWN0LnBsYXRmb3JtIGluc3RhbmNlb2YgUGxh
dGZvcm0pOwpAQCAtODAsNyArODAsNyBAQCBjbGFzcyBUZXN0R3JvdXAgZXh0ZW5kcyBMYWJlbGVk
T2JqZWN0IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRz
TGF6aWx5LmV2YWx1YXRlKC4uLnRoaXMuX29yZGVyZWRCdWlsZFJlcXVlc3RzKCkpOwogICAgIH0K
IAotICAgIF9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cyguLi5vcmRlcmVkQnVpbGRSZXF1ZXN0
cykKKyAgICBzdGF0aWMgX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKC4uLm9yZGVyZWRCdWls
ZFJlcXVlc3RzKQogICAgIHsKICAgICAgICAgY29uc3QgcmVxdWVzdGVkQ29tbWl0U2V0cyA9IFtd
OwogICAgICAgICBjb25zdCBjb21taXRTZXRMYWJlbE1hcCA9IG5ldyBNYXA7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2st
cGFnZS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlz
aXMtdGFzay1wYWdlLmpzCmluZGV4IDBhNmEwMmVmYTY3YjRmMTAxMzFlYTIwOWY3YjJhNWRmY2Rl
ZTU0ZWYuLjhlYTBiYTNkZjMyMmY0MjkzNTNkZWQ2ZjhjYWYyNmE3ZWE2ZTE3YmQgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFz
ay1wYWdlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
YW5hbHlzaXMtdGFzay1wYWdlLmpzCkBAIC0yNjgsNiArMjY4LDkgQEAgY2xhc3MgQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICB0aGlzLnBh
cnQoJ3JldHJ5LWZvcm0nKS5saXN0ZW5Ub0FjdGlvbignc3RhcnRUZXN0aW5nJywgKHJlcGV0aXRp
b25Db3VudCkgPT4gewogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbigncmV0cnlUZXN0
R3JvdXAnLCB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpOwogICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLmxpc3RlblRvQWN0aW9uKCdz
dGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CisgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoQWN0aW9uKCdiaXNlY3RUZXN0R3JvdXAnLCB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLCBy
ZXBldGl0aW9uQ291bnQpOworICAgICAgICB9KTsKICAgICB9CiAKICAgICBzZXRUZXN0R3JvdXBz
KHRlc3RHcm91cHMsIGN1cnJlbnRUZXN0R3JvdXAsIHNob3dIaWRkZW5Hcm91cHMpCkBAIC0zMzcs
MTAgKzM0MCwxNSBAQCBjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29t
cG9uZW50QmFzZSB7CiAgICAgICAgIGlmIChjdXJyZW50R3JvdXApCiAgICAgICAgICAgICB0aGlz
Ll90ZXN0R3JvdXBNYXAuZ2V0KGN1cnJlbnRHcm91cCkubGlzdEl0ZW0uY2xhc3NMaXN0LmFkZCgn
c2VsZWN0ZWQnKTsKIAotICAgICAgICBpZiAoY3VycmVudEdyb3VwKQorICAgICAgICBpZiAoY3Vy
cmVudEdyb3VwKSB7CiAgICAgICAgICAgICB0aGlzLnBhcnQoJ3JldHJ5LWZvcm0nKS5zZXRSZXBl
dGl0aW9uQ291bnQoY3VycmVudEdyb3VwLnJlcGV0aXRpb25Db3VudCgpKTsKKyAgICAgICAgICAg
IHRoaXMucGFydCgnYmlzZWN0LWZvcm0nKS5zZXRSZXBldGl0aW9uQ291bnQoY3VycmVudEdyb3Vw
LnJlcGV0aXRpb25Db3VudCgpKTsKKyAgICAgICAgfQogICAgICAgICB0aGlzLmNvbnRlbnQoJ3Jl
dHJ5LWZvcm0nKS5zdHlsZS5kaXNwbGF5ID0gY3VycmVudEdyb3VwID8gbnVsbCA6ICdub25lJzsK
IAorICAgICAgICAvLyBGSVhNRTogYmlzZWN0IHNob3VsZCBzdXBwb3J0IGN1c3RvbSBhbmFseXNp
cyB0YXNrIG9uY2UgYmVpbmcgYWJsZSB0byB0ZXN0IHJhbmRvbSByZXZpc2lvbiBjb21iaW5hdGlv
bi4KKyAgICAgICAgdGhpcy5jb250ZW50KCdiaXNlY3QtZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBj
dXJyZW50R3JvdXAgJiYgIWN1cnJlbnRHcm91cC50YXNrKCkuaXNDdXN0b20oKT8gbnVsbCA6ICdu
b25lJzsKKwogICAgICAgICBjb25zdCBoaWRlQnV0dG9uID0gdGhpcy5jb250ZW50KCdoaWRlLWJ1
dHRvbicpOwogICAgICAgICBoaWRlQnV0dG9uLnRleHRDb250ZW50ID0gY3VycmVudEdyb3VwICYm
IGN1cnJlbnRHcm91cC5pc0hpZGRlbigpID8gJ1VuaGlkZScgOiAnSGlkZSc7CiAgICAgICAgIGhp
ZGVCdXR0b24uc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRHcm91cCA/IG51bGwgOiAnbm9uZSc7CkBA
IC0zNTYsNiArMzY0LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBleHRlbmRz
IENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJlc3VsdHMtdmll
d2VyIGlkPSJyZXN1bHRzLXZpZXdlciI+PC90ZXN0LWdyb3VwLXJlc3VsdHMtdmlld2VyPgogICAg
ICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlIGlkPSJyZXZpc2lvbi10YWJs
ZSI+PC90ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlPgogICAgICAgICAgICAgICAgIDx0ZXN0LWdy
b3VwLWZvcm0gaWQ9InJldHJ5LWZvcm0iPlJldHJ5PC90ZXN0LWdyb3VwLWZvcm0+CisgICAgICAg
ICAgICAgICAgPHRlc3QtZ3JvdXAtZm9ybSBpZD0iYmlzZWN0LWZvcm0iPkJpc2VjdDwvdGVzdC1n
cm91cC1mb3JtPgogICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImhpZGUtYnV0dG9uIj5IaWRl
PC9idXR0b24+CiAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InBlbmRpbmctcmVxdWVzdC1jYW5j
ZWwtd2FybmluZyI+KGNhbmNlbHMgcGVuZGluZyByZXF1ZXN0cyk8L3NwYW4+CiAgICAgICAgICAg
ICA8L2Rpdj5gOwpAQCAtNDIzLDcgKzQzMiw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91
cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICBtYXJnaW46IDA7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICNyZXRyeS1mb3JtIHsKKyAgICAgICAgICAg
ICNyZXRyeS1mb3JtLCAjYmlzZWN0LWZvcm0gewogICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJs
b2NrOwogICAgICAgICAgICAgICAgIG1hcmdpbjogMC41cmVtOwogICAgICAgICAgICAgfQpAQCAt
NTA5LDYgKzUxOCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhl
YWRpbmcgewogICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ3JlbmFtZVRlc3RHcm91
cCcsICh0ZXN0R3JvdXAsIG5ld05hbWUpID0+IHRoaXMuX3VwZGF0ZVRlc3RHcm91cE5hbWUodGVz
dEdyb3VwLCBuZXdOYW1lKSk7CiAgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigndG9n
Z2xlVGVzdEdyb3VwVmlzaWJpbGl0eScsICh0ZXN0R3JvdXApID0+IHRoaXMuX2hpZGVDdXJyZW50
VGVzdEdyb3VwKHRlc3RHcm91cCkpOwogICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24o
J3JldHJ5VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KSA9PiB0aGlzLl9y
ZXRyeUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpKTsKKyAgICAg
ICAgZ3JvdXBQYW5lLmxpc3RlblRvQWN0aW9uKCdiaXNlY3RUZXN0R3JvdXAnLCAodGVzdEdyb3Vw
LCByZXBldGl0aW9uQ291bnQpID0+IHRoaXMuX2Jpc2VjdEN1cnJlbnRUZXN0R3JvdXAodGVzdEdy
b3VwLCByZXBldGl0aW9uQ291bnQpKTsKIAogICAgICAgICB0aGlzLnBhcnQoJ2NhdXNlLWxpc3Qn
KS5saXN0ZW5Ub0FjdGlvbignYWRkSXRlbScsIChyZXBvc2l0b3J5LCByZXZpc2lvbikgPT4gewog
ICAgICAgICAgICAgdGhpcy5fYXNzb2NpYXRlQ29tbWl0KCdjYXVzZScsIHJlcG9zaXRvcnksIHJl
dmlzaW9uKTsKQEAgLTc4NSwxNCArNzk1LDI5IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0
ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogCiAgICAgX3JldHJ5Q3VycmVudFRlc3RHcm91cCh0ZXN0
R3JvdXAsIHJlcGV0aXRpb25Db3VudCkKICAgICB7Ci0gICAgICAgIGNvbnN0IG5ld05hbWUgPSB0
aGlzLl9jcmVhdGVSZXRyeU5hbWVGb3JUZXN0R3JvdXAodGVzdEdyb3VwLm5hbWUoKSk7CisgICAg
ICAgIGNvbnN0IG5ld05hbWUgPSB0aGlzLmNyZWF0ZU5hbWVGb3JUZXN0R3JvdXBXaXRob3V0Q29s
bGlzaW9uKHRlc3RHcm91cC5uYW1lKCksIHRoaXMuX2hhc0R1cGxpY2F0ZVRlc3RHcm91cE5hbWUu
YmluZCh0aGlzKSk7CiAgICAgICAgIGNvbnN0IGNvbW1pdFNldExpc3QgPSB0ZXN0R3JvdXAucmVx
dWVzdGVkQ29tbWl0U2V0cygpOwogICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuX3Rhc2su
cGxhdGZvcm0oKSB8fCB0ZXN0R3JvdXAucGxhdGZvcm0oKTsKICAgICAgICAgcmV0dXJuIFRlc3RH
cm91cC5jcmVhdGVXaXRoQ3VzdG9tQ29uZmlndXJhdGlvbih0aGlzLl90YXNrLCBwbGF0Zm9ybSwg
dGVzdEdyb3VwLnRlc3QoKSwgbmV3TmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRMaXN0
KQogICAgICAgICAgICAgLnRoZW4odGhpcy5fZGlkRmV0Y2hUZXN0R3JvdXBzLmJpbmQodGhpcyks
IGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBjcmVhdGUg
YSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0NvbW1pdFNldExpc3QobmV3TmFt
ZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApOworICAgIH0KKworICAgIGFzeW5jIF9i
aXNlY3RDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdGFzayk7CisgICAgICAgIGNvbnN0IGJpc2Vj
dENvbmZpZ3MgPSBhd2FpdCB0aGlzLl90YXNrLmJpc2VjdENvbmZpZ0ZvclRlc3RHcm91cCh0ZXN0
R3JvdXAsIHRoaXMuX21lYXN1cmVtZW50U2V0KTsKKyAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0
aGlzLl90YXNrLnBsYXRmb3JtKCkgfHwgdGVzdEdyb3VwLnBsYXRmb3JtKCk7CisgICAgICAgIGNv
bnNvbGUubG9nKGJpc2VjdENvbmZpZ3MpOworICAgICAgICBmb3IgKGNvbnN0IGJpc2VjdENvbmZp
ZyBvZiBiaXNlY3RDb25maWdzKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IGNvbnN0IHRlc3RHcm91cHMgPSBhd2FpdCBUZXN0R3JvdXAuY3JlYXRlV2l0aEN1c3RvbUNvbmZp
Z3VyYXRpb24odGhpcy5fdGFzaywgcGxhdGZvcm0sIHRlc3RHcm91cC50ZXN0KCksIGJpc2VjdENv
bmZpZy5uYW1lLCByZXBldGl0aW9uQ291bnQsIGJpc2VjdENvbmZpZy5jb21taXRTZXRMaXN0KTsK
KyAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHModGVzdEdyb3Vw
cyk7CisgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYWxlcnQo
J0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIF9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlm
eWluZ0NvbW1pdFNldExpc3QodGVzdEdyb3VwTmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRT
ZXRNYXApCkBAIC04NDEsOCArODY2LDEwIEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5k
cyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBfY3JlYXRlUmV0
cnlOYW1lRm9yVGVzdEdyb3VwKG5hbWUpCisgICAgc3RhdGljIGNyZWF0ZU5hbWVGb3JUZXN0R3Jv
dXBXaXRob3V0Q29sbGlzaW9uKG5hbWUsIGhhc0R1cGxpY2F0ZVRlc3RHcm91cE5hbWUpCiAgICAg
eworICAgICAgICBpZiAoIWhhc0R1cGxpY2F0ZVRlc3RHcm91cE5hbWUobmFtZSkpCisgICAgICAg
ICAgICByZXR1cm4gbmFtZTsKICAgICAgICAgdmFyIG5hbWVXaXRoTnVtYmVyTWF0Y2ggPSBuYW1l
Lm1hdGNoKC8oLis/KVxzKlwoXHMqKFxkKylccypcKVxzKiQvKTsKICAgICAgICAgdmFyIG51bWJl
ciA9IDE7CiAgICAgICAgIGlmIChuYW1lV2l0aE51bWJlck1hdGNoKSB7CkBAIC04NTQsNyArODgx
LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIG51bWJlcisrOwogICAgICAgICAgICAgbmV3TmFtZSA9
IGAke25hbWV9ICgke251bWJlcn0pYDsKLSAgICAgICAgfSB3aGlsZSAodGhpcy5faGFzRHVwbGlj
YXRlVGVzdEdyb3VwTmFtZShuZXdOYW1lKSk7CisgICAgICAgIH0gd2hpbGUgKGhhc0R1cGxpY2F0
ZVRlc3RHcm91cE5hbWUobmV3TmFtZSkpOwogCiAgICAgICAgIHJldHVybiBuZXdOYW1lOwogICAg
IH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2FuYWx5
c2lzLXRhc2stdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9h
bmFseXNpcy10YXNrLXRlc3RzLmpzCmluZGV4IDQxNWVhMDE3ZGY4YmEzZGI5MjZlZGNiNzAwNWJk
ODc5ZjQ2ZjYzNGIuLmZhZmQwYTc1ZTRhYmQzMzljYjNlNWE1NzFlNTEyNmFkOTQ3NGY4ZWUgMTAw
NjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2FuYWx5c2lzLXRh
c2stdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvYW5h
bHlzaXMtdGFzay10ZXN0cy5qcwpAQCAtMjIxLDQgKzIyMSwyMzMgQEAgZGVzY3JpYmUoJ0FuYWx5
c2lzVGFzaycsICgpID0+IHsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICB9KTsK
KworICAgIGZ1bmN0aW9uIG1ha2VDb21taXQoaWQsIHJlcG9zaXRvcnksIHJldmlzaW9uLCB0aW1l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdExvZy5lbnN1cmVTaW5nbGV0b24oaWQsIHsK
KyAgICAgICAgICAgIHJlcG9zaXRvcnksCisgICAgICAgICAgICByZXZpc2lvbiwKKyAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgIHRpbWUKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc29ydGVkQ29tbWl0U2V0cygpCisgICAgeworICAgICAgICBy
ZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7CisgICAg
ICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1p
dDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgxMSwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwgcmVxdWly
ZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3Vz
dG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDIs
IHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAg
IHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1p
dC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsg
Y29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMywgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJr
aXQtY29tbWl0LTInLCAyKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1p
dC0yJywgMiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbig0LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgzLCBNb2NrTW9kZWxzLndlYmtp
dCwgJ3dlYmtpdC1jb21taXQtMycsIDMpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAg
ICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gsICdv
c3gtY29tbWl0LTMnLCAzKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDUsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1z
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDYsIE1vY2tNb2Rl
bHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC02JywgNiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0s
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxz
Lm9zeCwgJ29zeC1jb21taXQtMycsIDMpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAg
XTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVSb290KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBVcGxvYWRlZEZpbGUuZW5zdXJlU2luZ2xldG9uKDQ1NiwgeydjcmVhdGVkQXQnOiBuZXcg
RGF0ZSgnMjAxNy0wNS0wMVQyMTowMzoyN1onKSwgJ2ZpbGVuYW1lJzogJ3Jvb3QuZGF0JywgJ2V4
dGVuc2lvbic6ICcuZGF0JywgJ2F1dGhvcic6ICdzb21lIHVzZXInLAorICAgICAgICAgICAgc2l6
ZTogMTY0NTIyMzQsIHNoYTI1NjogJzAzZWVkN2E4NDk0YWI4Nzk0YzQ0YjdkNDMwOGU1NTQ0OGZj
NTZmNGQ2YzE3NTgwOWJhOTY4Zjc4ZjY1NmQ1OGQnfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
Y29tbWl0U2V0V2l0aFJvb3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1
cmVTaW5nbGV0b24oMTUsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDog
bWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbY3JlYXRl
Um9vdCgpXQorICAgICAgICB9KTsKKyAgICB9CisgICAgZnVuY3Rpb24gY29tbWl0U2V0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDE2LCB7CisgICAg
ICAgICAgICByZXZpc2lvbkl0ZW1zOiBbeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVs
cy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfV0s
CisgICAgICAgICAgICBjdXN0b21Sb290czogW10KKyAgICAgICAgfSk7CisgICAgfQorCisKKyAg
ICBmdW5jdGlvbiBjb21taXRTZXRzV2l0aE5vQ29tbW9uUmVwb3NpdG9yeSgpIHsKKyAgICAgICAg
cmV0dXJuIFsKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMSwgeworICAg
ICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21t
aXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAx
KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6
IG1ha2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xJywgMSksIHJlcXVp
cmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1
c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigy
LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAg
ICB7IGNvbW1pdDogbWFrZUNvbW1pdCgzMSwgTW9ja01vZGVscy5pb3MsICdpb3MtY29tbWl0LTEn
LCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3Vy
ZVNpbmdsZXRvbigzLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAg
ICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgyLCBNb2NrTW9kZWxzLndlYmtpdCwg
J3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAg
ICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gt
Y29tbWl0LTInLCAyKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSkKKyAgICAgICAgXTsKKyAgICB9CisK
KyAgICBkZXNjcmliZSgnc2VsZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxhclJldmlzaW9uRGlz
dGFuY2UnLCAoKSA9PiB7CisgICAgICAgIE1vY2tNb2RlbHMuaW5qZWN0KCk7CisgICAgICAgIGxl
dCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkuaW5qZWN0KCk7CisgICAgICAgIGl0KCdzaG91bGQg
cmVqZWN0IGlmIGxlc3MgdGhhbiAzIGNvbW1pdCBzZXRzIGFyZSBwcm92aWRlZCcsIGFzeW5jICgp
ID0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXdhaXQgQW5hbHlzaXNU
YXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKHNvcnRl
ZENvbW1pdFNldHMoKS5zbGljZSgwLDEpKQorICAgICAgICAgICAgfSBjYXRjaChlcnJvcikgewor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0Nhbm5vdCBiaXNlY3QgYSByYW5n
ZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiAzJykKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisK
KyAgICAgICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgbm8gY29tbW9uIHJlcG9zaXRvcnkgZm91bmQn
LCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0
IEFuYWx5c2lzVGFzay5zZWxlY3RCaXNlY3Rpb25Qb2ludFdpdGhTaW1pbGFyUmV2aXNpb25EaXN0
YW5jZShjb21taXRTZXRzV2l0aE5vQ29tbW9uUmVwb3NpdG9yeSgpKTsKKyAgICAgICAgICAgIH0g
Y2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVycm9yLCAnTm8g
Y29tbW9uIHJlcG9zaXRvcnkgaXMgZm91bmQgYW1vbmcgc2VsZWN0ZWQgY29tbWl0IHNldHMnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZWplY3Qg
aWYgZmFpbGVkIHRvIGZldGNoIGNvbW1pdCBsb2cnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAg
ICBjb25zdCBwcm9taXNlID0gQW5hbHlzaXNUYXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNp
bWlsYXJSZXZpc2lvbkRpc3RhbmNlKHNvcnRlZENvbW1pdFNldHMoKSk7CisgICAgICAgICAgICBy
ZXF1ZXN0c1swXS5yZWplY3QoJzQwNCcpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoZXJyb3IsICdGYWlsZWQgdG8gZmV0Y2ggY29tbWl0cyBi
ZXR3ZWVuICJ3ZWJraXQtY29tbWl0LTEiIC0gIndlYmtpdC1jb21taXQtNiInKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYmlzZWN0aW9u
IHBvaW50IGNsb3Nlc3QgdG8gdGhlIG1pZGRsZSBvZiByZXZpc2lvbiByYW5nZScsIGFzeW5jICgp
ID0+IHsKKyAgICAgICAgICAgIGxldCBwcm9taXNlID0gQW5hbHlzaXNUYXNrLnNlbGVjdEJpc2Vj
dGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKHNvcnRlZENvbW1pdFNldHMoKSk7
CisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29t
bWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlkOiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29t
bWl0LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZTogMgorICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBN
b2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDMsCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMycsCisgICAg
ICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lOiAzCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Vi
a2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDQKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiA1LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICd3ZWJraXQtY29tbWl0LTUnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNQorICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaWQ6IDYsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtp
dC1jb21taXQtNicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA2CisgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhd2FpdCBN
b2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5y
ZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3gu
aWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0xJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEKKyAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
b3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29uc3Qg
YmlzZWN0aW9uQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChiaXNlY3Rpb25Db21taXRTZXQsIHNvcnRlZENvbW1pdFNldHMoKVszXSk7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2Jhc2ljQmlzZWN0aW9uU3RyYXRlZ3knLCAo
KSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmVmdXNlIHRvIGJpc2VjdCBjb21taXQgc2V0IHdp
dGggcm9vdCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgYXdhaXQgQW5hbHlzaXNUYXNrLnBlcmZvcm1CaW5hcnlCaXNlY3QoW2NvbW1pdFNldCgpLCBj
b21taXRTZXRXaXRoUm9vdCgpXSwgW2NvbW1pdFNldCgpLCBjb21taXRTZXRXaXRoUm9vdCgpXSk7
CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChlcnJvciwgJ0Nhbm5vdCBiaXNlY3Qgb24gYSByYW5nZSB3aXRoIHJvb3QvcGF0Y2gvb3du
ZWQgY29tbWl0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdz
aG91bGQgcmVmdXNlIHRvIGJpc2VjdCB0ZXN0IGdyb3VwIHdpdGggY29tbWl0IHNldHMgdGhvc2Ug
aGF2ZSBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAg
Y29uc3Qgb25lQ29tbWl0U2V0ID0gY29tbWl0U2V0KCk7CisgICAgICAgICAgICBjb25zdCBhbm90
aGVyQ29tbWl0U2V0ID0gc29ydGVkQ29tbWl0U2V0cygpWzBdOworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2VjdChb
b25lQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0XSwgW29uZUNvbW1pdFNldCwgYW5vdGhlckNv
bW1pdFNldF0pOworICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoZXJyb3IsICdDb21taXRTZXRzIGluIHRlc3QgZ3JvdXAgaGF2ZSBkaWZm
ZXJlbnQgcmVwb3NpdG9yaWVzJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
ICAgIGl0KCdzaG91bGQgcmVmdXNlIGlmIGZhaWxlZCB0byBmaW5kIGEgbWlkZGxlIGNvbW1pdCBz
ZXQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCB1bmlxdWVTb3J0ZWRDb21taXRT
ZXQgPSBzb3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBmaXJzdENvbW1pdFNl
dCA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldFswXTsKKyAgICAgICAgICAgIGNvbnN0IGxhc3RDb21t
aXRTZXQgPSB1bmlxdWVTb3J0ZWRDb21taXRTZXRbdW5pcXVlU29ydGVkQ29tbWl0U2V0Lmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhd2FpdCBBbmFseXNp
c1Rhc2sucGVyZm9ybUJpbmFyeUJpc2VjdChbZmlyc3RDb21taXRTZXQsIGxhc3RDb21taXRTZXRd
LCB1bmlxdWVTb3J0ZWRDb21taXRTZXQsICgpID0+IHt0aHJvdyAnQ2Fubm90IGZpbmQgYmlzZWN0
aW9uIHBvaW50J30pOworICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoZXJyb3IsICdDYW5ub3QgZmluZCBiaXNlY3Rpb24gcG9pbnQnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4g
YmlzZWN0aW9uIGNvbmZpZ3MnLCBhc3luYygpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHVuaXF1
ZVNvcnRlZENvbW1pdFNldCA9IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0
IGZpcnN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0WzBdOworICAgICAgICAgICAg
Y29uc3QgbGFzdENvbW1pdFNldCA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldFt1bmlxdWVTb3J0ZWRD
b21taXRTZXQubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1pZGRsZUNv
bW1pdFNldCA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldFszXTsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgW2ZpcnN0Q29uZmlnLCBzZWNvbmRDb25maWddID0gYXdhaXQg
QW5hbHlzaXNUYXNrLnBlcmZvcm1CaW5hcnlCaXNlY3QoW2ZpcnN0Q29tbWl0U2V0LCBsYXN0Q29t
bWl0U2V0XSwgdW5pcXVlU29ydGVkQ29tbWl0U2V0LCAoKSA9PiBleHBlY3RlZE1pZGRsZUNvbW1p
dFNldCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChmaXJzdENvbmZpZy5jb21t
aXRTZXRMaXN0LCBbZmlyc3RDb21taXRTZXQsIGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0XSk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChzZWNvbmRDb25maWcuY29tbWl0U2V0TGlz
dCwgW2V4cGVjdGVkTWlkZGxlQ29tbWl0U2V0LCBsYXN0Q29tbWl0U2V0XSk7CisgICAgICAgICAg
ICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSwgJ3Nob3Vs
ZCBuZXZlciByZWFjaCBoZXJlJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0p
OwogfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9j
b21taXQtc2V0LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMv
Y29tbWl0LXNldC10ZXN0cy5qcwppbmRleCAxMTFjNmE2NTQ4ZjUxODkyZGUxZDI3ZmYxMzMxNTNh
ZGNhNjZlMTA1Li40MjAyNDIzYTNlNTI4YWYzNjk2ZDBmMDc3OWU5YWU4Y2Y4ODk5MjNjIDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRl
c3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1z
ZXQtdGVzdHMuanMKQEAgLTI5LDYgKzI5LDEyIEBAIGZ1bmN0aW9uIGNyZWF0ZUFub3RoZXJSb290
KCkKICAgICAgICAgc2l6ZTogMTY0NTIxMTEsIHNoYTI1NjogJzAzZWVkN2E4NDk0YWI4Nzk0YzQ0
YjdkNDMwOGU1NTQ0OGZjNTZmNGQ2YzE3NTgwOWJhOTY4Zjc4ZjY1NmRiYmInfSk7CiB9CiAKK2Z1
bmN0aW9uIGNyZWF0ZVNoYXJlZFJvb3QoKQoreworICAgIHJldHVybiBVcGxvYWRlZEZpbGUuZW5z
dXJlU2luZ2xldG9uKDQ1OCwgeydjcmVhdGVkQXQnOiBuZXcgRGF0ZSgnMjAxNy0wNS0wMVQyMjow
MzoyN1onKSwgJ2ZpbGVuYW1lJzogJ3Jvb3QuZGF0JywgJ2V4dGVuc2lvbic6ICcuZGF0JywgJ2F1
dGhvcic6ICdzb21lIHVzZXInLAorICAgICAgICBzaXplOiAxNjQ1MjExMSwgc2hhMjU2OiAnMDNl
ZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4ZTU1NDQ4ZmM1NmY0YWFjMTc1ODA5YmE5NjhmNzhmNjU2
ZGJiYid9KTsKK30KKwogZnVuY3Rpb24gY3VzdG9tQ29tbWl0U2V0V2l0aG91dE93bmVkQ29tbWl0
KCkKIHsKICAgICBjb25zdCBjdXN0b21Db21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwpA
QCAtMTA0LDYgKzExMCwxNiBAQCBmdW5jdGlvbiB3ZWJraXRDb21taXQoKQogICAgIH0pOwogfQog
CitmdW5jdGlvbiBhbm90aGVyV2ViS2l0Q29tbWl0KCkKK3sKKyAgICByZXR1cm4gQ29tbWl0TG9n
LmVuc3VyZVNpbmdsZXRvbigyMDE4LCB7CisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMu
d2Via2l0LAorICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMScsCisgICAgICAgIG93
bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgdGltZTogMTQ1NjkzMjc3MzAwMAorICAgIH0pOwor
fQorCiBkZXNjcmliZSgnQ29tbWl0U2V0JywgKCkgPT4gewogICAgIE1vY2tSZW1vdGVBUEkuaW5q
ZWN0KCk7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKQEAgLTE1Niw2ICsxNzIsMzEgQEAgZGVz
Y3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgZnVu
Y3Rpb24gY29tbWl0U2V0V2l0aFR3b1Jvb3RzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDcsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7
IGNvbW1pdDogd2Via2l0Q29tbWl0KCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAg
ICAgICAgY3VzdG9tUm9vdHM6IFtjcmVhdGVSb290KCksIGNyZWF0ZVNoYXJlZFJvb3QoKV0KKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aEFub3RoZXJXZWJL
aXRDb21taXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0
b24oOCwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBhbm90aGVyV2Vi
S2l0Q29tbWl0KCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAgICAgY3VzdG9t
Um9vdHM6IFtdCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldFdp
dGhBbm90aGVyQ29tbWl0UGF0Y2hBbmRSb290KCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDksIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7
IGNvbW1pdDogYW5vdGhlcldlYktpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiB0cnVlLCBwYXRj
aDogY3JlYXRlUGF0Y2goKX1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtjcmVhdGVSb290
KCksIGNyZWF0ZVNoYXJlZFJvb3QoKV0KKyAgICAgICAgfSk7CisgICAgfQorCisKICAgICBmdW5j
dGlvbiBvbmVNZWFzdXJlbWVudENvbW1pdFNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gTWVh
c3VyZW1lbnRDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAgLTE5OCw3ICsyMzksMjcg
QEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGFzc2VydChvbmVD
b21taXRTZXQoKS5lcXVhbHMob25lTWVhc3VyZW1lbnRDb21taXRTZXQoKSkpOwogICAgICAgICAg
ICAgYXNzZXJ0KG9uZU1lYXN1cmVtZW50Q29tbWl0U2V0KCkuZXF1YWxzKG9uZUNvbW1pdFNldCgp
KSk7CiAgICAgICAgIH0pOwotICAgIH0pCisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnZGVzY3Jp
YmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzJywgICgpID0+IHsKKyAgICAgICAgaXQoJ3No
b3VsZCBkZXNjcmliZSBwYXRjaCBkaWZmZXJlbmNlJywgKCkgPT4geworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMo
Y29tbWl0U2V0V2l0aFBhdGNoKCksIGNvbW1pdFNldFdpdGhBbm90aGVyUGF0Y2goKSksICdXZWJL
aXQ6IFBhdGNoLTQ1MyAtIFBhdGNoLTQ1NCcpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgn
c2hvdWxkIGRlc2NyaWJlIHJvb3QgZGlmZmVyZW5jZScsICgpID0+IHsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRz
KGNvbW1pdFNldFdpdGhSb290KCksIGFub3RoZXJDb21taXRTZXRXaXRoUm9vdCgpKSwgJ1Jvb3Rz
OiA0NTYgLSA0NTcnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3Jp
YmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKGNvbW1pdFNldFdpdGhSb290KCksIGNvbW1p
dFNldFdpdGhUd29Sb290cygpKSwgJ1Jvb3RzOiBtaXNzaW5nIC0gNDU4Jyk7CisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoQ29tbWl0U2V0LmRlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVuQ29tbWl0
U2V0cyhjb21taXRTZXRXaXRoVHdvUm9vdHMoKSwgb25lQ29tbWl0U2V0KCkpLCAnUm9vdHM6IDQ1
NiwgNDU4IC0gbWlzc2luZycpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGRl
c2NyaWJlIGNvbW1pdCBkaWZmZXJlbmNlJywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMob25lQ29t
bWl0U2V0KCksIGNvbW1pdFNldFdpdGhBbm90aGVyV2ViS2l0Q29tbWl0KCkpLCAnV2ViS2l0OiB3
ZWJraXQtY29tbWl0LTAgLSB3ZWJraXQtY29tbWl0LTEnKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCBkZXNjcmliZSBjb21taXQgcm9vdCBhbmQgcGF0Y2ggZGlmZmVyZW5jZScs
ICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVEaWZm
ZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKG9uZUNvbW1pdFNldCgpLCBjb21taXRTZXRXaXRoQW5v
dGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpKSwgJ1dlYktpdDogd2Via2l0LWNvbW1pdC0wK1BhdGNo
LW1pc3NpbmcgLSB3ZWJraXQtY29tbWl0LTErUGF0Y2gtNDUzIFJvb3RzOiBtaXNzaW5nIC0gNDU2
LCA0NTgnKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9KTsKIAogZGVzY3JpYmUoJ0ludGVybWVk
aWF0ZUNvbW1pdFNldCcsICgpID0+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336889</attachid>
            <date>2018-03-30 15:00:39 -0700</date>
            <delta_ts>2018-04-04 18:31:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180330150038.patch</filename>
            <type>text/plain</type>
            <size>37838</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlMTAzMTlkYzM1MmU2Nzg2OTE1MmEwYTUxZDQ0ODkxN2Y5ZDJmZTExLi5lY2Y3NGJkNDBi
NzBkOWZiZTE2MDM1NWMwYmIyZDNiNWIwMTMzZDRiIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxOC0wMy0yMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXRzaW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbi4KKworICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYW5h
bHlzaXMtdGFzay5qczoKKyAgICAgICAgKEFuYWx5c2lzVGFzay5wcm90b3R5cGUuYXN5bmMuYmlz
ZWN0Q29uZmlnRm9yVGVzdEdyb3VwKTogUHJlcGFyZXMgaW5mb3JtYXRpb24gYW5kIGludm9rZXMg
YSBiaXNlY3Rpb24gc3RyYXRlZ3kgdG8gZ2V0IGEgYmlzZWN0aW9uIGNvbmZpZy4KKyAgICAgICAg
VXBkYXRlIHRoZSB0ZXN0IG5hbWUgd2hlbiBuZWNlc3NhcnkgdG8gYXZvaWQgbmFtZSBjb2xsaXNp
b24uCisgICAgICAgIChBbmFseXNpc1Rhc2suYXN5bmMucGVyZm9ybUJpbmFyeUJpc2VjdDogQmFz
ZWQgb24gZXhzdGluZyBkYXRhIHBvaW50cyBhbmQgdGVzdCBncm91cHMsIGludm9rZXMgYSBzZWxl
Y3RCaXNlY3Rpb25Qb2ludFN0cmF0ZWd5IHRvIGZpbmQgYQorICAgICAgICBtaWRkbGUgcG9pbnQg
YW5kIHJldHVybnMgYSBwcm9wb3NlZCBiaXNlY3Rpb24gY29uZmlnLgorICAgICAgICAoQW5hbHlz
aXNUYXNrLmFzeW5jLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3Rh
bmNlKTogSW5zdGVhZCBvZiBuYWl2ZWx5IHJldHVybmluZyB0aGUgbWlkZGxlIG9mIGV4aXN0aW5n
IGNvbW1pdCBzZXQgYXJyYXksCisgICAgICAgIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyBhIGJpc2Vj
dCBiaXNlY3Rpb24gcG9pbnRzIHRoYXQgaXMgY2xvc2VzdCB0byBhY3R1YWxseSBtaWRkbGUgb2Yg
dGhlIHJldmlzaW9uIHJhbmdlIGJhc2VkIG9uIGFsbCByZXZpc2lvbnMgcmVwb3J0ZWQKKyAgICAg
ICAgdG8gcGVyZm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMv
Y29tbWl0LXNldC5qczoKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUuaXNDb21taXRTZXRX
aXRob3V0Um9vdFBhdGNoT3JPd25lZENvbW1pdCk6IFJldHVybnMgZmFsc2Ugd2hlbiBhIGNvbW1p
dCBzZXQgaGFzIHJvb3QsIHBhdGNoIG9yIG93bmVkIGNvbW1pdC4KKyAgICAgICAgKENvbW1pdFNl
dC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMpOiBEZXNjcmliZSBkaWZmZXJl
bmNlcyBiZXR3ZWVuIDIgY29tbWl0IHNldHMgaW5jbHVkaW5nIGNvbW1pdCwgcm9vdCBhbmQgcGF0
Y2ggZGlmZmVyZW5jZXMuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpz
OgorICAgICAgICAoVGVzdEdyb3VwKToKKyAgICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2Nv
bXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLnNldCByZXR1cm4pOiBEZWxldGVkLgorICAgICAgICAo
VGVzdEdyb3VwLnByb3RvdHlwZS5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMuc2V0IHJlcXVl
c3RlZENvbW1pdFNldHMpOiBEZWxldGVkLgorICAgICAgICAoVGVzdEdyb3VwLnByb3RvdHlwZS5f
Y29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMuY29uc3Quc2V0IHJlcXVlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoVGVzdEdyb3VwLnByb3RvdHlwZS5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMp
OiBEZWxldGVkLgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2Uu
anM6IEFkZGVkIGJpc2VjdCBidXR0b24uCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQ
YW5lLnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKEFuYWx5c2lz
VGFza1Rlc3RHcm91cFBhbmUucHJvdG90eXBlLl9yZW5kZXJDdXJyZW50VGVzdEdyb3VwKToKKyAg
ICAgICAgKEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUuaHRtbFRlbXBsYXRlKToKKyAgICAgICAg
KEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUuY3NzVGVtcGxhdGUpOgorICAgICAgICAoQW5hbHlz
aXNUYXNrVGVzdEdyb3VwUGFuZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJv
dG90eXBlLl9yZXRyeUN1cnJlbnRUZXN0R3JvdXApOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFn
ZS5wcm90b3R5cGUuYXN5bmMuX2Jpc2VjdEN1cnJlbnRUZXN0R3JvdXApOiBBZGRlZCB0aGlzIGZ1
Y3Rpb24gdG8gcmVhY3Qgd2hlbiAnYmlzZWN0JyBidXR0b24gaXMgY2xpY2tlZC4KKyAgICAgICAg
KEFuYWx5c2lzVGFza1BhZ2UuY3JlYXRlTmFtZUZvclRlc3RHcm91cFdpdGhvdXRDb2xsaXNpb24p
OiBFeHRlbmRzICdfY3JlYXRlUmV0cnlOYW1lRm9yVGVzdEdyb3VwJyBzbyB0aGF0IGl0IG5vdyBp
cyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQKKyAgICAgICAgYWNjZXB0cyBhICdoYXNEdXBsaWNhdGVU
ZXN0R3JvdXBOYW1lJyBmdW5jdGlvbiBhcyBhcnVnbWVudC4KKyAgICAgICAgKEFuYWx5c2lzVGFz
a1BhZ2UucHJvdG90eXBlLl9jcmVhdGVSZXRyeU5hbWVGb3JUZXN0R3JvdXApOiBEZWxldGVkLgor
ICAgICAgICAqIHVuaXQtdGVzdHMvYW5hbHlzaXMtdGFzay10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cy4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVkIHVu
aXQgdGVzdHMgZm9yIENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNl
dHMuCisKIDIwMTgtMDMtMTkgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFVwZGF0ZSBQZXJmIGJ1aWxkYm90IHN5bmNpbmcgc2NyaXB0cyBmb3IgQnVpbGRi
b3QgMC45CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9hbmFseXNpcy10YXNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwppbmRleCA2ZTIyMjg1NjgxNThkZGMxMzg4MmM4YjNk
NzdmYWM0NGY4YmE5MmU5Li5jNjM1YmI2ZmUwNDFjMDFiOWQ4N2Q0MWE5ZmNlMTc3ZTU3NGI3NGJi
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9h
bmFseXNpcy10YXNrLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2FuYWx5c2lzLXRhc2suanMKQEAgLTE2Nyw2ICsxNjcsMTUzIEBAIGNsYXNzIEFuYWx5
c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0ZWdvcnk7
CiAgICAgfQogCisgICAgYXN5bmMgYmlzZWN0Q29uZmlnRm9yVGVzdEdyb3VwKHRlc3RHcm91cCwg
bWVhc3VyZW1lbnRTZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0ZXN0R3JvdXAu
dGFzaygpID09IHRoaXMpOworCisgICAgICAgIGNvbnN0IHJlcXVlc3RlZENvbW1pdFNldCA9IHRl
c3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CisgICAgICAgIGNvbnN0IGFsbFRlc3RHcm91
cHNJblRhc2sgPSBUZXN0R3JvdXAuZmluZEFsbEJ5VGFzayh0aGlzLmlkKCkpOworICAgICAgICBj
b25zdCBhbGxDb21taXRTZXRzSW5UYXNrID0gbmV3IFNldDsKKyAgICAgICAgY29uc3QgZXhpc3Rp
bmdUZXN0R3JvdXBOYW1lcyA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Yg
YWxsVGVzdEdyb3Vwc0luVGFzaykgeworICAgICAgICAgICAgZ3JvdXAucmVxdWVzdGVkQ29tbWl0
U2V0cygpLmZvckVhY2goKGNvbW1pdFNldCkgPT4gYWxsQ29tbWl0U2V0c0luVGFzay5hZGQoY29t
bWl0U2V0KSk7CisgICAgICAgICAgICBleGlzdGluZ1Rlc3RHcm91cE5hbWVzLmFkZChncm91cC5u
YW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRT
ZXQuZmV0Y2hlZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBj
b25zdCBzdGFydFBvaW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElk
KCkpOworICAgICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1l
YXN1cmVtZW50SWQoKSk7CisKKyAgICAgICAgY29uc3QgcG9pbnRBZnRlckVuZCA9IGVuZFBvaW50
LnNlcmllcy5uZXh0UG9pbnQoZW5kUG9pbnQpOworICAgICAgICBmb3IgKGxldCBwb2ludCA9IHN0
YXJ0UG9pbnQ7IHBvaW50ICYmIHBvaW50ICE9IHBvaW50QWZ0ZXJFbmQ7IHBvaW50ID0gcG9pbnQu
c2VyaWVzLm5leHRQb2ludChwb2ludCkpCisgICAgICAgICAgICBhbGxDb21taXRTZXRzSW5UYXNr
LmFkZChwb2ludC5jb21taXRTZXQoKSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNv
bnN0IGJpc2VjdENvbmZpZ3MgPSBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2Vj
dChyZXF1ZXN0ZWRDb21taXRTZXQsIFsuLi5hbGxDb21taXRTZXRzSW5UYXNrXSwgQW5hbHlzaXNU
YXNrLnNlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKTsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgYmlzZWN0Q29uZmlnIG9mIGJpc2VjdENvbmZpZ3MpCisgICAg
ICAgICAgICAgICAgYmlzZWN0Q29uZmlnLm5hbWUgPSBBbmFseXNpc1Rhc2tQYWdlLmNyZWF0ZU5h
bWVGb3JUZXN0R3JvdXBXaXRob3V0Q29sbGlzaW9uKGJpc2VjdENvbmZpZy5uYW1lLCAobmFtZSkg
PT4gZXhpc3RpbmdUZXN0R3JvdXBOYW1lcy5oYXMobmFtZSkpOworICAgICAgICAgICAgcmV0dXJu
IGJpc2VjdENvbmZpZ3M7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBh
bGVydChgRmFpbGVkIHRvIEJpc2VjdCB0ZXN0IGdyb3VwICR7dGVzdEdyb3VwLm5hbWUoKX0gZHVl
IHRvICR7ZXJyb3J9YCkKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBhc3luYyBwZXJm
b3JtQmluYXJ5QmlzZWN0KGNvbW1pdFNldEluVGVzdEdyb3VwLCBhbGxDb21taXRTZXRzSW5UYXNr
LCBzZWxlY3RCaXNlY3Rpb25Qb2ludFN0cmF0ZWd5KQorICAgIHsKKyAgICAgICAgaWYgKGNvbW1p
dFNldEluVGVzdEdyb3VwLmxlbmd0aCAhPSAyKQorICAgICAgICAgICAgdGhyb3cgJ0NhbiBvbmx5
IGJpc2VjdCBhIHRlc3QgZ3JvdXAgd2l0aCAyIGNvbW1pdCBzZXRzJzsKKworICAgICAgICBjb25z
dCBjb21taXRTZXRTb3J0QnlMYXRlc3RDb21taXRUaW1lID0gKG9uZUNvbW1pdFNldCwgYW5vdGhl
ckNvbW1pdFNldCkgPT4gb25lQ29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKSAtIGFub3RoZXJD
b21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpOworICAgICAgICBjb25zdCBbc3RhcnRDb21taXRT
ZXQsIGVuZENvbW1pdFNldF0gPSBjb21taXRTZXRJblRlc3RHcm91cC5zb3J0KGNvbW1pdFNldFNv
cnRCeUxhdGVzdENvbW1pdFRpbWUpOworICAgICAgICBjb25zdCBhbGxTaW1wbGVDb21taXRTZXRz
ID0gc3RhcnRDb21taXRTZXQuaXNDb21taXRTZXRXaXRob3V0Um9vdFBhdGNoT3JPd25lZENvbW1p
dCgpICYmIGVuZENvbW1pdFNldC5pc0NvbW1pdFNldFdpdGhvdXRSb290UGF0Y2hPck93bmVkQ29t
bWl0KCk7CisgICAgICAgIGlmICghYWxsU2ltcGxlQ29tbWl0U2V0cykKKyAgICAgICAgICAgIHRo
cm93ICdDYW5ub3QgYmlzZWN0IG9uIGEgcmFuZ2Ugd2l0aCByb290L3BhdGNoL293bmVkIGNvbW1p
dCc7CisKKyAgICAgICAgY29uc3QgYWxsb3dlZFJlcG9zaXRvcmllcyA9IG5ldyBTZXQoc3RhcnRD
b21taXRTZXQucmVwb3NpdG9yaWVzKCkpOworICAgICAgICBpZiAoZW5kQ29tbWl0U2V0LnJlcG9z
aXRvcmllcygpLmxlbmd0aCAhPSBhbGxvd2VkUmVwb3NpdG9yaWVzLnNpemUKKyAgICAgICAgICAg
IHx8ICFlbmRDb21taXRTZXQucmVwb3NpdG9yaWVzKCkuZXZlcnkoKHJlcG9zaXRvcnkpID0+IGFs
bG93ZWRSZXBvc2l0b3JpZXMuaGFzKHJlcG9zaXRvcnkpKSkKKyAgICAgICAgICAgIHRocm93ICdD
b21taXRTZXRzIGluIHRlc3QgZ3JvdXAgaGF2ZSBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzJzsKKwor
ICAgICAgICBjb25zdCBjb21wYXRpYmxlQ29tbWl0U2V0cyA9IGFsbENvbW1pdFNldHNJblRhc2su
ZmlsdGVyKChjb21taXRTZXQpID0+CisgICAgICAgICAgICBjb21taXRTZXQucmVwb3NpdG9yaWVz
KCkubGVuZ3RoID09IGFsbG93ZWRSZXBvc2l0b3JpZXMuc2l6ZQorICAgICAgICAgICAgJiYgY29t
bWl0U2V0LnJlcG9zaXRvcmllcygpLmV2ZXJ5KChyZXBvc2l0b3J5KSA9PiBhbGxvd2VkUmVwb3Np
dG9yaWVzLmhhcyhyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICYmIGNvbW1pdFNldC5sYXRlc3RD
b21taXRUaW1lKCkgPj0gc3RhcnRDb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpCisgICAgICAg
ICAgICAmJiBjb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpIDw9IGVuZENvbW1pdFNldC5sYXRl
c3RDb21taXRUaW1lKCkKKyAgICAgICAgKTsKKyAgICAgICAgY29uc3Qgc29ydGVkQ29tbWl0U2V0
cyA9IGNvbXBhdGlibGVDb21taXRTZXRzLnNvcnQoY29tbWl0U2V0U29ydEJ5TGF0ZXN0Q29tbWl0
VGltZSk7CisgICAgICAgIGNvbnN0IHVuaXF1ZVNvcnRlZENvbW1pdFNldHMgPSBbc29ydGVkQ29t
bWl0U2V0c1swXV07CisgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc29ydGVkQ29tbWl0U2V0
cy5sZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDb21taXRTZXQg
PSBzb3J0ZWRDb21taXRTZXRzW2ktMV07CisgICAgICAgICAgICBjb25zdCBjdXJyZW50Q29tbWl0
U2V0ID0gc29ydGVkQ29tbWl0U2V0c1tpXTsKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNDb21t
aXRTZXQuZXF1YWxzKGN1cnJlbnRDb21taXRTZXQpKQorICAgICAgICAgICAgICAgIHVuaXF1ZVNv
cnRlZENvbW1pdFNldHMucHVzaChjdXJyZW50Q29tbWl0U2V0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHVuaXF1ZVNvcnRlZENvbW1pdFNldHNbMF0uZXF1YWxzKHN0YXJ0
Q29tbWl0U2V0KSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHVuaXF1ZVNvcnRlZENvbW1pdFNl
dHNbdW5pcXVlU29ydGVkQ29tbWl0U2V0cy5sZW5ndGggLSAxXS5lcXVhbHMoZW5kQ29tbWl0U2V0
KSk7CisKKyAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgc2VsZWN0QmlzZWN0
aW9uUG9pbnRTdHJhdGVneSh1bmlxdWVTb3J0ZWRDb21taXRTZXRzKTsKKyAgICAgICAgcmV0dXJu
IFsKKyAgICAgICAgICAgIHtuYW1lOiBDb21taXRTZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdl
ZW5Db21taXRTZXRzKHN0YXJ0Q29tbWl0U2V0LCBtaWRkbGVDb21taXRTZXQpLCBjb21taXRTZXRM
aXN0OiBbc3RhcnRDb21taXRTZXQsIG1pZGRsZUNvbW1pdFNldF19LAorICAgICAgICAgICAge25h
bWU6IENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMobWlkZGxl
Q29tbWl0U2V0LCBlbmRDb21taXRTZXQpLCBjb21taXRTZXRMaXN0OiBbbWlkZGxlQ29tbWl0U2V0
LCBlbmRDb21taXRTZXRdfQorICAgICAgICBdOworICAgIH0KKworICAgIHN0YXRpYyBhc3luYyBz
ZWxlY3RCaXNlY3Rpb25Qb2ludFdpdGhTaW1pbGFyUmV2aXNpb25EaXN0YW5jZSh1bmlxdWVTb3J0
ZWRDb21taXRTZXRzKQorICAgIHsKKyAgICAgICAgaWYgKHVuaXF1ZVNvcnRlZENvbW1pdFNldHMu
bGVuZ3RoIDwgMykKKyAgICAgICAgICAgIHRocm93ICdDYW5ub3QgYmlzZWN0IGEgcmFuZ2UgdGhh
dCBpcyBzbWFsbGVyIHRoYW4gMyc7CisKKyAgICAgICAgY29uc3QgY29tbW9uUmVwb3NpdG9yaWVz
ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjb21taXRTZXQp
ID0+CisgICAgICAgICAgICBuZXcgU2V0KGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5maWx0ZXIo
KHJlcG9zaXRvcnkpID0+IGFjY3VtdWxhdG9yLmhhcyhyZXBvc2l0b3J5KSkpLAorICAgICAgICAg
ICAgbmV3IFNldCh1bmlxdWVTb3J0ZWRDb21taXRTZXRzWzBdLnJlcG9zaXRvcmllcygpKSk7CisK
KyAgICAgICAgaWYgKCFjb21tb25SZXBvc2l0b3JpZXMuc2l6ZSkKKyAgICAgICAgICAgIHRocm93
ICdObyBjb21tb24gcmVwb3NpdG9yeSBpcyBmb3VuZCBhbW9uZyBzZWxlY3RlZCBjb21taXQgc2V0
cyc7CisKKyAgICAgICAgY29uc3QgZmlyc3RDb21taXRTZXQgPSB1bmlxdWVTb3J0ZWRDb21taXRT
ZXRzWzBdOworICAgICAgICBjb25zdCBsYXN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0
U2V0c1t1bmlxdWVTb3J0ZWRDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICBjb25zdCBz
ZWxlY3RhYmxlQ29tbWl0U2V0cyA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldHMuc2xpY2UoMSwgLTEp
OworICAgICAgICBjb25zdCBjb21taXRzQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKKyAgICAgICAg
Y29uc3QgY29tbWl0U2V0c0J5Q29uZmlnID0gbmV3IE1hcDsKKworICAgICAgICBmb3IgKGNvbnN0
IHJlcG9zaXRvcnkgb2YgY29tbW9uUmVwb3NpdG9yaWVzKSB7CisgICAgICAgICAgICBjb25zdCBm
aXJzdENvbW1pdCA9IGZpcnN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSk7CisgICAgICAgICAgICBjb25zdCBsYXN0Q29tbWl0ID0gbGFzdENvbW1pdFNldC5jb21taXRG
b3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgaWYgKGZpcnN0Q29tbWl0ID09
IGxhc3RDb21taXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsZXQg
Y29tbWl0czsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29tbWl0cyA9IGF3
YWl0IENvbW1pdExvZy5mZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgZmlyc3RDb21t
aXQucmV2aXNpb24oKSwgbGFzdENvbW1pdC5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgICAgICBj
b21taXRzID0gY29tbWl0cy5zbGljZSgwLCAtMSk7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJv
cikgeworICAgICAgICAgICAgICAgIHRocm93IGBGYWlsZWQgdG8gZmV0Y2ggY29tbWl0cyBiZXR3
ZWVuICIke2ZpcnN0Q29tbWl0LmxhYmVsKCl9IiAtICIke2xhc3RDb21taXQubGFiZWwoKX0iYDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29tbWl0cy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbW1pdHNCeVJlcG9zaXRvcnkuc2V0
KHJlcG9zaXRvcnksIGNvbW1pdHMpOworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0c0J5Q29t
bWl0ID0gbmV3IE1hcDsKKyAgICAgICAgICAgIGNvbW1pdFNldHNCeUNvbmZpZy5zZXQocmVwb3Np
dG9yeSwgY29tbWl0U2V0c0J5Q29tbWl0KTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWl0
U2V0IG9mIHNlbGVjdGFibGVDb21taXRTZXRzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29t
bWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjb21taXRTZXRzQnlDb21taXQuaGFzKGNvbW1pdCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdFNldHNCeUNvbW1pdC5zZXQoY29tbWl0LCBuZXcgU2V0KTsKKyAgICAg
ICAgICAgICAgICBjb21taXRTZXRzQnlDb21taXQuZ2V0KGNvbW1pdCkuYWRkKGNvbW1pdFNldCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdCByZXBvc2l0b3JpZXNT
b3J0ZWRCeUNvbW1pdENvdW50SW5SYW5nZSA9IFsuLi5jb21taXRzQnlSZXBvc2l0b3J5LmtleXMo
KV0KKyAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21taXRzQnlSZXBvc2l0b3J5LmdldChi
KS5sZW5ndGggLSBjb21taXRzQnlSZXBvc2l0b3J5LmdldChhKS5sZW5ndGgpOworCisgICAgICAg
IGxldCByZW1haW5pbmdDb21taXRTZXRzID0gc2VsZWN0YWJsZUNvbW1pdFNldHM7CisgICAgICAg
IGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiByZXBvc2l0b3JpZXNTb3J0ZWRCeUNvbW1pdENvdW50
SW5SYW5nZSkgeworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNCeVJlcG9zaXRv
cnkuZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgY29uc3QgZGVzaXJlZENvbW1pdEluZGV4
ID0gY29tbWl0cy5sZW5ndGggLyAyOworICAgICAgICAgICAgbGV0IG1pbkNvbW1pdERpc3RhbmNl
ID0gY29tbWl0cy5sZW5ndGg7CisgICAgICAgICAgICBsZXQgbmV3Q29tbWl0U2V0cyA9IG51bGw7
CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXRzQnlDb21taXQgPSBjb21taXRTZXRzQnlDb25m
aWcuZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgY29uc3QgaW5kZXhCeUNvbW1pdCA9IG5l
dyBNYXA7CisgICAgICAgICAgICBjb21taXRzLmZvckVhY2goKGNvbW1pdCwgaW5kZXgpID0+IGlu
ZGV4QnlDb21taXQuc2V0KGNvbW1pdCwgaW5kZXgpKTsKKworICAgICAgICAgICAgZm9yIChjb25z
dCBbY29tbWl0LCBjb21taXRTZXRzXSBvZiBjb21taXRTZXRzQnlDb21taXQpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjb21taXREaXN0YW5jZSA9IE1hdGguYWJzKGluZGV4QnlDb21taXQuZ2V0
KGNvbW1pdCkgLSBkZXNpcmVkQ29tbWl0SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChjb21t
aXREaXN0YW5jZSA8IG1pbkNvbW1pdERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIG1p
bkNvbW1pdERpc3RhbmNlID0gY29tbWl0RGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIG5l
d0NvbW1pdFNldHMgPSBjb21taXRTZXRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmVtYWluaW5nQ29tbWl0U2V0cyA9IHJlbWFpbmluZ0NvbW1pdFNl
dHMuZmlsdGVyKChjb21taXRTZXQpID0+IG5ld0NvbW1pdFNldHMuaGFzKGNvbW1pdFNldCkpOwor
ICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoID09IDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHNbMF07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cg
YE5vIGJpc2VjdGlvbiBwb2ludHMgZm91bmRgOworICAgICAgICByZXR1cm4gcmVtYWluaW5nQ29t
bWl0U2V0c1swXTsKKyAgICB9CisKICAgICBzdGF0aWMgY2F0ZWdvcmllcygpCiAgICAgewogICAg
ICAgICByZXR1cm4gWwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggZWU1ZjMzYTBkNWU2NTA3NDY5ZmJlZjgz
OGYyZmJhNGI3NTM2MWMwZS4uZDI3NDU3NGJmOTA2MGU1NWI4ODY0MWNjZDA1MmU0YTJmZDAzZWNl
ZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
Y29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9jb21taXQtc2V0LmpzCkBAIC04OCw2ICs4OCwyMiBAQCBjbGFzcyBDb21taXRTZXQgZXh0
ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIHBhdGNoRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5
KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9QYXRjaE1hcC5nZXQocmVwb3NpdG9yeSk7IH0K
ICAgICByb290Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0
b3J5VG9Sb290TWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIHJlcXVpcmVzQnVpbGRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlSZXF1aXJlc0J1aWxk
TWFwLmdldChyZXBvc2l0b3J5KSB8fCBmYWxzZTsgfQorICAgIGlzQ29tbWl0U2V0V2l0aG91dFJv
b3RQYXRjaE9yT3duZWRDb21taXQoKSB7CisgICAgICAgIGlmICh0aGlzLmFsbFJvb3RGaWxlcygp
Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3IgKGNvbnN0
IHJlcG9zaXRvcnkgb2YgdGhpcy5yZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgaWYgKHRo
aXMub3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICh0aGlzLm93bmVkUmVwb3NpdG9yaWVzRm9y
T3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLnBhdGNoRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy5yZXF1
aXJlc0J1aWxkRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiBhIERhdGUgb2JqZWN0LgogICAgIGxhdGVzdENv
bW1pdFRpbWUoKQpAQCAtMTQ1LDYgKzE2MSw0NiBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBE
YXRhTW9kZWxPYmplY3QgewogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CisKKyAgICBzdGF0aWMgZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKGZpcnN0
Q29tbWl0U2V0LCBzZWNvbmRDb21taXRTZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2Vy
dCghZmlyc3RDb21taXRTZXQuZXF1YWxzKHNlY29uZENvbW1pdFNldCkpOworICAgICAgICBjb25z
dCBhbGxSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KGZpcnN0Q29tbWl0U2V0LnJlcG9zaXRvcmllcygp
KTsKKyAgICAgICAgc2Vjb25kQ29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmZvckVhY2goKHJlcG9z
aXRvcnkpID0+IGFsbFJlcG9zaXRvcmllcy5hZGQocmVwb3NpdG9yeSkpOworICAgICAgICBsZXQg
bmFtZVBhcnRzID0gW107CisgICAgICAgIGNvbnN0IG1pc3NpbmdDb21taXQgPSB7bGFiZWw6ICgp
ID0+ICdtaXNzaW5nJ307CisgICAgICAgIGNvbnN0IG1pc3NpbmdQYXRjaCA9IHtpZDogKCkgPT4g
J21pc3NpbmcnfTsKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIEFycmF5LmZyb20o
YWxsUmVwb3NpdG9yaWVzKSkgeworICAgICAgICAgICAgY29uc3QgZmlyc3RDb21taXQgPSBmaXJz
dENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHx8IG1pc3NpbmdDb21t
aXQ7CisgICAgICAgICAgICBjb25zdCBzZWNvbmRDb21taXQgPSBzZWNvbmRDb21taXRTZXQuY29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB8fCBtaXNzaW5nQ29tbWl0OworICAgICAgICAg
ICAgY29uc3QgZmlyc3RQYXRjaCA9IGZpcnN0Q29tbWl0U2V0LnBhdGNoRm9yUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KSB8fCBtaXNzaW5nUGF0Y2g7CisgICAgICAgICAgICBjb25zdCBzZWNvbmRQYXRj
aCA9IHNlY29uZENvbW1pdFNldC5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgfHwgbWlz
c2luZ1BhdGNoOworCisgICAgICAgICAgICBpZiAoZmlyc3RDb21taXQgPT0gc2Vjb25kQ29tbWl0
ICYmIGZpcnN0UGF0Y2ggPT0gc2Vjb25kUGF0Y2gpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGlmIChmaXJzdENvbW1pdCAhPSBzZWNvbmRDb21taXQgJiYgZmlyc3RQ
YXRjaCA9PSBzZWNvbmRQYXRjaCkKKyAgICAgICAgICAgICAgICBuYW1lUGFydHMucHVzaChgJHty
ZXBvc2l0b3J5Lm5hbWUoKX06ICR7Zmlyc3RDb21taXQubGFiZWwoKX0gLSAke3NlY29uZENvbW1p
dC5sYWJlbCgpfWApOworCisgICAgICAgICAgICBpZiAoZmlyc3RDb21taXQgPT0gc2Vjb25kQ29t
bWl0ICYmIGZpcnN0UGF0Y2ggIT0gc2Vjb25kUGF0Y2gpCisgICAgICAgICAgICAgICAgbmFtZVBh
cnRzLnB1c2goYCR7cmVwb3NpdG9yeS5uYW1lKCl9OiBQYXRjaC0ke2ZpcnN0UGF0Y2guaWQoKX0g
LSBQYXRjaC0ke3NlY29uZFBhdGNoLmlkKCl9YCk7CisKKyAgICAgICAgICAgIGlmIChmaXJzdENv
bW1pdCAhPSBzZWNvbmRDb21taXQgJiYgZmlyc3RQYXRjaCAhPSBzZWNvbmRQYXRjaCkKKyAgICAg
ICAgICAgICAgICBuYW1lUGFydHMucHVzaChgJHtyZXBvc2l0b3J5Lm5hbWUoKX06ICR7Zmlyc3RD
b21taXQubGFiZWwoKX0rUGF0Y2gtJHtmaXJzdFBhdGNoLmlkKCl9IC0gJHtzZWNvbmRDb21taXQu
bGFiZWwoKX0rUGF0Y2gtJHtzZWNvbmRQYXRjaC5pZCgpfWApOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZpcnN0Q29tbWl0U2V0LmFsbFJvb3RGaWxlcygpLmxlbmd0aCB8fCBzZWNvbmRDb21t
aXRTZXQuYWxsUm9vdEZpbGVzKCkubGVuZ3RoKSB7CisgICAgICAgICAgICBjb25zdCBmaXJzdFJv
b3RGaWxlU2V0ID0gbmV3IFNldChmaXJzdENvbW1pdFNldC5hbGxSb290RmlsZXMoKSk7CisgICAg
ICAgICAgICBjb25zdCBzZWNvbmRSb290RmlsZVNldCA9IG5ldyBTZXQoc2Vjb25kQ29tbWl0U2V0
LmFsbFJvb3RGaWxlcygpKTsKKyAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUluRmlyc3RDb21taXRT
ZXQgPSBmaXJzdENvbW1pdFNldC5hbGxSb290RmlsZXMoKS5maWx0ZXIoKHJvb3RGaWxlKSA9PiAh
c2Vjb25kUm9vdEZpbGVTZXQuaGFzKHJvb3RGaWxlKSk7CisgICAgICAgICAgICBjb25zdCB1bmlx
dWVJblNlY29uZENvbW1pdFNldCA9IHNlY29uZENvbW1pdFNldC5hbGxSb290RmlsZXMoKS5maWx0
ZXIoKHJvb3RGaWxlKSA9PiAhZmlyc3RSb290RmlsZVNldC5oYXMocm9vdEZpbGUpKTsKKyAgICAg
ICAgICAgIGNvbnN0IGxlZnRSb290RmlsZURlc2NyaXB0aW9uID0gdW5pcXVlSW5GaXJzdENvbW1p
dFNldC5tYXAoKHJvb3RGaWxlKSA9PiByb290RmlsZS5pZCgpKS5qb2luKCcsICcpOworICAgICAg
ICAgICAgY29uc3QgcmlnaHRSb290RmlsZURlc2NyaXB0aW9uID0gdW5pcXVlSW5TZWNvbmRDb21t
aXRTZXQubWFwKChyb290RmlsZSkgPT4gcm9vdEZpbGUuaWQoKSkuam9pbignLCAnKTsKKyAgICAg
ICAgICAgIG5hbWVQYXJ0cy5wdXNoKGBSb290czogJHtsZWZ0Um9vdEZpbGVEZXNjcmlwdGlvbi5s
ZW5ndGggPyBsZWZ0Um9vdEZpbGVEZXNjcmlwdGlvbiA6ICdtaXNzaW5nJ30gLSAke3JpZ2h0Um9v
dEZpbGVEZXNjcmlwdGlvbi5sZW5ndGggPyByaWdodFJvb3RGaWxlRGVzY3JpcHRpb24gOiAnbWlz
c2luZyd9YCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmFtZVBhcnRzLmpvaW4oJyAn
KTsKKyAgICB9CiB9CiAKIGNsYXNzIE1lYXN1cmVtZW50Q29tbWl0U2V0IGV4dGVuZHMgQ29tbWl0
U2V0IHsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL3Rlc3QtZ3JvdXAuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy90ZXN0LWdyb3VwLmpzCmluZGV4IDBjMGRmYWQ0NzdlMzU3Y2I1NDRkMTMyNzAzY2E2NzJi
OGEwMWMyMjUuLmVlMTQ5NmY1ZTU1NTM5ZTNjNjA4OTJiMDBlNmYyNGFjMjhjNDVjNTIgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3Jv
dXAuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVz
dC1ncm91cC5qcwpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBUZXN0R3JvdXAgZXh0ZW5kcyBMYWJl
bGVkT2JqZWN0IHsKICAgICAgICAgICAgIHJldHVybiBidWlsZFJlcXVlc3RzLnNvcnQoKGEsIGIp
ID0+IGEub3JkZXIoKSAtIGIub3JkZXIoKSk7CiAgICAgICAgIH0pOwogICAgICAgICB0aGlzLl9y
ZXBvc2l0b3JpZXMgPSBudWxsOwotICAgICAgICB0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0
U2V0c0xhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9jb21wdXRlUmVx
dWVzdGVkQ29tbWl0U2V0cy5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVJlcXVl
c3RlZENvbW1pdFNldHNMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24oVGVzdEdy
b3VwLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cyk7CiAgICAgICAgIHRoaXMuX3JlcXVlc3Rl
ZENvbW1pdFNldHMgPSBudWxsOwogICAgICAgICB0aGlzLl9jb21taXRTZXRUb0xhYmVsID0gbmV3
IE1hcDsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIW9iamVjdC5wbGF0Zm9ybSB8fCBvYmplY3Qu
cGxhdGZvcm0gaW5zdGFuY2VvZiBQbGF0Zm9ybSk7CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFRl
c3RHcm91cCBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gdGhpcy5fY29t
cHV0ZVJlcXVlc3RlZENvbW1pdFNldHNMYXppbHkuZXZhbHVhdGUoLi4udGhpcy5fb3JkZXJlZEJ1
aWxkUmVxdWVzdHMoKSk7CiAgICAgfQogCi0gICAgX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRz
KC4uLm9yZGVyZWRCdWlsZFJlcXVlc3RzKQorICAgIHN0YXRpYyBfY29tcHV0ZVJlcXVlc3RlZENv
bW1pdFNldHMoLi4ub3JkZXJlZEJ1aWxkUmVxdWVzdHMpCiAgICAgewogICAgICAgICBjb25zdCBy
ZXF1ZXN0ZWRDb21taXRTZXRzID0gW107CiAgICAgICAgIGNvbnN0IGNvbW1pdFNldExhYmVsTWFw
ID0gbmV3IE1hcDsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMKaW5kZXggMGE2YTAyZWZhNjdi
NGYxMDEzMWVhMjA5ZjdiMmE1ZGZjZGVlNTRlZi4uOGVhMGJhM2RmMzIyZjQyOTM1M2RlZDZmOGNh
ZjI2YTdlYTZlMTdiZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMKQEAgLTI2OCw2ICsy
NjgsOSBAQCBjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50
QmFzZSB7CiAgICAgICAgIHRoaXMucGFydCgncmV0cnktZm9ybScpLmxpc3RlblRvQWN0aW9uKCdz
dGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CiAgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoQWN0aW9uKCdyZXRyeVRlc3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAsIHJl
cGV0aXRpb25Db3VudCk7CiAgICAgICAgIH0pOworICAgICAgICB0aGlzLnBhcnQoJ2Jpc2VjdC1m
b3JtJykubGlzdGVuVG9BY3Rpb24oJ3N0YXJ0VGVzdGluZycsIChyZXBldGl0aW9uQ291bnQpID0+
IHsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2Jpc2VjdFRlc3RHcm91cCcsIHRo
aXMuX2N1cnJlbnRUZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCk7CisgICAgICAgIH0pOwogICAg
IH0KIAogICAgIHNldFRlc3RHcm91cHModGVzdEdyb3VwcywgY3VycmVudFRlc3RHcm91cCwgc2hv
d0hpZGRlbkdyb3VwcykKQEAgLTMzNywxMCArMzQwLDE1IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rl
c3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgaWYgKGN1cnJlbnRH
cm91cCkKICAgICAgICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5nZXQoY3VycmVudEdyb3VwKS5s
aXN0SXRlbS5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOwogCi0gICAgICAgIGlmIChjdXJyZW50
R3JvdXApCisgICAgICAgIGlmIChjdXJyZW50R3JvdXApIHsKICAgICAgICAgICAgIHRoaXMucGFy
dCgncmV0cnktZm9ybScpLnNldFJlcGV0aXRpb25Db3VudChjdXJyZW50R3JvdXAucmVwZXRpdGlv
bkNvdW50KCkpOworICAgICAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLnNldFJlcGV0
aXRpb25Db3VudChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkpOworICAgICAgICB9CiAg
ICAgICAgIHRoaXMuY29udGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50
R3JvdXAgPyBudWxsIDogJ25vbmUnOwogCisgICAgICAgIC8vIEZJWE1FOiBiaXNlY3Qgc2hvdWxk
IHN1cHBvcnQgY3VzdG9tIGFuYWx5c2lzIHRhc2sgb25jZSBiZWluZyBhYmxlIHRvIHRlc3QgcmFu
ZG9tIHJldmlzaW9uIGNvbWJpbmF0aW9uLgorICAgICAgICB0aGlzLmNvbnRlbnQoJ2Jpc2VjdC1m
b3JtJykuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRHcm91cCAmJiAhY3VycmVudEdyb3VwLnRhc2so
KS5pc0N1c3RvbSgpPyBudWxsIDogJ25vbmUnOworCiAgICAgICAgIGNvbnN0IGhpZGVCdXR0b24g
PSB0aGlzLmNvbnRlbnQoJ2hpZGUtYnV0dG9uJyk7CiAgICAgICAgIGhpZGVCdXR0b24udGV4dENv
bnRlbnQgPSBjdXJyZW50R3JvdXAgJiYgY3VycmVudEdyb3VwLmlzSGlkZGVuKCkgPyAnVW5oaWRl
JyA6ICdIaWRlJzsKICAgICAgICAgaGlkZUJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gY3VycmVudEdy
b3VwID8gbnVsbCA6ICdub25lJzsKQEAgLTM1Niw2ICszNjQsNyBAQCBjbGFzcyBBbmFseXNpc1Rh
c2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgICAgICAgICAg
PHRlc3QtZ3JvdXAtcmVzdWx0cy12aWV3ZXIgaWQ9InJlc3VsdHMtdmlld2VyIj48L3Rlc3QtZ3Jv
dXAtcmVzdWx0cy12aWV3ZXI+CiAgICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtcmV2aXNpb24t
dGFibGUgaWQ9InJldmlzaW9uLXRhYmxlIj48L3Rlc3QtZ3JvdXAtcmV2aXNpb24tdGFibGU+CiAg
ICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtZm9ybSBpZD0icmV0cnktZm9ybSI+UmV0cnk8L3Rl
c3QtZ3JvdXAtZm9ybT4KKyAgICAgICAgICAgICAgICA8dGVzdC1ncm91cC1mb3JtIGlkPSJiaXNl
Y3QtZm9ybSI+QmlzZWN0PC90ZXN0LWdyb3VwLWZvcm0+CiAgICAgICAgICAgICAgICAgPGJ1dHRv
biBpZD0iaGlkZS1idXR0b24iPkhpZGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICA8c3BhbiBp
ZD0icGVuZGluZy1yZXF1ZXN0LWNhbmNlbC13YXJuaW5nIj4oY2FuY2VscyBwZW5kaW5nIHJlcXVl
c3RzKTwvc3Bhbj4KICAgICAgICAgICAgIDwvZGl2PmA7CkBAIC00MjMsNyArNDMyLDcgQEAgY2xh
c3MgQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAg
ICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgI3Jl
dHJ5LWZvcm0geworICAgICAgICAgICAgI3JldHJ5LWZvcm0sICNiaXNlY3QtZm9ybSB7CiAgICAg
ICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVy
ZW07CiAgICAgICAgICAgICB9CkBAIC01MDksNiArNTE4LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNr
UGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5U
b0FjdGlvbigncmVuYW1lVGVzdEdyb3VwJywgKHRlc3RHcm91cCwgbmV3TmFtZSkgPT4gdGhpcy5f
dXBkYXRlVGVzdEdyb3VwTmFtZSh0ZXN0R3JvdXAsIG5ld05hbWUpKTsKICAgICAgICAgZ3JvdXBQ
YW5lLmxpc3RlblRvQWN0aW9uKCd0b2dnbGVUZXN0R3JvdXBWaXNpYmlsaXR5JywgKHRlc3RHcm91
cCkgPT4gdGhpcy5faGlkZUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwKSk7CiAgICAgICAgIGdy
b3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigncmV0cnlUZXN0R3JvdXAnLCAodGVzdEdyb3VwLCByZXBl
dGl0aW9uQ291bnQpID0+IHRoaXMuX3JldHJ5Q3VycmVudFRlc3RHcm91cCh0ZXN0R3JvdXAsIHJl
cGV0aXRpb25Db3VudCkpOworICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ2Jpc2Vj
dFRlc3RHcm91cCcsICh0ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkgPT4gdGhpcy5fYmlzZWN0
Q3VycmVudFRlc3RHcm91cCh0ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkpOwogCiAgICAgICAg
IHRoaXMucGFydCgnY2F1c2UtbGlzdCcpLmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHJlcG9z
aXRvcnksIHJldmlzaW9uKSA9PiB7CiAgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVDb21taXQo
J2NhdXNlJywgcmVwb3NpdG9yeSwgcmV2aXNpb24pOwpAQCAtNzg1LDE0ICs3OTUsMjkgQEAgY2xh
c3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAKICAgICBfcmV0
cnlDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KQogICAgIHsKLSAg
ICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuX2NyZWF0ZVJldHJ5TmFtZUZvclRlc3RHcm91cCh0
ZXN0R3JvdXAubmFtZSgpKTsKKyAgICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuY3JlYXRlTmFt
ZUZvclRlc3RHcm91cFdpdGhvdXRDb2xsaXNpb24odGVzdEdyb3VwLm5hbWUoKSwgdGhpcy5faGFz
RHVwbGljYXRlVGVzdEdyb3VwTmFtZS5iaW5kKHRoaXMpKTsKICAgICAgICAgY29uc3QgY29tbWl0
U2V0TGlzdCA9IHRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CiAgICAgICAgIGNvbnN0
IHBsYXRmb3JtID0gdGhpcy5fdGFzay5wbGF0Zm9ybSgpIHx8IHRlc3RHcm91cC5wbGF0Zm9ybSgp
OwogICAgICAgICByZXR1cm4gVGVzdEdyb3VwLmNyZWF0ZVdpdGhDdXN0b21Db25maWd1cmF0aW9u
KHRoaXMuX3Rhc2ssIHBsYXRmb3JtLCB0ZXN0R3JvdXAudGVzdCgpLCBuZXdOYW1lLCByZXBldGl0
aW9uQ291bnQsIGNvbW1pdFNldExpc3QpCiAgICAgICAgICAgICAudGhlbih0aGlzLl9kaWRGZXRj
aFRlc3RHcm91cHMuYmluZCh0aGlzKSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICBh
bGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwogICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVRlc3RHcm91cEFmdGVyVmVyaWZ5
aW5nQ29tbWl0U2V0TGlzdChuZXdOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCk7
CisgICAgfQorCisgICAgYXN5bmMgX2Jpc2VjdEN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCBy
ZXBldGl0aW9uQ291bnQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXNr
KTsKKyAgICAgICAgY29uc3QgYmlzZWN0Q29uZmlncyA9IGF3YWl0IHRoaXMuX3Rhc2suYmlzZWN0
Q29uZmlnRm9yVGVzdEdyb3VwKHRlc3RHcm91cCwgdGhpcy5fbWVhc3VyZW1lbnRTZXQpOworICAg
ICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuX3Rhc2sucGxhdGZvcm0oKSB8fCB0ZXN0R3JvdXAu
cGxhdGZvcm0oKTsKKyAgICAgICAgY29uc29sZS5sb2coYmlzZWN0Q29uZmlncyk7CisgICAgICAg
IGZvciAoY29uc3QgYmlzZWN0Q29uZmlnIG9mIGJpc2VjdENvbmZpZ3MpIHsKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgY29uc3QgdGVzdEdyb3VwcyA9IGF3YWl0IFRlc3RHcm91
cC5jcmVhdGVXaXRoQ3VzdG9tQ29uZmlndXJhdGlvbih0aGlzLl90YXNrLCBwbGF0Zm9ybSwgdGVz
dEdyb3VwLnRlc3QoKSwgYmlzZWN0Q29uZmlnLm5hbWUsIHJlcGV0aXRpb25Db3VudCwgYmlzZWN0
Q29uZmlnLmNvbW1pdFNldExpc3QpOworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RpZEZl
dGNoVGVzdEdyb3Vwcyh0ZXN0R3JvdXBzKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3Vw
OiAnICsgZXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgX2Ny
ZWF0ZVRlc3RHcm91cEFmdGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlzdCh0ZXN0R3JvdXBOYW1lLCBy
ZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCkKQEAgLTg0MSw4ICs4NjYsMTAgQEAgY2xhc3Mg
QW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAgIH0pOwog
ICAgIH0KIAotICAgIF9jcmVhdGVSZXRyeU5hbWVGb3JUZXN0R3JvdXAobmFtZSkKKyAgICBzdGF0
aWMgY3JlYXRlTmFtZUZvclRlc3RHcm91cFdpdGhvdXRDb2xsaXNpb24obmFtZSwgaGFzRHVwbGlj
YXRlVGVzdEdyb3VwTmFtZSkKICAgICB7CisgICAgICAgIGlmICghaGFzRHVwbGljYXRlVGVzdEdy
b3VwTmFtZShuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgICB2YXIgbmFt
ZVdpdGhOdW1iZXJNYXRjaCA9IG5hbWUubWF0Y2goLyguKz8pXHMqXChccyooXGQrKVxzKlwpXHMq
JC8pOwogICAgICAgICB2YXIgbnVtYmVyID0gMTsKICAgICAgICAgaWYgKG5hbWVXaXRoTnVtYmVy
TWF0Y2gpIHsKQEAgLTg1NCw3ICs4ODEsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVu
ZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgbnVtYmVyKys7
CiAgICAgICAgICAgICBuZXdOYW1lID0gYCR7bmFtZX0gKCR7bnVtYmVyfSlgOwotICAgICAgICB9
IHdoaWxlICh0aGlzLl9oYXNEdXBsaWNhdGVUZXN0R3JvdXBOYW1lKG5ld05hbWUpKTsKKyAgICAg
ICAgfSB3aGlsZSAoaGFzRHVwbGljYXRlVGVzdEdyb3VwTmFtZShuZXdOYW1lKSk7CiAKICAgICAg
ICAgcmV0dXJuIG5ld05hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3VuaXQtdGVzdHMvYW5hbHlzaXMtdGFzay10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL2FuYWx5c2lzLXRhc2stdGVzdHMuanMKaW5kZXggNDE1ZWEw
MTdkZjhiYTNkYjkyNmVkY2I3MDA1YmQ4NzlmNDZmNjM0Yi4uZmFmZDBhNzVlNGFiZDMzOWNiM2U1
YTU3MWU1MTI2YWQ5NDc0ZjhlZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvYW5hbHlzaXMtdGFzay10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdW5pdC10ZXN0cy9hbmFseXNpcy10YXNrLXRlc3RzLmpzCkBAIC0yMjEsNCArMjIx
LDIzMyBAQCBkZXNjcmliZSgnQW5hbHlzaXNUYXNrJywgKCkgPT4gewogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwogICAgIH0pOworCisgICAgZnVuY3Rpb24gbWFrZUNvbW1pdChpZCwgcmVw
b3NpdG9yeSwgcmV2aXNpb24sIHRpbWUpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0TG9n
LmVuc3VyZVNpbmdsZXRvbihpZCwgeworICAgICAgICAgICAgcmVwb3NpdG9yeSwKKyAgICAgICAg
ICAgIHJldmlzaW9uLAorICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAg
ICAgdGltZQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3J0ZWRDb21taXRT
ZXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRTZXQuZW5z
dXJlU2luZ2xldG9uKDEsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0
LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExLCBNb2NrTW9kZWxzLm9zeCwgJ29z
eC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1p
dFNldC5lbnN1cmVTaW5nbGV0b24oMiwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6
IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVs
cy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTIsIE1vY2tNb2RlbHMu
b3N4LCAnb3N4LWNvbW1pdC0yJywgMiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigzLCB7CisgICAgICAgICAgICAgICAgcmV2aXNp
b25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgyLCBN
b2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMicsIDIpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMiwgTW9j
a01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQor
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisg
ICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDQsIHsKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29t
bWl0KDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMyksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0
KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czog
W119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oNSwgeworICAgICAg
ICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6
IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTYnLCA2KSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1h
a2VDb21taXQoMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0zJywgMyksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3Rv
bVJvb3RzOiBbXX0pLAorICAgICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVJv
b3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFVwbG9hZGVkRmlsZS5lbnN1cmVTaW5nbGV0b24o
NDU2LCB7J2NyZWF0ZWRBdCc6IG5ldyBEYXRlKCcyMDE3LTA1LTAxVDIxOjAzOjI3WicpLCAnZmls
ZW5hbWUnOiAncm9vdC5kYXQnLCAnZXh0ZW5zaW9uJzogJy5kYXQnLCAnYXV0aG9yJzogJ3NvbWUg
dXNlcicsCisgICAgICAgICAgICBzaXplOiAxNjQ1MjIzNCwgc2hhMjU2OiAnMDNlZWQ3YTg0OTRh
Yjg3OTRjNDRiN2Q0MzA4ZTU1NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5NjhmNzhmNjU2ZDU4ZCd9KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoUm9vdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNSwgeworICAgICAgICAgICAgcmV2
aXNpb25JdGVtczogW3sgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAn
d2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAg
ICAgY3VzdG9tUm9vdHM6IFtjcmVhdGVSb290KCldCisgICAgICAgIH0pOworICAgIH0KKyAgICBm
dW5jdGlvbiBjb21taXRTZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1
cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDog
bWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAg
ICAgICB9KTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldHNXaXRoTm9Db21tb25S
ZXBvc2l0b3J5KCkgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbigxLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtp
dCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAg
ICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01vZGVscy5vc3gsICdv
c3gtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1z
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMxLCBNb2NrTW9k
ZWxzLmlvcywgJ2lvcy1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAg
ICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDMsIHsKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0
KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEy
LCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIpLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119
KQorICAgICAgICBdOworICAgIH0KKworICAgIGRlc2NyaWJlKCdzZWxlY3RCaXNlY3Rpb25Qb2lu
dFdpdGhTaW1pbGFyUmV2aXNpb25EaXN0YW5jZScsICgpID0+IHsKKyAgICAgICAgTW9ja01vZGVs
cy5pbmplY3QoKTsKKyAgICAgICAgbGV0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5pbmplY3Qo
KTsKKyAgICAgICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgbGVzcyB0aGFuIDMgY29tbWl0IHNldHMg
YXJlIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBhd2FpdCBBbmFseXNpc1Rhc2suc2VsZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxh
clJldmlzaW9uRGlzdGFuY2Uoc29ydGVkQ29tbWl0U2V0cygpLnNsaWNlKDAsMSkpCisgICAgICAg
ICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVycm9y
LCAnQ2Fubm90IGJpc2VjdCBhIHJhbmdlIHRoYXQgaXMgc21hbGxlciB0aGFuIDMnKQorICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBubyBj
b21tb24gcmVwb3NpdG9yeSBmb3VuZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgYXdhaXQgQW5hbHlzaXNUYXNrLnNlbGVjdEJpc2VjdGlvblBvaW50
V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlKGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0
b3J5KCkpOworICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoZXJyb3IsICdObyBjb21tb24gcmVwb3NpdG9yeSBpcyBmb3VuZCBhbW9uZyBz
ZWxlY3RlZCBjb21taXQgc2V0cycpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0IGxvZycsIGFz
eW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBBbmFseXNpc1Rhc2suc2Vs
ZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2Uoc29ydGVkQ29tbWl0
U2V0cygpKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlamVjdCgnNDA0Jyk7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2U7CisgICAgICAgICAgICB9
IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0Zh
aWxlZCB0byBmZXRjaCBjb21taXRzIGJldHdlZW4gIndlYmtpdC1jb21taXQtMSIgLSAid2Via2l0
LWNvbW1pdC02IicpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpdCgn
c2hvdWxkIHJldHVybiBiaXNlY3Rpb24gcG9pbnQgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHJl
dmlzaW9uIHJhbmdlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBB
bmFseXNpc1Rhc2suc2VsZWN0QmlzZWN0aW9uUG9pbnRXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFu
Y2Uoc29ydGVkQ29tbWl0U2V0cygpKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUo
eworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMicsCisgICAgICAgICAgICAgICAgICAgICAgICBv
d25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAyCisgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
d2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMKKyAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlkOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0
LTQnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZTogNAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDUsCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtNScsCisgICAgICAg
ICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lOiA1CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0
LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYK
KyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRz
JzogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBv
c2l0b3J5OiBNb2NrTW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6
IDExLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTEnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZTogMQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxz
Lm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTog
MgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBjb25zdCBiaXNlY3Rpb25Db21taXRTZXQgPSBhd2FpdCBwcm9taXNl
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJpc2VjdGlvbkNvbW1pdFNldCwgc29ydGVkQ29t
bWl0U2V0cygpWzNdKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnYmFz
aWNCaXNlY3Rpb25TdHJhdGVneScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZWZ1c2Ug
dG8gYmlzZWN0IGNvbW1pdCBzZXQgd2l0aCByb290JywgYXN5bmMgKCkgPT4geworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFy
eUJpc2VjdChbY29tbWl0U2V0KCksIGNvbW1pdFNldFdpdGhSb290KCldLCBbY29tbWl0U2V0KCks
IGNvbW1pdFNldFdpdGhSb290KCldKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVycm9yLCAnQ2Fubm90IGJpc2VjdCBvbiBhIHJh
bmdlIHdpdGggcm9vdC9wYXRjaC9vd25lZCBjb21taXQnKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZWZ1c2UgdG8gYmlzZWN0IHRlc3QgZ3JvdXAg
d2l0aCBjb21taXQgc2V0cyB0aG9zZSBoYXZlIGRpZmZlcmVudCByZXBvc2l0b3JpZXMnLCBhc3lu
YyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBvbmVDb21taXRTZXQgPSBjb21taXRTZXQoKTsK
KyAgICAgICAgICAgIGNvbnN0IGFub3RoZXJDb21taXRTZXQgPSBzb3J0ZWRDb21taXRTZXRzKClb
MF07CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0IEFuYWx5c2lzVGFz
ay5wZXJmb3JtQmluYXJ5QmlzZWN0KFtvbmVDb21taXRTZXQsIGFub3RoZXJDb21taXRTZXRdLCBb
b25lQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0XSk7CisgICAgICAgICAgICB9IGNhdGNoIChl
cnJvcikgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0NvbW1pdFNldHMg
aW4gdGVzdCBncm91cCBoYXZlIGRpZmZlcmVudCByZXBvc2l0b3JpZXMnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZWZ1c2UgaWYgZmFpbGVkIHRv
IGZpbmQgYSBtaWRkbGUgY29tbWl0IHNldCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IHVuaXF1ZVNvcnRlZENvbW1pdFNldCA9IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGZpcnN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0WzBdOworICAg
ICAgICAgICAgY29uc3QgbGFzdENvbW1pdFNldCA9IHVuaXF1ZVNvcnRlZENvbW1pdFNldFt1bmlx
dWVTb3J0ZWRDb21taXRTZXQubGVuZ3RoIC0gMV07CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGF3YWl0IEFuYWx5c2lzVGFzay5wZXJmb3JtQmluYXJ5QmlzZWN0KFtmaXJzdENv
bW1pdFNldCwgbGFzdENvbW1pdFNldF0sIHVuaXF1ZVNvcnRlZENvbW1pdFNldCwgKCkgPT4ge3Ro
cm93ICdDYW5ub3QgZmluZCBiaXNlY3Rpb24gcG9pbnQnfSk7CisgICAgICAgICAgICB9IGNhdGNo
IChlcnJvcikgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvciwgJ0Nhbm5vdCBm
aW5kIGJpc2VjdGlvbiBwb2ludCcpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiBiaXNlY3Rpb24gY29uZmlncycsIGFzeW5jKCkgPT4gewor
ICAgICAgICAgICAgY29uc3QgdW5pcXVlU29ydGVkQ29tbWl0U2V0ID0gc29ydGVkQ29tbWl0U2V0
cygpOworICAgICAgICAgICAgY29uc3QgZmlyc3RDb21taXRTZXQgPSB1bmlxdWVTb3J0ZWRDb21t
aXRTZXRbMF07CisgICAgICAgICAgICBjb25zdCBsYXN0Q29tbWl0U2V0ID0gdW5pcXVlU29ydGVk
Q29tbWl0U2V0W3VuaXF1ZVNvcnRlZENvbW1pdFNldC5sZW5ndGggLSAxXTsKKyAgICAgICAgICAg
IGNvbnN0IGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0ID0gdW5pcXVlU29ydGVkQ29tbWl0U2V0WzNd
OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RDb25maWcs
IHNlY29uZENvbmZpZ10gPSBhd2FpdCBBbmFseXNpc1Rhc2sucGVyZm9ybUJpbmFyeUJpc2VjdChb
Zmlyc3RDb21taXRTZXQsIGxhc3RDb21taXRTZXRdLCB1bmlxdWVTb3J0ZWRDb21taXRTZXQsICgp
ID0+IGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVl
cEVxdWFsKGZpcnN0Q29uZmlnLmNvbW1pdFNldExpc3QsIFtmaXJzdENvbW1pdFNldCwgZXhwZWN0
ZWRNaWRkbGVDb21taXRTZXRdKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHNl
Y29uZENvbmZpZy5jb21taXRTZXRMaXN0LCBbZXhwZWN0ZWRNaWRkbGVDb21taXRTZXQsIGxhc3RD
b21taXRTZXRdKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0KGZhbHNlLCAnc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgfSk7CiB9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCmluZGV4IDExMWM2YTY1
NDhmNTE4OTJkZTFkMjdmZjEzMzE1M2FkY2E2NmUxMDUuLjQyMDI0MjNhM2U1MjhhZjM2OTZkMGYw
Nzc5ZTlhZThjZjg4OTkyM2MgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91
bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcwpAQCAtMjksNiArMjksMTIgQEAgZnVu
Y3Rpb24gY3JlYXRlQW5vdGhlclJvb3QoKQogICAgICAgICBzaXplOiAxNjQ1MjExMSwgc2hhMjU2
OiAnMDNlZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4ZTU1NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5Njhm
NzhmNjU2ZGJiYid9KTsKIH0KIAorZnVuY3Rpb24gY3JlYXRlU2hhcmVkUm9vdCgpCit7CisgICAg
cmV0dXJuIFVwbG9hZGVkRmlsZS5lbnN1cmVTaW5nbGV0b24oNDU4LCB7J2NyZWF0ZWRBdCc6IG5l
dyBEYXRlKCcyMDE3LTA1LTAxVDIyOjAzOjI3WicpLCAnZmlsZW5hbWUnOiAncm9vdC5kYXQnLCAn
ZXh0ZW5zaW9uJzogJy5kYXQnLCAnYXV0aG9yJzogJ3NvbWUgdXNlcicsCisgICAgICAgIHNpemU6
IDE2NDUyMTExLCBzaGEyNTY6ICcwM2VlZDdhODQ5NGFiODc5NGM0NGI3ZDQzMDhlNTU0NDhmYzU2
ZjRhYWMxNzU4MDliYTk2OGY3OGY2NTZkYmJiJ30pOworfQorCiBmdW5jdGlvbiBjdXN0b21Db21t
aXRTZXRXaXRob3V0T3duZWRDb21taXQoKQogewogICAgIGNvbnN0IGN1c3RvbUNvbW1pdFNldCA9
IG5ldyBDdXN0b21Db21taXRTZXQ7CkBAIC0xMDQsNiArMTEwLDE2IEBAIGZ1bmN0aW9uIHdlYmtp
dENvbW1pdCgpCiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIGFub3RoZXJXZWJLaXRDb21taXQoKQor
eworICAgIHJldHVybiBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKDIwMTgsIHsKKyAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQsCisgICAgICAgIHJldmlzaW9uOiAnd2Via2l0
LWNvbW1pdC0xJywKKyAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICB0aW1lOiAx
NDU2OTMyNzczMDAwCisgICAgfSk7Cit9CisKIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7
CiAgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKICAgICBNb2NrTW9kZWxzLmluamVjdCgpOwpA
QCAtMTU2LDYgKzE3MiwzMSBAQCBkZXNjcmliZSgnQ29tbWl0U2V0JywgKCkgPT4gewogICAgICAg
ICB9KTsKICAgICB9CiAKKyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoVHdvUm9vdHMoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oNywgeworICAgICAg
ICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiB3ZWJraXRDb21taXQoKSwgcmVxdWlyZXNC
dWlsZDogZmFsc2UgfV0sCisgICAgICAgICAgICBjdXN0b21Sb290czogW2NyZWF0ZVJvb3QoKSwg
Y3JlYXRlU2hhcmVkUm9vdCgpXQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBj
b21taXRTZXRXaXRoQW5vdGhlcldlYktpdENvbW1pdCgpCisgICAgeworICAgICAgICByZXR1cm4g
Q29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig4LCB7CisgICAgICAgICAgICByZXZpc2lvbkl0ZW1z
OiBbeyBjb21taXQ6IGFub3RoZXJXZWJLaXRDb21taXQoKSwgcmVxdWlyZXNCdWlsZDogZmFsc2Ug
fV0sCisgICAgICAgICAgICBjdXN0b21Sb290czogW10KKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aEFub3RoZXJDb21taXRQYXRjaEFuZFJvb3QoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oOSwgeworICAgICAg
ICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBhbm90aGVyV2ViS2l0Q29tbWl0KCksIHJl
cXVpcmVzQnVpbGQ6IHRydWUsIHBhdGNoOiBjcmVhdGVQYXRjaCgpfV0sCisgICAgICAgICAgICBj
dXN0b21Sb290czogW2NyZWF0ZVJvb3QoKSwgY3JlYXRlU2hhcmVkUm9vdCgpXQorICAgICAgICB9
KTsKKyAgICB9CisKKwogICAgIGZ1bmN0aW9uIG9uZU1lYXN1cmVtZW50Q29tbWl0U2V0KCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBNZWFzdXJlbWVudENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24o
MSwgWwpAQCAtMTk4LDcgKzIzOSwyNyBAQCBkZXNjcmliZSgnQ29tbWl0U2V0JywgKCkgPT4gewog
ICAgICAgICAgICAgYXNzZXJ0KG9uZUNvbW1pdFNldCgpLmVxdWFscyhvbmVNZWFzdXJlbWVudENv
bW1pdFNldCgpKSk7CiAgICAgICAgICAgICBhc3NlcnQob25lTWVhc3VyZW1lbnRDb21taXRTZXQo
KS5lcXVhbHMob25lQ29tbWl0U2V0KCkpKTsKICAgICAgICAgfSk7Ci0gICAgfSkKKyAgICB9KTsK
KworICAgIGRlc2NyaWJlKCdkZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMnLCAg
KCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGRlc2NyaWJlIHBhdGNoIGRpZmZlcmVuY2UnLCAo
KSA9PiB7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoQ29tbWl0U2V0LmRlc2NyaWJlRGlmZmVy
ZW5jZXNCZXR3ZWVuQ29tbWl0U2V0cyhjb21taXRTZXRXaXRoUGF0Y2goKSwgY29tbWl0U2V0V2l0
aEFub3RoZXJQYXRjaCgpKSwgJ1dlYktpdDogUGF0Y2gtNDUzIC0gUGF0Y2gtNDU0Jyk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZGVzY3JpYmUgcm9vdCBkaWZmZXJlbmNlJywg
KCkgPT4geworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKENvbW1pdFNldC5kZXNjcmliZURpZmZl
cmVuY2VzQmV0d2VlbkNvbW1pdFNldHMoY29tbWl0U2V0V2l0aFJvb3QoKSwgYW5vdGhlckNvbW1p
dFNldFdpdGhSb290KCkpLCAnUm9vdHM6IDQ1NiAtIDQ1NycpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMoY29t
bWl0U2V0V2l0aFJvb3QoKSwgY29tbWl0U2V0V2l0aFR3b1Jvb3RzKCkpLCAnUm9vdHM6IG1pc3Np
bmcgLSA0NTgnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVE
aWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKGNvbW1pdFNldFdpdGhUd29Sb290cygpLCBvbmVD
b21taXRTZXQoKSksICdSb290czogNDU2LCA0NTggLSBtaXNzaW5nJyk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGl0KCdzaG91bGQgZGVzY3JpYmUgY29tbWl0IGRpZmZlcmVuY2UnLCAoKSA9PiB7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoQ29tbWl0U2V0LmRlc2NyaWJlRGlmZmVyZW5jZXNC
ZXR3ZWVuQ29tbWl0U2V0cyhvbmVDb21taXRTZXQoKSwgY29tbWl0U2V0V2l0aEFub3RoZXJXZWJL
aXRDb21taXQoKSksICdXZWJLaXQ6IHdlYmtpdC1jb21taXQtMCAtIHdlYmtpdC1jb21taXQtMScp
OworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGRlc2NyaWJlIGNvbW1pdCByb290
IGFuZCBwYXRjaCBkaWZmZXJlbmNlJywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KENvbW1pdFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMob25lQ29tbWl0
U2V0KCksIGNvbW1pdFNldFdpdGhBbm90aGVyQ29tbWl0UGF0Y2hBbmRSb290KCkpLCAnV2ViS2l0
OiB3ZWJraXQtY29tbWl0LTArUGF0Y2gtbWlzc2luZyAtIHdlYmtpdC1jb21taXQtMStQYXRjaC00
NTMgUm9vdHM6IG1pc3NpbmcgLSA0NTYsIDQ1OCcpOworICAgICAgICB9KTsKKyAgICB9KTsKIH0p
OwogCiBkZXNjcmliZSgnSW50ZXJtZWRpYXRlQ29tbWl0U2V0JywgKCkgPT4gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337249</attachid>
            <date>2018-04-04 18:31:11 -0700</date>
            <delta_ts>2018-04-11 17:38:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180404183110.patch</filename>
            <type>text/plain</type>
            <size>48240</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlMTAzMTlkYzM1MmU2Nzg2OTE1MmEwYTUxZDQ0ODkxN2Y5ZDJmZTExLi43OWQ3NmMxZDM0
NzlhMmZhNWE3MjMwM2U4MWVkMmExMDdhNWEwYmYyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxOC0wNC0wNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXRzaW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbiB3aGljaCB3aWxsIG9ubHkgYXBwZWFyIHdoZW4gdGhlIHJh
bmdlIG9mIHRlc3QgZ3JvdXAgY2FuIGJlIHNwbGl0dGVkLgorCisgICAgICAgICogcHVibGljL3Yz
L2FuYWx5c2lzLXN0cmF0ZWdpZXMuanM6IEFuYWx5emUgYSB0ZXN0IGdyb3VwIGNvbnRhaW5zIDIg
bWFqb3IgcGFydHM6IGFnZ3JlZ2F0aW5nIGF2YWlsYWJsZSBjb21taXQgc2V0cyBhbmQgc3BsaXRp
bmcgdGhlIHJhbmdlIGludG8gdHdvLgorICAgICAgICAoQ29tbWl0U2V0QWdncmVnYXRvcik6IENv
bnRhaW5zIGRpZmZlcmVudCBjb21taXQgc2V0IGFnZ3JlZ2F0b3JzLgorICAgICAgICAoQ29tbWl0
U2V0QWdncmVnYXRvci5hZ2dyZWdhdGVDb21taXRTZXRzRnJvbUFuYWx5c2lzVGFzayk6IEFnZ3Jl
Z2F0ZSBhbGwgZXhpc3RpbmcgY29tbWl0IHNldHMgaW4gdGVzdCBncm91cHMgb2YgY3VycmVudCBh
bmFseXNpcyB0YXNrcy4KKyAgICAgICAgKFJhbmdlU3BsaXRTdHJhdGVnaWVzKTogQ29udGFpbnMg
ZGlmZmVyZW50IHJhbmdlIHNwbGl0IGFsZ29yaXRobS4KKyAgICAgICAgKFJhbmdlU3BsaXRTdHJh
dGVnaWVzLnNwbGl0UmFuZ2VXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2UpOiBJbnN0ZWFkIG9m
IG5haXZlbHkgcmV0dXJuaW5nIHRoZSBtaWRkbGUgb2YgZXhpc3RpbmcgY29tbWl0IHNldCBhcnJh
eSwKKyAgICAgICAgdGhpcyBmdW5jdGlvbiBzZWxlY3RzIGEgYmlzZWN0IGJpc2VjdGlvbiBwb2lu
dHMgdGhhdCBpcyBjbG9zZXN0IHRvIGFjdHVhbGx5IG1pZGRsZSBvZiB0aGUgcmV2aXNpb24gcmFu
Z2UgYmFzZWQgb24gYWxsIHJldmlzaW9ucyByZXBvcnRlZAorICAgICAgICB0byBwZXJmb3JtYW5j
ZSBkYXNoYm9hcmQuCisgICAgICAgIChSYW5nZVNwbGl0U3RyYXRlZ2llcy5fc29ydGluZ1Rvb2xz
Rm9yQ29tbWl0U2V0cyk6IEhlbHBlciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzb3J0aW5n
IGtleSBhbW9uZyB0aGUgY29tbWl0IHNldHMuCisgICAgICAgIFVzZXMgJ2xhdGVzdENvbW1pdFRp
bWUnIHdoZW4gYXZhaWxhYmxlLiBPdGhlcndpc2UsIGNvbW1pdCBvcmRlciB3aWxsIGJlIHVzZWQg
dG8gc29ydCBhbW9uZyBjb21taXRzLiBJZiBtdWx0aXBsZSByZXBvc2l0b3JpZXMsCisgICAgICAg
IHRoZSBjb21taXRzIG9mIHdoaWNoIGhhdmUgY29tbWl0IG9yZGVycywgYXJlIGZvdW5kLCB0aGUg
cHJpb3JpdHkgb2YgcmVwb3NpdG9yeSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByZXBvc2l0b3J5IG5h
bWUuCisgICAgICAgIChSYW5nZVNwbGl0U3RyYXRlZ2llcy5fZmluZEFuZFNvcnRDb21taXRTZXRz
V2l0aFNhbWVSZXBvc2l0b3J5U2V0QXNDb21taXRTZXRJblRhcmdldFRlc3RHcm91cCk6IEhlbHBl
ciBmdW5jdGlvbiB0byBzb3J0IGNvbW1pdCBzZXRzLgorICAgICAgICAoYmlzZWN0UmFuZ2VXaXRo
U2ltaWxhclJldmlzaW9uRGlzdGFuY2VBbW9uZ0V4aXN0aW5nQ29tbWl0U2V0cyk6IEEgc3RyYWdl
Z3kgdGhhdCB1c2VzIGBhZ2dyZWdhdGVDb21taXRTZXRzRnJvbUFuYWx5c2lzVGFza2AgYXMgY29t
bWl0IHNldCAKKyAgICAgICAgYWdncmVnYXRvciBhbmQgYHNwbGl0UmFuZ2VXaXRoU2ltaWxhclJl
dmlzaW9uRGlzdGFuY2VgIGFzIHJhbmdlIHNwbGl0IGFsZ29yaXRobS4KKyAgICAgICAgKiBwdWJs
aWMvdjMvaW5kZXguaHRtbDogSW1wb3J0cyBgcHVibGljL3YzL2FuYWx5c2lzLXN0cmF0ZWdpZXMu
anNgLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qczoKKyAgICAg
ICAgKEFuYWx5c2lzVGFzay5wcm90b3R5cGUuYW5hbHlzaXNDb25maWdGb3JUZXN0R3JvdXApOiBJ
bnZva2UgYW5hbHlzaXMgc3RyYXRlZ3kgdG8gc3BsaXQgYW5hbHlzaXMgcmFuZ2UgaW50byB0d28u
CisgICAgICAgIChBbmFseXNpc1Rhc2suY3JlYXRlTmFtZVdpdGhvdXRDb2xsaXNpb24pOiBIZWxw
ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIG5hbWUgd2l0aG91dCBjb2xsaXNpb24uCisgICAgICAgIChB
bmFseXNpc1Rhc2spOgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczog
QWRkZWQgYSBmdW5jdGlvbiB0byByZXR1cm4gYGNvbW1pdF9vcmRlcmAuCisgICAgICAgIChDb21t
aXRMb2cucHJvdG90eXBlLnVwZGF0ZVNpbmdsZXRvbik6CisgICAgICAgIChDb21taXRMb2cucHJv
dG90eXBlLm9yZGVyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6
IEFkZGVkIDIgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUu
d2l0aG91dFJvb3RQYXRjaE9yT3duZWRDb21taXQpOiBSZXR1cm5zIGZhbHNlIHdoZW4gYSBjb21t
aXQgc2V0IGhhcyByb290LCBwYXRjaCBvciBvd25lZCBjb21taXQuCisgICAgICAgIChDb21taXRT
ZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKTogRGVzY3JpYmUgZGlmZmVy
ZW5jZXMgYmV0d2VlbiAyIGNvbW1pdCBzZXRzIGluY2x1ZGluZyBjb21taXQsIHJvb3QgYW5kIHBh
dGNoIGRpZmZlcmVuY2VzLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5q
czoKKyAgICAgICAgKFRlc3RHcm91cCk6IE1ha2UgYF9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0
c2AgYSBzdGF0aWMgZnVuY3Rpb24uCisgICAgICAgIChUZXN0R3JvdXAucHJvdG90eXBlLl9jb21w
dXRlUmVxdWVzdGVkQ29tbWl0U2V0cy5zZXQgcmV0dXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFRl
c3RHcm91cC5wcm90b3R5cGUuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLnNldCByZXF1ZXN0
ZWRDb21taXRTZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2Nv
bXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLmNvbnN0LnNldCByZXF1ZXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpz
OgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuZGlkQ29uc3Ry
dWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnByb3Rv
dHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0
R3JvdXBQYW5lLmh0bWxUZW1wbGF0ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQ
YW5lLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUpOgor
ICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJl
ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fcmV0cnlDdXJyZW50VGVz
dEdyb3VwKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLmFzeW5jLl9hbmFs
eXplQ3VycmVudFRlc3RHcm91cCk6IEFkZGVkIHRoaXMgZnVjdGlvbiB0byByZWFjdCB3aGVuICdi
aXNlY3QnIGJ1dHRvbiBpcyBjbGlja2VkLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90
b3R5cGUuX2NyZWF0ZVJldHJ5TmFtZUZvclRlc3RHcm91cCk6IERlbGV0ZWQgYW5kIG1vdmVkIHRv
IGBBbmFseXNpc1Rhc2suY3JlYXRlTmFtZVdpdGhvdXRDb2xsaXNpb25gLgorICAgICAgICAqIHRv
b2xzL2pzL3YzLW1vZGVscy5qczogSW1wb3J0cyBgYW5hbHlzaXMtc3RyYXRlZ2llcy5qc2AuCisg
ICAgICAgICogdW5pdC10ZXN0cy9hbmFseXNpcy1zdHJhdGVnaWVzLXRlc3QuanM6IEFkZGVkIHVu
aXQgdGVzdHMuCisgICAgICAgICogdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzOiBBZGRl
ZCB1bml0IHRlc3RzIGZvciBDb21taXRTZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdlZW5Db21t
aXRTZXRzLgorCiAyMDE4LTAzLTE5ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBVcGRhdGUgUGVyZiBidWlsZGJvdCBzeW5jaW5nIHNjcmlwdHMgZm9yIEJ1
aWxkYm90IDAuOQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9hbmFseXNpcy1zdHJhdGVnaWVzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9hbmFseXNpcy1zdHJhdGVnaWVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMmU4NTk1YWVhNTlmM2Qy
YjUxODUwYzhhODNkNTM5NmIyMTdmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2FuYWx5c2lzLXN0cmF0ZWdpZXMuanMKQEAgLTAsMCArMSwy
NTAgQEAKKyd1c2Ugc3RyaWN0JzsKKworY2xhc3MgQ29tbWl0U2V0QWdncmVnYXRvciB7CisgICAg
c3RhdGljIGFzeW5jIGFnZ3JlZ2F0ZUNvbW1pdFNldHNGcm9tQW5hbHlzaXNUYXNrKGFuYWx5c2lz
VGFzaykKKyAgICB7CisgICAgICAgIGNvbnN0IGFsbFRlc3RHcm91cHNJblRhc2sgPSBhd2FpdCBU
ZXN0R3JvdXAuZmV0Y2hGb3JUYXNrKGFuYWx5c2lzVGFzay5pZCgpKTsKKyAgICAgICAgY29uc3Qg
YWxsQ29tbWl0U2V0c0luVGFzayA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAoY29uc3QgZ3JvdXAg
b2YgYWxsVGVzdEdyb3Vwc0luVGFzaykKKyAgICAgICAgICAgIGdyb3VwLnJlcXVlc3RlZENvbW1p
dFNldHMoKS5mb3JFYWNoKChjb21taXRTZXQpID0+IGFsbENvbW1pdFNldHNJblRhc2suYWRkKGNv
bW1pdFNldCkpOworCisgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gYW5hbHlzaXNUYXNrLnBsYXRm
b3JtKCk7CisgICAgICAgIGNvbnN0IG1ldHJpYyA9IGFuYWx5c2lzVGFzay5tZXRyaWMoKTsKKyAg
ICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVkKG1ldHJpYyk7
CisgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldChw
bGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYXdhaXQg
bWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKGFuYWx5c2lzVGFzay5zdGFydFRpbWUoKSwgYW5h
bHlzaXNUYXNrLmVuZFRpbWUoKSk7CisgICAgICAgIGNvbnN0IHNlcmllcyA9IG1lYXN1cmVtZW50
U2V0LmZldGNoZWRUaW1lU2VyaWVzKCdjdXJyZW50JywgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAg
Y29uc3Qgc3RhcnRQb2ludCA9IHNlcmllcy5maW5kQnlJZChhbmFseXNpc1Rhc2suc3RhcnRNZWFz
dXJlbWVudElkKCkpOworICAgICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZChh
bmFseXNpc1Rhc2suZW5kTWVhc3VyZW1lbnRJZCgpKTsKKworICAgICAgICBjb25zdCBwb2ludEFm
dGVyRW5kID0gZW5kUG9pbnQuc2VyaWVzLm5leHRQb2ludChlbmRQb2ludCk7CisgICAgICAgIGZv
ciAobGV0IHBvaW50ID0gc3RhcnRQb2ludDsgcG9pbnQgJiYgcG9pbnQgIT0gcG9pbnRBZnRlckVu
ZDsgcG9pbnQgPSBwb2ludC5zZXJpZXMubmV4dFBvaW50KHBvaW50KSkKKyAgICAgICAgICAgIGFs
bENvbW1pdFNldHNJblRhc2suYWRkKHBvaW50LmNvbW1pdFNldCgpKTsKKworICAgICAgICByZXR1
cm4gQXJyYXkuZnJvbShhbGxDb21taXRTZXRzSW5UYXNrKTsKKyAgICB9Cit9CisKK2NsYXNzIFJh
bmdlU3BsaXRTdHJhdGVnaWVzIHsKKyAgICBzdGF0aWMgYXN5bmMgc3BsaXRSYW5nZVdpdGhTaW1p
bGFyUmV2aXNpb25EaXN0YW5jZShyYW5nZVNwZWNpZmllZEJ5Q29tbWl0U2V0cywgYXZhaWxhYmxl
Q29tbWl0U2V0cykKKyAgICB7CisgICAgICAgIGlmIChyYW5nZVNwZWNpZmllZEJ5Q29tbWl0U2V0
cy5sZW5ndGggIT0gMikgeworICAgICAgICAgICAgQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlci5l
cnJvcignUmFuZ2Ugc2hvdWxkIGJlIGRlZmluZWQgYnkgZXhhY3RseSAyIGNvbW1pdCBzZXRzLicp
OworICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc29y
dGVkQ29tbWl0U2V0cyA9IGF3YWl0IFJhbmdlU3BsaXRTdHJhdGVnaWVzLl9maW5kQW5kU29ydENv
bW1pdFNldHNXaXRoU2FtZVJlcG9zaXRvcnlTZXRBc0NvbW1pdFNldEluVGFyZ2V0VGVzdEdyb3Vw
KHJhbmdlU3BlY2lmaWVkQnlDb21taXRTZXRzLCBhdmFpbGFibGVDb21taXRTZXRzKTsKKworICAg
ICAgICBpZiAoIXNvcnRlZENvbW1pdFNldHMgfHwgc29ydGVkQ29tbWl0U2V0cy5sZW5ndGggPCAz
KSB7CisgICAgICAgICAgICBBbmFseXNpc1N0cmF0ZWdpZXMubG9nZ2VyLmVycm9yKCdDYW5ub3Qg
YmlzZWN0IGEgcmFuZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gMyBjb21taXQgc2V0cycpOworICAg
ICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgY29tbW9uUmVw
b3NpdG9yaWVzID0gc29ydGVkQ29tbWl0U2V0cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjb21taXRT
ZXQpID0+CisgICAgICAgICAgICAgICAgbmV3IFNldChjb21taXRTZXQucmVwb3NpdG9yaWVzKCku
ZmlsdGVyKChyZXBvc2l0b3J5KSA9PiBhY2N1bXVsYXRvci5oYXMocmVwb3NpdG9yeSkpKSwKKyAg
ICAgICAgICAgIG5ldyBTZXQoc29ydGVkQ29tbWl0U2V0c1swXS5yZXBvc2l0b3JpZXMoKSkpOwor
CisgICAgICAgIGlmICghY29tbW9uUmVwb3NpdG9yaWVzLnNpemUpIHsKKyAgICAgICAgICAgIEFu
YWx5c2lzU3RyYXRlZ2llcy5sb2dnZXIuZXJyb3IoJ05vIGNvbW1vbiByZXBvc2l0b3J5IGlzIGZv
dW5kIGFtb25nIHNlbGVjdGVkIGNvbW1pdCBzZXRzJyk7CisgICAgICAgICAgICByZXR1cm4gW107
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBmaXJzdENvbW1pdFNldCA9IHNvcnRlZENvbW1p
dFNldHNbMF07CisgICAgICAgIGNvbnN0IGxhc3RDb21taXRTZXQgPSBzb3J0ZWRDb21taXRTZXRz
W3NvcnRlZENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgIGNvbnN0IHNlbGVjdGFibGVD
b21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0cy5zbGljZSgxLCAtMSk7CisgICAgICAgIGNvbnN0
IGNvbW1pdHNCeVJlcG9zaXRvcnkgPSBuZXcgTWFwOworICAgICAgICBjb25zdCBjb21taXRTZXRz
QnlDb25maWcgPSBuZXcgTWFwOworCisgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBj
b21tb25SZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29tbWl0ID0gZmly
c3RDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
IGNvbnN0IGxhc3RDb21taXQgPSBsYXN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVw
b3NpdG9yeSk7CisgICAgICAgICAgICBpZiAoZmlyc3RDb21taXQgPT0gbGFzdENvbW1pdCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxldCBjb21taXRzOworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb21taXRzID0gYXdhaXQgQ29tbWl0TG9nLmZl
dGNoQmV0d2VlblJldmlzaW9ucyhyZXBvc2l0b3J5LCBmaXJzdENvbW1pdC5yZXZpc2lvbigpLCBs
YXN0Q29tbWl0LnJldmlzaW9uKCkpOworICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBjb21taXRz
LnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAg
ICAgICAgQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGNv
bW1pdHMgYmV0d2VlbiAiJHtmaXJzdENvbW1pdC5sYWJlbCgpfSIgLSAiJHtsYXN0Q29tbWl0Lmxh
YmVsKCl9IiBkdWUgdG8gJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gW107Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbW1pdHMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb21taXRzQnlSZXBvc2l0b3J5LnNldChy
ZXBvc2l0b3J5LCBjb21taXRzKTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldHNCeUNvbW1p
dCA9IG5ldyBNYXA7CisgICAgICAgICAgICBjb21taXRTZXRzQnlDb25maWcuc2V0KHJlcG9zaXRv
cnksIGNvbW1pdFNldHNCeUNvbW1pdCk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdFNl
dCBvZiBzZWxlY3RhYmxlQ29tbWl0U2V0cykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1p
dCA9IGNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAg
ICAgICAgIGlmICghY29tbWl0U2V0c0J5Q29tbWl0Lmhhcyhjb21taXQpKQorICAgICAgICAgICAg
ICAgICAgICBjb21taXRTZXRzQnlDb21taXQuc2V0KGNvbW1pdCwgbmV3IFNldCk7CisgICAgICAg
ICAgICAgICAgY29tbWl0U2V0c0J5Q29tbWl0LmdldChjb21taXQpLmFkZChjb21taXRTZXQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yaWVzU29y
dGVkQnlDb21taXRDb3VudEluUmFuZ2UgPSBbLi4uY29tbWl0c0J5UmVwb3NpdG9yeS5rZXlzKCld
CisgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gY29tbWl0c0J5UmVwb3NpdG9yeS5nZXQoYiku
bGVuZ3RoIC0gY29tbWl0c0J5UmVwb3NpdG9yeS5nZXQoYSkubGVuZ3RoKTsKKworICAgICAgICBs
ZXQgcmVtYWluaW5nQ29tbWl0U2V0cyA9IHNlbGVjdGFibGVDb21taXRTZXRzOworICAgICAgICBm
b3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgcmVwb3NpdG9yaWVzU29ydGVkQnlDb21taXRDb3VudElu
UmFuZ2UpIHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBjb21taXRzQnlSZXBvc2l0b3J5
LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IGRlc2lyZWRDb21taXRJbmRleCA9
IGNvbW1pdHMubGVuZ3RoIC8gMjsKKyAgICAgICAgICAgIGxldCBtaW5Db21taXREaXN0YW5jZSA9
IGNvbW1pdHMubGVuZ3RoOworICAgICAgICAgICAgbGV0IG5ld0NvbW1pdFNldHMgPSBudWxsOwor
ICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0c0J5Q29tbWl0ID0gY29tbWl0U2V0c0J5Q29uZmln
LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IGluZGV4QnlDb21taXQgPSBuZXcg
TWFwOworICAgICAgICAgICAgY29tbWl0cy5mb3JFYWNoKChjb21taXQsIGluZGV4KSA9PiBpbmRl
eEJ5Q29tbWl0LnNldChjb21taXQsIGluZGV4KSk7CisKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
W2NvbW1pdCwgY29tbWl0U2V0c10gb2YgY29tbWl0U2V0c0J5Q29tbWl0KSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgY29tbWl0RGlzdGFuY2UgPSBNYXRoLmFicyhpbmRleEJ5Q29tbWl0LmdldChj
b21taXQpIC0gZGVzaXJlZENvbW1pdEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWl0
RGlzdGFuY2UgPCBtaW5Db21taXREaXN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBtaW5D
b21taXREaXN0YW5jZSA9IGNvbW1pdERpc3RhbmNlOworICAgICAgICAgICAgICAgICAgICBuZXdD
b21taXRTZXRzID0gY29tbWl0U2V0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJlbWFpbmluZ0NvbW1pdFNldHMgPSByZW1haW5pbmdDb21taXRTZXRz
LmZpbHRlcigoY29tbWl0U2V0KSA9PiBuZXdDb21taXRTZXRzLmhhcyhjb21taXRTZXQpKTsKKyAg
ICAgICAgICAgIGlmIChyZW1haW5pbmdDb21taXRTZXRzLmxlbmd0aCA9PSAxKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyZW1haW5pbmdDb21taXRT
ZXRzLmxlbmd0aCkgeworICAgICAgICAgICAgQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlci5lcnJv
cihgTm8gYmlzZWN0aW9uIHBvaW50cyBmb3VuZGApOworICAgICAgICAgICAgcmV0dXJuIFtdOwor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gcmVtYWluaW5nQ29t
bWl0U2V0c1swXTsKKworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAge25hbWU6IENvbW1p
dFNldC5kZXNjcmliZURpZmZlcmVuY2VzQmV0d2VlbkNvbW1pdFNldHMoZmlyc3RDb21taXRTZXQs
IG1pZGRsZUNvbW1pdFNldCksIGNvbW1pdFNldExpc3Q6IFtmaXJzdENvbW1pdFNldCwgbWlkZGxl
Q29tbWl0U2V0XX0sCisgICAgICAgICAgICB7bmFtZTogQ29tbWl0U2V0LmRlc2NyaWJlRGlmZmVy
ZW5jZXNCZXR3ZWVuQ29tbWl0U2V0cyhtaWRkbGVDb21taXRTZXQsIGxhc3RDb21taXRTZXQpLCBj
b21taXRTZXRMaXN0OiBbbWlkZGxlQ29tbWl0U2V0LCBsYXN0Q29tbWl0U2V0XX0KKyAgICAgICAg
XTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXN5bmMgX3NvcnRpbmdUb29sc0ZvckNvbW1pdFNldHMo
cmFuZ2VTcGVjaWZpZWRCeUNvbW1pdFNldHMsIGFsbENvbW1pdFNldHMpCisgICAgeworICAgICAg
ICBjb25zdCBbb25lQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0XSA9IHJhbmdlU3BlY2lmaWVk
QnlDb21taXRTZXRzOworICAgICAgICBpZiAob25lQ29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUo
KSAmJiBhbm90aGVyQ29tbWl0U2V0LmxhdGVzdENvbW1pdFRpbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgY29tcGFyZUZ1bmN0aW9uOiAoY29tbWl0U2V0MCwgY29t
bWl0U2V0MSkgPT4gY29tbWl0U2V0MC5sYXRlc3RDb21taXRUaW1lKCkgLSBjb21taXRTZXQxLmxh
dGVzdENvbW1pdFRpbWUoKSwKKyAgICAgICAgICAgICAgICBoYXNDb21wYXJpbmdLZXlzOiAoY29t
bWl0U2V0KSA9PiAhISBjb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpCisgICAgICAgICAgICB9
OworCisgICAgICAgIGxldCBzb3J0aW5nUmVwb3NpdG9yaWVzID0gW107CisgICAgICAgIGZvciAo
Y29uc3QgcmVwb3NpdG9yeSBvZiBvbmVDb21taXRTZXQudG9wTGV2ZWxSZXBvc2l0b3JpZXMoKSkg
eworICAgICAgICAgICAgY29uc3Qgb25lQ29tbWl0ID0gb25lQ29tbWl0U2V0LmNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBhd2FpdCBDb21taXRMb2cuZmV0Y2hG
b3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCBvbmVDb21taXQucmV2aXNpb24oKSk7CisgICAg
ICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob25lQ29tbWl0Lm9yZGVyKCkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgYW5vdGhlckNvbW1pdCA9IGFu
b3RoZXJDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAg
ICAgIGF3YWl0IENvbW1pdExvZy5mZXRjaEZvclNpbmdsZVJldmlzaW9uKHJlcG9zaXRvcnksIGFu
b3RoZXJDb21taXQucmV2aXNpb24oKSk7CisgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVn
ZXIoYW5vdGhlckNvbW1pdC5vcmRlcigpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHNvcnRpbmdSZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghc29ydGluZ1JlcG9zaXRvcmllcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKworICAgICAgICBjb25zdCBwcm9taXNlc0ZvckZldGNoaW5nQ29tbWl0
T3JkZXJzID0gW107CisgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBzb3J0aW5nUmVw
b3NpdG9yaWVzKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdFNldCBvZiBhbGxDb21t
aXRTZXRzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0LmNvbW1p
dEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKE51bWJlci5p
c0ludGVnZXIoY29tbWl0Lm9yZGVyKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBwcm9taXNlc0ZvckZldGNoaW5nQ29tbWl0T3JkZXJzLnB1c2goQ29t
bWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgY29tbWl0LnJldmlzaW9u
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF3YWl0IFByb21pc2Uu
YWxsKHByb21pc2VzRm9yRmV0Y2hpbmdDb21taXRPcmRlcnMpOworCisgICAgICAgIHNvcnRpbmdS
ZXBvc2l0b3JpZXMgPSBzb3J0aW5nUmVwb3NpdG9yaWVzLnNvcnQoKHJlcG9zaXRvcnkwLCByZXBv
c2l0b3J5MSkgPT4gcmVwb3NpdG9yeTAubmFtZSgpIDwgcmVwb3NpdG9yeTEubmFtZSgpKTsKKwor
ICAgICAgICBjb25zdCBjb21wYXJlRnVuY3Rpb24gPSAoY29tbWl0U2V0MCwgY29tbWl0U2V0MSkg
PT4geworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHNvcnRpbmdSZXBvc2l0
b3JpZXMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQwID0gY29tbWl0U2V0MC5jb21t
aXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1p
dDEgPSBjb21taXRTZXQxLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbW1pdDAub3JkZXIoKSA9PT0gY29tbWl0MS5vcmRlcigpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0MC5v
cmRlcigpIC0gY29tbWl0MS5vcmRlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgaGFzQ29tcGFyaW5nS2V5cyA9IChj
b21taXRTZXQpID0+IHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBzb3J0
aW5nUmVwb3NpdG9yaWVzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0
U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYg
KCFOdW1iZXIuaXNJbnRlZ2VyKGNvbW1pdC5vcmRlcigpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH07CisgICAgICAgIHJldHVybiB7Y29tcGFyZUZ1bmN0aW9uLCBoYXNDb21wYXJpbmdL
ZXlzfTsKKyAgICB9CisKKyAgICBzdGF0aWMgYXN5bmMgX2ZpbmRBbmRTb3J0Q29tbWl0U2V0c1dp
dGhTYW1lUmVwb3NpdG9yeVNldEFzQ29tbWl0U2V0SW5UYXJnZXRUZXN0R3JvdXAoY29tbWl0U2V0
c0luVGVzdEdyb3VwLCBjb21taXRTZXRzVG9CZUZpbHRlcmVkKQorICAgIHsKKyAgICAgICAgaWYg
KGNvbW1pdFNldHNJblRlc3RHcm91cC5sZW5ndGggIT0gMikgeworICAgICAgICAgICAgQW5hbHlz
aXNTdHJhdGVnaWVzLmxvZ2dlci5lcnJvcignQ2FuIG9ubHkgYmlzZWN0IGEgdGVzdCBncm91cCB3
aXRoIDIgY29tbWl0IHNldHMnKTsKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IGJvdGhTaW1wbGVDb21taXRTZXRzID0gY29tbWl0U2V0c0luVGVzdEdy
b3VwLmV2ZXJ5KChjb21taXRTZXQpID0+IGNvbW1pdFNldC53aXRob3V0Um9vdFBhdGNoT3JPd25l
ZENvbW1pdCgpKTsKKyAgICAgICAgaWYgKCFib3RoU2ltcGxlQ29tbWl0U2V0cykgeworICAgICAg
ICAgICAgQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlci5lcnJvcignQ2Fubm90IGJpc2VjdCBvbiBh
IHJhbmdlIHdpdGggcm9vdC9wYXRjaC9vd25lZCBjb21taXQnKTsKKyAgICAgICAgICAgIHJldHVy
biBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGFsbG93ZWRSZXBvc2l0b3JpZXMgPSBu
ZXcgU2V0KGNvbW1pdFNldHNJblRlc3RHcm91cFswXS5yZXBvc2l0b3JpZXMoKSk7CisgICAgICAg
IGNvbnN0IHNhbWVSZXBvc2l0b3JpZXMgPSAoY29tbWl0U2V0KSA9PiBjb21taXRTZXQucmVwb3Np
dG9yaWVzKCkubGVuZ3RoID09IGFsbG93ZWRSZXBvc2l0b3JpZXMuc2l6ZSAmJgorICAgICAgICAg
ICAgICAgIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5ldmVyeSgocmVwb3NpdG9yeSkgPT4gYWxs
b3dlZFJlcG9zaXRvcmllcy5oYXMocmVwb3NpdG9yeSkpOworCisgICAgICAgIGlmICghc2FtZVJl
cG9zaXRvcmllcyhjb21taXRTZXRzSW5UZXN0R3JvdXBbMV0pKSB7CisgICAgICAgICAgICBBbmFs
eXNpc1N0cmF0ZWdpZXMubG9nZ2VyLmVycm9yKCdDb21taXRTZXRzIGluIHRlc3QgZ3JvdXAgaGF2
ZSBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzJyk7CisgICAgICAgICAgICByZXR1cm4gW107CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBjb21taXRTZXRzV2l0aFNhbWVSZXBvc2l0b3JpZXMgPSBj
b21taXRTZXRzVG9CZUZpbHRlcmVkLmZpbHRlcihzYW1lUmVwb3NpdG9yaWVzKTsKKyAgICAgICAg
Y29uc3Qgc29ydGluZ1Rvb2xzID0gYXdhaXQgUmFuZ2VTcGxpdFN0cmF0ZWdpZXMuX3NvcnRpbmdU
b29sc0ZvckNvbW1pdFNldHMoY29tbWl0U2V0c0luVGVzdEdyb3VwLCBjb21taXRTZXRzV2l0aFNh
bWVSZXBvc2l0b3JpZXMpOworICAgICAgICBpZiAoIXNvcnRpbmdUb29scykgeworICAgICAgICAg
ICAgQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlci5lcnJvcignQ2Fubm90IHNvcnQgY29tbWl0IHNl
dHMgaW4gZ2l2ZW4gcmFuZ2UnKTsKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0XSA9IGNvbW1pdFNl
dHNJblRlc3RHcm91cC5zb3J0KHNvcnRpbmdUb29scy5jb21wYXJlRnVuY3Rpb24pOworCisgICAg
ICAgIGNvbnN0IGNvbXBhdGlibGVDb21taXRTZXRzID0gY29tbWl0U2V0c1dpdGhTYW1lUmVwb3Np
dG9yaWVzLmZpbHRlcigoY29tbWl0U2V0KSA9PiBzb3J0aW5nVG9vbHMuaGFzQ29tcGFyaW5nS2V5
cyhjb21taXRTZXQpCisgICAgICAgICAgICAmJiBzb3J0aW5nVG9vbHMuY29tcGFyZUZ1bmN0aW9u
KGNvbW1pdFNldCwgc3RhcnRDb21taXRTZXQpID49IDAKKyAgICAgICAgICAgICYmIHNvcnRpbmdU
b29scy5jb21wYXJlRnVuY3Rpb24oY29tbWl0U2V0LCBlbmRDb21taXRTZXQpIDw9IDApOworCisg
ICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHMgPSBjb21wYXRpYmxlQ29tbWl0U2V0cy5zb3J0
KHNvcnRpbmdUb29scy5jb21wYXJlRnVuY3Rpb24pOworICAgICAgICBjb25zdCBzb3J0ZWRVbmlx
dWVDb21taXRTZXRzID0gW3NvcnRlZENvbW1pdFNldHNbMF1dOworICAgICAgICBmb3IgKGxldCBp
ID0gMTsgaSA8IHNvcnRlZENvbW1pdFNldHMubGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAg
IGNvbnN0IHByZXZpb3VzQ29tbWl0U2V0ID0gc29ydGVkQ29tbWl0U2V0c1tpIC0gMV07CisgICAg
ICAgICAgICBjb25zdCBjdXJyZW50Q29tbWl0U2V0ID0gc29ydGVkQ29tbWl0U2V0c1tpXTsKKyAg
ICAgICAgICAgIGlmICghcHJldmlvdXNDb21taXRTZXQuZXF1YWxzKGN1cnJlbnRDb21taXRTZXQp
KQorICAgICAgICAgICAgICAgIHNvcnRlZFVuaXF1ZUNvbW1pdFNldHMucHVzaChjdXJyZW50Q29t
bWl0U2V0KTsKKyAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydChzb3J0ZWRVbmlxdWVD
b21taXRTZXRzWzBdLmVxdWFscyhzdGFydENvbW1pdFNldCkpOworICAgICAgICBjb25zb2xlLmFz
c2VydChzb3J0ZWRVbmlxdWVDb21taXRTZXRzW3NvcnRlZFVuaXF1ZUNvbW1pdFNldHMubGVuZ3Ro
IC0gMV0uZXF1YWxzKGVuZENvbW1pdFNldCkpOworCisgICAgICAgIHJldHVybiBzb3J0ZWRVbmlx
dWVDb21taXRTZXRzOworICAgIH0KK30KKworYXN5bmMgZnVuY3Rpb24gYmlzZWN0UmFuZ2VXaXRo
U2ltaWxhclJldmlzaW9uRGlzdGFuY2VBbW9uZ0V4aXN0aW5nQ29tbWl0U2V0cyh0ZXN0R3JvdXAp
Cit7CisgICAgY29uc3QgYXZhaWxhYmxlQ29tbWl0U2V0cyA9IGF3YWl0IENvbW1pdFNldEFnZ3Jl
Z2F0b3IuYWdncmVnYXRlQ29tbWl0U2V0c0Zyb21BbmFseXNpc1Rhc2sodGVzdEdyb3VwLnRhc2so
KSk7CisgICAgcmV0dXJuIGF3YWl0IFJhbmdlU3BsaXRTdHJhdGVnaWVzLnNwbGl0UmFuZ2VXaXRo
U2ltaWxhclJldmlzaW9uRGlzdGFuY2UodGVzdEdyb3VwLnJlcXVlc3RlZENvbW1pdFNldHMoKSwg
YXZhaWxhYmxlQ29tbWl0U2V0cyk7Cit9CisKK2NvbnN0IEFuYWx5c2lzU3RyYXRlZ2llcyA9IHsK
KyAgICBkZWZhdWx0U3RyYXRlZ3k6IGJpc2VjdFJhbmdlV2l0aFNpbWlsYXJSZXZpc2lvbkRpc3Rh
bmNlQW1vbmdFeGlzdGluZ0NvbW1pdFNldHMsCisgICAgYmlzZWN0UmFuZ2VXaXRoU2ltaWxhclJl
dmlzaW9uRGlzdGFuY2VBbW9uZ0V4aXN0aW5nQ29tbWl0U2V0cywKKyAgICBDb21taXRTZXRBZ2dy
ZWdhdG9yLAorICAgIFJhbmdlU3BsaXRTdHJhdGVnaWVzLAorICAgIGxvZ2dlcjogY29uc29sZQor
fTsKKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAgbW9kdWxlLmV4cG9y
dHMuQW5hbHlzaXNTdHJhdGVnaWVzID0gQW5hbHlzaXNTdHJhdGVnaWVzOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5k
ZXguaHRtbAppbmRleCAwMjMzZjk2ZmVhZTc4MzdlODJkNzA0MTAyNzc2MGVhNWUwMWJlM2JmLi43
NzBhMmQzMjQ1N2NlYWI1YjViN2QxYmY4OTdmMTI3NzI2ZTkyNTEzIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC00NSw2ICs0NSw3IEBAIFJ1
biB0b29scy9idW5kbGUtdjMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBw
cm9kdWN0aW9uLmApOwogICAgICAgICA8c2NyaXB0IHNyYz0icHJpdmlsZWdlZC1hcGkuanMiPjwv
c2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0iYXN5bmMtdGFzay5qcyI+PC9zY3JpcHQ+CiAg
ICAgICAgIDxzY3JpcHQgc3JjPSJsYXppbHktZXZhbHVhdGVkLWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImFuYWx5c2lzLXN0cmF0ZWdpZXMuanMiPjwvc2NyaXB0
PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvdGltZS1zZXJpZXMuanMiPjwvc2NyaXB0
PgogICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL21lYXN1cmVtZW50LWFkYXB0b3IuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYW5hbHlzaXMtdGFzay5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMKaW5kZXggNmUyMjI4NTY4MTU4ZGRjMTM4ODJjOGIz
ZDc3ZmFjNDRmOGJhOTJlOS4uY2Q5YTRjNjI3M2IzMmYxM2I1MWIzOTY1MzU0MGIyNTExNDY5YTY2
ZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
YW5hbHlzaXMtdGFzay5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9hbmFseXNpcy10YXNrLmpzCkBAIC0xNjcsNiArMTY3LDIxIEBAIGNsYXNzIEFuYWx5
c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0ZWdvcnk7
CiAgICAgfQogCisgICAgYXN5bmMgYW5hbHlzaXNDb25maWdGb3JUZXN0R3JvdXAodGVzdEdyb3Vw
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGVzdEdyb3VwLnRhc2soKSA9PSB0aGlz
KTsKKworICAgICAgICBjb25zdCBhbGxUZXN0R3JvdXBzSW5UYXNrID0gYXdhaXQgVGVzdEdyb3Vw
LmZldGNoRm9yVGFzayh0aGlzLmlkKCkpOworICAgICAgICBjb25zdCBleGlzdGluZ1Rlc3RHcm91
cE5hbWVzID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBhbGxUZXN0R3Jv
dXBzSW5UYXNrKQorICAgICAgICAgICAgZXhpc3RpbmdUZXN0R3JvdXBOYW1lcy5hZGQoZ3JvdXAu
bmFtZSgpKTsKKworICAgICAgICBjb25zdCBhbmFseXNpc0NvbmZpZ3MgPSBhd2FpdCBBbmFseXNp
c1N0cmF0ZWdpZXMuZGVmYXVsdFN0cmF0ZWd5KHRlc3RHcm91cCk7CisgICAgICAgIGZvciAoY29u
c3QgYW5hbHlzaXNDb25maWcgb2YgYW5hbHlzaXNDb25maWdzKQorICAgICAgICAgICAgYW5hbHlz
aXNDb25maWcubmFtZSA9IEFuYWx5c2lzVGFzay5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lvbihh
bmFseXNpc0NvbmZpZy5uYW1lLCAobmFtZSkgPT4gZXhpc3RpbmdUZXN0R3JvdXBOYW1lcy5oYXMo
bmFtZSkpOworICAgICAgICByZXR1cm4gYW5hbHlzaXNDb25maWdzOworICAgIH0KKwogICAgIHN0
YXRpYyBjYXRlZ29yaWVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBbCkBAIC0yODUsNiArMzAw
LDI2IEBAIGNsYXNzIEFuYWx5c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAg
ICAgICAgZW5kUnVuOiBlbmRSdW5JZCwKICAgICAgICAgfSk7CiAgICAgfQorCisgICAgc3RhdGlj
IGNyZWF0ZU5hbWVXaXRob3V0Q29sbGlzaW9uKG5hbWUsIGhhc0R1cGxpY2F0ZVRlc3RHcm91cE5h
bWUpCisgICAgeworICAgICAgICBpZiAoIWhhc0R1cGxpY2F0ZVRlc3RHcm91cE5hbWUobmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgdmFyIG5hbWVXaXRoTnVtYmVyTWF0
Y2ggPSBuYW1lLm1hdGNoKC8oLis/KVxzKlwoXHMqKFxkKylccypcKVxzKiQvKTsKKyAgICAgICAg
dmFyIG51bWJlciA9IDE7CisgICAgICAgIGlmIChuYW1lV2l0aE51bWJlck1hdGNoKSB7CisgICAg
ICAgICAgICBuYW1lID0gbmFtZVdpdGhOdW1iZXJNYXRjaFsxXTsKKyAgICAgICAgICAgIG51bWJl
ciA9IHBhcnNlSW50KG5hbWVXaXRoTnVtYmVyTWF0Y2hbMl0pOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIG5ld05hbWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG51bWJlcisrOworICAg
ICAgICAgICAgbmV3TmFtZSA9IGAke25hbWV9ICgke251bWJlcn0pYDsKKyAgICAgICAgfSB3aGls
ZSAoaGFzRHVwbGljYXRlVGVzdEdyb3VwTmFtZShuZXdOYW1lKSk7CisKKyAgICAgICAgcmV0dXJu
IG5ld05hbWU7CisgICAgfQogfQogCiBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2Nv
bW1pdC1sb2cuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzCmluZGV4IDJjNGI0OWYyZmZkNDc5OTQ2NGIyODMwMTFmNmZhNjI0M2JmMzhj
ZmQuLjVlMDY2YWRiZDNjNzI4NTA2OTQzOGNkZTMwMDlkNjg1ZWVlNTZlMTIgMTAwNjQ0Ci0tLSBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMK
KysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxv
Zy5qcwpAQCAtMjksNiArMjksOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxP
YmplY3QgewogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5tZXNzYWdlID0gcmF3RGF0YS5tZXNz
YWdlOwogICAgICAgICBpZiAocmF3RGF0YS5vd25zQ29tbWl0cykKICAgICAgICAgICAgIHRoaXMu
X3Jhd0RhdGEub3duc0NvbW1pdHMgPSByYXdEYXRhLm93bnNDb21taXRzOworICAgICAgICBpZiAo
cmF3RGF0YS5vcmRlcikKKyAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGEub3JkZXIgPSByYXdEYXRh
Lm9yZGVyOwogICAgIH0KIAogICAgIHJlcG9zaXRvcnkoKSB7IHJldHVybiB0aGlzLl9yZXBvc2l0
b3J5OyB9CkBAIC00MCw2ICs0Miw3IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2Rl
bE9iamVjdCB7CiAgICAgb3duc0NvbW1pdHMoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydvd25z
Q29tbWl0cyddOyB9CiAgICAgb3duZWRDb21taXRzKCkgeyByZXR1cm4gdGhpcy5fb3duZWRDb21t
aXRzOyB9CiAgICAgb3duZXJDb21taXQoKSB7IHJldHVybiB0aGlzLl9vd25lckNvbW1pdDsgfQor
ICAgIG9yZGVyKCkgeyByZXR1cm4gK3RoaXMuX3Jhd0RhdGFbJ29yZGVyJ107IH0KIAogICAgIHNl
dE93bmVyQ29tbWl0cyhvd25lckNvbW1pdCkgeyB0aGlzLl9vd25lckNvbW1pdCA9IG93bmVyQ29t
bWl0OyB9CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2NvbW1pdC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzCmluZGV4IGVlNWYzM2EwZDVlNjUwNzQ2OWZiZWY4MzhmMmZi
YTRiNzUzNjFjMGUuLmFiM2I3Y2NkNDI1YmMxMTdlYmQwNzYyODljY2ZkZDI0ZDA3MGIxYjEgMTAw
NjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1p
dC1zZXQuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
Y29tbWl0LXNldC5qcwpAQCAtODgsNiArODgsMjEgQEAgY2xhc3MgQ29tbWl0U2V0IGV4dGVuZHMg
RGF0YU1vZGVsT2JqZWN0IHsKICAgICBwYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyBy
ZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvUGF0Y2hNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CiAgICAg
cm9vdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRv
Um9vdE1hcC5nZXQocmVwb3NpdG9yeSk7IH0KICAgICByZXF1aXJlc0J1aWxkRm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5UmVxdWlyZXNCdWlsZE1hcC5n
ZXQocmVwb3NpdG9yeSkgfHwgZmFsc2U7IH0KKyAgICB3aXRob3V0Um9vdFBhdGNoT3JPd25lZENv
bW1pdCgpCisgICAgeworICAgICAgICBpZiAodGhpcy5hbGxSb290RmlsZXMoKS5sZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5
IG9mIHRoaXMucmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm93bmVyQ29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3Np
dG9yeShyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAodGhpcy5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gYSBEYXRlIG9iamVjdC4KICAg
ICBsYXRlc3RDb21taXRUaW1lKCkKQEAgLTE0NSw2ICsxNjAsNTkgQEAgY2xhc3MgQ29tbWl0U2V0
IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQorCisgICAgc3RhdGljIGRlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVuQ29tbWl0
U2V0cyhmaXJzdENvbW1pdFNldCwgc2Vjb25kQ29tbWl0U2V0KQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQoIWZpcnN0Q29tbWl0U2V0LmVxdWFscyhzZWNvbmRDb21taXRTZXQpKTsKKyAg
ICAgICAgY29uc3QgYWxsUmVwb3NpdG9yaWVzID0gbmV3IFNldChbLi4uZmlyc3RDb21taXRTZXQu
cmVwb3NpdG9yaWVzKCksIC4uLnNlY29uZENvbW1pdFNldC5yZXBvc2l0b3JpZXMoKV0pOworICAg
ICAgICBjb25zdCBuYW1lUGFydHMgPSBbXTsKKyAgICAgICAgY29uc3QgbWlzc2luZ0NvbW1pdCA9
IHtsYWJlbDogKCkgPT4gJ21pc3NpbmcnfTsKKyAgICAgICAgY29uc3QgbWlzc2luZ1BhdGNoID0g
e2ZpbGVuYW1lOiAoKSA9PiAnbWlzc2luZyd9OworICAgICAgICBjb25zdCBtYWtlTmFtZUdlbmVy
YXRvciA9ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTmFtZVNldCA9IG5ldyBT
ZXQ7CisgICAgICAgICAgICByZXR1cm4gKG5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICBjb25z
dCBuZXdOYW1lID0gQW5hbHlzaXNUYXNrLmNyZWF0ZU5hbWVXaXRob3V0Q29sbGlzaW9uKG5hbWUs
IChuYW1lKSA9PiBleGlzdGluZ05hbWVTZXQuaGFzKG5hbWUpKTsKKyAgICAgICAgICAgICAgICBl
eGlzdGluZ05hbWVTZXQuYWRkKG5ld05hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdO
YW1lOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZvciAoY29uc3QgcmVw
b3NpdG9yeSBvZiBBcnJheS5mcm9tKGFsbFJlcG9zaXRvcmllcykpIHsKKyAgICAgICAgICAgIGNv
bnN0IGZpcnN0Q29tbWl0ID0gZmlyc3RDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSB8fCBtaXNzaW5nQ29tbWl0OworICAgICAgICAgICAgY29uc3Qgc2Vjb25kQ29tbWl0
ID0gc2Vjb25kQ29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgfHwgbWlz
c2luZ0NvbW1pdDsKKyAgICAgICAgICAgIGNvbnN0IGZpcnN0UGF0Y2ggPSBmaXJzdENvbW1pdFNl
dC5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgfHwgbWlzc2luZ1BhdGNoOworICAgICAg
ICAgICAgY29uc3Qgc2Vjb25kUGF0Y2ggPSBzZWNvbmRDb21taXRTZXQucGF0Y2hGb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpIHx8IG1pc3NpbmdQYXRjaDsKKyAgICAgICAgICAgIGNvbnN0IG5hbWVH
ZW5lcmF0b3IgPSBtYWtlTmFtZUdlbmVyYXRvcigpOworCisgICAgICAgICAgICBpZiAoZmlyc3RD
b21taXQgPT0gc2Vjb25kQ29tbWl0ICYmIGZpcnN0UGF0Y2ggPT0gc2Vjb25kUGF0Y2gpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChmaXJzdENvbW1pdCAhPSBz
ZWNvbmRDb21taXQgJiYgZmlyc3RQYXRjaCA9PSBzZWNvbmRQYXRjaCkKKyAgICAgICAgICAgICAg
ICBuYW1lUGFydHMucHVzaChgJHtyZXBvc2l0b3J5Lm5hbWUoKX06ICR7Zmlyc3RDb21taXQubGFi
ZWwoKX0gLSAke3NlY29uZENvbW1pdC5sYWJlbCgpfWApOworCisgICAgICAgICAgICBjb25zdCBu
YW1lRm9yRmlyc3RQYXRjaCA9IG5hbWVHZW5lcmF0b3IoZmlyc3RQYXRjaC5maWxlbmFtZSgpKTsK
KyAgICAgICAgICAgIGNvbnN0IG5hbWVGb3JTZWNvbmRQYXRoID0gbmFtZUdlbmVyYXRvcihzZWNv
bmRQYXRjaC5maWxlbmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKGZpcnN0Q29tbWl0ID09IHNl
Y29uZENvbW1pdCAmJiBmaXJzdFBhdGNoICE9IHNlY29uZFBhdGNoKQorICAgICAgICAgICAgICAg
IG5hbWVQYXJ0cy5wdXNoKGAke3JlcG9zaXRvcnkubmFtZSgpfTogUGF0Y2goJHtuYW1lRm9yRmly
c3RQYXRjaH0pIC0gUGF0Y2goJHtuYW1lRm9yU2Vjb25kUGF0aH0pYCk7CisKKyAgICAgICAgICAg
IGlmIChmaXJzdENvbW1pdCAhPSBzZWNvbmRDb21taXQgJiYgZmlyc3RQYXRjaCAhPSBzZWNvbmRQ
YXRjaCkKKyAgICAgICAgICAgICAgICBuYW1lUGFydHMucHVzaChgJHtyZXBvc2l0b3J5Lm5hbWUo
KX06ICR7Zmlyc3RDb21taXQubGFiZWwoKX0gd2l0aCBQYXRjaCgke25hbWVGb3JGaXJzdFBhdGNo
fSkgLSAke3NlY29uZENvbW1pdC5sYWJlbCgpfSB3aXRoIFBhdGNoKCR7bmFtZUZvclNlY29uZFBh
dGh9KWApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpcnN0Q29tbWl0U2V0LmFsbFJvb3RG
aWxlcygpLmxlbmd0aCB8fCBzZWNvbmRDb21taXRTZXQuYWxsUm9vdEZpbGVzKCkubGVuZ3RoKSB7
CisgICAgICAgICAgICBjb25zdCBmaXJzdFJvb3RGaWxlU2V0ID0gbmV3IFNldChmaXJzdENvbW1p
dFNldC5hbGxSb290RmlsZXMoKSk7CisgICAgICAgICAgICBjb25zdCBzZWNvbmRSb290RmlsZVNl
dCA9IG5ldyBTZXQoc2Vjb25kQ29tbWl0U2V0LmFsbFJvb3RGaWxlcygpKTsKKyAgICAgICAgICAg
IGNvbnN0IHVuaXF1ZUluRmlyc3RDb21taXRTZXQgPSBmaXJzdENvbW1pdFNldC5hbGxSb290Rmls
ZXMoKS5maWx0ZXIoKHJvb3RGaWxlKSA9PiAhc2Vjb25kUm9vdEZpbGVTZXQuaGFzKHJvb3RGaWxl
KSk7CisgICAgICAgICAgICBjb25zdCB1bmlxdWVJblNlY29uZENvbW1pdFNldCA9IHNlY29uZENv
bW1pdFNldC5hbGxSb290RmlsZXMoKS5maWx0ZXIoKHJvb3RGaWxlKSA9PiAhZmlyc3RSb290Rmls
ZVNldC5oYXMocm9vdEZpbGUpKTsKKyAgICAgICAgICAgIGNvbnN0IG5hbWVHZW5lcmF0b3IgPSBt
YWtlTmFtZUdlbmVyYXRvcigpOworICAgICAgICAgICAgY29uc3QgbGVmdFJvb3RGaWxlRGVzY3Jp
cHRpb24gPSB1bmlxdWVJbkZpcnN0Q29tbWl0U2V0Lm1hcCgocm9vdEZpbGUpID0+IG5hbWVHZW5l
cmF0b3Iocm9vdEZpbGUuZmlsZW5hbWUoKSkpLmpvaW4oJywgJyk7CisgICAgICAgICAgICBjb25z
dCByaWdodFJvb3RGaWxlRGVzY3JpcHRpb24gPSB1bmlxdWVJblNlY29uZENvbW1pdFNldC5tYXAo
KHJvb3RGaWxlKSA9PiBuYW1lR2VuZXJhdG9yKHJvb3RGaWxlLmZpbGVuYW1lKCkpKS5qb2luKCcs
ICcpOworICAgICAgICAgICAgbmFtZVBhcnRzLnB1c2goYFJvb3RzOiAke2xlZnRSb290RmlsZURl
c2NyaXB0aW9uLmxlbmd0aCA/IGxlZnRSb290RmlsZURlc2NyaXB0aW9uIDogJ21pc3NpbmcnfSAt
ICR7cmlnaHRSb290RmlsZURlc2NyaXB0aW9uLmxlbmd0aCA/IHJpZ2h0Um9vdEZpbGVEZXNjcmlw
dGlvbiA6ICdtaXNzaW5nJ31gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuYW1lUGFy
dHMuam9pbignICcpOworICAgIH0KIH0KIAogY2xhc3MgTWVhc3VyZW1lbnRDb21taXRTZXQgZXh0
ZW5kcyBDb21taXRTZXQgewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKaW5kZXggMGMwZGZhZDQ3N2UzNTdjYjU0NGQx
MzI3MDNjYTY3MmI4YTAxYzIyNS4uZWUxNDk2ZjVlNTU1MzllM2M2MDg5MmIwMGU2ZjI0YWMyOGM0
NWM1MiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvdGVzdC1ncm91cC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy90ZXN0LWdyb3VwLmpzCkBAIC0xNCw3ICsxNCw3IEBAIGNsYXNzIFRlc3RHcm91cCBl
eHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkUmVxdWVzdHMu
c29ydCgoYSwgYikgPT4gYS5vcmRlcigpIC0gYi5vcmRlcigpKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIHRoaXMuX3JlcG9zaXRvcmllcyA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2NvbXB1dGVSZXF1
ZXN0ZWRDb21taXRTZXRzTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMu
X2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9j
b21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5j
dGlvbihUZXN0R3JvdXAuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKTsKICAgICAgICAgdGhp
cy5fcmVxdWVzdGVkQ29tbWl0U2V0cyA9IG51bGw7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldFRv
TGFiZWwgPSBuZXcgTWFwOwogICAgICAgICBjb25zb2xlLmFzc2VydCghb2JqZWN0LnBsYXRmb3Jt
IHx8IG9iamVjdC5wbGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKQEAgLTgwLDcgKzgwLDcg
QEAgY2xhc3MgVGVzdEdyb3VwIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseS5ldmFsdWF0ZSguLi50aGlz
Ll9vcmRlcmVkQnVpbGRSZXF1ZXN0cygpKTsKICAgICB9CiAKLSAgICBfY29tcHV0ZVJlcXVlc3Rl
ZENvbW1pdFNldHMoLi4ub3JkZXJlZEJ1aWxkUmVxdWVzdHMpCisgICAgc3RhdGljIF9jb21wdXRl
UmVxdWVzdGVkQ29tbWl0U2V0cyguLi5vcmRlcmVkQnVpbGRSZXF1ZXN0cykKICAgICB7CiAgICAg
ICAgIGNvbnN0IHJlcXVlc3RlZENvbW1pdFNldHMgPSBbXTsKICAgICAgICAgY29uc3QgY29tbWl0
U2V0TGFiZWxNYXAgPSBuZXcgTWFwOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwppbmRleCAw
YTZhMDJlZmE2N2I0ZjEwMTMxZWEyMDlmN2IyYTVkZmNkZWU1NGVmLi4yZDYyZjk2NzMzZmNmODlj
ZGY4M2I5Zjk2NzgyNzYzZWJlNjc2Yzg4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcworKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwpA
QCAtMjY4LDYgKzI2OCw5IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0ZW5k
cyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgdGhpcy5wYXJ0KCdyZXRyeS1mb3JtJykubGlzdGVu
VG9BY3Rpb24oJ3N0YXJ0VGVzdGluZycsIChyZXBldGl0aW9uQ291bnQpID0+IHsKICAgICAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3JldHJ5VGVzdEdyb3VwJywgdGhpcy5fY3VycmVudFRl
c3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KTsKICAgICAgICAgfSk7CisgICAgICAgIHRoaXMucGFy
dCgnYmlzZWN0LWZvcm0nKS5saXN0ZW5Ub0FjdGlvbignc3RhcnRUZXN0aW5nJywgKHJlcGV0aXRp
b25Db3VudCkgPT4geworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbignYW5hbHl6ZVRl
c3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCk7CisgICAg
ICAgIH0pOwogICAgIH0KIAogICAgIHNldFRlc3RHcm91cHModGVzdEdyb3VwcywgY3VycmVudFRl
c3RHcm91cCwgc2hvd0hpZGRlbkdyb3VwcykKQEAgLTMzNyw5ICszNDAsMTQgQEAgY2xhc3MgQW5h
bHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBp
ZiAoY3VycmVudEdyb3VwKQogICAgICAgICAgICAgdGhpcy5fdGVzdEdyb3VwTWFwLmdldChjdXJy
ZW50R3JvdXApLmxpc3RJdGVtLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAKLSAgICAgICAg
aWYgKGN1cnJlbnRHcm91cCkKKyAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkgewogICAgICAgICAg
ICAgdGhpcy5wYXJ0KCdyZXRyeS1mb3JtJykuc2V0UmVwZXRpdGlvbkNvdW50KGN1cnJlbnRHcm91
cC5yZXBldGl0aW9uQ291bnQoKSk7CisgICAgICAgICAgICB0aGlzLnBhcnQoJ2Jpc2VjdC1mb3Jt
Jykuc2V0UmVwZXRpdGlvbkNvdW50KGN1cnJlbnRHcm91cC5yZXBldGl0aW9uQ291bnQoKSk7Cisg
ICAgICAgICAgICBjdXJyZW50R3JvdXAudGFzaygpLmFuYWx5c2lzQ29uZmlnRm9yVGVzdEdyb3Vw
KGN1cnJlbnRHcm91cCkudGhlbigoYW5hbHlzaXNDb25maWdzKSA9PgorICAgICAgICAgICAgICAg
IHRoaXMuY29udGVudCgnYmlzZWN0LWZvcm0nKS5zdHlsZS5kaXNwbGF5ID0gYW5hbHlzaXNDb25m
aWdzLmxlbmd0aCA/IG51bGwgOiAnbm9uZScpOworICAgICAgICB9CiAgICAgICAgIHRoaXMuY29u
dGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50R3JvdXAgPyBudWxsIDog
J25vbmUnOworICAgICAgICB0aGlzLmNvbnRlbnQoJ2Jpc2VjdC1mb3JtJykuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKIAogICAgICAgICBjb25zdCBoaWRlQnV0dG9uID0gdGhpcy5jb250ZW50KCdo
aWRlLWJ1dHRvbicpOwogICAgICAgICBoaWRlQnV0dG9uLnRleHRDb250ZW50ID0gY3VycmVudEdy
b3VwICYmIGN1cnJlbnRHcm91cC5pc0hpZGRlbigpID8gJ1VuaGlkZScgOiAnSGlkZSc7CkBAIC0z
NTYsNiArMzY0LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENv
bXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJlc3VsdHMtdmlld2Vy
IGlkPSJyZXN1bHRzLXZpZXdlciI+PC90ZXN0LWdyb3VwLXJlc3VsdHMtdmlld2VyPgogICAgICAg
ICAgICAgICAgIDx0ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlIGlkPSJyZXZpc2lvbi10YWJsZSI+
PC90ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlPgogICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3Vw
LWZvcm0gaWQ9InJldHJ5LWZvcm0iPlJldHJ5PC90ZXN0LWdyb3VwLWZvcm0+CisgICAgICAgICAg
ICAgICAgPHRlc3QtZ3JvdXAtZm9ybSBpZD0iYmlzZWN0LWZvcm0iPkJpc2VjdDwvdGVzdC1ncm91
cC1mb3JtPgogICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImhpZGUtYnV0dG9uIj5IaWRlPC9i
dXR0b24+CiAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InBlbmRpbmctcmVxdWVzdC1jYW5jZWwt
d2FybmluZyI+KGNhbmNlbHMgcGVuZGluZyByZXF1ZXN0cyk8L3NwYW4+CiAgICAgICAgICAgICA8
L2Rpdj5gOwpAQCAtNDIzLDcgKzQzMiw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBh
bmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICBtYXJnaW46IDA7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICNyZXRyeS1mb3JtIHsKKyAgICAgICAgICAgICNy
ZXRyeS1mb3JtLCAjYmlzZWN0LWZvcm0gewogICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2Nr
OwogICAgICAgICAgICAgICAgIG1hcmdpbjogMC41cmVtOwogICAgICAgICAgICAgfQpAQCAtNTA5
LDYgKzUxOCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRp
bmcgewogICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ3JlbmFtZVRlc3RHcm91cCcs
ICh0ZXN0R3JvdXAsIG5ld05hbWUpID0+IHRoaXMuX3VwZGF0ZVRlc3RHcm91cE5hbWUodGVzdEdy
b3VwLCBuZXdOYW1lKSk7CiAgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigndG9nZ2xl
VGVzdEdyb3VwVmlzaWJpbGl0eScsICh0ZXN0R3JvdXApID0+IHRoaXMuX2hpZGVDdXJyZW50VGVz
dEdyb3VwKHRlc3RHcm91cCkpOwogICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ3Jl
dHJ5VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgcmVwZXRpdGlvbkNvdW50KSA9PiB0aGlzLl9yZXRy
eUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpKTsKKyAgICAgICAg
Z3JvdXBQYW5lLmxpc3RlblRvQWN0aW9uKCdhbmFseXplVGVzdEdyb3VwJywgKHRlc3RHcm91cCwg
cmVwZXRpdGlvbkNvdW50KSA9PiB0aGlzLl9hbmFseXplQ3VycmVudFRlc3RHcm91cCh0ZXN0R3Jv
dXAsIHJlcGV0aXRpb25Db3VudCkpOwogCiAgICAgICAgIHRoaXMucGFydCgnY2F1c2UtbGlzdCcp
Lmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHJlcG9zaXRvcnksIHJldmlzaW9uKSA9PiB7CiAg
ICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVDb21taXQoJ2NhdXNlJywgcmVwb3NpdG9yeSwgcmV2
aXNpb24pOwpAQCAtNzg1LDE0ICs3OTUsMjggQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRl
bmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAKICAgICBfcmV0cnlDdXJyZW50VGVzdEdyb3VwKHRlc3RH
cm91cCwgcmVwZXRpdGlvbkNvdW50KQogICAgIHsKLSAgICAgICAgY29uc3QgbmV3TmFtZSA9IHRo
aXMuX2NyZWF0ZVJldHJ5TmFtZUZvclRlc3RHcm91cCh0ZXN0R3JvdXAubmFtZSgpKTsKKyAgICAg
ICAgY29uc3QgbmV3TmFtZSA9IEFuYWx5c2lzVGFzay5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lv
bih0ZXN0R3JvdXAubmFtZSgpLCB0aGlzLl9oYXNEdXBsaWNhdGVUZXN0R3JvdXBOYW1lLmJpbmQo
dGhpcykpOwogICAgICAgICBjb25zdCBjb21taXRTZXRMaXN0ID0gdGVzdEdyb3VwLnJlcXVlc3Rl
ZENvbW1pdFNldHMoKTsKICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLl90YXNrLnBsYXRm
b3JtKCkgfHwgdGVzdEdyb3VwLnBsYXRmb3JtKCk7CiAgICAgICAgIHJldHVybiBUZXN0R3JvdXAu
Y3JlYXRlV2l0aEN1c3RvbUNvbmZpZ3VyYXRpb24odGhpcy5fdGFzaywgcGxhdGZvcm0sIHRlc3RH
cm91cC50ZXN0KCksIG5ld05hbWUsIHJlcGV0aXRpb25Db3VudCwgY29tbWl0U2V0TGlzdCkKICAg
ICAgICAgICAgIC50aGVuKHRoaXMuX2RpZEZldGNoVGVzdEdyb3Vwcy5iaW5kKHRoaXMpLCBmdW5j
dGlvbiAoZXJyb3IpIHsKICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3
IHRlc3QgZ3JvdXA6ICcgKyBlcnJvcik7CiAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdGhp
cy5fY3JlYXRlVGVzdEdyb3VwQWZ0ZXJWZXJpZnlpbmdDb21taXRTZXRMaXN0KG5ld05hbWUsIHJl
cGV0aXRpb25Db3VudCwgY29tbWl0U2V0TWFwKTsKKyAgICB9CisKKyAgICBhc3luYyBfYW5hbHl6
ZUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXNrKTsKKyAgICAgICAgY29uc3QgYW5hbHlzaXND
b25maWdzID0gYXdhaXQgdGhpcy5fdGFzay5hbmFseXNpc0NvbmZpZ0ZvclRlc3RHcm91cCh0ZXN0
R3JvdXApOworICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuX3Rhc2sucGxhdGZvcm0oKSB8
fCB0ZXN0R3JvdXAucGxhdGZvcm0oKTsKKyAgICAgICAgZm9yIChjb25zdCBhbmFseXNpc0NvbmZp
ZyBvZiBhbmFseXNpc0NvbmZpZ3MpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgdGVzdEdyb3VwcyA9IGF3YWl0IFRlc3RHcm91cC5jcmVhdGVXaXRoQ3VzdG9tQ29u
ZmlndXJhdGlvbih0aGlzLl90YXNrLCBwbGF0Zm9ybSwgdGVzdEdyb3VwLnRlc3QoKSwgYW5hbHlz
aXNDb25maWcubmFtZSwgcmVwZXRpdGlvbkNvdW50LCBhbmFseXNpc0NvbmZpZy5jb21taXRTZXRM
aXN0KTsKKyAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHModGVz
dEdyb3Vwcyk7CisgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
YWxlcnQoJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIF9jcmVhdGVUZXN0R3JvdXBBZnRl
clZlcmlmeWluZ0NvbW1pdFNldExpc3QodGVzdEdyb3VwTmFtZSwgcmVwZXRpdGlvbkNvdW50LCBj
b21taXRTZXRNYXApCkBAIC04NDEsMjQgKzg2NSw2IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBfY3Jl
YXRlUmV0cnlOYW1lRm9yVGVzdEdyb3VwKG5hbWUpCi0gICAgewotICAgICAgICB2YXIgbmFtZVdp
dGhOdW1iZXJNYXRjaCA9IG5hbWUubWF0Y2goLyguKz8pXHMqXChccyooXGQrKVxzKlwpXHMqJC8p
OwotICAgICAgICB2YXIgbnVtYmVyID0gMTsKLSAgICAgICAgaWYgKG5hbWVXaXRoTnVtYmVyTWF0
Y2gpIHsKLSAgICAgICAgICAgIG5hbWUgPSBuYW1lV2l0aE51bWJlck1hdGNoWzFdOwotICAgICAg
ICAgICAgbnVtYmVyID0gcGFyc2VJbnQobmFtZVdpdGhOdW1iZXJNYXRjaFsyXSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIgbmV3TmFtZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbnVt
YmVyKys7Ci0gICAgICAgICAgICBuZXdOYW1lID0gYCR7bmFtZX0gKCR7bnVtYmVyfSlgOwotICAg
ICAgICB9IHdoaWxlICh0aGlzLl9oYXNEdXBsaWNhdGVUZXN0R3JvdXBOYW1lKG5ld05hbWUpKTsK
LQotICAgICAgICByZXR1cm4gbmV3TmFtZTsKLSAgICB9Ci0KICAgICBfaGFzRHVwbGljYXRlVGVz
dEdyb3VwTmFtZShuYW1lKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdGVz
dEdyb3Vwcyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMv
djMtbW9kZWxzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVs
cy5qcwppbmRleCBkMGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZjLi41MjMw
MGQ4NzAwZjdmMmY5M2ZiNWZiZGNiODVlNTcxYTMwOTRlNzVlIDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCisrKyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKQEAgLTM3LDUgKzM3LDYgQEAgaW1w
b3J0RnJvbVYzKCdtb2RlbHMvdXBsb2FkZWQtZmlsZS5qcycsICdVcGxvYWRlZEZpbGUnKTsKIGlt
cG9ydEZyb21WMygncHJpdmlsZWdlZC1hcGkuanMnLCAnUHJpdmlsZWdlZEFQSScpOwogaW1wb3J0
RnJvbVYzKCdpbnN0cnVtZW50YXRpb24uanMnLCAnSW5zdHJ1bWVudGF0aW9uJyk7CiBpbXBvcnRG
cm9tVjMoJ2xhemlseS1ldmFsdWF0ZWQtZnVuY3Rpb24uanMnLCAnTGF6aWx5RXZhbHVhdGVkRnVu
Y3Rpb24nKTsKK2ltcG9ydEZyb21WMygnYW5hbHlzaXMtc3RyYXRlZ2llcy5qcycsICdBbmFseXNp
c1N0cmF0ZWdpZXMnKTsKIAogZ2xvYmFsLlN0YXRpc3RpY3MgPSByZXF1aXJlKCcuLi8uLi9wdWJs
aWMvc2hhcmVkL3N0YXRpc3RpY3MuanMnKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy91bml0LXRlc3RzL2FuYWx5c2lzLXN0cmF0ZWdpZXMtdGVzdC5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2FuYWx5c2lzLXN0cmF0ZWdpZXMtdGVzdC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43YmNmMWVjODA0ZGI4MjVlZmM2NDEzNmM2ZmQ3NTJlOWUxYWNlMmMxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvYW5hbHlz
aXMtc3RyYXRlZ2llcy10ZXN0LmpzCkBAIC0wLDAgKzEsMjI4IEBACisndXNlIHN0cmljdCc7CisK
K2NvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOworCityZXF1aXJlKCcuLi90b29scy9q
cy92My1tb2RlbHMuanMnKTsKK2xldCBNb2NrTW9kZWxzID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMv
bW9jay12My1tb2RlbHMuanMnKS5Nb2NrTW9kZWxzOworbGV0IE1vY2tSZW1vdGVBUEkgPSByZXF1
aXJlKCcuL3Jlc291cmNlcy9tb2NrLXJlbW90ZS1hcGkuanMnKS5Nb2NrUmVtb3RlQVBJOworCitk
ZXNjcmliZSgnQW5hbHlzaXNTdHJhdGVnaWVzJywgKCkgPT4geworCisgICAgZnVuY3Rpb24gbWFr
ZUNvbW1pdChpZCwgcmVwb3NpdG9yeSwgcmV2aXNpb24sIHRpbWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gQ29tbWl0TG9nLmVuc3VyZVNpbmdsZXRvbihpZCwgeworICAgICAgICAgICAgcmVwb3Np
dG9yeSwKKyAgICAgICAgICAgIHJldmlzaW9uLAorICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZh
bHNlLAorICAgICAgICAgICAgdGltZQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzb3J0ZWRDb21taXRTZXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAg
ICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lv
bkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1v
Y2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExLCBNb2Nr
TW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAg
ICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMiwgeworICAgICAgICAgICAgICAg
IHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21t
aXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNC
dWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQo
MTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0yJywgMiksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBb
XX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigzLCB7CisgICAgICAg
ICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgyLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMicsIDIpLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFr
ZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyKSwgcmVxdWlyZXNC
dWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9t
Um9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDQsIHsK
KyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsg
Y29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0z
JywgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMpLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAg
ICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0
b24oNSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQt
Y29tbWl0LTYnLCA2KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0z
JywgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICBdOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNyZWF0ZVJvb3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFVwbG9hZGVkRmlsZS5l
bnN1cmVTaW5nbGV0b24oNDU2LCB7J2NyZWF0ZWRBdCc6IG5ldyBEYXRlKCcyMDE3LTA1LTAxVDIx
OjAzOjI3WicpLCAnZmlsZW5hbWUnOiAncm9vdC5kYXQnLCAnZXh0ZW5zaW9uJzogJy5kYXQnLCAn
YXV0aG9yJzogJ3NvbWUgdXNlcicsCisgICAgICAgICAgICBzaXplOiAxNjQ1MjIzNCwgc2hhMjU2
OiAnMDNlZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4ZTU1NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5Njhm
NzhmNjU2ZDU4ZCd9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoUm9vdCgp
CisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNSwgewor
ICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNl
IH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtjcmVhdGVSb290KCldCisgICAgICAgIH0p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldCgpCisgICAgeworICAgICAgICByZXR1
cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNiwgeworICAgICAgICAgICAgcmV2aXNpb25J
dGVtczogW3sgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0
LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAgICAgY3Vz
dG9tUm9vdHM6IFtdCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNl
dHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkgeworICAgICAgICByZXR1cm4gWworICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7CisgICAgICAgICAgICAgICAgcmV2aXNp
b25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBN
b2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMSwgTW9j
a01vZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQor
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisg
ICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDIsIHsKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29t
bWl0KDMxLCBNb2NrTW9kZWxzLmlvcywgJ2lvcy1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxk
OiBmYWxzZSB9LAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9v
dHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDMsIHsKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywg
MSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0
OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIpLCByZXF1
aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBj
dXN0b21Sb290czogW119KQorICAgICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluamVj
dEN1c3RvbUxvZ2dlcigpCisgICAgeworICAgICAgICBjb25zdCBvcmlnaW5hbExvZ2dlciA9IEFu
YWx5c2lzU3RyYXRlZ2llcy5sb2dnZXI7CisgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyAoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBsZXQgZXJyb3JfbG9ncyA9IFtdOworICAgICAgICAgICAg
dGhpcy5lcnJvciA9IChlcnJvcl9pbmZvKSA9PiBlcnJvcl9sb2dzLnB1c2goZXJyb3JfaW5mbyk7
CisgICAgICAgICAgICB0aGlzLmVycm9yX2xvZ3MgPSAoKSA9PiBlcnJvcl9sb2dzOworICAgICAg
ICAgICAgdGhpcy5yZXNldCA9ICgpID0+IGVycm9yX2xvZ3MgPSBbXTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGJlZm9yZUVhY2goKCkgPT4gQW5hbHlzaXNTdHJhdGVnaWVzLmxvZ2dlciA9IGxvZ2dl
cik7CisgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7CisgICAgICAgICAgICBBbmFseXNpc1N0cmF0
ZWdpZXMubG9nZ2VyID0gb3JpZ2luYWxMb2dnZXI7CisgICAgICAgICAgICBsb2dnZXIucmVzZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBsb2dnZXI7CisgICAgfQorCisgICAgZGVz
Y3JpYmUoJ3NlbGVjdEJpc2VjdGlvblBvaW50V2l0aFNpbWlsYXJSZXZpc2lvbkRpc3RhbmNlJywg
KCkgPT4geworICAgICAgICBNb2NrTW9kZWxzLmluamVjdCgpOworICAgICAgICBsZXQgcmVxdWVz
dHMgPSBNb2NrUmVtb3RlQVBJLmluamVjdCgpOworICAgICAgICBjb25zdCBsb2dnZXIgPSBpbmpl
Y3RDdXN0b21Mb2dnZXIoKTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBjb25m
aWcgbGlzdCBpZiBsZXNzIHRoYW4gMyBjb21taXQgc2V0cyBhcmUgcHJvdmlkZWQnLCBhc3luYyAo
KSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0
cygpOworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBd
OworICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21t
aXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgY29uc3QgYW5hbHlzaXNDb25maWdzID0g
YXdhaXQgQW5hbHlzaXNTdHJhdGVnaWVzLlJhbmdlU3BsaXRTdHJhdGVnaWVzLnNwbGl0UmFuZ2VX
aXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2UoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRd
LCBbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0pOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGFuYWx5c2lzQ29uZmlncy5sZW5ndGgsIDApOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChsb2dnZXIuZXJyb3JfbG9ncygpLCBbJ0Nhbm5vdCBiaXNlY3QgYSByYW5nZSB0aGF0IGlz
IHNtYWxsZXIgdGhhbiAzIGNvbW1pdCBzZXRzJ10pOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnc2hvdWxkIHJlamVjdCBpZiBubyBjb21tb24gcmVwb3NpdG9yeSBmb3VuZCcsIGFzeW5jICgp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFuYWx5c2lzQ29uZmlncyA9IGF3YWl0IEFuYWx5c2lz
U3RyYXRlZ2llcy5SYW5nZVNwbGl0U3RyYXRlZ2llcy5zcGxpdFJhbmdlV2l0aFNpbWlsYXJSZXZp
c2lvbkRpc3RhbmNlKGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkuc3BsaWNlKDAs
IDIpKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChhbmFseXNpc0NvbmZpZ3MubGVuZ3RoLCAw
KTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwobG9nZ2VyLmVycm9yX2xvZ3MoKSwgWydD
b21taXRTZXRzIGluIHRlc3QgZ3JvdXAgaGF2ZSBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzJywgJ0Nh
bm5vdCBiaXNlY3QgYSByYW5nZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiAzIGNvbW1pdCBzZXRzJ10p
OworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBmYWlsZWQgdG8g
ZmV0Y2ggY29tbWl0IGxvZycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFsbENv
bW1pdFNldHMgPSBzb3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBzdGFydENv
bW1pdFNldCA9IGFsbENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRDb21taXRT
ZXQgPSBhbGxDb21taXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgICAg
ICBjb25zdCBwcm9taXNlID0gQW5hbHlzaXNTdHJhdGVnaWVzLlJhbmdlU3BsaXRTdHJhdGVnaWVz
LnNwbGl0UmFuZ2VXaXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2UoW3N0YXJ0Q29tbWl0U2V0LCBl
bmRDb21taXRTZXRdLCBhbGxDb21taXRTZXRzKTsKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1v
dGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlamVjdCgn
NDA0Jyk7CisgICAgICAgICAgICBjb25zdCBhbmFseXNpc0NvbmZpZ3MgPSBhd2FpdCBwcm9taXNl
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGFuYWx5c2lzQ29uZmlncy5sZW5ndGgsIDApOwor
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChsb2dnZXIuZXJyb3JfbG9ncygpLCBbJ0ZhaWxl
ZCB0byBmZXRjaCBjb21taXRzIGJldHdlZW4gIndlYmtpdC1jb21taXQtMSIgLSAid2Via2l0LWNv
bW1pdC02IiBkdWUgdG8gNDA0J10pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiBiaXNlY3Rpb24gcG9pbnQgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHJldmlzaW9u
IHJhbmdlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9
IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0g
YWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGxldCBwcm9t
aXNlID0gQW5hbHlzaXNTdHJhdGVnaWVzLlJhbmdlU3BsaXRTdHJhdGVnaWVzLnNwbGl0UmFuZ2VX
aXRoU2ltaWxhclJldmlzaW9uRGlzdGFuY2UoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRd
LCBhbGxDb21taXRTZXRzKTsKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZv
clJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAg
ICAgICAgICdjb21taXRzJzogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ6IDIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjog
J3dlYmtpdC1jb21taXQtMicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czog
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAyCisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1p
dC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWU6IDMKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9j
a01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTQnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZTogNAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtp
dC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDUsCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtNScsCisgICAgICAgICAgICAgICAgICAg
ICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA1
CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlz
aW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21t
aXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYKKyAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJl
cXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDExLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTEnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZTogMQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm9zeC5pZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb246ICdvc3gtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMgorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjb25zdCBhbmFseXNpc0NvbmZpZ3MgPSBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAg
Y29uc3QgZXhwZWN0ZWRNaWRkbGVDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzNdOworICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChhbmFseXNpc0NvbmZpZ3NbMF0uY29tbWl0U2V0TGlzdCwg
W3N0YXJ0Q29tbWl0U2V0LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldF0pOworICAgICAgICAgICAg
YXNzZXJ0LmRlZXBFcXVhbChhbmFseXNpc0NvbmZpZ3NbMV0uY29tbWl0U2V0TGlzdCwgW2V4cGVj
dGVkTWlkZGxlQ29tbWl0U2V0LCBlbmRDb21taXRTZXRdKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChsb2dnZXIuZXJyb3JfbG9ncygpLmxlbmd0aCwgMCk7CisgICAgICAgIH0pOworCisgICAg
ICAgIGl0KCdzaG91bGQgcmVmdXNlIHRvIGJpc2VjdCBjb21taXQgc2V0IHdpdGggcm9vdCcsIGFz
eW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFuYWx5c2lzQ29uZmlncyA9IGF3YWl0IEFu
YWx5c2lzU3RyYXRlZ2llcy5SYW5nZVNwbGl0U3RyYXRlZ2llcy5zcGxpdFJhbmdlV2l0aFNpbWls
YXJSZXZpc2lvbkRpc3RhbmNlKFtjb21taXRTZXQoKSwgY29tbWl0U2V0V2l0aFJvb3QoKV0sIFtj
b21taXRTZXQoKSwgY29tbWl0U2V0V2l0aFJvb3QoKV0pOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGFuYWx5c2lzQ29uZmlncy5sZW5ndGgsIDApOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChsb2dnZXIuZXJyb3JfbG9ncygpLCBbJ0Nhbm5vdCBiaXNlY3Qgb24gYSByYW5nZSB3aXRo
IHJvb3QvcGF0Y2gvb3duZWQgY29tbWl0JywgJ0Nhbm5vdCBiaXNlY3QgYSByYW5nZSB0aGF0IGlz
IHNtYWxsZXIgdGhhbiAzIGNvbW1pdCBzZXRzJ10pOworICAgICAgICB9KTsKKworICAgIH0pOwor
fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggMTExYzZh
NjU0OGY1MTg5MmRlMWQyN2ZmMTMzMTUzYWRjYTY2ZTEwNS4uMTBlMWU2ODVkYzA5N2IzNWM2MTcy
Yzc0ZjcwNDAyZTVhMTg1YTdiNyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0yOSw2ICsyOSwxMiBAQCBm
dW5jdGlvbiBjcmVhdGVBbm90aGVyUm9vdCgpCiAgICAgICAgIHNpemU6IDE2NDUyMTExLCBzaGEy
NTY6ICcwM2VlZDdhODQ5NGFiODc5NGM0NGI3ZDQzMDhlNTU0NDhmYzU2ZjRkNmMxNzU4MDliYTk2
OGY3OGY2NTZkYmJiJ30pOwogfQogCitmdW5jdGlvbiBjcmVhdGVTaGFyZWRSb290KCkKK3sKKyAg
ICByZXR1cm4gVXBsb2FkZWRGaWxlLmVuc3VyZVNpbmdsZXRvbig0NTgsIHsnY3JlYXRlZEF0Jzog
bmV3IERhdGUoJzIwMTctMDUtMDFUMjI6MDM6MjdaJyksICdmaWxlbmFtZSc6ICdyb290LmRhdCcs
ICdleHRlbnNpb24nOiAnLmRhdCcsICdhdXRob3InOiAnc29tZSB1c2VyJywKKyAgICAgICAgc2l6
ZTogMTY0NTIxMTEsIHNoYTI1NjogJzAzZWVkN2E4NDk0YWI4Nzk0YzQ0YjdkNDMwOGU1NTQ0OGZj
NTZmNGFhYzE3NTgwOWJhOTY4Zjc4ZjY1NmRiYmInfSk7Cit9CisKIGZ1bmN0aW9uIGN1c3RvbUNv
bW1pdFNldFdpdGhvdXRPd25lZENvbW1pdCgpCiB7CiAgICAgY29uc3QgY3VzdG9tQ29tbWl0U2V0
ID0gbmV3IEN1c3RvbUNvbW1pdFNldDsKQEAgLTEwNCw2ICsxMTAsMTYgQEAgZnVuY3Rpb24gd2Vi
a2l0Q29tbWl0KCkKICAgICB9KTsKIH0KIAorZnVuY3Rpb24gYW5vdGhlcldlYktpdENvbW1pdCgp
Cit7CisgICAgcmV0dXJuIENvbW1pdExvZy5lbnN1cmVTaW5nbGV0b24oMjAxOCwgeworICAgICAg
ICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdCwKKyAgICAgICAgcmV2aXNpb246ICd3ZWJr
aXQtY29tbWl0LTEnLAorICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgIHRpbWU6
IDE0NTY5MzI3NzMwMDAKKyAgICB9KTsKK30KKwogZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+
IHsKICAgICBNb2NrUmVtb3RlQVBJLmluamVjdCgpOwogICAgIE1vY2tNb2RlbHMuaW5qZWN0KCk7
CkBAIC0xNTYsNiArMTcyLDMxIEBAIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAg
ICAgIH0pOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIGNvbW1pdFNldFdpdGhUd29Sb290cygpCisg
ICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig3LCB7CisgICAg
ICAgICAgICByZXZpc2lvbkl0ZW1zOiBbeyBjb21taXQ6IHdlYmtpdENvbW1pdCgpLCByZXF1aXJl
c0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbY3JlYXRlUm9vdCgp
LCBjcmVhdGVTaGFyZWRSb290KCldCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNvbW1pdFNldFdpdGhBbm90aGVyV2ViS2l0Q29tbWl0KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDgsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRl
bXM6IFt7IGNvbW1pdDogYW5vdGhlcldlYktpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoQW5vdGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpCisg
ICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig5LCB7CisgICAg
ICAgICAgICByZXZpc2lvbkl0ZW1zOiBbeyBjb21taXQ6IGFub3RoZXJXZWJLaXRDb21taXQoKSwg
cmVxdWlyZXNCdWlsZDogdHJ1ZSwgcGF0Y2g6IGNyZWF0ZVBhdGNoKCl9XSwKKyAgICAgICAgICAg
IGN1c3RvbVJvb3RzOiBbY3JlYXRlUm9vdCgpLCBjcmVhdGVTaGFyZWRSb290KCldCisgICAgICAg
IH0pOworICAgIH0KKworCiAgICAgZnVuY3Rpb24gb25lTWVhc3VyZW1lbnRDb21taXRTZXQoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIE1lYXN1cmVtZW50Q29tbWl0U2V0LmVuc3VyZVNpbmdsZXRv
bigxLCBbCkBAIC0xOTgsNyArMjM5LDI3IEBAIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7
CiAgICAgICAgICAgICBhc3NlcnQob25lQ29tbWl0U2V0KCkuZXF1YWxzKG9uZU1lYXN1cmVtZW50
Q29tbWl0U2V0KCkpKTsKICAgICAgICAgICAgIGFzc2VydChvbmVNZWFzdXJlbWVudENvbW1pdFNl
dCgpLmVxdWFscyhvbmVDb21taXRTZXQoKSkpOwogICAgICAgICB9KTsKLSAgICB9KQorICAgIH0p
OworCisgICAgZGVzY3JpYmUoJ2Rlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVuQ29tbWl0U2V0cycs
ICAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgZGVzY3JpYmUgcGF0Y2ggZGlmZmVyZW5jZScs
ICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVEaWZm
ZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKGNvbW1pdFNldFdpdGhQYXRjaCgpLCBjb21taXRTZXRX
aXRoQW5vdGhlclBhdGNoKCkpLCAnV2ViS2l0OiBQYXRjaChwYXRjaC5kYXQpIC0gUGF0Y2gocGF0
Y2guZGF0ICgyKSknKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBkZXNjcmli
ZSByb290IGRpZmZlcmVuY2UnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoQ29t
bWl0U2V0LmRlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVuQ29tbWl0U2V0cyhjb21taXRTZXRXaXRo
Um9vdCgpLCBhbm90aGVyQ29tbWl0U2V0V2l0aFJvb3QoKSksICdSb290czogcm9vdC5kYXQgLSBy
b290LmRhdCAoMiknKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3Jp
YmVEaWZmZXJlbmNlc0JldHdlZW5Db21taXRTZXRzKGNvbW1pdFNldFdpdGhSb290KCksIGNvbW1p
dFNldFdpdGhUd29Sb290cygpKSwgJ1Jvb3RzOiBtaXNzaW5nIC0gcm9vdC5kYXQnKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdlZW5D
b21taXRTZXRzKGNvbW1pdFNldFdpdGhUd29Sb290cygpLCBvbmVDb21taXRTZXQoKSksICdSb290
czogcm9vdC5kYXQsIHJvb3QuZGF0ICgyKSAtIG1pc3NpbmcnKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgaXQoJ3Nob3VsZCBkZXNjcmliZSBjb21taXQgZGlmZmVyZW5jZScsICgpID0+IHsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGVzY3JpYmVEaWZmZXJlbmNlc0JldHdl
ZW5Db21taXRTZXRzKG9uZUNvbW1pdFNldCgpLCBjb21taXRTZXRXaXRoQW5vdGhlcldlYktpdENv
bW1pdCgpKSwgJ1dlYktpdDogd2Via2l0LWNvbW1pdC0wIC0gd2Via2l0LWNvbW1pdC0xJyk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZGVzY3JpYmUgY29tbWl0IHJvb3QgYW5k
IHBhdGNoIGRpZmZlcmVuY2UnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoQ29t
bWl0U2V0LmRlc2NyaWJlRGlmZmVyZW5jZXNCZXR3ZWVuQ29tbWl0U2V0cyhvbmVDb21taXRTZXQo
KSwgY29tbWl0U2V0V2l0aEFub3RoZXJDb21taXRQYXRjaEFuZFJvb3QoKSksICdXZWJLaXQ6IHdl
YmtpdC1jb21taXQtMCB3aXRoIFBhdGNoKG1pc3NpbmcpIC0gd2Via2l0LWNvbW1pdC0xIHdpdGgg
UGF0Y2gocGF0Y2guZGF0KSBSb290czogbWlzc2luZyAtIHJvb3QuZGF0LCByb290LmRhdCAoMikn
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9KTsKIAogZGVzY3JpYmUoJ0ludGVybWVkaWF0ZUNv
bW1pdFNldCcsICgpID0+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337757</attachid>
            <date>2018-04-11 17:38:35 -0700</date>
            <delta_ts>2018-04-11 18:36:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180411173834.patch</filename>
            <type>text/plain</type>
            <size>61341</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNDQ0CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAwY2E0NWJhMzlhZmZiYWNlZTgzNjA5Zjg4NTg2OTQ4Mzk3YmVlOWQ2Li41MThmNzc0MjU0
NjA0MDFmNDg4YjYwNGI4NzlhYmQ1MjU3ZTAyMzQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxOC0wNC0xMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXN0aW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbiB3aGljaCB3aWxsIG9ubHkgYXBwZWFyIHdoZW4gdGhlIHJh
bmdlIG9mIHRlc3QgZ3JvdXAgY2FuIGJlIHNwbGl0dGVkLgorCisgICAgICAgICogcHVibGljL2lu
Y2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocDogU2hvdWxkIHJlc3VsdHMgcmV0dXJuZWQgYnkg
QVBJIHNob3VsZCBjb250YWluIGNvbW1pdCBvcmRlciBpbmZvcm1hdGlvbi4KKyAgICAgICAgKiBw
dWJsaWMvdjMvaW5kZXguaHRtbDogSW1wb3J0cyAncHVibGljL3YzL21pZGRsZS1jb21taXQtc2V0
LWZpbmRlci5qcycuCisgICAgICAgICogcHVibGljL3YzL21pZGRsZS1jb21taXQtc2V0LWZpbmRl
ci5qczoKKyAgICAgICAgKE1pZGRsZUNvbW1pdFNldEZpbmRlci5hc3luYy5jb21taXRTZXRDbG9z
ZXN0VG9NaWRkbGVPZkFsbENvbW1pdHMpOkluc3RlYWQgb2YgbmFpdmVseSByZXR1cm5pbmcgdGhl
IG1pZGRsZSBvZgorICAgICAgICBleGlzdGluZyBjb21taXQgc2V0IGFycmF5LCB0aGlzIGZ1bmN0
aW9uIHNlbGVjdHMgYSBiaXNlY3QgYmlzZWN0aW9uIHBvaW50cyB0aGF0IGlzIGNsb3Nlc3QgdG8g
YWN0dWFsbHkgbWlkZGxlIG9mCisgICAgICAgIHRoZSByZXZpc2lvbiByYW5nZSBiYXNlZCBvbiBh
bGwgcmV2aXNpb25zIHJlcG9ydGVkIHRvIHBlcmZvcm1hbmNlIGRhc2hib2FyZC4KKyAgICAgICAg
KE1pZGRsZUNvbW1pdFNldEZpbmRlci5fZmlsdGVyU29ydEFuZFVuaXF1ZUNvbW1pdFNldHMpOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZmlsdGVyLCBzb3J0IGFuZCB1bmlxdWUgY29tbWl0IHNldHMuCisg
ICAgICAgIChNaWRkbGVDb21taXRTZXRGaW5kZXIuX2ZpbmRDb21taXRTZXRzQ2xvc2VzdFRvTWlk
ZGxlT2ZDb21taXRzV2l0aFRpbWUpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29tbWl0
IHNldHMKKyAgICAgICAgdGhvc2UgYXJlIGNsb3Nlc3QgdG8gdGhlIG1pZGRsZSBvZiBhbW9uZyBh
bGwgdGhlIGNvbW1pdHMgaW4gdGhlIHJhbmdlIHRoYXQgaGF2ZSBjb21taXQgdGltZS4KKyAgICAg
ICAgKE1pZGRsZUNvbW1pdFNldEZpbmRlci5fZmluZENvbW1pdFNldHNDbG9zZXN0VG9NaWRkbGVP
ZkNvbW1pdHNXaXRoT3JkZXIpOiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZ29lcyB0aHJvdWdoIGFs
bAorICAgICAgICByZXBvc2l0b3JpZXMgdGhlIGNvbW1pdCBvZiB3aGljaCBoYXMgY29tbWl0IG9y
ZGVyLCBhbmQgZmluZCB0aGUgY29tbWl0IHNldHMgdGhvc2UgYXJlIGNsb3Nlc3QgdG8gdGhlIG1p
ZGRsZSBvZiBjb21taXRzCisgICAgICAgIGZvciBlYWNoIHJlcG9zaXRvcnkuCisgICAgICAgIChN
aWRkbGVDb21taXRTZXRGaW5kZXIpOgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYW5hbHlz
aXMtdGFzay5qczoKKyAgICAgICAgKEFuYWx5c2lzVGFzay5wcm90b3R5cGUuYXN5bmMubWlkZGxl
Q29tbWl0U2V0Rm9yVGVzdEdyb3VwKTogSW52b2tlcyBNaWRkbGVDb21taXRTZXRGaW5kZXIgdG8g
ZmluZCB0aGUgbWlkZGxlIGNvbW1pdCBzZXQuCisgICAgICAgIChBbmFseXNpc1Rhc2sucHJvdG90
eXBlLmFzeW5jLmFnZ3JlZ2F0ZUNvbW1pdFNldHMpOiBBZ2dyZWdhdGVzIGFsbCBleGlzdGluZyBj
b21taXQgc2V0cyBpbiB0ZXN0IGdyb3VwcyBvZiBjdXJyZW50IGFuYWx5c2lzIHRhc2tzLgorICAg
ICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczoKKyAgICAgICAgKENvbW1pdExv
Zy5wcm90b3R5cGUudXBkYXRlU2luZ2xldG9uKTogVXBkYXRlIGNvbW1pdCBvcmRlciBpbmZvcm1h
dGlvbiBhcyB3ZWxsLgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5oYXNDb21taXRUaW1l
KTogQSBoZWxwZXIgZnVuY3Rpb24gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21taXQgaGFzIGEgY29t
bWl0IHRpbWUuIEZvciBjb21taXQKKyAgICAgICAgdGhhdCBkb2VzIG5vdCBoYXZlIHRpbWUsIHNl
cnZlciB3aWxsIHJldHVybiBjb21taXQgdGltZSBhcyB6ZXJvLiBBcyBpdCBpcyB1bnJlYWxpc3Rp
YyBmb3IgYSBjb21taXQgaGFzIGNvbW1pdCB0aW1lCisgICAgICAgIDAsIGl0IHdvdWxkIGJlIHNh
ZmUgdG8gYXNzdW1lIGEgdmFsaWQgY29tbWl0IHRpbWUgaXMgZ3JlYXRlciB0aGFuIDAuCisgICAg
ICAgIChDb21taXRMb2cucHJvdG90eXBlLmhhc0NvbW1pdE9yZGVyKTogUmV0dXJucyB3aGV0aGVy
IGEgY29tbWl0IGhhcyBhIGNvbW1pdCBvZGVyLgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlw
ZS5vcmRlcik6IFJldHVybnMgY29tbWl0IG9yZGVyIG9mIGEgY29tbWl0LgorICAgICAgICAqIHB1
YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qczoKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5
cGUuaGFzU2FtZVJlcG9zaXRvcmllcyk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3
aGV0aGVyIGEgY29tbWl0IHNldCBoYXMgc2FtZSByZXBvc2l0b3JpZXMKKyAgICAgICAgYXMgY3Vy
cmVudCByZXBvc2l0b3J5LgorICAgICAgICAoQ29tbWl0U2V0LmNvbnRhaW5zUm9vdFBhdGNoT3JP
d25lZENvbW1pdCk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGN1cnJl
bnQgY29tbWl0IHNldCBoYXMgcm9vdCwKKyAgICAgICAgcGF0Y2ggb3Igb3duZWQgY29tbWl0Lgor
ICAgICAgICAoQ29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkpOiBUaGlzIGZ1bmN0aW9uIGRl
ZmluZWQgdHdpY2UgaWRlbnRpY2FsbHksIHJlbW92ZSBvbmUgb2YgdGhlbS4KKyAgICAgICAgKiBw
dWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanM6IE1ha2UgJ19jb21wdXRlUmVxdWVzdGVkQ29t
bWl0U2V0cycgYSBzdGF0aWMgZnVuY3Rpb24gYXMgaXQgZG9lcyBub3QgdXNlIGFueSBpbnN0YW5j
ZQorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lz
LXRhc2stcGFnZS5qczogQWRkZWQgYmlzZWN0IGJ1dHRvbi4KKyAgICAgICAgKEFuYWx5c2lzVGFz
a1Rlc3RHcm91cFBhbmUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90
b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0
R3JvdXBQYW5lLnByb3RvdHlwZS5hc3luYy5zZXRUZXN0R3JvdXBzKTogVXBkYXRlICdzZXRUZXN0
R3JvdXBzJyB0byB1cGRhdGUgX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwCisgICAgICAgIHdo
ZW4gdGhlIHRlc3QgZ3JvdXBzIGNoYW5nZXMuCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3Jv
dXBQYW5lLnByb3RvdHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6IEFkZGVkIGNvZGUgdG8g
Y29uZGl0aW9uYWxseSBzaG93IGJpc2VjdCBidXR0b24uCisgICAgICAgIEJpc2VjdCBidXR0b24g
d2lsbCBvbmx5IHNob3cgd2hlbiB0aGVyZSBpcyBhIG1pZGRsZSBjb21taXQgc2V0IGZvciB0aGF0
IHRlc3QgZ3JvdXAuCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmh0bWxUZW1w
bGF0ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmNzc1RlbXBsYXRlKToK
KyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1Ry
ZWUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JldHJ5Q3VycmVudFRl
c3RHcm91cCk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5hc3luYy5fYW5h
bHl6ZUN1cnJlbnRUZXN0R3JvdXApOiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHdo
ZW4gYmlzZWN0IGJ1dHRvbiBpcyBjbGlja2VkLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5w
cm90b3R5cGUuX2RpZEZldGNoVGVzdEdyb3Vwcyk6IERlbGV0ZWQgYSBzdGF0ZW1lbnQgYWZ0ZXIg
ZnVuY3Rpb24ncyByZXR1cm5zLgorICAgICAgICAqIHRvb2xzL2pzL3YzLW1vZGVscy5qczoKKyAg
ICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVkIHVuaXQgdGVzdHMg
Zm9yICdDb21taXRTZXQuaGFzU2FtZVJlcG9zaXRvcmllcycgYW5kICdDb21taXRTZXQuY29udGFp
bnNSb290UGF0Y2hPck93bmVkQ29tbWl0Jy4KKyAgICAgICAgKiB1bml0LXRlc3RzL21pZGRsZS1j
b21taXQtc2V0LWZpbmRlci10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ01pZGRsZUNv
bW1pdFNldEZpbmRlci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFsbENvbW1pdHMnLgorCiAy
MDE4LTA0LTA2ICBEZXdlaSBaaHUgIDxkZXdlaV96aHVAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZGVkICdDb21taXRTZXQuZGlmZicgd2hpY2ggd2lsbCBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBs
ZSBpbmRlcGVuZGVudCBpbmNvbWluZyBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBo
cAppbmRleCA3MDljZjJkNzJiNWQ5MWU2YjllYzk4Nzg2MGRhYzRmMzJlMzEyMDc0Li45Yzc2MjYz
Y2I2NjE2YjU5NWIxZGRkZmI5OTA5NDcyZWExNTg5ZDA4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRj
aGVyLnBocApAQCAtNjEsNiArNjEsNyBAQCBjbGFzcyBDb21taXRMb2dGZXRjaGVyIHsKICAgICAg
ICAgICAgIGNvbW1pdHRlcl9hY2NvdW50IGFzICJhdXRob3JFbWFpbCIsCiAgICAgICAgICAgICBj
b21taXRfcmVwb3NpdG9yeSBhcyAicmVwb3NpdG9yeSIsCiAgICAgICAgICAgICBjb21taXRfbWVz
c2FnZSBhcyAibWVzc2FnZSIsCisgICAgICAgICAgICBjb21taXRfb3JkZXIgYXMgIm9yZGVyIiwK
ICAgICAgICAgICAgIEVYSVNUUyhTRUxFQ1QgKiBGUk9NIGNvbW1pdF9vd25lcnNoaXBzIFdIRVJF
IGNvbW1pdF9vd25lciA9IGNvbW1pdF9pZCkgYXMgIm93bnNDb21taXRzIgogICAgICAgICAgICAg
RlJPTSBjb21taXRzIExFRlQgT1VURVIgSk9JTiBjb21taXR0ZXJzIE9OIGNvbW1pdF9jb21taXR0
ZXIgPSBjb21taXR0ZXJfaWQKICAgICAgICAgICAgIFdIRVJFIGNvbW1pdF9yZXBvc2l0b3J5ID0g
JDEgQU5EIGNvbW1pdF9yZXBvcnRlZCA9IHRydWUnOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sCmluZGV4IDAyMzNmOTZmZWFlNzgzN2U4MmQ3MDQxMDI3
NzYwZWE1ZTAxYmUzYmYuLjk5ZDA2M2Y5ZTA0MGZkZGYxODI2ZmU3YzI3MmYyYmFhOTVhYmQzMTcg
MTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRt
bAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAg
LTQ1LDYgKzQ1LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRo
ZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwcml2
aWxlZ2VkLWFwaS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJhc3luYy10YXNr
LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImxhemlseS1ldmFsdWF0ZWQtZnVu
Y3Rpb24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibWlkZGxlLWNvbW1pdC1z
ZXQtZmluZGVyLmpzIj48L3NjcmlwdD4KIAogICAgICAgICA8c2NyaXB0IHNyYz0ibW9kZWxzL3Rp
bWUtc2VyaWVzLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9Im1vZGVscy9tZWFz
dXJlbWVudC1hZGFwdG9yLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLmpzIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9taWRkbGUtY29tbWl0LXNldC1maW5kZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGY3YzFmY2VjNjM0NjRiOWIxMTc1OTgyMGU2OGJmMDg5YjVhYTYzYwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWlkZGxl
LWNvbW1pdC1zZXQtZmluZGVyLmpzCkBAIC0wLDAgKzEsMTg5IEBACisndXNlIHN0cmljdCc7CisK
KworY2xhc3MgTWlkZGxlQ29tbWl0U2V0RmluZGVyIHsKKyAgICBzdGF0aWMgYXN5bmMgY29tbWl0
U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKGNvbW1pdFNldHNUb1NwbGl0LCBhdmFpbGFi
bGVDb21taXRTZXRzKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0U2V0c1Rv
U3BsaXQubGVuZ3RoID09PSAyKTsKKyAgICAgICAgY29uc3QgW29uZUNvbW1pdFNldCwgYW5vdGhl
ckNvbW1pdFNldF0gPSBjb21taXRTZXRzVG9TcGxpdDsKKyAgICAgICAgaWYgKG9uZUNvbW1pdFNl
dC5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSB8fCBhbm90aGVyQ29tbWl0U2V0LmNv
bnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICAgICAgaWYgKCFvbmVDb21taXRTZXQuaGFzU2FtZVJlcG9zaXRvcmllcyhhbm90aGVy
Q29tbWl0U2V0KSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGNvbnN0IHJl
cG9zaXRvcmllc1dpdGhDb21taXRUaW1lID0gbmV3IFNldDsKKyAgICAgICAgY29uc3QgY29tbWl0
UmFuZ2VCeVJlcG9zaXRvcnkgPSBuZXcgTWFwOworICAgICAgICBjb25zdCBpbmRleEZvckNvbW1p
dFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkgPSBuZXcgTWFwOworICAgICAgICBjb25zdCBmZXRj
aGluZ1Byb21pc2VzID0gW107CisgICAgICAgIGNvbnN0IGFsbENvbW1pdHNXaXRoQ29tbWl0VGlt
ZSA9IFtdOworICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2Ygb25lQ29tbWl0U2V0LnRv
cExldmVsUmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IG9uZUNvbW1pdCA9IG9u
ZUNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAg
Y29uc3QgYW5vdGhlckNvbW1pdCA9IGFub3RoZXJDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGlmIChvbmVDb21taXQgPT09IGFub3RoZXJDb21t
aXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChvbmVDb21t
aXQuaGFzQ29tbWl0VGltZSgpICYmIGFub3RoZXJDb21taXQuaGFzQ29tbWl0VGltZSgpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0Q29tbWl0LCBlbmRDb21taXRdID0gb25lQ29tbWl0
LnRpbWUoKSA8IGFub3RoZXJDb21taXQudGltZSgpID8gW29uZUNvbW1pdCwgYW5vdGhlckNvbW1p
dF0gOiBbYW5vdGhlckNvbW1pdCwgb25lQ29tbWl0XTsKKyAgICAgICAgICAgICAgICBjb21taXRS
YW5nZUJ5UmVwb3NpdG9yeS5zZXQocmVwb3NpdG9yeSwgW3N0YXJ0Q29tbWl0LCBlbmRDb21taXRd
KTsKKyAgICAgICAgICAgICAgICBmZXRjaGluZ1Byb21pc2VzLnB1c2goQ29tbWl0TG9nLmZldGNo
QmV0d2VlblJldmlzaW9ucyhyZXBvc2l0b3J5LCBzdGFydENvbW1pdC5yZXZpc2lvbigpLCBlbmRD
b21taXQucmV2aXNpb24oKSkudGhlbigoY29tbWl0cykgPT4geworICAgICAgICAgICAgICAgICAg
ICBhbGxDb21taXRzV2l0aENvbW1pdFRpbWUucHVzaChzdGFydENvbW1pdCwgLi4uY29tbWl0cyl9
KSk7CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUuYWRkKHJlcG9z
aXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmZXRjaGluZ1Byb21pc2VzLnB1c2goUHJvbWlzZS5hbGwoW0NvbW1pdExvZy5mZXRj
aEZvclNpbmdsZVJldmlzaW9uKHJlcG9zaXRvcnksIG9uZUNvbW1pdC5yZXZpc2lvbigpKSwKKyAg
ICAgICAgICAgICAgICBDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5
LCBhbm90aGVyQ29tbWl0LnJldmlzaW9uKCkpXSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAg
ICAgaWYgKCFvbmVDb21taXQuaGFzQ29tbWl0T3JkZXIoKSB8fCAhYW5vdGhlckNvbW1pdC5oYXND
b21taXRPcmRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgY29uc3QgW3N0YXJ0Q29tbWl0LCBlbmRDb21taXRdID0gb25lQ29tbWl0Lm9yZGVyKCkgPCBh
bm90aGVyQ29tbWl0Lm9yZGVyKCkgPyBbb25lQ29tbWl0LCBhbm90aGVyQ29tbWl0XSA6IFthbm90
aGVyQ29tbWl0LCBvbmVDb21taXRdOworICAgICAgICAgICAgICAgIGNvbW1pdFJhbmdlQnlSZXBv
c2l0b3J5LnNldChyZXBvc2l0b3J5LCBbc3RhcnRDb21taXQsIGVuZENvbW1pdF0pOworICAgICAg
ICAgICAgICAgIHJldHVybiBDb21taXRMb2cuZmV0Y2hCZXR3ZWVuUmV2aXNpb25zKHJlcG9zaXRv
cnksIHN0YXJ0Q29tbWl0LnJldmlzaW9uKCksIGVuZENvbW1pdC5yZXZpc2lvbigpKS50aGVuKChj
b21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4QnlDb21taXQgPSBu
ZXcgTWFwOworICAgICAgICAgICAgICAgICAgICBjb21taXRzID0gW3N0YXJ0Q29tbWl0LCAuLi5j
b21taXRzXTsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5mb3JFYWNoKChjb21taXQsIGlu
ZGV4KSA9PiBpbmRleEJ5Q29tbWl0LnNldChjb21taXQsIGluZGV4KSk7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeS5zZXQocmVwb3Np
dG9yeSwgaW5kZXhCeUNvbW1pdCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KSk7CisgICAgICAgIH0KKyAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZmV0Y2hpbmdQcm9taXNl
cyk7CisKKyAgICAgICAgaWYgKCFyZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZS5zaXplICYmICFp
bmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkuc2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgIGxldCBzb3J0ZWRDb21taXRTZXRzID0gTWlkZGxlQ29t
bWl0U2V0RmluZGVyLl9maWx0ZXJTb3J0QW5kVW5pcXVlQ29tbWl0U2V0cyhvbmVDb21taXRTZXQs
IGF2YWlsYWJsZUNvbW1pdFNldHMsIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5LCByZXBvc2l0b3Jp
ZXNXaXRoQ29tbWl0VGltZSwgWy4uLmluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3Np
dG9yeS5rZXlzKCldKTsKKyAgICAgICAgY29uc3Qgc29ydGVkQ29tbWl0U2V0c0xlbmd0aCA9IHNv
cnRlZENvbW1pdFNldHMubGVuZ3RoOworICAgICAgICBpZiAoc29ydGVkQ29tbWl0U2V0c0xlbmd0
aCA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoKG9uZUNvbW1pdFNldC5lcXVhbHMoc29ydGVkQ29tbWl0U2V0c1swXSkgJiYgYW5vdGhlckNv
bW1pdFNldC5lcXVhbHMoc29ydGVkQ29tbWl0U2V0c1tzb3J0ZWRDb21taXRTZXRzTGVuZ3RoIC0g
MV0pKQorICAgICAgICAgICAgfHwgKG9uZUNvbW1pdFNldC5lcXVhbHMoc29ydGVkQ29tbWl0U2V0
c1tzb3J0ZWRDb21taXRTZXRzTGVuZ3RoIC0gMV0pICYmIGFub3RoZXJDb21taXRTZXQuZXF1YWxz
KHNvcnRlZENvbW1pdFNldHNbMF0pKSk7CisKKyAgICAgICAgbGV0IHJlbWFpbmluZ0NvbW1pdFNl
dHMgPSBNaWRkbGVDb21taXRTZXRGaW5kZXIuX2ZpbmRDb21taXRTZXRzQ2xvc2VzdFRvTWlkZGxl
T2ZDb21taXRzV2l0aFRpbWUoc29ydGVkQ29tbWl0U2V0cy5zbGljZSgxLCAtMSksIHJlcG9zaXRv
cmllc1dpdGhDb21taXRUaW1lLCBhbGxDb21taXRzV2l0aENvbW1pdFRpbWUpOworICAgICAgICBy
ZW1haW5pbmdDb21taXRTZXRzID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLl9maW5kQ29tbWl0U2V0
c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhPcmRlcihyZW1haW5pbmdDb21taXRTZXRzLCBp
bmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkpOworICAgICAgICBpZiAoIXJl
bWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIHJldHVybiByZW1haW5pbmdDb21taXRTZXRzWzBdOworICAgIH0KKworICAgIHN0YXRpYyBf
ZmlsdGVyU29ydEFuZFVuaXF1ZUNvbW1pdFNldHMob25lQ29tbWl0U2V0RnJvbVRlc3RHcm91cCwg
YXZhaWxhYmxlQ29tbWl0U2V0cywgY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnksIHJlcG9zaXRvcmll
c1dpdGhDb21taXRUaW1lLCByZXBvc2l0b3J5V2l0aE9ubHlDb21taXRPcmRlcikgeworICAgICAg
ICBjb25zdCBjb21taXRTZXRzSW5SYW5nZSA9IGF2YWlsYWJsZUNvbW1pdFNldHMuZmlsdGVyKChj
b21taXRTZXQpID0+IHsKKyAgICAgICAgICAgIGlmICghY29tbWl0U2V0Lmhhc1NhbWVSZXBvc2l0
b3JpZXMob25lQ29tbWl0U2V0RnJvbVRlc3RHcm91cCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcmll
c1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0
U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjb21taXQuaGFzQ29tbWl0VGltZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0Q29tbWl0LCBlbmRDb21taXRdID0gY29t
bWl0UmFuZ2VCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGlm
IChzdGFydENvbW1pdC50aW1lKCkgPiBjb21taXQudGltZSgpIHx8IGVuZENvbW1pdC50aW1lKCkg
PCBjb21taXQudGltZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgcmVwb3NpdG9y
eVdpdGhPbmx5Q29tbWl0T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBj
b21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbW1pdC5oYXNDb21taXRPcmRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0Q29tbWl0LCBlbmRDb21taXRd
ID0gY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAg
ICAgIGlmIChzdGFydENvbW1pdC5vcmRlcigpID4gY29tbWl0Lm9yZGVyKCkgfHwgZW5kQ29tbWl0
Lm9yZGVyKCkgPCBjb21taXQub3JkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0p
OworCisgICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHMgPSBjb21taXRTZXRzSW5SYW5nZS5z
b3J0KChjb21taXRTZXQwLCBjb21taXRTZXQxKSA9PiB7CisgICAgICAgICAgICBmb3IgKGNvbnN0
IHJlcG9zaXRvcnkgb2YgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBjb21taXQwID0gY29tbWl0U2V0MC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdDEgPSBjb21taXRTZXQxLmNvbW1p
dEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdDAu
dGltZSgpID09PSBjb21taXQxLnRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdDAudGltZSgpIC0gY29tbWl0MS50aW1lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgcmVw
b3NpdG9yeVdpdGhPbmx5Q29tbWl0T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21t
aXQwID0gY29tbWl0U2V0MC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGNvbW1pdDEgPSBjb21taXRTZXQxLmNvbW1pdEZvclJlcG9zaXRvcnko
cmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdDAub3JkZXIoKSA9PT0gY29t
bWl0MS5vcmRlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29tbWl0MC5vcmRlcigpIC0gY29tbWl0MS5vcmRlcigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0
IHNvcnRlZFVuaXF1ZUNvbW1pdFNldHMgPSBbc29ydGVkQ29tbWl0U2V0c1swXV07CisgICAgICAg
IGZvciAobGV0IGkgPSAxOyBpIDwgc29ydGVkQ29tbWl0U2V0cy5sZW5ndGg7IGkgKz0gMSkgewor
ICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDb21taXRTZXQgPSBzb3J0ZWRDb21taXRTZXRzW2kg
LSAxXTsKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21taXRTZXQgPSBzb3J0ZWRDb21taXRT
ZXRzW2ldOworICAgICAgICAgICAgaWYgKCFwcmV2aW91c0NvbW1pdFNldC5lcXVhbHMoY3VycmVu
dENvbW1pdFNldCkpCisgICAgICAgICAgICAgICAgc29ydGVkVW5pcXVlQ29tbWl0U2V0cy5wdXNo
KGN1cnJlbnRDb21taXRTZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3J0ZWRVbmlx
dWVDb21taXRTZXRzOworICAgIH0KKworICAgIHN0YXRpYyBfZmluZENvbW1pdFNldHNDbG9zZXN0
VG9NaWRkbGVPZkNvbW1pdHNXaXRoVGltZShzb3J0ZWRDb21taXRTZXRzLCByZXBvc2l0b3JpZXNX
aXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgIGlmICgh
cmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUuc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBzb3J0
ZWRDb21taXRTZXRzOworCisgICAgICAgIGNvbnN0IGluZGV4QnlDb21taXRXaXRoVGltZSA9IG5l
dyBNYXA7CisgICAgICAgIGFsbENvbW1pdHNXaXRoQ29tbWl0VGltZS5zb3J0KChjb21taXQwLCBj
b21taXQxKSA9PiBjb21taXQwLnRpbWUoKSAtIGNvbW1pdDEudGltZSgpKQorICAgICAgICAgICAg
LmZvckVhY2goKGNvbW1pdCwgaW5kZXgpID0+IGluZGV4QnlDb21taXRXaXRoVGltZS5zZXQoY29t
bWl0LCBpbmRleCkpOworCisgICAgICAgIGNvbnN0IGNvbW1pdFdpdGhUaW1lVG9Db21taXRTZXRz
ID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcmll
c1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdFNldCBvZiBz
b3J0ZWRDb21taXRTZXRzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0
U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjb21taXRXaXRoVGltZVRvQ29tbWl0U2V0cy5oYXMoY29tbWl0KSkKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0V2l0aFRpbWVUb0NvbW1pdFNldHMuc2V0KGNvbW1pdCwgW10pOworICAgICAg
ICAgICAgICAgIGNvbW1pdFdpdGhUaW1lVG9Db21taXRTZXRzLmdldChjb21taXQpLnB1c2goY29t
bWl0U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGRlc2ly
ZWRDb21taXRJbmRleCA9IGluZGV4QnlDb21taXRXaXRoVGltZS5zaXplIC8gMjsKKyAgICAgICAg
bGV0IG1pbkNvbW1pdERpc3RhbmNlID0gaW5kZXhCeUNvbW1pdFdpdGhUaW1lLnNpemU7CisgICAg
ICAgIGxldCBjbG9zZXN0Q29tbWl0ID0gbnVsbDsKKyAgICAgICAgZm9yIChjb25zdCBjb21taXQg
b2YgY29tbWl0V2l0aFRpbWVUb0NvbW1pdFNldHMua2V5cygpKSB7CisgICAgICAgICAgICBjb25z
dCBpbmRleCA9IGluZGV4QnlDb21taXRXaXRoVGltZS5nZXQoY29tbWl0KTsKKyAgICAgICAgICAg
IGNvbnN0IGRpc3RhbmNlRm9yQ29tbWl0ID0gTWF0aC5hYnMoaW5kZXggLSBkZXNpcmVkQ29tbWl0
SW5kZXgpOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlRm9yQ29tbWl0IDwgbWluQ29tbWl0RGlz
dGFuY2UpIHsKKyAgICAgICAgICAgICAgICBtaW5Db21taXREaXN0YW5jZSA9IGRpc3RhbmNlRm9y
Q29tbWl0OworICAgICAgICAgICAgICAgIGNsb3Nlc3RDb21taXQgPSBjb21taXQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbW1pdFdpdGhUaW1lVG9Db21taXRT
ZXRzLmdldChjbG9zZXN0Q29tbWl0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgX2ZpbmRDb21taXRT
ZXRzQ2xvc2VzdFRvTWlkZGxlT2ZDb21taXRzV2l0aE9yZGVyKHJlbWFpbmluZ0NvbW1pdFNldHMs
IGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSkgeworICAgICAgICBpZiAo
IWluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeS5zaXplKQorICAgICAgICAg
ICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7CisKKyAgICAgICAgY29uc3QgY29tbWl0T25s
eU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRzID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25z
dCByZXBvc2l0b3J5IG9mIGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeS5r
ZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWl0U2V0IG9mIHJlbWFpbmluZ0Nv
bW1pdFNldHMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBjb21taXRTZXQuY29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1p
dE9ubHlPcmRlckF2YWlsYWJsZVRvQ29tbWl0U2V0cy5oYXMoY29tbWl0KSkKKyAgICAgICAgICAg
ICAgICAgICAgY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRzLnNldChjb21taXQs
IG5ldyBTZXQpOworICAgICAgICAgICAgICAgIGNvbW1pdE9ubHlPcmRlckF2YWlsYWJsZVRvQ29t
bWl0U2V0cy5nZXQoY29tbWl0KS5hZGQoY29tbWl0U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoY29uc3QgW3JlcG9zaXRvcnksIGluZGV4QnlDb21taXRdIG9m
IGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSkgeworICAgICAgICAgICAg
Y29uc3QgZGVzaXJlZENvbW1pdEluZGV4ID0gaW5kZXhCeUNvbW1pdC5zaXplIC8gMjsKKyAgICAg
ICAgICAgIGxldCBtaW5Db21taXREaXN0YW5jZSA9IGluZGV4QnlDb21taXQuc2l6ZTsKKyAgICAg
ICAgICAgIGxldCBjbG9zZXN0Q29tbWl0ID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
Y29tbWl0U2V0IG9mIHJlbWFpbmluZ0NvbW1pdFNldHMpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBjb21taXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4QnlDb21taXQuZ2V0KGNvbW1pdCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGb3JDb21taXQgPSBNYXRoLmFicyhpbmRleCAt
IGRlc2lyZWRDb21taXRJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlRm9yQ29t
bWl0IDwgbWluQ29tbWl0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluQ29tbWl0
RGlzdGFuY2UgPSBkaXN0YW5jZUZvckNvbW1pdDsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2Vz
dENvbW1pdCA9IGNvbW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb25zdCBjb21taXRTZXRzID0gY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21t
aXRTZXRzLmdldChjbG9zZXN0Q29tbWl0KTsKKyAgICAgICAgICAgIHJlbWFpbmluZ0NvbW1pdFNl
dHMgPSByZW1haW5pbmdDb21taXRTZXRzLmZpbHRlcigoY29tbWl0U2V0KSA9PiBjb21taXRTZXRz
Lmhhcyhjb21taXRTZXQpKTsKKyAgICAgICAgICAgIGlmICghcmVtYWluaW5nQ29tbWl0U2V0cy5s
ZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7CisgICAgfQorfQorCitp
ZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1bGUuZXhwb3J0cy5NaWRk
bGVDb21taXRTZXRGaW5kZXIgPSBNaWRkbGVDb21taXRTZXRGaW5kZXI7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMKaW5kZXggNmUyMjI4NTY4MTU4ZGRjMTM4
ODJjOGIzZDc3ZmFjNDRmOGJhOTJlOS4uNmJjYmY0OWE3OTlkMjMzZGQzMTg3MDI4ZGE2MzVhZGEx
Yzc2NjA0MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYW5hbHlzaXMtdGFzay5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9hbmFseXNpcy10YXNrLmpzCkBAIC0xNjcsNiArMTY3LDM3IEBAIGNsYXNz
IEFuYWx5c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0
ZWdvcnk7CiAgICAgfQogCisgICAgYXN5bmMgbWlkZGxlQ29tbWl0U2V0Rm9yVGVzdEdyb3VwKHRl
c3RHcm91cCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRlc3RHcm91cC50YXNrKCkg
PT0gdGhpcyk7CisKKyAgICAgICAgY29uc3QgYXZhaWxhYmxlQ29tbWl0U2V0cyA9IGF3YWl0IHRo
aXMuYWdncmVnYXRlQ29tbWl0U2V0cygpOworICAgICAgICByZXR1cm4gYXdhaXQgTWlkZGxlQ29t
bWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0cyh0ZXN0R3Jv
dXAucmVxdWVzdGVkQ29tbWl0U2V0cygpLCBhdmFpbGFibGVDb21taXRTZXRzKTsKKyAgICB9CisK
KyAgICBhc3luYyBhZ2dyZWdhdGVDb21taXRTZXRzKCkKKyAgICB7CisgICAgICAgIGNvbnN0IGFs
bFRlc3RHcm91cHNJblRhc2sgPSBhd2FpdCBUZXN0R3JvdXAuZmV0Y2hGb3JUYXNrKHRoaXMuaWQo
KSk7CisgICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHNJblRhc2sgPSBuZXcgU2V0OworICAgICAg
ICBmb3IgKGNvbnN0IGdyb3VwIG9mIGFsbFRlc3RHcm91cHNJblRhc2spCisgICAgICAgICAgICBn
cm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCkuZm9yRWFjaCgoY29tbWl0U2V0KSA9PiBhbGxDb21t
aXRTZXRzSW5UYXNrLmFkZChjb21taXRTZXQpKTsKKworICAgICAgICBjb25zdCBwbGF0Zm9ybSA9
IHRoaXMucGxhdGZvcm0oKTsKKyAgICAgICAgY29uc3QgbWV0cmljID0gdGhpcy5tZXRyaWMoKTsK
KyAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVkKG1ldHJp
Yyk7CisgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNl
dChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYXdh
aXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRoaXMuc3RhcnRUaW1lKCksIHRoaXMuZW5k
VGltZSgpKTsKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRTZXQuZmV0Y2hlZFRp
bWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjb25zdCBzdGFydFBv
aW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElkKCkpOworICAgICAg
ICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1lYXN1cmVtZW50SWQo
KSk7CisKKyAgICAgICAgY29uc3QgdGltZVNlcmllc1ZpZXcgPSBzZXJpZXMudmlld0JldHdlZW5Q
b2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9m
IHRpbWVTZXJpZXNWaWV3KQorICAgICAgICAgICAgYWxsQ29tbWl0U2V0c0luVGFzay5hZGQocG9p
bnQuY29tbWl0U2V0KCkpOworCisgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFsbENvbW1pdFNl
dHNJblRhc2spOworICAgIH0KKwogICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBbCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAyYzRiNDlmMmZmZDQ3OTk0NjRiMjgzMDEx
ZjZmYTYyNDNiZjM4Y2ZkLi41MDE3OTYzNGI0YmJlNzRhZjU4N2Q3MmM5NDQ1MmQ4NDhmOTQ3OTIy
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL2NvbW1pdC1sb2cuanMKQEAgLTI5LDEwICsyOSwxMyBAQCBjbGFzcyBDb21taXRMb2cgZXh0
ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5tZXNzYWdl
ID0gcmF3RGF0YS5tZXNzYWdlOwogICAgICAgICBpZiAocmF3RGF0YS5vd25zQ29tbWl0cykKICAg
ICAgICAgICAgIHRoaXMuX3Jhd0RhdGEub3duc0NvbW1pdHMgPSByYXdEYXRhLm93bnNDb21taXRz
OworICAgICAgICBpZiAocmF3RGF0YS5vcmRlcikKKyAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGEu
b3JkZXIgPSByYXdEYXRhLm9yZGVyOwogICAgIH0KIAogICAgIHJlcG9zaXRvcnkoKSB7IHJldHVy
biB0aGlzLl9yZXBvc2l0b3J5OyB9CiAgICAgdGltZSgpIHsgcmV0dXJuIG5ldyBEYXRlKHRoaXMu
X3Jhd0RhdGFbJ3RpbWUnXSk7IH0KKyAgICBoYXNDb21taXRUaW1lKCkgeyByZXR1cm4gdGhpcy5f
cmF3RGF0YVsndGltZSddID4gMCAmJiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gIT09IG51bGwgJiYg
dGhpcy5fcmF3RGF0YVsndGltZSddICE9PSB1bmRlZmluZWQ7IH0KICAgICBhdXRob3IoKSB7IHJl
dHVybiB0aGlzLl9yYXdEYXRhWydhdXRob3JOYW1lJ107IH0KICAgICByZXZpc2lvbigpIHsgcmV0
dXJuIHRoaXMuX3Jhd0RhdGFbJ3JldmlzaW9uJ107IH0KICAgICBtZXNzYWdlKCkgeyByZXR1cm4g
dGhpcy5fcmF3RGF0YVsnbWVzc2FnZSddOyB9CkBAIC00MCw2ICs0Myw4IEBAIGNsYXNzIENvbW1p
dExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgb3duc0NvbW1pdHMoKSB7IHJldHVy
biB0aGlzLl9yYXdEYXRhWydvd25zQ29tbWl0cyddOyB9CiAgICAgb3duZWRDb21taXRzKCkgeyBy
ZXR1cm4gdGhpcy5fb3duZWRDb21taXRzOyB9CiAgICAgb3duZXJDb21taXQoKSB7IHJldHVybiB0
aGlzLl9vd25lckNvbW1pdDsgfQorICAgIGhhc0NvbW1pdE9yZGVyKCkgeyByZXR1cm4gdGhpcy5f
cmF3RGF0YVsnb3JkZXInXSAhPT0gbnVsbCAmJiB0aGlzLl9yYXdEYXRhWydvcmRlciddICE9PSB1
bmRlZmluZWQ7IH0KKyAgICBvcmRlcigpIHsgcmV0dXJuICt0aGlzLl9yYXdEYXRhWydvcmRlcidd
OyB9CiAKICAgICBzZXRPd25lckNvbW1pdHMob3duZXJDb21taXQpIHsgdGhpcy5fb3duZXJDb21t
aXQgPSBvd25lckNvbW1pdDsgfQogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwppbmRleCBlMWJiY2ZkMWQwMjA2MzIy
NTVlM2ZmMDIzMWQwY2UzZGI1Yjc1N2E4Li42ZjE0ZWE0NWJkOGZlYjkwYmNmODhjZGZlNTc3ODA3
NjgyYmNiYTU4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQ29tbWl0
U2V0IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBvd25lckNvbW1pdEZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0T3duZXJNYXAu
Z2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgdG9wTGV2ZWxSZXBvc2l0b3JpZXMoKSB7IHJldHVybiBS
ZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwodGhpcy5fcmVwb3NpdG9y
aWVzLmZpbHRlcigocmVwb3NpdG9yeSkgPT4gIXRoaXMub3duZXJSZXZpc2lvbkZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkpKTsgfQogICAgIG93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3NpdG9yeVRvT3duZWRSZXBv
c2l0b3JpZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9Ci0gICAgY29tbWl0Rm9yUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9z
aXRvcnkpOyB9CiAKICAgICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKICAgICB7
CkBAIC0xMjAsNiArMTE5LDEyIEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9i
amVjdCB7CiAgICAgICAgIHJldHVybiBDb21taXRTZXQuYXJlQ3VzdG9tUm9vdHNFcXVhbCh0aGlz
Ll9jdXN0b21Sb290cywgb3RoZXIuX2N1c3RvbVJvb3RzKTsKICAgICB9CiAKKyAgICBoYXNTYW1l
UmVwb3NpdG9yaWVzKGNvbW1pdFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21taXRTZXQu
cmVwb3NpdG9yaWVzKCkubGVuZ3RoID09PSB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuc2l6
ZSAmJgorICAgICAgICAgICAgY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmV2ZXJ5KChyZXBvc2l0
b3J5KSA9PiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuaGFzKHJlcG9zaXRvcnkpKTsKKyAg
ICB9CisKICAgICBzdGF0aWMgYXJlQ3VzdG9tUm9vdHNFcXVhbChjdXN0b21Sb290czEsIGN1c3Rv
bVJvb3RzMikKICAgICB7CiAgICAgICAgIGlmIChjdXN0b21Sb290czEubGVuZ3RoICE9IGN1c3Rv
bVJvb3RzMi5sZW5ndGgpCkBAIC0xNDYsNiArMTUxLDIyIEBAIGNsYXNzIENvbW1pdFNldCBleHRl
bmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAg
ICBjb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuYWxsUm9vdEZpbGVzKCkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHRoaXMucmVwb3NpdG9yaWVzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLm93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLm93bmVk
UmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMucGF0Y2hGb3JSZXBvc2l0b3J5
KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdGF0aWMgY3JlYXRlTmFtZVdpdGhv
dXRDb2xsaXNpb24obmFtZSwgZXhpc3RpbmdOYW1lU2V0KQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoZXhpc3RpbmdOYW1lU2V0IGluc3RhbmNlb2YgU2V0KTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzCmlu
ZGV4IDJkYTYyMjA5Y2YzOWM3M2RiZjRjM2JjMmNhY2I0YmRiZDc2MWY2NTYuLmU4MjE2NzBhZGYx
NTQwZTNjZTNiNWMxYzY0NTk3NzU2NmFlYzBhMGQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcwpAQCAtMTQsNyAr
MTQsNyBAQCBjbGFzcyBUZXN0R3JvdXAgZXh0ZW5kcyBMYWJlbGVkT2JqZWN0IHsKICAgICAgICAg
ICAgIHJldHVybiBidWlsZFJlcXVlc3RzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIoKSAtIGIub3Jk
ZXIoKSk7CiAgICAgICAgIH0pOwogICAgICAgICB0aGlzLl9yZXBvc2l0b3JpZXMgPSBudWxsOwot
ICAgICAgICB0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseSA9IG5ldyBMYXpp
bHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cy5iaW5k
KHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHNMYXppbHkg
PSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24oVGVzdEdyb3VwLl9jb21wdXRlUmVxdWVzdGVk
Q29tbWl0U2V0cyk7CiAgICAgICAgIHRoaXMuX3JlcXVlc3RlZENvbW1pdFNldHMgPSBudWxsOwog
ICAgICAgICB0aGlzLl9jb21taXRTZXRUb0xhYmVsID0gbmV3IE1hcDsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoIW9iamVjdC5wbGF0Zm9ybSB8fCBvYmplY3QucGxhdGZvcm0gaW5zdGFuY2VvZiBQ
bGF0Zm9ybSk7CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFRlc3RHcm91cCBleHRlbmRzIExhYmVs
ZWRPYmplY3QgewogICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNl
dHNMYXppbHkuZXZhbHVhdGUoLi4udGhpcy5fb3JkZXJlZEJ1aWxkUmVxdWVzdHMoKSk7CiAgICAg
fQogCi0gICAgX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKC4uLm9yZGVyZWRCdWlsZFJlcXVl
c3RzKQorICAgIHN0YXRpYyBfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMoLi4ub3JkZXJlZEJ1
aWxkUmVxdWVzdHMpCiAgICAgewogICAgICAgICBjb25zdCByZXF1ZXN0ZWRDb21taXRTZXRzID0g
W107CiAgICAgICAgIGNvbnN0IGNvbW1pdFNldExhYmVsTWFwID0gbmV3IE1hcDsKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFz
ay1wYWdlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFs
eXNpcy10YXNrLXBhZ2UuanMKaW5kZXggMDJjZmFhMDczZDFmNGNjNGE4ZTBkMmU2MTZjNGM3ZDNk
ZDVkY2JjYy4uZTQ5NzM3MjIzMjE4MDE2OGI0YTU3MWQwMTBmYzFhNGNjZjc3ODRiMCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10
YXNrLXBhZ2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9hbmFseXNpcy10YXNrLXBhZ2UuanMKQEAgLTI1OCw2ICsyNTgsNyBAQCBjbGFzcyBBbmFseXNp
c1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgIHRoaXMu
X3JlbmRlckN1cnJlbnRUZXN0R3JvdXBMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rp
b24odGhpcy5fcmVuZGVyQ3VycmVudFRlc3RHcm91cC5iaW5kKHRoaXMpKTsKICAgICAgICAgdGhp
cy5fdGVzdEdyb3VwTWFwID0gbmV3IE1hcDsKICAgICAgICAgdGhpcy5fdGVzdEdyb3VwcyA9IFtd
OworICAgICAgICB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cCA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAgPSBudWxsOwogICAgICAgICB0aGlzLl9zaG93SGlk
ZGVuR3JvdXBzID0gZmFsc2U7CiAgICAgfQpAQCAtMjY4LDEwICsyNjksMjUgQEAgY2xhc3MgQW5h
bHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICB0
aGlzLnBhcnQoJ3JldHJ5LWZvcm0nKS5saXN0ZW5Ub0FjdGlvbignc3RhcnRUZXN0aW5nJywgKHJl
cGV0aXRpb25Db3VudCkgPT4gewogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbigncmV0
cnlUZXN0R3JvdXAnLCB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpOwog
ICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLmxpc3RlblRvQWN0
aW9uKCdzdGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CisgICAgICAgICAgICBj
b25zdCBtaWRkbGVDb21taXRTZXQgPSB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cC5n
ZXQodGhpcy5fY3VycmVudFRlc3RHcm91cCk7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoQWN0
aW9uKCdhbmFseXplVGVzdEdyb3VwJywgdGhpcy5fY3VycmVudFRlc3RHcm91cCwgbWlkZGxlQ29t
bWl0U2V0LCByZXBldGl0aW9uQ291bnQpOworICAgICAgICB9KTsKICAgICB9CiAKLSAgICBzZXRU
ZXN0R3JvdXBzKHRlc3RHcm91cHMsIGN1cnJlbnRUZXN0R3JvdXAsIHNob3dIaWRkZW5Hcm91cHMp
CisgICAgYXN5bmMgc2V0VGVzdEdyb3Vwcyh0ZXN0R3JvdXBzLCBjdXJyZW50VGVzdEdyb3VwLCBz
aG93SGlkZGVuR3JvdXBzKQogICAgIHsKKyAgICAgICAgY29uc3QgdGVzdEdyb3VwSWRTZXQgPSBu
ZXcgU2V0KHRlc3RHcm91cHMubWFwKCh0ZXN0R3JvdXApID0+IHRlc3RHcm91cC5pZCgpKSk7Cisg
ICAgICAgIGNvbnN0IHNhbWVUZXN0R3JvdXBzID0gdGhpcy5fdGVzdEdyb3Vwcy5sZW5ndGggPT09
IHRlc3RHcm91cHMubGVuZ3RoICYmIHRoaXMuX3Rlc3RHcm91cHMuZXZlcnkoKHRlc3RHcm91cCkg
PT4gdGVzdEdyb3VwSWRTZXQuaGFzKHRlc3RHcm91cC5pZCgpKSk7CisgICAgICAgIGlmICghc2Ft
ZVRlc3RHcm91cHMpIHsKKyAgICAgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdy
b3VwID0gbmV3IE1hcDsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZXMgPSB0ZXN0
R3JvdXBzLm1hcCgodGVzdEdyb3VwKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RH
cm91cC50YXNrKCkubWlkZGxlQ29tbWl0U2V0Rm9yVGVzdEdyb3VwKHRlc3RHcm91cCkudGhlbigo
bWlkZGxlQ29tbWl0U2V0KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21pZGRsZUNv
bW1pdFNldEJ5VGVzdEdyb3VwLnNldCh0ZXN0R3JvdXAsIG1pZGRsZUNvbW1pdFNldCk7CisgICAg
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXdhaXQgUHJvbWlz
ZS5hbGwoZmV0Y2hpbmdQcm9taXNlcyk7CisgICAgICAgIH0KICAgICAgICAgdGhpcy5fdGVzdEdy
b3VwcyA9IHRlc3RHcm91cHM7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAgPSBjdXJy
ZW50VGVzdEdyb3VwOwogICAgICAgICB0aGlzLl9zaG93SGlkZGVuR3JvdXBzID0gc2hvd0hpZGRl
bkdyb3VwczsKQEAgLTMzNyw5ICszNTMsMTIgQEAgY2xhc3MgQW5hbHlzaXNUYXNrVGVzdEdyb3Vw
UGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBpZiAoY3VycmVudEdyb3VwKQog
ICAgICAgICAgICAgdGhpcy5fdGVzdEdyb3VwTWFwLmdldChjdXJyZW50R3JvdXApLmxpc3RJdGVt
LmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkK
KyAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkgewogICAgICAgICAgICAgdGhpcy5wYXJ0KCdyZXRy
eS1mb3JtJykuc2V0UmVwZXRpdGlvbkNvdW50KGN1cnJlbnRHcm91cC5yZXBldGl0aW9uQ291bnQo
KSk7CisgICAgICAgICAgICB0aGlzLnBhcnQoJ2Jpc2VjdC1mb3JtJykuc2V0UmVwZXRpdGlvbkNv
dW50KGN1cnJlbnRHcm91cC5yZXBldGl0aW9uQ291bnQoKSk7CisgICAgICAgIH0KICAgICAgICAg
dGhpcy5jb250ZW50KCdyZXRyeS1mb3JtJykuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRHcm91cCA/
IG51bGwgOiAnbm9uZSc7CisgICAgICAgIHRoaXMuY29udGVudCgnYmlzZWN0LWZvcm0nKS5zdHls
ZS5kaXNwbGF5ID0gY3VycmVudEdyb3VwICYmIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdy
b3VwLmdldChjdXJyZW50R3JvdXApID8gbnVsbCA6ICdub25lJzsKIAogICAgICAgICBjb25zdCBo
aWRlQnV0dG9uID0gdGhpcy5jb250ZW50KCdoaWRlLWJ1dHRvbicpOwogICAgICAgICBoaWRlQnV0
dG9uLnRleHRDb250ZW50ID0gY3VycmVudEdyb3VwICYmIGN1cnJlbnRHcm91cC5pc0hpZGRlbigp
ID8gJ1VuaGlkZScgOiAnSGlkZSc7CkBAIC0zNTYsNiArMzc1LDcgQEAgY2xhc3MgQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAg
IDx0ZXN0LWdyb3VwLXJlc3VsdHMtdmlld2VyIGlkPSJyZXN1bHRzLXZpZXdlciI+PC90ZXN0LWdy
b3VwLXJlc3VsdHMtdmlld2VyPgogICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJldmlzaW9u
LXRhYmxlIGlkPSJyZXZpc2lvbi10YWJsZSI+PC90ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlPgog
ICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLWZvcm0gaWQ9InJldHJ5LWZvcm0iPlJldHJ5PC90
ZXN0LWdyb3VwLWZvcm0+CisgICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtZm9ybSBpZD0iYmlz
ZWN0LWZvcm0iPkJpc2VjdDwvdGVzdC1ncm91cC1mb3JtPgogICAgICAgICAgICAgICAgIDxidXR0
b24gaWQ9ImhpZGUtYnV0dG9uIj5IaWRlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgPHNwYW4g
aWQ9InBlbmRpbmctcmVxdWVzdC1jYW5jZWwtd2FybmluZyI+KGNhbmNlbHMgcGVuZGluZyByZXF1
ZXN0cyk8L3NwYW4+CiAgICAgICAgICAgICA8L2Rpdj5gOwpAQCAtNDIzLDcgKzQ0Myw3IEBAIGNs
YXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAg
ICAgICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICNy
ZXRyeS1mb3JtIHsKKyAgICAgICAgICAgICNyZXRyeS1mb3JtLCAjYmlzZWN0LWZvcm0gewogICAg
ICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICAgICAgIG1hcmdpbjogMC41
cmVtOwogICAgICAgICAgICAgfQpAQCAtNTA5LDYgKzUyOSw3IEBAIGNsYXNzIEFuYWx5c2lzVGFz
a1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICBncm91cFBhbmUubGlzdGVu
VG9BY3Rpb24oJ3JlbmFtZVRlc3RHcm91cCcsICh0ZXN0R3JvdXAsIG5ld05hbWUpID0+IHRoaXMu
X3VwZGF0ZVRlc3RHcm91cE5hbWUodGVzdEdyb3VwLCBuZXdOYW1lKSk7CiAgICAgICAgIGdyb3Vw
UGFuZS5saXN0ZW5Ub0FjdGlvbigndG9nZ2xlVGVzdEdyb3VwVmlzaWJpbGl0eScsICh0ZXN0R3Jv
dXApID0+IHRoaXMuX2hpZGVDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCkpOwogICAgICAgICBn
cm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ3JldHJ5VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgcmVw
ZXRpdGlvbkNvdW50KSA9PiB0aGlzLl9yZXRyeUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCBy
ZXBldGl0aW9uQ291bnQpKTsKKyAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRvQWN0aW9uKCdhbmFs
eXplVGVzdEdyb3VwJywgKHRlc3RHcm91cCwgbWlkZGxlQ29tbWl0U2V0LCByZXBldGl0aW9uQ291
bnQpID0+IHRoaXMuX2FuYWx5emVDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgbWlkZGxlQ29t
bWl0U2V0LCByZXBldGl0aW9uQ291bnQpKTsKIAogICAgICAgICB0aGlzLnBhcnQoJ2NhdXNlLWxp
c3QnKS5saXN0ZW5Ub0FjdGlvbignYWRkSXRlbScsIChyZXBvc2l0b3J5LCByZXZpc2lvbikgPT4g
ewogICAgICAgICAgICAgdGhpcy5fYXNzb2NpYXRlQ29tbWl0KCdjYXVzZScsIHJlcG9zaXRvcnks
IHJldmlzaW9uKTsKQEAgLTU3Nyw3ICs1OTgsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4
dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsK
ICAgICB9CiAKLSAgICBfZGlkRmV0Y2hUZXN0R3JvdXBzKHRlc3RHcm91cHMpCisgICAgYXN5bmMg
X2RpZEZldGNoVGVzdEdyb3Vwcyh0ZXN0R3JvdXBzKQogICAgIHsKICAgICAgICAgdGhpcy5fdGVz
dEdyb3VwcyA9IHRlc3RHcm91cHMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gK2EuY3Jl
YXRlZEF0KCkgLSBiLmNyZWF0ZWRBdCgpOyB9KTsKICAgICAgICAgdGhpcy5fZGlkVXBkYXRlVGVz
dEdyb3VwSGlkZGVuU3RhdGUoKTsKQEAgLTc5Myw3ICs4MTQsMjcgQEAgY2xhc3MgQW5hbHlzaXNU
YXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAgICAgICAudGhlbih0aGlz
Ll9kaWRGZXRjaFRlc3RHcm91cHMuYmluZCh0aGlzKSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAg
ICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJy
b3IpOwogICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVRlc3RHcm91cEFm
dGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlzdChuZXdOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1p
dFNldE1hcCk7CisgICAgfQorCisgICAgYXN5bmMgX2FuYWx5emVDdXJyZW50VGVzdEdyb3VwKHRl
c3RHcm91cCwgbWlkZGxlQ29tbWl0U2V0LCByZXBldGl0aW9uQ291bnQpCisgICAgeworICAgICAg
ICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXNrKTsKKyAgICAgICAgY29uc3QgW29uZUNvbW1pdFNl
dCwgYW5vdGhlckNvbW1pdFNldF0gPSB0ZXN0R3JvdXAucmVxdWVzdGVkQ29tbWl0U2V0cygpOwor
ICAgICAgICBjb25zdCBjb21taXRTZXRzID0gW29uZUNvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0
LCBhbm90aGVyQ29tbWl0U2V0XTsKKyAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLl90YXNr
LnBsYXRmb3JtKCkgfHwgdGVzdEdyb3VwLnBsYXRmb3JtKCk7CisgICAgICAgIGNvbnN0IGV4aXN0
aW5nVGVzdEdyb3VwTmFtZXMgPSBuZXcgU2V0KCh0aGlzLl90ZXN0R3JvdXBzIHx8IFtdKS5tYXAo
KHRlc3RHcm91cCkgPT4gdGVzdEdyb3VwLm5hbWUoKSkpOworCisgICAgICAgIGZvciAobGV0IGkg
PSAxOyBpIDwgY29tbWl0U2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY29uc3QgcHJl
dmlvdXNDb21taXRTZXQgPSBjb21taXRTZXRzW2kgLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IGN1
cnJlbnRDb21taXRTZXQgPSBjb21taXRTZXRzW2ldOworICAgICAgICAgICAgY29uc3QgdGVzdEdy
b3VwTmFtZSA9IENvbW1pdFNldC5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lvbihDb21taXRTZXQu
ZGlmZihwcmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1pdFNldCksIGV4aXN0aW5nVGVzdEdy
b3VwTmFtZXMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zdCB0ZXN0
R3JvdXBzID0gIGF3YWl0IFRlc3RHcm91cC5jcmVhdGVXaXRoQ3VzdG9tQ29uZmlndXJhdGlvbih0
aGlzLl90YXNrLCBwbGF0Zm9ybSwgdGVzdEdyb3VwLnRlc3QoKSwgdGVzdEdyb3VwTmFtZSwgcmVw
ZXRpdGlvbkNvdW50LCBbcHJldmlvdXNDb21taXRTZXQsIGN1cnJlbnRDb21taXRTZXRdKTsKKyAg
ICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHModGVzdEdyb3Vwcyk7
CisgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYWxlcnQoJ0Zh
aWxlZCB0byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIF9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWlu
Z0NvbW1pdFNldExpc3QodGVzdEdyb3VwTmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRN
YXApCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9k
ZWxzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwpp
bmRleCBkMGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZjLi41ZTBlZjA4YjQ4
NjM2MDJiNjhhZDBhOTAxZDVmMzg4Y2E2ZjgxNTQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKQEAgLTM3LDUgKzM3LDYgQEAgaW1wb3J0RnJv
bVYzKCdtb2RlbHMvdXBsb2FkZWQtZmlsZS5qcycsICdVcGxvYWRlZEZpbGUnKTsKIGltcG9ydEZy
b21WMygncHJpdmlsZWdlZC1hcGkuanMnLCAnUHJpdmlsZWdlZEFQSScpOwogaW1wb3J0RnJvbVYz
KCdpbnN0cnVtZW50YXRpb24uanMnLCAnSW5zdHJ1bWVudGF0aW9uJyk7CiBpbXBvcnRGcm9tVjMo
J2xhemlseS1ldmFsdWF0ZWQtZnVuY3Rpb24uanMnLCAnTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24n
KTsKK2ltcG9ydEZyb21WMygnbWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLmpzJywgJ01pZGRsZUNv
bW1pdFNldEZpbmRlcicpOwogCiBnbG9iYWwuU3RhdGlzdGljcyA9IHJlcXVpcmUoJy4uLy4uL3B1
YmxpYy9zaGFyZWQvc3RhdGlzdGljcy5qcycpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggZTNiZmI2MDU3
Y2NlZDFkZTY0MGU1OTRlNzBhMDRmMWE0ZDZlZjBhZS4uNWUxN2I1OTQ0MGYwZjA0NTExMmM0Y2Mw
YjE4NzRkZTNjYjc5MDJhMiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Vu
aXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0zMjgsNiArMzI4LDQzIEBAIGRl
c2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgICAgIH0pOwogICAgIH0pOwogCisgICAg
ZGVzY3JpYmUoJ2NvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCcsICgpID0+IHsKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgY29tbWl0IGRvZXMgbm90IGNvbnRhaW4gcm9v
dCwgcGF0Y2ggb3Igb3duZWQgY29tbWl0JywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9r
KCFvbmVDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAg
ICAgICAgICBhc3NlcnQub2soIWFub3RoZXJDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9y
T3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhBbm90
aGVyV2ViS2l0Q29tbWl0KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAg
ICAgICAgICAgYXNzZXJ0Lm9rKCFjb21taXRTZXRXaXRoU1ZOQ29tbWl0KCkuY29udGFpbnNSb290
UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90aGVyQ29t
bWl0U2V0V2l0aFNWTkNvbW1pdCgpLmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsK
KyAgICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0V2l0aEdpdENvbW1pdCgpLmNvbnRhaW5z
Um9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayghYW5vdGhl
ckNvbW1pdFNldFdpdGhHaXRDb21taXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQo
KSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29u
dGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFh
bm90aGVyQ29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRD
b21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIW9uZU1lYXN1cmVtZW50Q29tbWl0U2V0
KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGlmIGNvbW1pdCBjb250YWlucyByb290LCBwYXRj
aCBvciBvd25lZCBjb21taXQnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0
U2V0V2l0aFBhdGNoKCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAg
ICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhBbm90aGVyUGF0Y2goKS5jb250YWluc1Jvb3RQ
YXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0V2l0
aFJvb3QoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBh
c3NlcnQub2soYW5vdGhlckNvbW1pdFNldFdpdGhSb290KCkuY29udGFpbnNSb290UGF0Y2hPck93
bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhUd29Sb290
cygpLmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2Vy
dC5vayhjb21taXRTZXRXaXRoQW5vdGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpLmNvbnRhaW5zUm9v
dFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNj
cmliZSgnaGFzU2FtZVJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gdHJ1ZSBpZiB0d28gY29tbWl0IHNldHMgaGF2ZSBzYW1lIHJlcG9zaXRvcmllcycsICgp
ID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNTYW1lUmVwb3Np
dG9yaWVzKGFub3RoZXJDb21taXRTZXQoKSkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1p
dFNldFdpdGhHaXRDb21taXQoKS5oYXNTYW1lUmVwb3NpdG9yaWVzKGFub3RoZXJDb21taXRTZXRX
aXRoR2l0Q29tbWl0KCkpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5o
YXNTYW1lUmVwb3NpdG9yaWVzKG9uZUNvbW1pdFNldCgpKSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHR3byBjb21taXQgc2V0cyBoYXZlIGRpZmZl
cmVuIHJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghY29tbWl0
U2V0V2l0aEdpdENvbW1pdCgpLmhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0V2l0aFNWTkNv
bW1pdCgpKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRz
KCkuaGFzU2FtZVJlcG9zaXRvcmllcyhjb21taXRTZXRXaXRoR2l0Q29tbWl0KCkpKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKICAgICBkZXNjcmliZSgnZGlmZicsICAoKSA9PiB7CiAgICAgICAg
IGl0KCdzaG91bGQgZGVzY3JpYmUgcGF0Y2ggZGlmZmVyZW5jZScsICgpID0+IHsKICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChDb21taXRTZXQuZGlmZihjb21taXRTZXRXaXRoUGF0Y2goKSwgY29t
bWl0U2V0V2l0aEFub3RoZXJQYXRjaCgpKSwgJ1dlYktpdDogcGF0Y2guZGF0IC0gcGF0Y2guZGF0
ICgyKScpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMv
bWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvbWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLXRlc3RzLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhmNTVkZWM5OTYzNjUzZDRlMTYzODQ4YjNmZmFhODIzNWM2Njk1YWMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9taWRkbGUtY29tbWl0
LXNldC1maW5kZXItdGVzdHMuanMKQEAgLTAsMCArMSw1OTggQEAKKyd1c2Ugc3RyaWN0JzsKKwor
Y29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7CisKK3JlcXVpcmUoJy4uL3Rvb2xzL2pz
L3YzLW1vZGVscy5qcycpOworbGV0IE1vY2tNb2RlbHMgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9t
b2NrLXYzLW1vZGVscy5qcycpLk1vY2tNb2RlbHM7CitsZXQgTW9ja1JlbW90ZUFQSSA9IHJlcXVp
cmUoJy4vcmVzb3VyY2VzL21vY2stcmVtb3RlLWFwaS5qcycpLk1vY2tSZW1vdGVBUEk7CisKK2Rl
c2NyaWJlKCdNaWRkbGVDb21taXRTZXRGaW5kZXInLCAoKSA9PiB7CisKKyAgICBmdW5jdGlvbiBt
YWtlQ29tbWl0KGlkLCByZXBvc2l0b3J5LCByZXZpc2lvbiwgdGltZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKGlkLCB7CisgICAgICAgICAgICByZXBv
c2l0b3J5LAorICAgICAgICAgICAgcmV2aXNpb24sCisgICAgICAgICAgICBvd25zQ29tbWl0czog
ZmFsc2UsCisgICAgICAgICAgICB0aW1lCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHNvcnRlZENvbW1pdFNldHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAg
ICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMSwgeworICAgICAgICAgICAgICAgIHJldmlz
aW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwg
TW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCksIHJlcXVpcmVzQnVpbGQ6
IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExLCBN
b2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwK
KyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMiwgeworICAgICAgICAgICAg
ICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VD
b21taXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCksIHJlcXVp
cmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29t
bWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIxKSwgcmVxdWlyZXNCdWls
ZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9v
dHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDMsIHsKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0yJywg
MjApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1p
dDogbWFrZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJl
cXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
IGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRv
big0LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAg
ICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgzLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1j
b21taXQtMycsIDMwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0z
JywgMzEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1
cmVTaW5nbGV0b24oNSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAg
ICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJraXQs
ICd3ZWJraXQtY29tbWl0LTYnLCA2MCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29z
eC1jb21taXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgIF07CisgICAg
fQorCisgICAgZnVuY3Rpb24gc29ydGVkQ29tbWl0U2V0c1dpdGhvdXRUaW1lT3JPcmRlcigpCisg
ICAgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmds
ZXRvbig2LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAg
ICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Vi
a2l0LWNvbW1pdC0xMDEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTExLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1j
b21taXQtMTExJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBd
LAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0
U2V0LmVuc3VyZVNpbmdsZXRvbig3LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczog
WworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDEsIE1vY2tNb2Rl
bHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2Ug
fSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEyLCBNb2NrTW9k
ZWxzLm9zeCwgJ29zeC1jb21taXQtMTEyJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAg
ICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig4LCB7CisgICAgICAgICAgICAgICAg
cmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1p
dCgxMDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDInLCAwKSwgcmVxdWly
ZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21t
aXQoMTEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEyJywgMCksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJv
b3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig5LCB7Cisg
ICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNv
bW1pdDogbWFrZUNvbW1pdCgxMDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0x
MDMnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMTEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEzJywg
MCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNp
bmdsZXRvbigxMCwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTA2LCBNb2NrTW9kZWxzLndlYmtpdCwg
J3dlYmtpdC1jb21taXQtMTA2JywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExMywgTW9ja01vZGVscy5vc3gsICdv
c3gtY29tbWl0LTExMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgXTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoU29tZUNvbW1pdHNPbmx5SGF2ZU9yZGVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJl
U2luZ2xldG9uKDExLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAg
ICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwg
J3dlYmtpdC1jb21taXQtMScsIDEwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAnb3N4
LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMSwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnks
ICdvd25lci1jb21taXQtMScsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAg
IENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lv
bkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1v
Y2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMTApLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMiwgTW9j
a01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0s
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMiwgTW9ja01vZGVs
cy5vd25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMicsIDApLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czog
W119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTMsIHsKKyAgICAg
ICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0
OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0yJywgMjAp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJlcXVp
cmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29t
bWl0KDIwMiwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMicsIDAp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMTQsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Vi
a2l0LWNvbW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAg
ICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gsICdvc3gtY29t
bWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAg
IHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMiwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdv
d25lci1jb21taXQtMicsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENv
bW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTUsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0
ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01v
ZGVscy5vc3gsICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisg
ICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMywgTW9ja01vZGVscy5v
d25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119
KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAg
ICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBt
YWtlQ29tbWl0KDYsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC02JywgNjApLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFr
ZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0
KDIwMywgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMycsIDApLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAg
ICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBj
cmVhdGVSb290KCkKKyAgICB7CisgICAgICAgIHJldHVybiBVcGxvYWRlZEZpbGUuZW5zdXJlU2lu
Z2xldG9uKDQ1NiwgeydjcmVhdGVkQXQnOiBuZXcgRGF0ZSgnMjAxNy0wNS0wMVQyMTowMzoyN1on
KSwgJ2ZpbGVuYW1lJzogJ3Jvb3QuZGF0JywgJ2V4dGVuc2lvbic6ICcuZGF0JywgJ2F1dGhvcic6
ICdzb21lIHVzZXInLAorICAgICAgICAgICAgc2l6ZTogMTY0NTIyMzQsIHNoYTI1NjogJzAzZWVk
N2E4NDk0YWI4Nzk0YzQ0YjdkNDMwOGU1NTQ0OGZjNTZmNGQ2YzE3NTgwOWJhOTY4Zjc4ZjY1NmQ1
OGQnfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aFJvb3QoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTUsIHsKKyAgICAgICAg
ICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndl
YmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAg
ICAgICAgICAgIGN1c3RvbVJvb3RzOiBbY3JlYXRlUm9vdCgpXQorICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1p
dFNldC5lbnN1cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7
IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3Rz
OiBbXQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXRzV2l0aE5v
Q29tbW9uUmVwb3NpdG9yeSgpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIENvbW1p
dFNldC5lbnN1cmVTaW5nbGV0b24oMSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6
IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVs
cy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEsIE1vY2tNb2RlbHMu
b3N4LCAnb3N4LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigyLCB7CisgICAgICAgICAgICAgICAgcmV2aXNp
b25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgyLCBN
b2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgzMSwgTW9j
a01vZGVscy5pb3MsICdpb3MtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwK
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pCisg
ICAgICAgIF07CisgICAgfQorCisgICAgZGVzY3JpYmUoJ2NvbW1pdFNldENsb3Nlc3RUb01pZGRs
ZU9mQWxsQ29tbWl0cycsICgpID0+IHsKKyAgICAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKKyAg
ICAgICAgbGV0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKworICAgICAgICBp
dCgnc2hvdWxkIHJldHVybiAibnVsbCIgaWYgbm8gY29tbW9uIHJlcG9zaXRvcnkgZm91bmQnLCBh
c3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBtaWRkbGVDb21taXRTZXQgPSBhd2FpdCBN
aWRkbGVDb21taXRTZXRGaW5kZXIuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRz
KGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkuc3BsaWNlKDAsIDIpKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsK
KworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAibnVsbCIgdG8gYmlzZWN0IGNvbW1pdCBzZXQg
d2l0aCByb290JywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0
U2V0ID0gYXdhaXQgTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRs
ZU9mQWxsQ29tbWl0cyhbY29tbWl0U2V0KCksIGNvbW1pdFNldFdpdGhSb290KCldLCBbY29tbWl0
U2V0KCksIGNvbW1pdFNldFdpdGhSb290KCldKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCht
aWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiAibnVsbCIgaWYgbm8gcmVwb3NpdG9yeSB3aXRoIHRpbWUgb3Igb3JkZXIgaXMgZm91
bmQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRzID0gc29y
dGVkQ29tbWl0U2V0c1dpdGhvdXRUaW1lT3JPcmRlcigpOworICAgICAgICAgICAgY29uc3Qgc3Rh
cnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3QgZW5kQ29t
bWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAg
ICAgICAgY29uc3QgcHJvbWlzZSA9IE1pZGRsZUNvbW1pdFNldEZpbmRlci5jb21taXRTZXRDbG9z
ZXN0VG9NaWRkbGVPZkFsbENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBh
bGxDb21taXRTZXRzKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0
aCwgNCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9j
b21taXRzLzkvb3N4LWNvbW1pdC0xMTEnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1pdHMvOS9vc3gtY29tbWl0LTExMycpOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9hcGkvY29tbWl0cy8xMS93ZWJraXQt
Y29tbWl0LTEwMScpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwg
Jy9hcGkvY29tbWl0cy8xMS93ZWJraXQtY29tbWl0LTEwNicpOworCisgICAgICAgICAgICByZXF1
ZXN0c1swXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMTExJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDAKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7CisgICAgICAgICAg
ICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZDogMTEzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdv
c3gtY29tbWl0LTExMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlcXVl
c3RzWzJdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9k
ZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEwMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0xMDEnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZTogMAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKKyAgICAg
ICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlkOiAxMDYsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZp
c2lvbjogJ3dlYmtpdC1jb21taXQtMTA2JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDAKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0
IGxvZycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHMgPSBz
b3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBzdGFydENvbW1pdFNldCA9IGFs
bENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRDb21taXRTZXQgPSBhbGxDb21t
aXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25zdCBwcm9t
aXNlID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxs
Q29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOwor
ICAgICAgICAgICAgY29uc3QgcmVqZWN0UmVhc29uID0gJzQwNCc7CisgICAgICAgICAgICByZXF1
ZXN0c1swXS5yZWplY3QocmVqZWN0UmVhc29uKTsKKyAgICAgICAgICAgIGxldCBleGNlcHRpb25S
YWlzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXdhaXQg
cHJvbWlzZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uUmFpc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoZXJy
b3IsIHJlamVjdFJlYXNvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQub2so
ZXhjZXB0aW9uUmFpc2VkKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1
cm4gIm51bGwiIGlmIG5vIGNvbW1pdCBzZXQgaXMgZmluZCBvdGhlciB0aGFuIHRoZSBjb21taXQg
c2V0cyBkZWZpbmUgdGhlIHJhbmdlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3Qg
YWxsQ29tbWl0U2V0cyA9IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0
YXJ0Q29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENv
bW1pdFNldCA9IGFsbENvbW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgIGxldCBwcm9taXNlID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nl
c3RUb01pZGRsZU9mQWxsQ29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIFtz
dGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0XSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sw
XS51cmwsICcvYXBpL2NvbW1pdHMvOS8/cHJlY2VkaW5nUmV2aXNpb249b3N4LWNvbW1pdC0xJmxh
c3RSZXZpc2lvbj1vc3gtY29tbWl0LTMnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1pdHMvMTEvP3ByZWNlZGluZ1JldmlzaW9uPXdlYmtpdC1j
b21taXQtMSZsYXN0UmV2aXNpb249d2Via2l0LWNvbW1pdC02Jyk7CisgICAgICAgICAgICByZXF1
ZXN0c1swXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29t
bWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAy
LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTInLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZTogMjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVs
cy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTMnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZTogMzAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
b3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNDAKKyAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlkOiA1LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246
ICd3ZWJraXQtY29tbWl0LTUnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNTAKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlkOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29t
bWl0LTYnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZTogNjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY29uc3QgbWlk
ZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCht
aWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiBiaXNlY3Rpb24gcG9pbnQgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHJldmlzaW9u
IHJhbmdlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9
IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0g
YWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGxldCBwcm9t
aXNlID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxs
Q29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOwor
ICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1p
dHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1p
dC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWU6IDIwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWU6IDMwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Vi
a2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDQwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uOiAnd2Via2l0LWNvbW1pdC01JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Vi
a2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1
ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29t
bWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IHByb21pc2U7CisgICAgICAgICAg
ICBjb25zdCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbM107CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBleHBlY3RlZE1pZGRsZUNvbW1p
dFNldCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNhbWUgYmlz
ZWN0aW9uIHBvaW50IGV2ZW4gd2hlbiB0d28gY29tbWl0IHNldHMgZnJvbSBvcmlnaW5hbCBjb21t
aXQgc2V0IGhhdmUgaW52ZXJzZWQgb3JkZXInLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBj
b25zdCBhbGxDb21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0cygpOworICAgICAgICAgICAgY29u
c3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3Qg
ZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOwor
ICAgICAgICAgICAgbGV0IHByb21pc2UgPSBNaWRkbGVDb21taXRTZXRGaW5kZXIuY29tbWl0U2V0
Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKFtlbmRDb21taXRTZXQsIHN0YXJ0Q29tbWl0U2V0
XSwgYWxsQ29tbWl0U2V0cyk7CisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKKyAg
ICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICd3ZWJraXQtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMjAKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlkOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJr
aXQtY29tbWl0LTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMzAKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
OiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTQn
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZTogNDAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA1LAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTUnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZTogNTAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQu
aWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA2LAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTYnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNjAK
KyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdj
b21taXRzJzogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaWQ6IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0
LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZTogMjEKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9j
a01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0zJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDMxCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQg
cHJvbWlzZTsKKyAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0ID0gYWxs
Q29tbWl0U2V0c1szXTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQs
IGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3No
b3VsZCB1c2UgY29tbWl0cyB3aXRoIG9yZGVyIGFzIGZhbGxiYWNrIHdoZW4gbXVsdGlwbGUgY29t
bWl0IHNldHMgZm91bmQgZm9yIHRoZSBjb21taXQgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBtaWRk
bGUgb2YgY29tbWl0cyB3aXRoIHRpbWUnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25z
dCBhbGxDb21taXRTZXRzID0gY29tbWl0U2V0V2l0aFNvbWVDb21taXRzT25seUhhdmVPcmRlcigp
OworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOwor
ICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRT
ZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBNaWRkbGVDb21taXRT
ZXRGaW5kZXIuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKFtzdGFydENvbW1p
dFNldCwgZW5kQ29tbWl0U2V0XSwgYWxsQ29tbWl0U2V0cyk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHMubGVuZ3RoLCA0KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1swXS51cmwsICcvYXBpL2NvbW1pdHMvOS8/cHJlY2VkaW5nUmV2aXNpb249b3N4LWNvbW1p
dC0xJmxhc3RSZXZpc2lvbj1vc3gtY29tbWl0LTMnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1pdHMvMTExL293bmVyLWNvbW1pdC0xJyk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2FwaS9jb21taXRzLzEx
MS9vd25lci1jb21taXQtMycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNd
LnVybCwgJy9hcGkvY29tbWl0cy8xMS8/cHJlY2VkaW5nUmV2aXNpb249d2Via2l0LWNvbW1pdC0x
Jmxhc3RSZXZpc2lvbj13ZWJraXQtY29tbWl0LTYnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNb
MF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMu
d2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWU6IDIwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93
bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
d2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1p
dC01JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
XQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKKyAg
ICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnku
aWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDEsCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0xJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDAs
CisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0
c1syXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVs
cy5vd25lclJlcG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDMs
CisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0zJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWU6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0
cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
OiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywK
KyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAg
ICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
OiAzMQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3Qo
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDUpOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzRdLnVybCwgJy9hcGkvY29tbWl0cy8xMTEvP3By
ZWNlZGluZ1JldmlzaW9uPW93bmVyLWNvbW1pdC0xJmxhc3RSZXZpc2lvbj1vd25lci1jb21taXQt
MycpOworICAgICAgICAgICAgcmVxdWVzdHNbNF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAg
J2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogMjAyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNp
b246ICdvd25lci1jb21taXQtMicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0
czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3JkZXI6IDIKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVs
cy5vd25lclJlcG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDMs
CisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0zJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWU6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBjb25zdCBtaWRkbGVDb21taXRTZXQgPSBhd2FpdCBwcm9taXNlOworICAgICAg
ICAgICAgY29uc3QgZXhwZWN0ZWRNaWRkbGVDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzNdOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG1pZGRsZUNvbW1pdFNldCwgZXhwZWN0ZWRNaWRkbGVD
b21taXRTZXQpOworICAgICAgICB9KTsKKyAgICB9KTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337764</attachid>
            <date>2018-04-11 18:36:33 -0700</date>
            <delta_ts>2018-04-17 01:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180411183632.patch</filename>
            <type>text/plain</type>
            <size>63729</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNDQ0CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAwY2E0NWJhMzlhZmZiYWNlZTgzNjA5Zjg4NTg2OTQ4Mzk3YmVlOWQ2Li43ZjBjZDAwODA0
YTI5ZGMyZjI5YjRkNmJhMjg4MWUyNTc2Y2QzMWZiIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxOC0wNC0xMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXN0aW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbiB3aGljaCB3aWxsIG9ubHkgYXBwZWFyIHdoZW4gdGhlIG1p
ZGRsZSBjb21taXQgc2V0IG9mIHRoZSByYW5nZSBpbgorICAgICAgICB0ZXN0IGdyb3VwIGNhbiBi
ZSBmb3VuZC4KKworICAgICAgICBGaW5kaW5nIG1pZGRsZSBjb21taXQgc2V0IGFsZ29yaXRobSBp
cyBkZXNjcmliZWQgYXMgZm9sbG93czoKKyAgICAgICAgMS4gRmluZCBhbGwgY29tbWl0cyBmcm9t
IG11bHRpcGxlIHJlcG9zaXRvcmllcyBhbW9uZyB0aGUgcmFuZ2VzIHNwZWNpZmllZCBieSB0d28g
Y29tbWl0IHNldHMgaW4gdGVzdCBncm91cC4gSW4KKyAgICAgICAgdGhlIG1lYW53aGlsZSwgbWVy
Z2UgYWxsIGNvbW1pdHMgdGhhdCBoYXZlIGNvbW1pdCB0aW1lIGludG8gYSBzaW5nbGUgbGlzdC4g
Rm9yIGNvbW1pdHMgb25seSBoYXZlIGNvbW1pdCBvcmRlciwKKyAgICAgICAgcHV0IHRob3NlIGNv
bW1pdHMgaW50byBzZXBhcmF0ZSBsaXN0cy4KKyAgICAgICAgMi4gRmlsdGVyIGFsbCB0aGUgYXZh
aWxhYmxlIGNvbW1pdCBzZXRzIGluIGN1cnJlbnQgYW5hbHlzaXMgdGFzayBieSBrZWVwaW5nIHRo
ZSBvbmVzIGhhdmUgZXhhY3QgcmVwb3NpdG9yaWVzCisgICAgICAgIGFzIHRoZSB0d28gY29tbWl0
IHNldHMgaW4gc3BlY2lmaWVkIHRlc3QgZ3JvdXAsIGFuZCBldmVyeSBjb21taXQgb2YgYSBjb21t
aXQgc2V0IGlzIGluIHNpZGUgdGhlIGNvbW1pdCByYW5nZS4KKyAgICAgICAgQWZ0ZXIgZmlsdGVy
aW5nIHRoZSBjb21taXQgc2V0cywgc29ydCB0aGUgcmVtYWluaW5nIG9uZXMgYW5kIG9ubHkga2Vl
cCBvbmUgY29tbWl0IHNldCBpZiBtdWx0aXBsZSBjb21taXQgc2V0cworICAgICAgICBhcmUgZXF1
YWwgdG8gZWFjaCBvdGhlci4KKyAgICAgICAgMy4gQW1vbmcgY29tbWl0cyBwcm9jZXNzZWQgYnkg
c3RlcCAyLCBmaW5kIHRoZSBjb21taXQgc2V0cyB0aGF0IGhhdmUgdGhlIGNvbW1pdCB3aGljaCBp
cyBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgYWxsIGNvbW1pdHMgdGhhdCBoYXZl
IGNvbW1pdCB0aW1lIGNyZWF0ZWQgZnJvbSBzdGVwIDEuCisgICAgICAgIDQuIEFtb25nIGNvbW1p
dHMgcHJvY2Vzc2VkIGJ5IHN0ZXAgMywgZmluZCB0aGUgY29tbWl0IHNldHMgdGhhdCBoYXZlIHRo
ZSBjb21taXQgd2hpY2ggaXMgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mCisgICAgICAgIGNvbW1p
dHMgdGhhdCBvbmx5IGhhdmUgY29tbWl0IG9yZGVyIGFuZCBjYXRlZ29yaXplZCBieSByZXBvc2l0
b3J5LgorICAgICAgICA1LiBJZiBtb3JlIHRoYW4gb25lIGNvbW1pdCBzZXRzIGFyZSBmb3VuZCwg
Y2hvb3NlIHRoZSBjb21taXQgc2V0IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHRo
ZSBmaWx0ZXJlZAorICAgICAgICBhbnMgc29ydGVkIGNvbW1pdCBzZXQgbGlzdCBmcm9tIHN0ZXAg
Mi4KKworICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHA6IFNo
b3VsZCByZXN1bHRzIHJldHVybmVkIGJ5IEFQSSBzaG91bGQgY29udGFpbiBjb21taXQgb3JkZXIg
aW5mb3JtYXRpb24uCisgICAgICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEltcG9ydHMgJ3B1
YmxpYy92My9taWRkbGUtY29tbWl0LXNldC1maW5kZXIuanMnLgorICAgICAgICAqIHB1YmxpYy92
My9taWRkbGUtY29tbWl0LXNldC1maW5kZXIuanM6CisgICAgICAgIChNaWRkbGVDb21taXRTZXRG
aW5kZXIuYXN5bmMuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKTpJbnN0ZWFk
IG9mIG5haXZlbHkgcmV0dXJuaW5nIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgZXhpc3RpbmcgY29t
bWl0IHNldCBhcnJheSwgdGhpcyBmdW5jdGlvbiBzZWxlY3RzIGEgYmlzZWN0IGJpc2VjdGlvbiBw
b2ludHMgdGhhdCBpcyBjbG9zZXN0IHRvIGFjdHVhbGx5IG1pZGRsZSBvZgorICAgICAgICB0aGUg
cmV2aXNpb24gcmFuZ2UgYmFzZWQgb24gYWxsIHJldmlzaW9ucyByZXBvcnRlZCB0byBwZXJmb3Jt
YW5jZSBkYXNoYm9hcmQuCisgICAgICAgIChNaWRkbGVDb21taXRTZXRGaW5kZXIuX2ZpbHRlclNv
cnRBbmRVbmlxdWVDb21taXRTZXRzKTogSGVscGVyIGZ1bmN0aW9uIHRvIGZpbHRlciwgc29ydCBh
bmQgdW5pcXVlIGNvbW1pdCBzZXRzLgorICAgICAgICAoTWlkZGxlQ29tbWl0U2V0RmluZGVyLl9m
aW5kQ29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhUaW1lKTogSGVscGVyIGZ1
bmN0aW9uIHRvIGZpbmQgdGhlIGNvbW1pdCBzZXRzCisgICAgICAgIHRob3NlIGFyZSBjbG9zZXN0
IHRvIHRoZSBtaWRkbGUgb2YgYW1vbmcgYWxsIHRoZSBjb21taXRzIGluIHRoZSByYW5nZSB0aGF0
IGhhdmUgY29tbWl0IHRpbWUuCisgICAgICAgIChNaWRkbGVDb21taXRTZXRGaW5kZXIuX2ZpbmRD
b21taXRTZXRzQ2xvc2VzdFRvTWlkZGxlT2ZDb21taXRzV2l0aE9yZGVyKTogSGVscGVyIGZ1bmN0
aW9uIHdoaWNoIGdvZXMgdGhyb3VnaCBhbGwKKyAgICAgICAgcmVwb3NpdG9yaWVzIHRoZSBjb21t
aXQgb2Ygd2hpY2ggaGFzIGNvbW1pdCBvcmRlciwgYW5kIGZpbmQgdGhlIGNvbW1pdCBzZXRzIHRo
b3NlIGFyZSBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YgY29tbWl0cworICAgICAgICBmb3IgZWFj
aCByZXBvc2l0b3J5LgorICAgICAgICAoTWlkZGxlQ29tbWl0U2V0RmluZGVyKToKKyAgICAgICAg
KiBwdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanM6CisgICAgICAgIChBbmFseXNpc1Rh
c2sucHJvdG90eXBlLmFzeW5jLm1pZGRsZUNvbW1pdFNldEZvclRlc3RHcm91cCk6IEludm9rZXMg
TWlkZGxlQ29tbWl0U2V0RmluZGVyIHRvIGZpbmQgdGhlIG1pZGRsZSBjb21taXQgc2V0LgorICAg
ICAgICAoQW5hbHlzaXNUYXNrLnByb3RvdHlwZS5hc3luYy5hZ2dyZWdhdGVDb21taXRTZXRzKTog
QWdncmVnYXRlcyBhbGwgZXhpc3RpbmcgY29tbWl0IHNldHMgaW4gdGVzdCBncm91cHMgb2YgY3Vy
cmVudCBhbmFseXNpcyB0YXNrcy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanM6CisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBlLnVwZGF0ZVNpbmdsZXRvbik6IFVw
ZGF0ZSBjb21taXQgb3JkZXIgaW5mb3JtYXRpb24gYXMgd2VsbC4KKyAgICAgICAgKENvbW1pdExv
Zy5wcm90b3R5cGUuaGFzQ29tbWl0VGltZSk6IEEgaGVscGVyIGZ1bmN0aW9uIGRldGVybWluZSB3
aGV0aGVyIGEgY29tbWl0IGhhcyBhIGNvbW1pdCB0aW1lLiBGb3IgY29tbWl0CisgICAgICAgIHRo
YXQgZG9lcyBub3QgaGF2ZSB0aW1lLCBzZXJ2ZXIgd2lsbCByZXR1cm4gY29tbWl0IHRpbWUgYXMg
emVyby4gQXMgaXQgaXMgdW5yZWFsaXN0aWMgZm9yIGEgY29tbWl0IGhhcyBjb21taXQgdGltZQor
ICAgICAgICAwLCBpdCB3b3VsZCBiZSBzYWZlIHRvIGFzc3VtZSBhIHZhbGlkIGNvbW1pdCB0aW1l
IGlzIGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5oYXNDb21t
aXRPcmRlcik6IFJldHVybnMgd2hldGhlciBhIGNvbW1pdCBoYXMgYSBjb21taXQgb2Rlci4KKyAg
ICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUub3JkZXIpOiBSZXR1cm5zIGNvbW1pdCBvcmRlciBv
ZiBhIGNvbW1pdC4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6Cisg
ICAgICAgIChDb21taXRTZXQucHJvdG90eXBlLmhhc1NhbWVSZXBvc2l0b3JpZXMpOiBBIGhlbHBl
ciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbW1pdCBzZXQgaGFzIHNhbWUgcmVw
b3NpdG9yaWVzCisgICAgICAgIGFzIGN1cnJlbnQgcmVwb3NpdG9yeS4KKyAgICAgICAgKENvbW1p
dFNldC5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQpOiBBIGhlbHBlciBmdW5jdGlvbiB0
byBkZXRlcm1pbmUgd2hldGhlciBjdXJyZW50IGNvbW1pdCBzZXQgaGFzIHJvb3QsCisgICAgICAg
IHBhdGNoIG9yIG93bmVkIGNvbW1pdC4KKyAgICAgICAgKENvbW1pdFNldC5jb21taXRGb3JSZXBv
c2l0b3J5KTogVGhpcyBmdW5jdGlvbiBkZWZpbmVkIHR3aWNlIGlkZW50aWNhbGx5LCByZW1vdmUg
b25lIG9mIHRoZW0uCisgICAgICAgICogcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzOiBN
YWtlICdfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMnIGEgc3RhdGljIGZ1bmN0aW9uIGFzIGl0
IGRvZXMgbm90IHVzZSBhbnkgaW5zdGFuY2UKKyAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAq
IHB1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanM6IEFkZGVkIGJpc2VjdCBidXR0
b24uCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lKToKKyAgICAgICAgKEFuYWx5
c2lzVGFza1Rlc3RHcm91cFBhbmUucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOgor
ICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuYXN5bmMuc2V0VGVz
dEdyb3Vwcyk6IFVwZGF0ZSAnc2V0VGVzdEdyb3VwcycgdG8gdXBkYXRlIF9taWRkbGVDb21taXRT
ZXRCeVRlc3RHcm91cAorICAgICAgICB3aGVuIHRoZSB0ZXN0IGdyb3VwcyBjaGFuZ2VzLgorICAg
ICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuX3JlbmRlckN1cnJlbnRU
ZXN0R3JvdXApOiBBZGRlZCBjb2RlIHRvIGNvbmRpdGlvbmFsbHkgc2hvdyBiaXNlY3QgYnV0dG9u
LgorICAgICAgICBCaXNlY3QgYnV0dG9uIHdpbGwgb25seSBzaG93IHdoZW4gdGhlcmUgaXMgYSBt
aWRkbGUgY29tbWl0IHNldCBmb3IgdGhhdCB0ZXN0IGdyb3VwLgorICAgICAgICAoQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZS5odG1sVGVtcGxhdGUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVz
dEdyb3VwUGFuZS5jc3NUZW1wbGF0ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3Rv
dHlwZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2Uu
cHJvdG90eXBlLl9yZXRyeUN1cnJlbnRUZXN0R3JvdXApOgorICAgICAgICAoQW5hbHlzaXNUYXNr
UGFnZS5wcm90b3R5cGUuYXN5bmMuX2FuYWx5emVDdXJyZW50VGVzdEdyb3VwKTogQSBmdW5jdGlv
biB0aGF0IHdpbGwgYmUgaW52b2tlZCB3aGVuIGJpc2VjdCBidXR0b24gaXMgY2xpY2tlZC4KKyAg
ICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLl9kaWRGZXRjaFRlc3RHcm91cHMpOiBE
ZWxldGVkIGEgc3RhdGVtZW50IGFmdGVyIGZ1bmN0aW9uJ3MgcmV0dXJucy4KKyAgICAgICAgKiB0
b29scy9qcy92My1tb2RlbHMuanM6CisgICAgICAgICogdW5pdC10ZXN0cy9jb21taXQtc2V0LXRl
c3RzLmpzOiBBZGRlZCB1bml0IHRlc3RzIGZvciAnQ29tbWl0U2V0Lmhhc1NhbWVSZXBvc2l0b3Jp
ZXMnIGFuZCAnQ29tbWl0U2V0LmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCcuCisgICAg
ICAgICogdW5pdC10ZXN0cy9taWRkbGUtY29tbWl0LXNldC1maW5kZXItdGVzdHMuanM6IEFkZGVk
IHVuaXQgdGVzdHMgZm9yICdNaWRkbGVDb21taXRTZXRGaW5kZXIuY29tbWl0U2V0Q2xvc2VzdFRv
TWlkZGxlT2ZBbGxDb21taXRzJy4KKwogMjAxOC0wNC0wNiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRlZCAnQ29tbWl0U2V0LmRpZmYnIHdoaWNoIHdpbGwg
YmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaW5kZXBlbmRlbnQgaW5jb21pbmcgY2hhbmdlcy4K
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21t
aXQtbG9nLWZldGNoZXIucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNs
dWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAKaW5kZXggNzA5Y2YyZDcyYjVkOTFlNmI5ZWM5ODc4
NjBkYWM0ZjMyZTMxMjA3NC4uOWM3NjI2M2NiNjYxNmI1OTViMWRkZGZiOTkwOTQ3MmVhMTU4OWQw
OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2Nv
bW1pdC1sb2ctZmV0Y2hlci5waHAKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAKQEAgLTYxLDYgKzYxLDcgQEAgY2xhc3Mg
Q29tbWl0TG9nRmV0Y2hlciB7CiAgICAgICAgICAgICBjb21taXR0ZXJfYWNjb3VudCBhcyAiYXV0
aG9yRW1haWwiLAogICAgICAgICAgICAgY29tbWl0X3JlcG9zaXRvcnkgYXMgInJlcG9zaXRvcnki
LAogICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgYXMgIm1lc3NhZ2UiLAorICAgICAgICAgICAg
Y29tbWl0X29yZGVyIGFzICJvcmRlciIsCiAgICAgICAgICAgICBFWElTVFMoU0VMRUNUICogRlJP
TSBjb21taXRfb3duZXJzaGlwcyBXSEVSRSBjb21taXRfb3duZXIgPSBjb21taXRfaWQpIGFzICJv
d25zQ29tbWl0cyIKICAgICAgICAgICAgIEZST00gY29tbWl0cyBMRUZUIE9VVEVSIEpPSU4gY29t
bWl0dGVycyBPTiBjb21taXRfY29tbWl0dGVyID0gY29tbWl0dGVyX2lkCiAgICAgICAgICAgICBX
SEVSRSBjb21taXRfcmVwb3NpdG9yeSA9ICQxIEFORCBjb21taXRfcmVwb3J0ZWQgPSB0cnVlJzsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRt
bCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAppbmRleCAw
MjMzZjk2ZmVhZTc4MzdlODJkNzA0MTAyNzc2MGVhNWUwMWJlM2JmLi45OWQwNjNmOWUwNDBmZGRm
MTgyNmZlN2MyNzJmMmJhYTk1YWJkMzE3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9pbmRleC5odG1sCkBAIC00NSw2ICs0NSw3IEBAIFJ1biB0b29scy9idW5kbGUt
djMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0aW9uLmApOwog
ICAgICAgICA8c2NyaXB0IHNyYz0icHJpdmlsZWdlZC1hcGkuanMiPjwvc2NyaXB0PgogICAgICAg
ICA8c2NyaXB0IHNyYz0iYXN5bmMtdGFzay5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQg
c3JjPSJsYXppbHktZXZhbHVhdGVkLWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNj
cmlwdCBzcmM9Im1pZGRsZS1jb21taXQtc2V0LWZpbmRlci5qcyI+PC9zY3JpcHQ+CiAKICAgICAg
ICAgPHNjcmlwdCBzcmM9Im1vZGVscy90aW1lLXNlcmllcy5qcyI+PC9zY3JpcHQ+CiAgICAgICAg
IDxzY3JpcHQgc3JjPSJtb2RlbHMvbWVhc3VyZW1lbnQtYWRhcHRvci5qcyI+PC9zY3JpcHQ+CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21pZGRsZS1jb21t
aXQtc2V0LWZpbmRlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWlk
ZGxlLWNvbW1pdC1zZXQtZmluZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNjA5ODEyMTAwZTg0MGNlZjc2
ZjBhOTBiNzVjYjJkMjc2YWFjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21pZGRsZS1jb21taXQtc2V0LWZpbmRlci5qcwpAQCAtMCwwICsx
LDIxMCBAQAorJ3VzZSBzdHJpY3QnOworCisKK2NsYXNzIE1pZGRsZUNvbW1pdFNldEZpbmRlciB7
CisgICAgc3RhdGljIGFzeW5jIGNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0cyhj
b21taXRTZXRzVG9TcGxpdCwgYXZhaWxhYmxlQ29tbWl0U2V0cykKKyAgICB7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGNvbW1pdFNldHNUb1NwbGl0Lmxlbmd0aCA9PT0gMik7CisgICAgICAgIGNv
bnN0IFtvbmVDb21taXRTZXQsIGFub3RoZXJDb21taXRTZXRdID0gY29tbWl0U2V0c1RvU3BsaXQ7
CisgICAgICAgIGlmIChvbmVDb21taXRTZXQuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0
KCkgfHwgYW5vdGhlckNvbW1pdFNldC5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlmICghb25lQ29tbWl0U2V0Lmhh
c1NhbWVSZXBvc2l0b3JpZXMoYW5vdGhlckNvbW1pdFNldCkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKworICAgICAgICBjb25zdCByZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZSA9IG5ldyBT
ZXQ7CisgICAgICAgIGNvbnN0IGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKKyAg
ICAgICAgY29uc3QgaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVyQnlSZXBvc2l0b3J5ID0gbmV3
IE1hcDsKKyAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlcyA9IFtdOworICAgICAgICBjb25z
dCBhbGxDb21taXRzV2l0aENvbW1pdFRpbWUgPSBbXTsKKyAgICAgICAgZm9yIChjb25zdCByZXBv
c2l0b3J5IG9mIG9uZUNvbW1pdFNldC50b3BMZXZlbFJlcG9zaXRvcmllcygpKSB7CisgICAgICAg
ICAgICBjb25zdCBvbmVDb21taXQgPSBvbmVDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IGFub3RoZXJDb21taXQgPSBhbm90aGVyQ29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBpZiAo
b25lQ29tbWl0ID09PSBhbm90aGVyQ29tbWl0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAob25lQ29tbWl0Lmhhc0NvbW1pdFRpbWUoKSAmJiBhbm90aGVyQ29t
bWl0Lmhhc0NvbW1pdFRpbWUoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFtzdGFydENvbW1p
dCwgZW5kQ29tbWl0XSA9IG9uZUNvbW1pdC50aW1lKCkgPCBhbm90aGVyQ29tbWl0LnRpbWUoKSA/
IFtvbmVDb21taXQsIGFub3RoZXJDb21taXRdIDogW2Fub3RoZXJDb21taXQsIG9uZUNvbW1pdF07
CisgICAgICAgICAgICAgICAgY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnks
IFtzdGFydENvbW1pdCwgZW5kQ29tbWl0XSk7CisgICAgICAgICAgICAgICAgZmV0Y2hpbmdQcm9t
aXNlcy5wdXNoKENvbW1pdExvZy5mZXRjaEJldHdlZW5SZXZpc2lvbnMocmVwb3NpdG9yeSwgc3Rh
cnRDb21taXQucmV2aXNpb24oKSwgZW5kQ29tbWl0LnJldmlzaW9uKCkpLnRoZW4oKGNvbW1pdHMp
ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lLnB1c2go
c3RhcnRDb21taXQsIC4uLmNvbW1pdHMpfSkpOworICAgICAgICAgICAgICAgIHJlcG9zaXRvcmll
c1dpdGhDb21taXRUaW1lLmFkZChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmV0Y2hpbmdQcm9taXNlcy5wdXNoKFBy
b21pc2UuYWxsKFtDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCBv
bmVDb21taXQucmV2aXNpb24oKSksCisgICAgICAgICAgICAgICAgQ29tbWl0TG9nLmZldGNoRm9y
U2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgYW5vdGhlckNvbW1pdC5yZXZpc2lvbigpKV0pLnRo
ZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGlmICghb25lQ29tbWl0Lmhhc0NvbW1pdE9yZGVy
KCkgfHwgIWFub3RoZXJDb21taXQuaGFzQ29tbWl0T3JkZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnN0IFtzdGFydENvbW1pdCwgZW5kQ29tbWl0
XSA9IG9uZUNvbW1pdC5vcmRlcigpIDwgYW5vdGhlckNvbW1pdC5vcmRlcigpID8gW29uZUNvbW1p
dCwgYW5vdGhlckNvbW1pdF0gOiBbYW5vdGhlckNvbW1pdCwgb25lQ29tbWl0XTsKKyAgICAgICAg
ICAgICAgICBjb21taXRSYW5nZUJ5UmVwb3NpdG9yeS5zZXQocmVwb3NpdG9yeSwgW3N0YXJ0Q29t
bWl0LCBlbmRDb21taXRdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmZldGNo
QmV0d2VlblJldmlzaW9ucyhyZXBvc2l0b3J5LCBzdGFydENvbW1pdC5yZXZpc2lvbigpLCBlbmRD
b21taXQucmV2aXNpb24oKSkudGhlbigoY29tbWl0cykgPT4geworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbmRleEJ5Q29tbWl0ID0gbmV3IE1hcDsKKyAgICAgICAgICAgICAgICAgICAgY29t
bWl0cyA9IFtzdGFydENvbW1pdCwgLi4uY29tbWl0c107CisgICAgICAgICAgICAgICAgICAgIGNv
bW1pdHMuZm9yRWFjaCgoY29tbWl0LCBpbmRleCkgPT4gaW5kZXhCeUNvbW1pdC5zZXQoY29tbWl0
LCBpbmRleCkpOworICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNvbW1pdFdpdGhPbmx5T3Jk
ZXJCeVJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnksIGluZGV4QnlDb21taXQpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgICAgIGF3YWl0IFBy
b21pc2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpOworCisgICAgICAgIGlmICghcmVwb3NpdG9yaWVz
V2l0aENvbW1pdFRpbWUuc2l6ZSAmJiAhaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVyQnlSZXBv
c2l0b3J5LnNpemUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBsZXQgc29y
dGVkQ29tbWl0U2V0cyA9IE1pZGRsZUNvbW1pdFNldEZpbmRlci5fZmlsdGVyU29ydEFuZFVuaXF1
ZUNvbW1pdFNldHMob25lQ29tbWl0U2V0LCBhdmFpbGFibGVDb21taXRTZXRzLCBjb21taXRSYW5n
ZUJ5UmVwb3NpdG9yeSwgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUsIFsuLi5pbmRleEZvckNv
bW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkua2V5cygpXSk7CisgICAgICAgIGNvbnN0IHNv
cnRlZENvbW1pdFNldHNMZW5ndGggPSBzb3J0ZWRDb21taXRTZXRzLmxlbmd0aDsKKyAgICAgICAg
aWYgKHNvcnRlZENvbW1pdFNldHNMZW5ndGggPD0gMikKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KChvbmVDb21taXRTZXQuZXF1YWxzKHNvcnRlZENv
bW1pdFNldHNbMF0pICYmIGFub3RoZXJDb21taXRTZXQuZXF1YWxzKHNvcnRlZENvbW1pdFNldHNb
c29ydGVkQ29tbWl0U2V0c0xlbmd0aCAtIDFdKSkKKyAgICAgICAgICAgIHx8IChvbmVDb21taXRT
ZXQuZXF1YWxzKHNvcnRlZENvbW1pdFNldHNbc29ydGVkQ29tbWl0U2V0c0xlbmd0aCAtIDFdKSAm
JiBhbm90aGVyQ29tbWl0U2V0LmVxdWFscyhzb3J0ZWRDb21taXRTZXRzWzBdKSkpOworCisgICAg
ICAgIGxldCByZW1haW5pbmdDb21taXRTZXRzID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLl9maW5k
Q29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhUaW1lKHNvcnRlZENvbW1pdFNl
dHMuc2xpY2UoMSwgLTEpLCByZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dp
dGhDb21taXRUaW1lKTsKKyAgICAgICAgcmVtYWluaW5nQ29tbWl0U2V0cyA9IE1pZGRsZUNvbW1p
dFNldEZpbmRlci5fZmluZENvbW1pdFNldHNDbG9zZXN0VG9NaWRkbGVPZkNvbW1pdHNXaXRoT3Jk
ZXIocmVtYWluaW5nQ29tbWl0U2V0cywgaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVyQnlSZXBv
c2l0b3J5KTsKKyAgICAgICAgcmV0dXJuIE1pZGRsZUNvbW1pdFNldEZpbmRlci5fY2hvb3NlQ29t
bWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZTb3J0ZWRDb21taXRTZXRzQW1vbmdSZW1haW5pbmdDb21t
aXRTZXRzKHJlbWFpbmluZ0NvbW1pdFNldHMsIHNvcnRlZENvbW1pdFNldHMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBfZmlsdGVyU29ydEFuZFVuaXF1ZUNvbW1pdFNldHMob25lQ29tbWl0U2V0RnJv
bVRlc3RHcm91cCwgYXZhaWxhYmxlQ29tbWl0U2V0cywgY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnks
IHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lLCByZXBvc2l0b3J5V2l0aE9ubHlDb21taXRPcmRl
cikgeworICAgICAgICBjb25zdCBjb21taXRTZXRzSW5SYW5nZSA9IGF2YWlsYWJsZUNvbW1pdFNl
dHMuZmlsdGVyKChjb21taXRTZXQpID0+IHsKKyAgICAgICAgICAgIGlmICghY29tbWl0U2V0Lmhh
c1NhbWVSZXBvc2l0b3JpZXMob25lQ29tbWl0U2V0RnJvbVRlc3RHcm91cCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9m
IHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29t
bWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjb21taXQuaGFzQ29tbWl0VGltZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0Q29tbWl0LCBlbmRD
b21taXRdID0gY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgICAgIGlmIChzdGFydENvbW1pdC50aW1lKCkgPiBjb21taXQudGltZSgpIHx8IGVuZENv
bW1pdC50aW1lKCkgPCBjb21taXQudGltZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkg
b2YgcmVwb3NpdG9yeVdpdGhPbmx5Q29tbWl0T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBjb21taXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbW1pdC5oYXNDb21taXRPcmRlcigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0Q29tbWl0
LCBlbmRDb21taXRdID0gY29tbWl0UmFuZ2VCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOwor
ICAgICAgICAgICAgICAgIGlmIChzdGFydENvbW1pdC5vcmRlcigpID4gY29tbWl0Lm9yZGVyKCkg
fHwgZW5kQ29tbWl0Lm9yZGVyKCkgPCBjb21taXQub3JkZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHMgPSBjb21taXRT
ZXRzSW5SYW5nZS5zb3J0KChjb21taXRTZXQwLCBjb21taXRTZXQxKSA9PiB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQwID0gY29tbWl0U2V0MC5jb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdDEgPSBjb21t
aXRTZXQxLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAg
aWYgKGNvbW1pdDAudGltZSgpID09PSBjb21taXQxLnRpbWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdDAudGltZSgpIC0gY29t
bWl0MS50aW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9z
aXRvcnkgb2YgcmVwb3NpdG9yeVdpdGhPbmx5Q29tbWl0T3JkZXIpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBjb21taXQwID0gY29tbWl0U2V0MC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRv
cnkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdDEgPSBjb21taXRTZXQxLmNvbW1pdEZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdDAub3Jk
ZXIoKSA9PT0gY29tbWl0MS5vcmRlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0MC5vcmRlcigpIC0gY29tbWl0MS5vcmRlcigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0pOworCisg
ICAgICAgIGNvbnN0IHNvcnRlZFVuaXF1ZUNvbW1pdFNldHMgPSBbc29ydGVkQ29tbWl0U2V0c1sw
XV07CisgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc29ydGVkQ29tbWl0U2V0cy5sZW5ndGg7
IGkgKz0gMSkgeworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNDb21taXRTZXQgPSBzb3J0ZWRD
b21taXRTZXRzW2kgLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21taXRTZXQgPSBz
b3J0ZWRDb21taXRTZXRzW2ldOworICAgICAgICAgICAgaWYgKCFwcmV2aW91c0NvbW1pdFNldC5l
cXVhbHMoY3VycmVudENvbW1pdFNldCkpCisgICAgICAgICAgICAgICAgc29ydGVkVW5pcXVlQ29t
bWl0U2V0cy5wdXNoKGN1cnJlbnRDb21taXRTZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBzb3J0ZWRVbmlxdWVDb21taXRTZXRzOworICAgIH0KKworICAgIHN0YXRpYyBfZmluZENvbW1p
dFNldHNDbG9zZXN0VG9NaWRkbGVPZkNvbW1pdHNXaXRoVGltZShzb3J0ZWRDb21taXRTZXRzLCBy
ZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKSB7Cisg
ICAgICAgIGlmICghcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUuc2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiBzb3J0ZWRDb21taXRTZXRzOworCisgICAgICAgIGNvbnN0IGluZGV4QnlDb21taXRX
aXRoVGltZSA9IG5ldyBNYXA7CisgICAgICAgIGFsbENvbW1pdHNXaXRoQ29tbWl0VGltZS5zb3J0
KChjb21taXQwLCBjb21taXQxKSA9PiBjb21taXQwLnRpbWUoKSAtIGNvbW1pdDEudGltZSgpKQor
ICAgICAgICAgICAgLmZvckVhY2goKGNvbW1pdCwgaW5kZXgpID0+IGluZGV4QnlDb21taXRXaXRo
VGltZS5zZXQoY29tbWl0LCBpbmRleCkpOworCisgICAgICAgIGNvbnN0IGNvbW1pdFdpdGhUaW1l
VG9Db21taXRTZXRzID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9m
IHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNv
bW1pdFNldCBvZiBzb3J0ZWRDb21taXRTZXRzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29t
bWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjb21taXRXaXRoVGltZVRvQ29tbWl0U2V0cy5oYXMoY29tbWl0KSkKKyAg
ICAgICAgICAgICAgICAgICAgY29tbWl0V2l0aFRpbWVUb0NvbW1pdFNldHMuc2V0KGNvbW1pdCwg
W10pOworICAgICAgICAgICAgICAgIGNvbW1pdFdpdGhUaW1lVG9Db21taXRTZXRzLmdldChjb21t
aXQpLnB1c2goY29tbWl0U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IGRlc2lyZWRDb21taXRJbmRleCA9IGluZGV4QnlDb21taXRXaXRoVGltZS5zaXplIC8g
MjsKKyAgICAgICAgbGV0IG1pbkNvbW1pdERpc3RhbmNlID0gaW5kZXhCeUNvbW1pdFdpdGhUaW1l
LnNpemU7CisgICAgICAgIGxldCBjbG9zZXN0Q29tbWl0ID0gbnVsbDsKKyAgICAgICAgZm9yIChj
b25zdCBjb21taXQgb2YgY29tbWl0V2l0aFRpbWVUb0NvbW1pdFNldHMua2V5cygpKSB7CisgICAg
ICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4QnlDb21taXRXaXRoVGltZS5nZXQoY29tbWl0KTsK
KyAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRm9yQ29tbWl0ID0gTWF0aC5hYnMoaW5kZXggLSBk
ZXNpcmVkQ29tbWl0SW5kZXgpOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlRm9yQ29tbWl0IDwg
bWluQ29tbWl0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBtaW5Db21taXREaXN0YW5jZSA9
IGRpc3RhbmNlRm9yQ29tbWl0OworICAgICAgICAgICAgICAgIGNsb3Nlc3RDb21taXQgPSBjb21t
aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbW1pdFdpdGhU
aW1lVG9Db21taXRTZXRzLmdldChjbG9zZXN0Q29tbWl0KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
X2ZpbmRDb21taXRTZXRzQ2xvc2VzdFRvTWlkZGxlT2ZDb21taXRzV2l0aE9yZGVyKHJlbWFpbmlu
Z0NvbW1pdFNldHMsIGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSkgewor
ICAgICAgICBpZiAoIWluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeS5zaXpl
KQorICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7CisKKyAgICAgICAgY29u
c3QgY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRzID0gbmV3IE1hcDsKKyAgICAg
ICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5
UmVwb3NpdG9yeS5rZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWl0U2V0IG9m
IHJlbWFpbmluZ0NvbW1pdFNldHMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBj
b21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbW1pdE9ubHlPcmRlckF2YWlsYWJsZVRvQ29tbWl0U2V0cy5oYXMoY29tbWl0KSkK
KyAgICAgICAgICAgICAgICAgICAgY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRz
LnNldChjb21taXQsIG5ldyBTZXQpOworICAgICAgICAgICAgICAgIGNvbW1pdE9ubHlPcmRlckF2
YWlsYWJsZVRvQ29tbWl0U2V0cy5nZXQoY29tbWl0KS5hZGQoY29tbWl0U2V0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoY29uc3QgW3JlcG9zaXRvcnksIGluZGV4
QnlDb21taXRdIG9mIGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSkgewor
ICAgICAgICAgICAgY29uc3QgZGVzaXJlZENvbW1pdEluZGV4ID0gaW5kZXhCeUNvbW1pdC5zaXpl
IC8gMjsKKyAgICAgICAgICAgIGxldCBtaW5Db21taXREaXN0YW5jZSA9IGluZGV4QnlDb21taXQu
c2l6ZTsKKyAgICAgICAgICAgIGxldCBjbG9zZXN0Q29tbWl0ID0gbnVsbDsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgY29tbWl0U2V0IG9mIHJlbWFpbmluZ0NvbW1pdFNldHMpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjb21taXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4QnlDb21taXQuZ2V0
KGNvbW1pdCk7CisgICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGb3JDb21taXQgPSBNYXRo
LmFicyhpbmRleCAtIGRlc2lyZWRDb21taXRJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGRp
c3RhbmNlRm9yQ29tbWl0IDwgbWluQ29tbWl0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWluQ29tbWl0RGlzdGFuY2UgPSBkaXN0YW5jZUZvckNvbW1pdDsKKyAgICAgICAgICAgICAg
ICAgICAgY2xvc2VzdENvbW1pdCA9IGNvbW1pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXRzID0gY29tbWl0T25seU9yZGVyQXZh
aWxhYmxlVG9Db21taXRTZXRzLmdldChjbG9zZXN0Q29tbWl0KTsKKyAgICAgICAgICAgIHJlbWFp
bmluZ0NvbW1pdFNldHMgPSByZW1haW5pbmdDb21taXRTZXRzLmZpbHRlcigoY29tbWl0U2V0KSA9
PiBjb21taXRTZXRzLmhhcyhjb21taXRTZXQpKTsKKyAgICAgICAgICAgIGlmICghcmVtYWluaW5n
Q29tbWl0U2V0cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1p
dFNldHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7Cisg
ICAgfQorCisgICAgc3RhdGljIF9jaG9vc2VDb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZlNvcnRl
ZENvbW1pdFNldHNBbW9uZ1JlbWFpbmluZ0NvbW1pdFNldHMocmVtYWluaW5nQ29tbWl0U2V0cywg
c29ydGVkQ29tbWl0U2V0cykgeworICAgICAgICBpZiAoIXJlbWFpbmluZ0NvbW1pdFNldHMubGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZ0Nv
bW1pdFNldHMubGVuZ3RoID09PSAxKQorICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1p
dFNldHNbMF07CisKKyAgICAgICAgY29uc3QgaW5kZXhJblNvcnRlZENvbW1pdFNldHMgPSBuZXcg
TWFwOworICAgICAgICBzb3J0ZWRDb21taXRTZXRzLmZvckVhY2goKGNvbW1pdFNldCwgaW5kZXgp
ID0+IGluZGV4SW5Tb3J0ZWRDb21taXRTZXRzLnNldChjb21taXRTZXQsIGluZGV4KSk7CisgICAg
ICAgIGNvbnN0IGRlc2lyZWRJbmRleCA9IHNvcnRlZENvbW1pdFNldHMubGVuZ3RoIC8gMjsKKyAg
ICAgICAgbGV0IG1pbkRpc3RhbmNlVG9EZXNpcmVkSW5kZXggPSBzb3J0ZWRDb21taXRTZXRzLmxl
bmd0aDsKKyAgICAgICAgbGV0IG1pZGRsZUNvbW1pdFNldCA9IG51bGw7CisgICAgICAgIGZvciAo
Y29uc3QgY29tbWl0U2V0IG9mIHNvcnRlZENvbW1pdFNldHMpIHsKKyAgICAgICAgICAgIGNvbnN0
IGluZGV4ID0gaW5kZXhJblNvcnRlZENvbW1pdFNldHMuZ2V0KGNvbW1pdFNldCk7CisgICAgICAg
ICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKGRlc2lyZWRJbmRleCAtIGluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlVG9EZXNpcmVkSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvRGVzaXJlZEluZGV4ID0gZGlzdGFuY2U7CisgICAg
ICAgICAgICAgICAgbWlkZGxlQ29tbWl0U2V0ID0gY29tbWl0U2V0OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBjb21taXRTZXQ7CisgICAgfQorfQorCitpZiAodHlw
ZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1bGUuZXhwb3J0cy5NaWRkbGVDb21t
aXRTZXRGaW5kZXIgPSBNaWRkbGVDb21taXRTZXRGaW5kZXI7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYW5hbHlzaXMtdGFzay5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMKaW5kZXggNmUyMjI4NTY4MTU4ZGRjMTM4ODJjOGIz
ZDc3ZmFjNDRmOGJhOTJlOS4uNmJjYmY0OWE3OTlkMjMzZGQzMTg3MDI4ZGE2MzVhZGExYzc2NjA0
MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
YW5hbHlzaXMtdGFzay5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9hbmFseXNpcy10YXNrLmpzCkBAIC0xNjcsNiArMTY3LDM3IEBAIGNsYXNzIEFuYWx5
c2lzVGFzayBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICByZXR1cm4gY2F0ZWdvcnk7
CiAgICAgfQogCisgICAgYXN5bmMgbWlkZGxlQ29tbWl0U2V0Rm9yVGVzdEdyb3VwKHRlc3RHcm91
cCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRlc3RHcm91cC50YXNrKCkgPT0gdGhp
cyk7CisKKyAgICAgICAgY29uc3QgYXZhaWxhYmxlQ29tbWl0U2V0cyA9IGF3YWl0IHRoaXMuYWdn
cmVnYXRlQ29tbWl0U2V0cygpOworICAgICAgICByZXR1cm4gYXdhaXQgTWlkZGxlQ29tbWl0U2V0
RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0cyh0ZXN0R3JvdXAucmVx
dWVzdGVkQ29tbWl0U2V0cygpLCBhdmFpbGFibGVDb21taXRTZXRzKTsKKyAgICB9CisKKyAgICBh
c3luYyBhZ2dyZWdhdGVDb21taXRTZXRzKCkKKyAgICB7CisgICAgICAgIGNvbnN0IGFsbFRlc3RH
cm91cHNJblRhc2sgPSBhd2FpdCBUZXN0R3JvdXAuZmV0Y2hGb3JUYXNrKHRoaXMuaWQoKSk7Cisg
ICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHNJblRhc2sgPSBuZXcgU2V0OworICAgICAgICBmb3Ig
KGNvbnN0IGdyb3VwIG9mIGFsbFRlc3RHcm91cHNJblRhc2spCisgICAgICAgICAgICBncm91cC5y
ZXF1ZXN0ZWRDb21taXRTZXRzKCkuZm9yRWFjaCgoY29tbWl0U2V0KSA9PiBhbGxDb21taXRTZXRz
SW5UYXNrLmFkZChjb21taXRTZXQpKTsKKworICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMu
cGxhdGZvcm0oKTsKKyAgICAgICAgY29uc3QgbWV0cmljID0gdGhpcy5tZXRyaWMoKTsKKyAgICAg
ICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVkKG1ldHJpYyk7Cisg
ICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldChwbGF0
Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYXdhaXQgbWVh
c3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRoaXMuc3RhcnRUaW1lKCksIHRoaXMuZW5kVGltZSgp
KTsKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRTZXQuZmV0Y2hlZFRpbWVTZXJp
ZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjb25zdCBzdGFydFBvaW50ID0g
c2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElkKCkpOworICAgICAgICBjb25z
dCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1lYXN1cmVtZW50SWQoKSk7CisK
KyAgICAgICAgY29uc3QgdGltZVNlcmllc1ZpZXcgPSBzZXJpZXMudmlld0JldHdlZW5Qb2ludHMo
c3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbWVT
ZXJpZXNWaWV3KQorICAgICAgICAgICAgYWxsQ29tbWl0U2V0c0luVGFzay5hZGQocG9pbnQuY29t
bWl0U2V0KCkpOworCisgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFsbENvbW1pdFNldHNJblRh
c2spOworICAgIH0KKwogICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBbCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAyYzRiNDlmMmZmZDQ3OTk0NjRiMjgzMDExZjZmYTYy
NDNiZjM4Y2ZkLi41MDE3OTYzNGI0YmJlNzRhZjU4N2Q3MmM5NDQ1MmQ4NDhmOTQ3OTIyIDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQt
bG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2Nv
bW1pdC1sb2cuanMKQEAgLTI5LDEwICsyOSwxMyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBE
YXRhTW9kZWxPYmplY3QgewogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5tZXNzYWdlID0gcmF3
RGF0YS5tZXNzYWdlOwogICAgICAgICBpZiAocmF3RGF0YS5vd25zQ29tbWl0cykKICAgICAgICAg
ICAgIHRoaXMuX3Jhd0RhdGEub3duc0NvbW1pdHMgPSByYXdEYXRhLm93bnNDb21taXRzOworICAg
ICAgICBpZiAocmF3RGF0YS5vcmRlcikKKyAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGEub3JkZXIg
PSByYXdEYXRhLm9yZGVyOwogICAgIH0KIAogICAgIHJlcG9zaXRvcnkoKSB7IHJldHVybiB0aGlz
Ll9yZXBvc2l0b3J5OyB9CiAgICAgdGltZSgpIHsgcmV0dXJuIG5ldyBEYXRlKHRoaXMuX3Jhd0Rh
dGFbJ3RpbWUnXSk7IH0KKyAgICBoYXNDb21taXRUaW1lKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsndGltZSddID4gMCAmJiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gIT09IG51bGwgJiYgdGhpcy5f
cmF3RGF0YVsndGltZSddICE9PSB1bmRlZmluZWQ7IH0KICAgICBhdXRob3IoKSB7IHJldHVybiB0
aGlzLl9yYXdEYXRhWydhdXRob3JOYW1lJ107IH0KICAgICByZXZpc2lvbigpIHsgcmV0dXJuIHRo
aXMuX3Jhd0RhdGFbJ3JldmlzaW9uJ107IH0KICAgICBtZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5f
cmF3RGF0YVsnbWVzc2FnZSddOyB9CkBAIC00MCw2ICs0Myw4IEBAIGNsYXNzIENvbW1pdExvZyBl
eHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgb3duc0NvbW1pdHMoKSB7IHJldHVybiB0aGlz
Ll9yYXdEYXRhWydvd25zQ29tbWl0cyddOyB9CiAgICAgb3duZWRDb21taXRzKCkgeyByZXR1cm4g
dGhpcy5fb3duZWRDb21taXRzOyB9CiAgICAgb3duZXJDb21taXQoKSB7IHJldHVybiB0aGlzLl9v
d25lckNvbW1pdDsgfQorICAgIGhhc0NvbW1pdE9yZGVyKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsnb3JkZXInXSAhPT0gbnVsbCAmJiB0aGlzLl9yYXdEYXRhWydvcmRlciddICE9PSB1bmRlZmlu
ZWQ7IH0KKyAgICBvcmRlcigpIHsgcmV0dXJuICt0aGlzLl9yYXdEYXRhWydvcmRlciddOyB9CiAK
ICAgICBzZXRPd25lckNvbW1pdHMob3duZXJDb21taXQpIHsgdGhpcy5fb3duZXJDb21taXQgPSBv
d25lckNvbW1pdDsgfQogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwppbmRleCBlMWJiY2ZkMWQwMjA2MzIyNTVlM2Zm
MDIzMWQwY2UzZGI1Yjc1N2E4Li42ZjE0ZWE0NWJkOGZlYjkwYmNmODhjZGZlNTc3ODA3NjgyYmNi
YTU4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVs
cy9jb21taXQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2NvbW1pdC1zZXQuanMKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQ29tbWl0U2V0IGV4
dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBvd25lckNvbW1pdEZvclJlcG9zaXRvcnkocmVw
b3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0T3duZXJNYXAuZ2V0KHJl
cG9zaXRvcnkpOyB9CiAgICAgdG9wTGV2ZWxSZXBvc2l0b3JpZXMoKSB7IHJldHVybiBSZXBvc2l0
b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwodGhpcy5fcmVwb3NpdG9yaWVzLmZp
bHRlcigocmVwb3NpdG9yeSkgPT4gIXRoaXMub3duZXJSZXZpc2lvbkZvclJlcG9zaXRvcnkocmVw
b3NpdG9yeSkpKTsgfQogICAgIG93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KHJl
cG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3NpdG9yeVRvT3duZWRSZXBvc2l0b3Jp
ZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9Ci0gICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkp
OyB9CiAKICAgICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKICAgICB7CkBAIC0x
MjAsNiArMTE5LDEyIEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7
CiAgICAgICAgIHJldHVybiBDb21taXRTZXQuYXJlQ3VzdG9tUm9vdHNFcXVhbCh0aGlzLl9jdXN0
b21Sb290cywgb3RoZXIuX2N1c3RvbVJvb3RzKTsKICAgICB9CiAKKyAgICBoYXNTYW1lUmVwb3Np
dG9yaWVzKGNvbW1pdFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21taXRTZXQucmVwb3Np
dG9yaWVzKCkubGVuZ3RoID09PSB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuc2l6ZSAmJgor
ICAgICAgICAgICAgY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmV2ZXJ5KChyZXBvc2l0b3J5KSA9
PiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuaGFzKHJlcG9zaXRvcnkpKTsKKyAgICB9CisK
ICAgICBzdGF0aWMgYXJlQ3VzdG9tUm9vdHNFcXVhbChjdXN0b21Sb290czEsIGN1c3RvbVJvb3Rz
MikKICAgICB7CiAgICAgICAgIGlmIChjdXN0b21Sb290czEubGVuZ3RoICE9IGN1c3RvbVJvb3Rz
Mi5sZW5ndGgpCkBAIC0xNDYsNiArMTUxLDIyIEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERh
dGFNb2RlbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBjb250
YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuYWxs
Um9vdEZpbGVzKCkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
Zm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHRoaXMucmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLm93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLm93bmVkUmVwb3Np
dG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMucGF0Y2hGb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdGF0aWMgY3JlYXRlTmFtZVdpdGhvdXRDb2xs
aXNpb24obmFtZSwgZXhpc3RpbmdOYW1lU2V0KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQoZXhpc3RpbmdOYW1lU2V0IGluc3RhbmNlb2YgU2V0KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzCmluZGV4IDJk
YTYyMjA5Y2YzOWM3M2RiZjRjM2JjMmNhY2I0YmRiZDc2MWY2NTYuLmU4MjE2NzBhZGYxNTQwZTNj
ZTNiNWMxYzY0NTk3NzU2NmFlYzBhMGQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcwpAQCAtMTQsNyArMTQsNyBA
QCBjbGFzcyBUZXN0R3JvdXAgZXh0ZW5kcyBMYWJlbGVkT2JqZWN0IHsKICAgICAgICAgICAgIHJl
dHVybiBidWlsZFJlcXVlc3RzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIoKSAtIGIub3JkZXIoKSk7
CiAgICAgICAgIH0pOwogICAgICAgICB0aGlzLl9yZXBvc2l0b3JpZXMgPSBudWxsOwotICAgICAg
ICB0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseSA9IG5ldyBMYXppbHlFdmFs
dWF0ZWRGdW5jdGlvbih0aGlzLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cy5iaW5kKHRoaXMp
KTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHNMYXppbHkgPSBuZXcg
TGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24oVGVzdEdyb3VwLl9jb21wdXRlUmVxdWVzdGVkQ29tbWl0
U2V0cyk7CiAgICAgICAgIHRoaXMuX3JlcXVlc3RlZENvbW1pdFNldHMgPSBudWxsOwogICAgICAg
ICB0aGlzLl9jb21taXRTZXRUb0xhYmVsID0gbmV3IE1hcDsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQoIW9iamVjdC5wbGF0Zm9ybSB8fCBvYmplY3QucGxhdGZvcm0gaW5zdGFuY2VvZiBQbGF0Zm9y
bSk7CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFRlc3RHcm91cCBleHRlbmRzIExhYmVsZWRPYmpl
Y3QgewogICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHNMYXpp
bHkuZXZhbHVhdGUoLi4udGhpcy5fb3JkZXJlZEJ1aWxkUmVxdWVzdHMoKSk7CiAgICAgfQogCi0g
ICAgX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKC4uLm9yZGVyZWRCdWlsZFJlcXVlc3RzKQor
ICAgIHN0YXRpYyBfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMoLi4ub3JkZXJlZEJ1aWxkUmVx
dWVzdHMpCiAgICAgewogICAgICAgICBjb25zdCByZXF1ZXN0ZWRDb21taXRTZXRzID0gW107CiAg
ICAgICAgIGNvbnN0IGNvbW1pdFNldExhYmVsTWFwID0gbmV3IE1hcDsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdl
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10
YXNrLXBhZ2UuanMKaW5kZXggMDJjZmFhMDczZDFmNGNjNGE4ZTBkMmU2MTZjNGM3ZDNkZDVkY2Jj
Yy4uZTQ5NzM3MjIzMjE4MDE2OGI0YTU3MWQwMTBmYzFhNGNjZjc3ODRiMCAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNpcy10YXNrLXBh
Z2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFs
eXNpcy10YXNrLXBhZ2UuanMKQEAgLTI1OCw2ICsyNTgsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tU
ZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgIHRoaXMuX3JlbmRl
ckN1cnJlbnRUZXN0R3JvdXBMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhp
cy5fcmVuZGVyQ3VycmVudFRlc3RHcm91cC5iaW5kKHRoaXMpKTsKICAgICAgICAgdGhpcy5fdGVz
dEdyb3VwTWFwID0gbmV3IE1hcDsKICAgICAgICAgdGhpcy5fdGVzdEdyb3VwcyA9IFtdOworICAg
ICAgICB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cCA9IG51bGw7CiAgICAgICAgIHRo
aXMuX2N1cnJlbnRUZXN0R3JvdXAgPSBudWxsOwogICAgICAgICB0aGlzLl9zaG93SGlkZGVuR3Jv
dXBzID0gZmFsc2U7CiAgICAgfQpAQCAtMjY4LDEwICsyNjksMjUgQEAgY2xhc3MgQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICB0aGlzLnBh
cnQoJ3JldHJ5LWZvcm0nKS5saXN0ZW5Ub0FjdGlvbignc3RhcnRUZXN0aW5nJywgKHJlcGV0aXRp
b25Db3VudCkgPT4gewogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbigncmV0cnlUZXN0
R3JvdXAnLCB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpOwogICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLmxpc3RlblRvQWN0aW9uKCdz
dGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CisgICAgICAgICAgICBjb25zdCBt
aWRkbGVDb21taXRTZXQgPSB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cC5nZXQodGhp
cy5fY3VycmVudFRlc3RHcm91cCk7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdh
bmFseXplVGVzdEdyb3VwJywgdGhpcy5fY3VycmVudFRlc3RHcm91cCwgbWlkZGxlQ29tbWl0U2V0
LCByZXBldGl0aW9uQ291bnQpOworICAgICAgICB9KTsKICAgICB9CiAKLSAgICBzZXRUZXN0R3Jv
dXBzKHRlc3RHcm91cHMsIGN1cnJlbnRUZXN0R3JvdXAsIHNob3dIaWRkZW5Hcm91cHMpCisgICAg
YXN5bmMgc2V0VGVzdEdyb3Vwcyh0ZXN0R3JvdXBzLCBjdXJyZW50VGVzdEdyb3VwLCBzaG93SGlk
ZGVuR3JvdXBzKQogICAgIHsKKyAgICAgICAgY29uc3QgdGVzdEdyb3VwSWRTZXQgPSBuZXcgU2V0
KHRlc3RHcm91cHMubWFwKCh0ZXN0R3JvdXApID0+IHRlc3RHcm91cC5pZCgpKSk7CisgICAgICAg
IGNvbnN0IHNhbWVUZXN0R3JvdXBzID0gdGhpcy5fdGVzdEdyb3Vwcy5sZW5ndGggPT09IHRlc3RH
cm91cHMubGVuZ3RoICYmIHRoaXMuX3Rlc3RHcm91cHMuZXZlcnkoKHRlc3RHcm91cCkgPT4gdGVz
dEdyb3VwSWRTZXQuaGFzKHRlc3RHcm91cC5pZCgpKSk7CisgICAgICAgIGlmICghc2FtZVRlc3RH
cm91cHMpIHsKKyAgICAgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwID0g
bmV3IE1hcDsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZXMgPSB0ZXN0R3JvdXBz
Lm1hcCgodGVzdEdyb3VwKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RHcm91cC50
YXNrKCkubWlkZGxlQ29tbWl0U2V0Rm9yVGVzdEdyb3VwKHRlc3RHcm91cCkudGhlbigobWlkZGxl
Q29tbWl0U2V0KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNl
dEJ5VGVzdEdyb3VwLnNldCh0ZXN0R3JvdXAsIG1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgICAg
ICAgICAgfSkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwo
ZmV0Y2hpbmdQcm9taXNlcyk7CisgICAgICAgIH0KICAgICAgICAgdGhpcy5fdGVzdEdyb3VwcyA9
IHRlc3RHcm91cHM7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAgPSBjdXJyZW50VGVz
dEdyb3VwOwogICAgICAgICB0aGlzLl9zaG93SGlkZGVuR3JvdXBzID0gc2hvd0hpZGRlbkdyb3Vw
czsKQEAgLTMzNyw5ICszNTMsMTIgQEAgY2xhc3MgQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZSBl
eHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBpZiAoY3VycmVudEdyb3VwKQogICAgICAg
ICAgICAgdGhpcy5fdGVzdEdyb3VwTWFwLmdldChjdXJyZW50R3JvdXApLmxpc3RJdGVtLmNsYXNz
TGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkKKyAgICAg
ICAgaWYgKGN1cnJlbnRHcm91cCkgewogICAgICAgICAgICAgdGhpcy5wYXJ0KCdyZXRyeS1mb3Jt
Jykuc2V0UmVwZXRpdGlvbkNvdW50KGN1cnJlbnRHcm91cC5yZXBldGl0aW9uQ291bnQoKSk7Cisg
ICAgICAgICAgICB0aGlzLnBhcnQoJ2Jpc2VjdC1mb3JtJykuc2V0UmVwZXRpdGlvbkNvdW50KGN1
cnJlbnRHcm91cC5yZXBldGl0aW9uQ291bnQoKSk7CisgICAgICAgIH0KICAgICAgICAgdGhpcy5j
b250ZW50KCdyZXRyeS1mb3JtJykuc3R5bGUuZGlzcGxheSA9IGN1cnJlbnRHcm91cCA/IG51bGwg
OiAnbm9uZSc7CisgICAgICAgIHRoaXMuY29udGVudCgnYmlzZWN0LWZvcm0nKS5zdHlsZS5kaXNw
bGF5ID0gY3VycmVudEdyb3VwICYmIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwLmdl
dChjdXJyZW50R3JvdXApID8gbnVsbCA6ICdub25lJzsKIAogICAgICAgICBjb25zdCBoaWRlQnV0
dG9uID0gdGhpcy5jb250ZW50KCdoaWRlLWJ1dHRvbicpOwogICAgICAgICBoaWRlQnV0dG9uLnRl
eHRDb250ZW50ID0gY3VycmVudEdyb3VwICYmIGN1cnJlbnRHcm91cC5pc0hpZGRlbigpID8gJ1Vu
aGlkZScgOiAnSGlkZSc7CkBAIC0zNTYsNiArMzc1LDcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrVGVz
dEdyb3VwUGFuZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIDx0ZXN0
LWdyb3VwLXJlc3VsdHMtdmlld2VyIGlkPSJyZXN1bHRzLXZpZXdlciI+PC90ZXN0LWdyb3VwLXJl
c3VsdHMtdmlld2VyPgogICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxl
IGlkPSJyZXZpc2lvbi10YWJsZSI+PC90ZXN0LWdyb3VwLXJldmlzaW9uLXRhYmxlPgogICAgICAg
ICAgICAgICAgIDx0ZXN0LWdyb3VwLWZvcm0gaWQ9InJldHJ5LWZvcm0iPlJldHJ5PC90ZXN0LWdy
b3VwLWZvcm0+CisgICAgICAgICAgICAgICAgPHRlc3QtZ3JvdXAtZm9ybSBpZD0iYmlzZWN0LWZv
cm0iPkJpc2VjdDwvdGVzdC1ncm91cC1mb3JtPgogICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9
ImhpZGUtYnV0dG9uIj5IaWRlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InBl
bmRpbmctcmVxdWVzdC1jYW5jZWwtd2FybmluZyI+KGNhbmNlbHMgcGVuZGluZyByZXF1ZXN0cyk8
L3NwYW4+CiAgICAgICAgICAgICA8L2Rpdj5gOwpAQCAtNDIzLDcgKzQ0Myw3IEBAIGNsYXNzIEFu
YWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAg
ICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICNyZXRyeS1m
b3JtIHsKKyAgICAgICAgICAgICNyZXRyeS1mb3JtLCAjYmlzZWN0LWZvcm0gewogICAgICAgICAg
ICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICAgICAgIG1hcmdpbjogMC41cmVtOwog
ICAgICAgICAgICAgfQpAQCAtNTA5LDYgKzUyOSw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rp
b24oJ3JlbmFtZVRlc3RHcm91cCcsICh0ZXN0R3JvdXAsIG5ld05hbWUpID0+IHRoaXMuX3VwZGF0
ZVRlc3RHcm91cE5hbWUodGVzdEdyb3VwLCBuZXdOYW1lKSk7CiAgICAgICAgIGdyb3VwUGFuZS5s
aXN0ZW5Ub0FjdGlvbigndG9nZ2xlVGVzdEdyb3VwVmlzaWJpbGl0eScsICh0ZXN0R3JvdXApID0+
IHRoaXMuX2hpZGVDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCkpOwogICAgICAgICBncm91cFBh
bmUubGlzdGVuVG9BY3Rpb24oJ3JldHJ5VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgcmVwZXRpdGlv
bkNvdW50KSA9PiB0aGlzLl9yZXRyeUN1cnJlbnRUZXN0R3JvdXAodGVzdEdyb3VwLCByZXBldGl0
aW9uQ291bnQpKTsKKyAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRvQWN0aW9uKCdhbmFseXplVGVz
dEdyb3VwJywgKHRlc3RHcm91cCwgbWlkZGxlQ29tbWl0U2V0LCByZXBldGl0aW9uQ291bnQpID0+
IHRoaXMuX2FuYWx5emVDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgbWlkZGxlQ29tbWl0U2V0
LCByZXBldGl0aW9uQ291bnQpKTsKIAogICAgICAgICB0aGlzLnBhcnQoJ2NhdXNlLWxpc3QnKS5s
aXN0ZW5Ub0FjdGlvbignYWRkSXRlbScsIChyZXBvc2l0b3J5LCByZXZpc2lvbikgPT4gewogICAg
ICAgICAgICAgdGhpcy5fYXNzb2NpYXRlQ29tbWl0KCdjYXVzZScsIHJlcG9zaXRvcnksIHJldmlz
aW9uKTsKQEAgLTU3Nyw3ICs1OTgsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMg
UGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9
CiAKLSAgICBfZGlkRmV0Y2hUZXN0R3JvdXBzKHRlc3RHcm91cHMpCisgICAgYXN5bmMgX2RpZEZl
dGNoVGVzdEdyb3Vwcyh0ZXN0R3JvdXBzKQogICAgIHsKICAgICAgICAgdGhpcy5fdGVzdEdyb3Vw
cyA9IHRlc3RHcm91cHMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gK2EuY3JlYXRlZEF0
KCkgLSBiLmNyZWF0ZWRBdCgpOyB9KTsKICAgICAgICAgdGhpcy5fZGlkVXBkYXRlVGVzdEdyb3Vw
SGlkZGVuU3RhdGUoKTsKQEAgLTc5Myw3ICs4MTQsMjcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFn
ZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAgICAgICAudGhlbih0aGlzLl9kaWRG
ZXRjaFRlc3RHcm91cHMuYmluZCh0aGlzKSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAg
ICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwog
ICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVRlc3RHcm91cEFmdGVyVmVy
aWZ5aW5nQ29tbWl0U2V0TGlzdChuZXdOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1h
cCk7CisgICAgfQorCisgICAgYXN5bmMgX2FuYWx5emVDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91
cCwgbWlkZGxlQ29tbWl0U2V0LCByZXBldGl0aW9uQ291bnQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydCh0aGlzLl90YXNrKTsKKyAgICAgICAgY29uc3QgW29uZUNvbW1pdFNldCwgYW5v
dGhlckNvbW1pdFNldF0gPSB0ZXN0R3JvdXAucmVxdWVzdGVkQ29tbWl0U2V0cygpOworICAgICAg
ICBjb25zdCBjb21taXRTZXRzID0gW29uZUNvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0LCBhbm90
aGVyQ29tbWl0U2V0XTsKKyAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLl90YXNrLnBsYXRm
b3JtKCkgfHwgdGVzdEdyb3VwLnBsYXRmb3JtKCk7CisgICAgICAgIGNvbnN0IGV4aXN0aW5nVGVz
dEdyb3VwTmFtZXMgPSBuZXcgU2V0KCh0aGlzLl90ZXN0R3JvdXBzIHx8IFtdKS5tYXAoKHRlc3RH
cm91cCkgPT4gdGVzdEdyb3VwLm5hbWUoKSkpOworCisgICAgICAgIGZvciAobGV0IGkgPSAxOyBp
IDwgY29tbWl0U2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY29uc3QgcHJldmlvdXND
b21taXRTZXQgPSBjb21taXRTZXRzW2kgLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRD
b21taXRTZXQgPSBjb21taXRTZXRzW2ldOworICAgICAgICAgICAgY29uc3QgdGVzdEdyb3VwTmFt
ZSA9IENvbW1pdFNldC5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lvbihDb21taXRTZXQuZGlmZihw
cmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1pdFNldCksIGV4aXN0aW5nVGVzdEdyb3VwTmFt
ZXMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zdCB0ZXN0R3JvdXBz
ID0gIGF3YWl0IFRlc3RHcm91cC5jcmVhdGVXaXRoQ3VzdG9tQ29uZmlndXJhdGlvbih0aGlzLl90
YXNrLCBwbGF0Zm9ybSwgdGVzdEdyb3VwLnRlc3QoKSwgdGVzdEdyb3VwTmFtZSwgcmVwZXRpdGlv
bkNvdW50LCBbcHJldmlvdXNDb21taXRTZXQsIGN1cnJlbnRDb21taXRTZXRdKTsKKyAgICAgICAg
ICAgICAgICBhd2FpdCB0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHModGVzdEdyb3Vwcyk7CisgICAg
ICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0
byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0KIAogICAgIF9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0NvbW1p
dFNldExpc3QodGVzdEdyb3VwTmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpz
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwppbmRleCBk
MGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZjLi41ZTBlZjA4YjQ4NjM2MDJi
NjhhZDBhOTAxZDVmMzg4Y2E2ZjgxNTQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy90b29scy9qcy92My1tb2RlbHMuanMKQEAgLTM3LDUgKzM3LDYgQEAgaW1wb3J0RnJvbVYzKCdt
b2RlbHMvdXBsb2FkZWQtZmlsZS5qcycsICdVcGxvYWRlZEZpbGUnKTsKIGltcG9ydEZyb21WMygn
cHJpdmlsZWdlZC1hcGkuanMnLCAnUHJpdmlsZWdlZEFQSScpOwogaW1wb3J0RnJvbVYzKCdpbnN0
cnVtZW50YXRpb24uanMnLCAnSW5zdHJ1bWVudGF0aW9uJyk7CiBpbXBvcnRGcm9tVjMoJ2xhemls
eS1ldmFsdWF0ZWQtZnVuY3Rpb24uanMnLCAnTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24nKTsKK2lt
cG9ydEZyb21WMygnbWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLmpzJywgJ01pZGRsZUNvbW1pdFNl
dEZpbmRlcicpOwogCiBnbG9iYWwuU3RhdGlzdGljcyA9IHJlcXVpcmUoJy4uLy4uL3B1YmxpYy9z
aGFyZWQvc3RhdGlzdGljcy5qcycpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggZTNiZmI2MDU3Y2NlZDFk
ZTY0MGU1OTRlNzBhMDRmMWE0ZDZlZjBhZS4uNWUxN2I1OTQ0MGYwZjA0NTExMmM0Y2MwYjE4NzRk
ZTNjYjc5MDJhMiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVz
dHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5p
dC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0zMjgsNiArMzI4LDQzIEBAIGRlc2NyaWJl
KCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgICAgIH0pOwogICAgIH0pOwogCisgICAgZGVzY3Jp
YmUoJ2NvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCcsICgpID0+IHsKKyAgICAgICAgaXQo
J3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgY29tbWl0IGRvZXMgbm90IGNvbnRhaW4gcm9vdCwgcGF0
Y2ggb3Igb3duZWQgY29tbWl0JywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFvbmVD
b21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAg
ICBhc3NlcnQub2soIWFub3RoZXJDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRD
b21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhBbm90aGVyV2Vi
S2l0Q29tbWl0KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAg
ICAgYXNzZXJ0Lm9rKCFjb21taXRTZXRXaXRoU1ZOQ29tbWl0KCkuY29udGFpbnNSb290UGF0Y2hP
ck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90aGVyQ29tbWl0U2V0
V2l0aFNWTkNvbW1pdCgpLmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAg
ICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0V2l0aEdpdENvbW1pdCgpLmNvbnRhaW5zUm9vdFBh
dGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayghYW5vdGhlckNvbW1p
dFNldFdpdGhHaXRDb21taXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7Cisg
ICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29udGFpbnNS
b290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90aGVy
Q29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQo
KSk7CisgICAgICAgICAgICBhc3NlcnQub2soIW9uZU1lYXN1cmVtZW50Q29tbWl0U2V0KCkuY29u
dGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnc2hvdWxkIHJldHVybiB0cnVlIGlmIGNvbW1pdCBjb250YWlucyByb290LCBwYXRjaCBvciBv
d25lZCBjb21taXQnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0V2l0
aFBhdGNoKCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAg
YXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhBbm90aGVyUGF0Y2goKS5jb250YWluc1Jvb3RQYXRjaE9y
T3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0V2l0aFJvb3Qo
KS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQu
b2soYW5vdGhlckNvbW1pdFNldFdpdGhSb290KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29t
bWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhUd29Sb290cygpLmNv
bnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayhj
b21taXRTZXRXaXRoQW5vdGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpLmNvbnRhaW5zUm9vdFBhdGNo
T3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgn
aGFzU2FtZVJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4g
dHJ1ZSBpZiB0d28gY29tbWl0IHNldHMgaGF2ZSBzYW1lIHJlcG9zaXRvcmllcycsICgpID0+IHsK
KyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNTYW1lUmVwb3NpdG9yaWVz
KGFub3RoZXJDb21taXRTZXQoKSkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdp
dGhHaXRDb21taXQoKS5oYXNTYW1lUmVwb3NpdG9yaWVzKGFub3RoZXJDb21taXRTZXRXaXRoR2l0
Q29tbWl0KCkpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNTYW1l
UmVwb3NpdG9yaWVzKG9uZUNvbW1pdFNldCgpKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0
KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHR3byBjb21taXQgc2V0cyBoYXZlIGRpZmZlcmVuIHJl
cG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0V2l0
aEdpdENvbW1pdCgpLmhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0V2l0aFNWTkNvbW1pdCgp
KSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuaGFz
U2FtZVJlcG9zaXRvcmllcyhjb21taXRTZXRXaXRoR2l0Q29tbWl0KCkpKTsKKyAgICAgICAgfSk7
CisgICAgfSk7CisKICAgICBkZXNjcmliZSgnZGlmZicsICAoKSA9PiB7CiAgICAgICAgIGl0KCdz
aG91bGQgZGVzY3JpYmUgcGF0Y2ggZGlmZmVyZW5jZScsICgpID0+IHsKICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChDb21taXRTZXQuZGlmZihjb21taXRTZXRXaXRoUGF0Y2goKSwgY29tbWl0U2V0
V2l0aEFub3RoZXJQYXRjaCgpKSwgJ1dlYktpdDogcGF0Y2guZGF0IC0gcGF0Y2guZGF0ICgyKScp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWlkZGxl
LWNvbW1pdC1zZXQtZmluZGVyLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Vu
aXQtdGVzdHMvbWlkZGxlLWNvbW1pdC1zZXQtZmluZGVyLXRlc3RzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhm
NTVkZWM5OTYzNjUzZDRlMTYzODQ4YjNmZmFhODIzNWM2Njk1YWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9taWRkbGUtY29tbWl0LXNldC1m
aW5kZXItdGVzdHMuanMKQEAgLTAsMCArMSw1OTggQEAKKyd1c2Ugc3RyaWN0JzsKKworY29uc3Qg
YXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7CisKK3JlcXVpcmUoJy4uL3Rvb2xzL2pzL3YzLW1v
ZGVscy5qcycpOworbGV0IE1vY2tNb2RlbHMgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9tb2NrLXYz
LW1vZGVscy5qcycpLk1vY2tNb2RlbHM7CitsZXQgTW9ja1JlbW90ZUFQSSA9IHJlcXVpcmUoJy4v
cmVzb3VyY2VzL21vY2stcmVtb3RlLWFwaS5qcycpLk1vY2tSZW1vdGVBUEk7CisKK2Rlc2NyaWJl
KCdNaWRkbGVDb21taXRTZXRGaW5kZXInLCAoKSA9PiB7CisKKyAgICBmdW5jdGlvbiBtYWtlQ29t
bWl0KGlkLCByZXBvc2l0b3J5LCByZXZpc2lvbiwgdGltZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKGlkLCB7CisgICAgICAgICAgICByZXBvc2l0b3J5
LAorICAgICAgICAgICAgcmV2aXNpb24sCisgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2Us
CisgICAgICAgICAgICB0aW1lCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNv
cnRlZENvbW1pdFNldHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIENv
bW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRl
bXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01v
ZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNl
IH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExLCBNb2NrTW9k
ZWxzLm9zeCwgJ29zeC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAg
ICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMiwgeworICAgICAgICAgICAgICAgIHJl
dmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQo
MSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEy
LCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIxKSwgcmVxdWlyZXNCdWlsZDogZmFs
c2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtd
fSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDMsIHsKKyAgICAgICAg
ICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBt
YWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0yJywgMjApLCBy
ZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFr
ZUNvbW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3Rv
bVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig0LCB7
CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgzLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MycsIDMwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0zJywgMzEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oNSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJr
aXQtY29tbWl0LTYnLCA2MCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21t
aXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgIF07CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc29ydGVkQ29tbWl0U2V0c1dpdGhvdXRUaW1lT3JPcmRlcigpCisgICAgewor
ICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig2
LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAg
ICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNv
bW1pdC0xMDEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTExLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQt
MTExJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbig3LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDEsIE1vY2tNb2RlbHMud2Vi
a2l0LCAnd2Via2l0LWNvbW1pdC0xMDEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEyLCBNb2NrTW9kZWxzLm9z
eCwgJ29zeC1jb21taXQtMTEyJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig4LCB7CisgICAgICAgICAgICAgICAgcmV2aXNp
b25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDIs
IE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDInLCAwKSwgcmVxdWlyZXNCdWls
ZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEy
LCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEyJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBb
XX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig5LCB7CisgICAgICAg
ICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgxMDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDMnLCAw
KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6
IG1ha2VDb21taXQoMTEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEzJywgMCksIHJl
cXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
IGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRv
bigxMCwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTA2LCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtp
dC1jb21taXQtMTA2JywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDExMywgTW9ja01vZGVscy5vc3gsICdvc3gtY29t
bWl0LTExMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgXTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjb21taXRTZXRXaXRoU29tZUNvbW1pdHNPbmx5SGF2ZU9yZGVyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xl
dG9uKDExLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAg
ICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtp
dC1jb21taXQtMScsIDEwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1p
dC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsg
Y29tbWl0OiBtYWtlQ29tbWl0KDIwMSwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25l
ci1jb21taXQtMScsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1p
dFNldC5lbnN1cmVTaW5nbGV0b24oMTIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1z
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2Rl
bHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMTApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMiwgTW9ja01vZGVs
cy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMiwgTW9ja01vZGVscy5vd25l
clJlcG9zaXRvcnksICdvd25lci1jb21taXQtMicsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwK
KyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTMsIHsKKyAgICAgICAgICAg
ICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtl
Q29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0yJywgMjApLCByZXF1
aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNv
bW1pdCgxMiwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTInLCAyMSksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIw
MiwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMicsIDApLCByZXF1
aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBj
dXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24o
MTQsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAg
ICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNv
bW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAg
ICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTMn
LCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDIwMiwgTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25lci1j
b21taXQtMicsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNl
dC5lbnN1cmVTaW5nbGV0b24oMTUsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMu
d2Via2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAor
ICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5v
c3gsICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMywgTW9ja01vZGVscy5vd25lclJl
cG9zaXRvcnksICdvd25lci1jb21taXQtMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAg
ICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29t
bWl0KDYsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC02JywgNjApLCByZXF1aXJl
c0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1p
dCgxMywgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6
IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIwMywg
TW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksICdvd25lci1jb21taXQtMycsIDApLCByZXF1aXJl
c0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0
b21Sb290czogW119KSwKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVS
b290KCkKKyAgICB7CisgICAgICAgIHJldHVybiBVcGxvYWRlZEZpbGUuZW5zdXJlU2luZ2xldG9u
KDQ1NiwgeydjcmVhdGVkQXQnOiBuZXcgRGF0ZSgnMjAxNy0wNS0wMVQyMTowMzoyN1onKSwgJ2Zp
bGVuYW1lJzogJ3Jvb3QuZGF0JywgJ2V4dGVuc2lvbic6ICcuZGF0JywgJ2F1dGhvcic6ICdzb21l
IHVzZXInLAorICAgICAgICAgICAgc2l6ZTogMTY0NTIyMzQsIHNoYTI1NjogJzAzZWVkN2E4NDk0
YWI4Nzk0YzQ0YjdkNDMwOGU1NTQ0OGZjNTZmNGQ2YzE3NTgwOWJhOTY4Zjc4ZjY1NmQ1OGQnfSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aFJvb3QoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTUsIHsKKyAgICAgICAgICAgIHJl
dmlzaW9uSXRlbXM6IFt7IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwg
J3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAg
ICAgIGN1c3RvbVJvb3RzOiBbY3JlYXRlUm9vdCgpXQorICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjb21taXRTZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5l
bnN1cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1p
dDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRTZXRzV2l0aE5vQ29tbW9u
UmVwb3NpdG9yeSgpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIENvbW1pdFNldC5l
bnN1cmVTaW5nbGV0b24oMSwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMSwgTW9ja01vZGVscy53ZWJr
aXQsICd3ZWJraXQtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAg
ICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAn
b3N4LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29t
bWl0U2V0LmVuc3VyZVNpbmdsZXRvbigyLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVt
czogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgyLCBNb2NrTW9k
ZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgzMSwgTW9ja01vZGVs
cy5pb3MsICdpb3MtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pCisgICAgICAg
IF07CisgICAgfQorCisgICAgZGVzY3JpYmUoJ2NvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxs
Q29tbWl0cycsICgpID0+IHsKKyAgICAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKKyAgICAgICAg
bGV0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKworICAgICAgICBpdCgnc2hv
dWxkIHJldHVybiAibnVsbCIgaWYgbm8gY29tbW9uIHJlcG9zaXRvcnkgZm91bmQnLCBhc3luYyAo
KSA9PiB7CisgICAgICAgICAgICBjb25zdCBtaWRkbGVDb21taXRTZXQgPSBhd2FpdCBNaWRkbGVD
b21taXRTZXRGaW5kZXIuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKGNvbW1p
dFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkuc3BsaWNlKDAsIDIpKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiAibnVsbCIgdG8gYmlzZWN0IGNvbW1pdCBzZXQgd2l0aCBy
b290JywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0g
YXdhaXQgTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxs
Q29tbWl0cyhbY29tbWl0U2V0KCksIGNvbW1pdFNldFdpdGhSb290KCldLCBbY29tbWl0U2V0KCks
IGNvbW1pdFNldFdpdGhSb290KCldKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRkbGVD
b21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVy
biAibnVsbCIgaWYgbm8gcmVwb3NpdG9yeSB3aXRoIHRpbWUgb3Igb3JkZXIgaXMgZm91bmQnLCBh
c3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRzID0gc29ydGVkQ29t
bWl0U2V0c1dpdGhvdXRUaW1lT3JPcmRlcigpOworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21t
aXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0
ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAg
Y29uc3QgcHJvbWlzZSA9IE1pZGRsZUNvbW1pdFNldEZpbmRlci5jb21taXRTZXRDbG9zZXN0VG9N
aWRkbGVPZkFsbENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBhbGxDb21t
aXRTZXRzKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgNCk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9jb21taXRz
Lzkvb3N4LWNvbW1pdC0xMTEnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sx
XS51cmwsICcvYXBpL2NvbW1pdHMvOS9vc3gtY29tbWl0LTExMycpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9hcGkvY29tbWl0cy8xMS93ZWJraXQtY29tbWl0
LTEwMScpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwgJy9hcGkv
Y29tbWl0cy8xMS93ZWJraXQtY29tbWl0LTEwNicpOworCisgICAgICAgICAgICByZXF1ZXN0c1sw
XS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5v
c3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMTExJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDAKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAg
J2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogMTEzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29t
bWl0LTExMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwCisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzJd
LnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndl
YmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEwMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0xMDEnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZTogMAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKKyAgICAgICAgICAg
ICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlkOiAxMDYsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjog
J3dlYmtpdC1jb21taXQtMTA2JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDAKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Y29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0IGxvZycs
IGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHMgPSBzb3J0ZWRD
b21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBzdGFydENvbW1pdFNldCA9IGFsbENvbW1p
dFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRDb21taXRTZXQgPSBhbGxDb21taXRTZXRz
W2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25zdCBwcm9taXNlID0g
TWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0
cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAg
ICAgICAgY29uc3QgcmVqZWN0UmVhc29uID0gJzQwNCc7CisgICAgICAgICAgICByZXF1ZXN0c1sw
XS5yZWplY3QocmVqZWN0UmVhc29uKTsKKyAgICAgICAgICAgIGxldCBleGNlcHRpb25SYWlzZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXdhaXQgcHJvbWlz
ZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgZXhjZXB0
aW9uUmFpc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoZXJyb3IsIHJl
amVjdFJlYXNvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQub2soZXhjZXB0
aW9uUmFpc2VkKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gIm51
bGwiIGlmIG5vIGNvbW1pdCBzZXQgaXMgZmluZCBvdGhlciB0aGFuIHRoZSBjb21taXQgc2V0cyBk
ZWZpbmUgdGhlIHJhbmdlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgYWxsQ29t
bWl0U2V0cyA9IHNvcnRlZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29t
bWl0U2V0ID0gYWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNl
dCA9IGFsbENvbW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAg
IGxldCBwcm9taXNlID0gTWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01p
ZGRsZU9mQWxsQ29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIFtzdGFydENv
bW1pdFNldCwgZW5kQ29tbWl0U2V0XSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmws
ICcvYXBpL2NvbW1pdHMvOS8/cHJlY2VkaW5nUmV2aXNpb249b3N4LWNvbW1pdC0xJmxhc3RSZXZp
c2lvbj1vc3gtY29tbWl0LTMnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sx
XS51cmwsICcvYXBpL2NvbW1pdHMvMTEvP3ByZWNlZGluZ1JldmlzaW9uPXdlYmtpdC1jb21taXQt
MSZsYXN0UmV2aXNpb249d2Via2l0LWNvbW1pdC02Jyk7CisgICAgICAgICAgICByZXF1ZXN0c1sw
XS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5v
c3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIx
CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czog
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXF1ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9j
a01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTInLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZTogMjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJr
aXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTMnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTog
MzAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICd3ZWJraXQtY29tbWl0LTQnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNDAKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlkOiA1LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJr
aXQtY29tbWl0LTUnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNTAKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
OiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTYn
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZTogNjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29t
bWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRkbGVD
b21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVy
biBiaXNlY3Rpb24gcG9pbnQgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIHJldmlzaW9uIHJhbmdl
JywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9IHNvcnRl
ZENvbW1pdFNldHMoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0gYWxsQ29t
bWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENvbW1pdFNl
dHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGxldCBwcm9taXNlID0g
TWlkZGxlQ29tbWl0U2V0RmluZGVyLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0
cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAg
ICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1pdHMnOiBb
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDog
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0yJywK
KyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWU6IDIwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDMwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0Lmlk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAgICAgICAg
IG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDQwCisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
OiAnd2Via2l0LWNvbW1pdC01JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNv
bW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1sx
XS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5v
c3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIx
CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czog
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IHByb21pc2U7CisgICAgICAgICAgICBjb25z
dCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbM107CisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7
CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNhbWUgYmlzZWN0aW9u
IHBvaW50IGV2ZW4gd2hlbiB0d28gY29tbWl0IHNldHMgZnJvbSBvcmlnaW5hbCBjb21taXQgc2V0
IGhhdmUgaW52ZXJzZWQgb3JkZXInLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBh
bGxDb21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0cygpOworICAgICAgICAgICAgY29uc3Qgc3Rh
cnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3QgZW5kQ29t
bWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAg
ICAgICAgbGV0IHByb21pc2UgPSBNaWRkbGVDb21taXRTZXRGaW5kZXIuY29tbWl0U2V0Q2xvc2Vz
dFRvTWlkZGxlT2ZBbGxDb21taXRzKFtlbmRDb21taXRTZXQsIHN0YXJ0Q29tbWl0U2V0XSwgYWxs
Q29tbWl0U2V0cyk7CisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlkOiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246
ICd3ZWJraXQtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMjAKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlkOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29t
bWl0LTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZTogMzAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTog
TW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTQnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZTogNDAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53
ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA1LAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTUnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZTogNTAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTYnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3du
c0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNjAKKyAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRz
JzogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBv
c2l0b3J5OiBNb2NrTW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6
IDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTInLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZTogMjEKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVs
cy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDMxCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlz
ZTsKKyAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkTWlkZGxlQ29tbWl0U2V0ID0gYWxsQ29tbWl0
U2V0c1szXTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIGV4cGVj
dGVkTWlkZGxlQ29tbWl0U2V0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCB1
c2UgY29tbWl0cyB3aXRoIG9yZGVyIGFzIGZhbGxiYWNrIHdoZW4gbXVsdGlwbGUgY29tbWl0IHNl
dHMgZm91bmQgZm9yIHRoZSBjb21taXQgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2Yg
Y29tbWl0cyB3aXRoIHRpbWUnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxD
b21taXRTZXRzID0gY29tbWl0U2V0V2l0aFNvbWVDb21taXRzT25seUhhdmVPcmRlcigpOworICAg
ICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOworICAgICAg
ICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxl
bmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBNaWRkbGVDb21taXRTZXRGaW5k
ZXIuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKFtzdGFydENvbW1pdFNldCwg
ZW5kQ29tbWl0U2V0XSwgYWxsQ29tbWl0U2V0cyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHMubGVuZ3RoLCA0KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sw
XS51cmwsICcvYXBpL2NvbW1pdHMvOS8/cHJlY2VkaW5nUmV2aXNpb249b3N4LWNvbW1pdC0xJmxh
c3RSZXZpc2lvbj1vc3gtY29tbWl0LTMnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1pdHMvMTExL293bmVyLWNvbW1pdC0xJyk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2FwaS9jb21taXRzLzExMS9vd25l
ci1jb21taXQtMycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwg
Jy9hcGkvY29tbWl0cy8xMS8/cHJlY2VkaW5nUmV2aXNpb249d2Via2l0LWNvbW1pdC0xJmxhc3RS
ZXZpc2lvbj13ZWJraXQtY29tbWl0LTYnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVz
b2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0
LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIw
CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlz
aW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21t
aXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0
LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDog
NSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC01JywK
KyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgXQorICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkuaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0xJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93
bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcmRlcjogMQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1syXS5y
ZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25l
clJlcG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDMsCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0zJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWU6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4
LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAg
ICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDUpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzRdLnVybCwgJy9hcGkvY29tbWl0cy8xMTEvP3ByZWNlZGlu
Z1JldmlzaW9uPW93bmVyLWNvbW1pdC0xJmxhc3RSZXZpc2lvbj1vd25lci1jb21taXQtMycpOwor
ICAgICAgICAgICAgcmVxdWVzdHNbNF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1p
dHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZDogMjAyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdv
d25lci1jb21taXQtMicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFs
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3JkZXI6IDIKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25l
clJlcG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyMDMsCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0zJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWU6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjb25zdCBtaWRkbGVDb21taXRTZXQgPSBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAg
Y29uc3QgZXhwZWN0ZWRNaWRkbGVDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzNdOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKG1pZGRsZUNvbW1pdFNldCwgZXhwZWN0ZWRNaWRkbGVDb21taXRT
ZXQpOworICAgICAgICB9KTsKKyAgICB9KTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338090</attachid>
            <date>2018-04-17 01:26:31 -0700</date>
            <delta_ts>2018-04-18 09:13:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180417012630.patch</filename>
            <type>text/plain</type>
            <size>61394</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNjkxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkZTJiYjliMDRmMWY5NzFjN2RjNTVmZmRjYjRiNTg2NTIyMjE1Yzg2Li5iNmQ4YmIyOWRj
OTAyY2NjM2U1ZTcwNDY2MTBhNTgyYmZjNjcyYWM2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4MCBAQAorMjAxOC0wNC0xNyAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXN0aW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbiB3aGljaCB3aWxsIG9ubHkgYXBwZWFyIHdoZW4gdGhlIG1p
ZGRsZSBjb21taXQgc2V0IG9mIHRoZSByYW5nZSBpbgorICAgICAgICB0ZXN0IGdyb3VwIGNhbiBi
ZSBmb3VuZC4KKworICAgICAgICBGaW5kaW5nIG1pZGRsZSBjb21taXQgc2V0IGFsZ29yaXRobSBp
cyBkZXNjcmliZWQgYXMgZm9sbG93czoKKyAgICAgICAgMS4gRmluZCBhbGwgY29tbWl0cyBmcm9t
IG11bHRpcGxlIHJlcG9zaXRvcmllcyBhbW9uZyB0aGUgcmFuZ2VzIHNwZWNpZmllZCBieSB0d28g
Y29tbWl0IHNldHMgaW4gdGVzdCBncm91cC4gSW4KKyAgICAgICAgdGhlIG1lYW53aGlsZSwgbWVy
Z2UgYWxsIGNvbW1pdHMgdGhhdCBoYXZlIGNvbW1pdCB0aW1lIGludG8gYSBzaW5nbGUgbGlzdC4g
Rm9yIGNvbW1pdHMgb25seSBoYXZlIGNvbW1pdCBvcmRlciwKKyAgICAgICAgcHV0IHRob3NlIGNv
bW1pdHMgaW50byBzZXBhcmF0ZSBsaXN0cy4KKyAgICAgICAgMi4gRmlsdGVyIGFsbCB0aGUgYXZh
aWxhYmxlIGNvbW1pdCBzZXRzIGluIGN1cnJlbnQgYW5hbHlzaXMgdGFzayBieSBrZWVwaW5nIHRo
ZSBvbmVzIGhhdmUgZXhhY3QgcmVwb3NpdG9yaWVzCisgICAgICAgIGFzIHRoZSB0d28gY29tbWl0
IHNldHMgaW4gc3BlY2lmaWVkIHRlc3QgZ3JvdXAsIGFuZCBldmVyeSBjb21taXQgb2YgYSBjb21t
aXQgc2V0IGlzIGluIHNpZGUgdGhlIGNvbW1pdCByYW5nZS4KKyAgICAgICAgQWZ0ZXIgZmlsdGVy
aW5nIHRoZSBjb21taXQgc2V0cywgc29ydCB0aGUgcmVtYWluaW5nIG9uZXMgYW5kIG9ubHkga2Vl
cCBvbmUgY29tbWl0IHNldCBpZiBtdWx0aXBsZSBjb21taXQgc2V0cworICAgICAgICBhcmUgZXF1
YWwgdG8gZWFjaCBvdGhlci4KKyAgICAgICAgMy4gQW1vbmcgY29tbWl0cyBwcm9jZXNzZWQgYnkg
c3RlcCAyLCBmaW5kIHRoZSBjb21taXQgc2V0cyB0aGF0IGhhdmUgdGhlIGNvbW1pdCB3aGljaCBp
cyBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgYWxsIGNvbW1pdHMgdGhhdCBoYXZl
IGNvbW1pdCB0aW1lIGNyZWF0ZWQgZnJvbSBzdGVwIDEuCisgICAgICAgIDQuIEFtb25nIGNvbW1p
dHMgcHJvY2Vzc2VkIGJ5IHN0ZXAgMywgZmluZCB0aGUgY29tbWl0IHNldHMgdGhhdCBoYXZlIHRo
ZSBjb21taXQgd2hpY2ggaXMgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mCisgICAgICAgIGNvbW1p
dHMgdGhhdCBvbmx5IGhhdmUgY29tbWl0IG9yZGVyIGFuZCBjYXRlZ29yaXplZCBieSByZXBvc2l0
b3J5LgorICAgICAgICA1LiBJZiBtb3JlIHRoYW4gb25lIGNvbW1pdCBzZXRzIGFyZSBmb3VuZCwg
Y2hvb3NlIHRoZSBtaWRkbGUgY29tbWl0IHNldC4KKworICAgICAgICAqIHB1YmxpYy92My9jb21t
aXQtc2V0LXJhbmdlLWJpc2VjdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKENvbW1pdFNldFJhbmdl
QmlzZWN0b3IuYXN5bmMuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKTogSW5z
dGVhZCBvZiBuYWl2ZWx5IHJldHVybmluZyB0aGUgbWlkZGxlIG9mCisgICAgICAgIGV4aXN0aW5n
IGNvbW1pdCBzZXQgYXJyYXksIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyBhIGJpc2VjdCBiaXNlY3Rp
b24gcG9pbnRzIHRoYXQgaXMgY2xvc2VzdCB0byBhY3R1YWxseSBtaWRkbGUgb2YKKyAgICAgICAg
dGhlIHJldmlzaW9uIHJhbmdlIGJhc2VkIG9uIGFsbCByZXZpc2lvbnMgcmVwb3J0ZWQgdG8gcGVy
Zm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAgICAoQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fZmlu
ZENvbW1pdFNldHNXaXRoaW5SYW5nZSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGNvbW1pdCBz
ZXRzIHRob3NlIGFyZSBpbiBzcGVjaWZpZWQgcmFuZ2UuCisgICAgICAgIChDb21taXRTZXRSYW5n
ZUJpc2VjdG9yLl9zb3J0QW5kVW5pcXVlQ29tbWl0U2V0cyk6IEhlbHBlciBmdW5jdGlvbiB0byBz
b3J0IGFuZCB1bmlxdWUgY29tbWl0IHNldHMuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2Vj
dG9yLl9jbG9zZXN0Q29tbWl0U2V0c1RvQmlzZWN0aW5nQ29tbWl0QnlUaW1lKTogSGVscGVyIGZ1
bmN0aW9uIHRvIGZpbmQgdGhlIGNvbW1pdCBzZXRzCisgICAgICAgIHRob3NlIGFyZSBjbG9zZXN0
IHRvIHRoZSBtaWRkbGUgb2YgYW1vbmcgYWxsIHRoZSBjb21taXRzIGluIHRoZSByYW5nZSB0aGF0
IGhhdmUgY29tbWl0IHRpbWUuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9maW5k
Q29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhPcmRlcik6IEhlbHBlciBmdW5j
dGlvbiB3aGljaCBnb2VzIHRocm91Z2ggYWxsCisgICAgICAgIHJlcG9zaXRvcmllcyB0aGUgY29t
bWl0IG9mIHdoaWNoIGhhcyBjb21taXQgb3JkZXIsIGFuZCBmaW5kIHRoZSBjb21taXQgc2V0cyB0
aG9zZSBhcmUgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIGNvbW1pdHMKKyAgICAgICAgZm9yIGVh
Y2ggcmVwb3NpdG9yeS4KKyAgICAgICAgKENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2J1aWxkQ29t
bWl0VG9Db21taXRTZXRNYXApOiBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGRlciBtYXBwaW5nIGZy
b20gYSBjb21taXQgdG8gY29tbWl0IHNldHMgdGhvc2UKKyAgICAgICAgY29udGFpbnMgdGhpcyBj
b21taXQuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9maW5kQ2xvc2VzdENvbW1p
dEJ5SW5kZXgpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBjbG9zZXN0IGNvbW1pdCB0byB0aGUg
bWlkZGxlIG9mIGluZGV4LgorICAgICAgICAoQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvcik6CisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEltcG9ydHMgJ3B1YmxpYy92My9jb21taXQtc2V0
LXJhbmdlLWJpc2VjdG9yLmpzJy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lz
LXRhc2suanM6CisgICAgICAgIChBbmFseXNpc1Rhc2sucHJvdG90eXBlLmFzeW5jLm1pZGRsZUNv
bW1pdFNldEZvclRlc3RHcm91cCk6IEludm9rZXMgTWlkZGxlQ29tbWl0U2V0RmluZGVyIHRvIGZp
bmQgdGhlIG1pZGRsZSBjb21taXQgc2V0LgorICAgICAgICAoQW5hbHlzaXNUYXNrLnByb3RvdHlw
ZS5hc3luYy5jb21taXRTZXRzRnJvbVRlc3RHcm91cHNBbmRNZWFzdXJlbWVudFNldCk6IEFnZ3Jl
Z2F0ZXMgYWxsIGV4aXN0aW5nIGNvbW1pdCBzZXRzIGluIHRlc3QgZ3JvdXBzIG9mIGN1cnJlbnQg
YW5hbHlzaXMgdGFza3MuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpz
OgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5oYXNDb21taXRUaW1lKTogQSBoZWxwZXIg
ZnVuY3Rpb24gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21taXQgaGFzIGEgY29tbWl0IHRpbWUuIEZv
ciBjb21taXQKKyAgICAgICAgdGhhdCBkb2VzIG5vdCBoYXZlIHRpbWUsIHNlcnZlciB3aWxsIHJl
dHVybiBjb21taXQgdGltZSBhcyB6ZXJvLiBBcyBpdCBpcyB1bnJlYWxpc3RpYyBmb3IgYSBjb21t
aXQgaGFzIGNvbW1pdCB0aW1lCisgICAgICAgIDAsIGl0IHdvdWxkIGJlIHNhZmUgdG8gYXNzdW1l
IGEgdmFsaWQgY29tbWl0IHRpbWUgaXMgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIChDb21taXRM
b2cucHJvdG90eXBlLmhhc0NvbW1pdE9yZGVyKTogUmV0dXJucyB3aGV0aGVyIGEgY29tbWl0IGhh
cyBhIGNvbW1pdCBvZGVyLgorICAgICAgICAoQ29tbWl0TG9nLmhhc09yZGVyaW5nKToKKyAgICAg
ICAgKENvbW1pdExvZy5vcmRlclR3b0NvbW1pdHMpOgorICAgICAgICAqIHB1YmxpYy92My9tb2Rl
bHMvY29tbWl0LXNldC5qczoKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUuaGFzU2FtZVJl
cG9zaXRvcmllcyk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29t
bWl0IHNldCBoYXMgc2FtZSByZXBvc2l0b3JpZXMKKyAgICAgICAgYXMgY3VycmVudCByZXBvc2l0
b3J5LgorICAgICAgICAoQ29tbWl0U2V0LmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCk6
IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGN1cnJlbnQgY29tbWl0IHNl
dCBoYXMgcm9vdCwKKyAgICAgICAgcGF0Y2ggb3Igb3duZWQgY29tbWl0LgorICAgICAgICAoQ29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkpOiBUaGlzIGZ1bmN0aW9uIGRlZmluZWQgdHdpY2Ug
aWRlbnRpY2FsbHksIHJlbW92ZSBvbmUgb2YgdGhlbS4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9k
ZWxzL3Rlc3QtZ3JvdXAuanM6IE1ha2UgJ19jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cycgYSBz
dGF0aWMgZnVuY3Rpb24gYXMgaXQgZG9lcyBub3QgdXNlIGFueSBpbnN0YW5jZQorICAgICAgICB2
YXJpYWJsZXMuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5q
czogQWRkZWQgYmlzZWN0IGJ1dHRvbi4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Rlc3RHcm91cFBh
bmUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuZGlkQ29u
c3RydWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnBy
b3RvdHlwZS5hc3luYy5zZXRUZXN0R3JvdXBzKTogVXBkYXRlICdzZXRUZXN0R3JvdXBzJyB0byB1
cGRhdGUgX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwCisgICAgICAgIHdoZW4gdGhlIHRlc3Qg
Z3JvdXBzIGNoYW5nZXMuCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnByb3Rv
dHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6IEFkZGVkIGNvZGUgdG8gY29uZGl0aW9uYWxs
eSBzaG93IGJpc2VjdCBidXR0b24uCisgICAgICAgIEJpc2VjdCBidXR0b24gd2lsbCBvbmx5IHNo
b3cgd2hlbiB0aGVyZSBpcyBhIG1pZGRsZSBjb21taXQgc2V0IGZvciB0aGF0IHRlc3QgZ3JvdXAu
CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmh0bWxUZW1wbGF0ZSk6CisgICAg
ICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEFu
YWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOgorICAgICAg
ICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JldHJ5Q3VycmVudFRlc3RHcm91cCk6Cisg
ICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5hc3luYy5fYmlzZWN0Q3VycmVudFRl
c3RHcm91cCk6IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiBiaXNlY3QgYnV0
dG9uIGlzIGNsaWNrZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fZGlk
RmV0Y2hUZXN0R3JvdXBzKTogRGVsZXRlZCBhIHN0YXRlbWVudCBhZnRlciBmdW5jdGlvbidzIHJl
dHVybnMuCisgICAgICAgICogdG9vbHMvanMvdjMtbW9kZWxzLmpzOgorICAgICAgICAqIHVuaXQt
dGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ0NvbW1pdExv
Zy5oYXNDb21taXRUaW1lJywgJ0NvbW1pdExvZy5oYXNDb21taXRPcmRlcicgYW5kICdDb21taXRM
b2cuaGFzT3JkZXJpbmcnLgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5q
czogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ0NvbW1pdFNldC5oYXNTYW1lUmVwb3NpdG9yaWVzJyBh
bmQgJ0NvbW1pdFNldC5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQnLgorICAgICAgICAq
IHVuaXQtdGVzdHMvY29tbWl0LXNldC1yYW5nZS1iaXNlY3Rvci10ZXN0cy5qczogQWRkZWQgdW5p
dCB0ZXN0cyBmb3IgJ0NvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xvc2VzdFRvTWlk
ZGxlT2ZBbGxDb21taXRzJy4KKwogMjAxOC0wNC0xNiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFw
cGxlLmNvbT4KIAogICAgICAgICBDb21taXQgb3JkZXIgc2hvdWxkIGFsd2F5cyBiZSByZXR1cm5l
ZCBieSBhcGkuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbW1pdC1zZXQtcmFuZ2UtYmlzZWN0b3IuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2NvbW1pdC1zZXQtcmFuZ2UtYmlzZWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJhM2Iz
NmU3Yjc3NmExMmZjMGEwNDBhM2Y0Y2IwYzMwMWQyNDdiZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tbWl0LXNldC1yYW5nZS1iaXNlY3Rv
ci5qcwpAQCAtMCwwICsxLDE3MiBAQAorJ3VzZSBzdHJpY3QnOworCisKK2NsYXNzIENvbW1pdFNl
dFJhbmdlQmlzZWN0b3IgeworICAgIHN0YXRpYyBhc3luYyBjb21taXRTZXRDbG9zZXN0VG9NaWRk
bGVPZkFsbENvbW1pdHMoY29tbWl0U2V0c1RvU3BsaXQsIGF2YWlsYWJsZUNvbW1pdFNldHMpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRTZXRzVG9TcGxpdC5sZW5ndGggPT09
IDIpOworICAgICAgICBjb25zdCBbZmlyc3RDb21taXRTZXQsIHNlY29uZENvbW1pdFNldF0gPSBj
b21taXRTZXRzVG9TcGxpdDsKKyAgICAgICAgaWYgKGZpcnN0Q29tbWl0U2V0LmNvbnRhaW5zUm9v
dFBhdGNoT3JPd25lZENvbW1pdCgpIHx8IHNlY29uZENvbW1pdFNldC5jb250YWluc1Jvb3RQYXRj
aE9yT3duZWRDb21taXQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlm
ICghZmlyc3RDb21taXRTZXQuaGFzU2FtZVJlcG9zaXRvcmllcyhzZWNvbmRDb21taXRTZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yaWVzV2l0
aENvbW1pdFRpbWUgPSBuZXcgU2V0OworICAgICAgICBjb25zdCBjb21taXRSYW5nZUJ5UmVwb3Np
dG9yeSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnN0IGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRl
ckJ5UmVwb3NpdG9yeSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZXMg
PSBbXTsKKyAgICAgICAgY29uc3QgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lID0gW107CisgICAg
ICAgIGNvbnN0IHRvcExldmVsUmVwb3NpdG9yaWVzV2l0aENvbW1pdENoYW5nZSA9IGZpcnN0Q29t
bWl0U2V0LnRvcExldmVsUmVwb3NpdG9yaWVzKCkKKyAgICAgICAgICAgIC5maWx0ZXIoKHJlcG9z
aXRvcnkpID0+IGZpcnN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkg
IT09IHNlY29uZENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKTsKKwor
ICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgdG9wTGV2ZWxSZXBvc2l0b3JpZXNXaXRo
Q29tbWl0Q2hhbmdlKSB7CisgICAgICAgICAgICBjb25zdCBmaXJzdENvbW1pdCA9IGZpcnN0Q29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25z
dCBzZWNvbmRDb21taXQgPSBzZWNvbmRDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KTsKKworICAgICAgICAgICAgaWYgKCFDb21taXRMb2cuaGFzT3JkZXJpbmcoZmlyc3RD
b21taXQsIHNlY29uZENvbW1pdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGNvbnN0IFtzdGFydENvbW1pdCwgZW5kQ29tbWl0XSA9IENvbW1pdExvZy5vcmRlclR3
b0NvbW1pdHMoZmlyc3RDb21taXQsIHNlY29uZENvbW1pdCk7CisKKyAgICAgICAgICAgIGZldGNo
aW5nUHJvbWlzZXMucHVzaChDb21taXRMb2cuZmV0Y2hCZXR3ZWVuUmV2aXNpb25zKHJlcG9zaXRv
cnksIHN0YXJ0Q29tbWl0LnJldmlzaW9uKCksIGVuZENvbW1pdC5yZXZpc2lvbigpKQorICAgICAg
ICAgICAgICAgIC50aGVuKChjb21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFydENvbW1pdC5oYXNDb21taXRUaW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFs
bENvbW1pdHNXaXRoQ29tbWl0VGltZS5wdXNoKHN0YXJ0Q29tbWl0LCAuLi5jb21taXRzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0
b3J5LCAoY29tbWl0KSA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5oYXND
b21taXRUaW1lKCkgJiYgc3RhcnRDb21taXQudGltZSgpIDw9IGNvbW1pdC50aW1lKCkgJiYgY29t
bWl0LnRpbWUoKSA8PSBlbmRDb21taXQudGltZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lLmFkZChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4QnlD
b21taXQgPSBuZXcgTWFwOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhCeUNvbW1pdC5z
ZXQoc3RhcnRDb21taXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5mb3JF
YWNoKChjb21taXQsIGluZGV4KSA9PiBpbmRleEJ5Q29tbWl0LnNldChjb21taXQsIGluZGV4ICsg
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVy
QnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBpbmRleEJ5Q29tbWl0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCAoY29t
bWl0KSA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5oYXNDb21taXRPcmRl
cigpICYmIHN0YXJ0Q29tbWl0Lm9yZGVyKCkgPD0gY29tbWl0Lm9yZGVyKCkgJiYgY29tbWl0Lm9y
ZGVyKCkgPD0gZW5kQ29tbWl0Lm9yZGVyKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGZl
dGNoaW5nUHJvbWlzZXMpOworCisgICAgICAgIGlmICghcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRp
bWUuc2l6ZSAmJiAhaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVyQnlSZXBvc2l0b3J5LnNpemUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBjb25zdCBjb21taXRTZXRzSW5S
YW5nZSA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2ZpbmRDb21taXRTZXRzV2l0aGluUmFuZ2Uo
Zmlyc3RDb21taXRTZXQsIGF2YWlsYWJsZUNvbW1pdFNldHMsIGNvbW1pdFJhbmdlQnlSZXBvc2l0
b3J5KTsKKyAgICAgICAgbGV0IHNvcnRlZENvbW1pdFNldHMgPSBDb21taXRTZXRSYW5nZUJpc2Vj
dG9yLl9zb3J0QW5kVW5pcXVlQ29tbWl0U2V0cyhjb21taXRTZXRzSW5SYW5nZSwgcmVwb3NpdG9y
aWVzV2l0aENvbW1pdFRpbWUsIFsuLi5pbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9z
aXRvcnkua2V5cygpXSk7CisgICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHNMZW5ndGggPSBz
b3J0ZWRDb21taXRTZXRzLmxlbmd0aDsKKyAgICAgICAgaWYgKHNvcnRlZENvbW1pdFNldHNMZW5n
dGggPD0gMikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KChmaXJzdENvbW1pdFNldC5lcXVhbHMoc29ydGVkQ29tbWl0U2V0c1swXSkgJiYgc2Vjb25k
Q29tbWl0U2V0LmVxdWFscyhzb3J0ZWRDb21taXRTZXRzW3NvcnRlZENvbW1pdFNldHNMZW5ndGgg
LSAxXSkpCisgICAgICAgICAgICB8fCAoZmlyc3RDb21taXRTZXQuZXF1YWxzKHNvcnRlZENvbW1p
dFNldHNbc29ydGVkQ29tbWl0U2V0c0xlbmd0aCAtIDFdKSAmJiBzZWNvbmRDb21taXRTZXQuZXF1
YWxzKHNvcnRlZENvbW1pdFNldHNbMF0pKSk7CisKKyAgICAgICAgbGV0IHJlbWFpbmluZ0NvbW1p
dFNldHMgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9jbG9zZXN0Q29tbWl0U2V0c1RvQmlzZWN0
aW5nQ29tbWl0QnlUaW1lKHNvcnRlZENvbW1pdFNldHMuc2xpY2UoMSwgLTEpLCByZXBvc2l0b3Jp
ZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKTsKKyAgICAgICAgcmVt
YWluaW5nQ29tbWl0U2V0cyA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2ZpbmRDb21taXRTZXRz
Q2xvc2VzdFRvTWlkZGxlT2ZDb21taXRzV2l0aE9yZGVyKHJlbWFpbmluZ0NvbW1pdFNldHMsIGlu
ZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSk7CisKKyAgICAgICAgaWYgKCFy
ZW1haW5pbmdDb21taXRTZXRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICByZXR1cm4gcmVtYWluaW5nQ29tbWl0U2V0c1tNYXRoLmZsb29yKHJlbWFpbmluZ0NvbW1p
dFNldHMubGVuZ3RoIC8gMildOworICAgIH0KKworICAgIHN0YXRpYyBfZmluZENvbW1pdFNldHNX
aXRoaW5SYW5nZShmaWx0ZXJpbmdDb21taXRTZXQsIGF2YWlsYWJsZUNvbW1pdFNldHMsIGNvbW1p
dFJhbmdlQnlSZXBvc2l0b3J5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbW1p
dFNldHMuZmlsdGVyKChjb21taXRTZXQpID0+IHsKKyAgICAgICAgICAgIGlmICghY29tbWl0U2V0
Lmhhc1NhbWVSZXBvc2l0b3JpZXMoZmlsdGVyaW5nQ29tbWl0U2V0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXBvc2l0b3J5LCBpc0Nv
bW1pdEluUmFuZ2VdIG9mIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5KSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NvbW1pdEluUmFuZ2UoY29tbWl0KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBfc29ydEFuZFVu
aXF1ZUNvbW1pdFNldHMoY29tbWl0U2V0cywgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUsIHJl
cG9zaXRvcnlXaXRoT25seUNvbW1pdE9yZGVyKQorICAgIHsKKyAgICAgICAgY29uc3Qgc29ydGVk
Q29tbWl0U2V0cyA9IGNvbW1pdFNldHMuc29ydCgoZmlyc3RDb21taXRTZXQsIHNlY29uZENvbW1p
dFNldCkgPT4geworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRv
cmllc1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb21taXQg
PSBmaXJzdENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgICAgIGNvbnN0IHNlY29uZENvbW1pdCA9IHNlY29uZENvbW1pdFNldC5jb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbW1pdC50
aW1lKCkgPT09IHNlY29uZENvbW1pdC50aW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENvbW1pdC50aW1lKCkgLSBzZWNvbmRD
b21taXQudGltZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChjb25zdCByZXBv
c2l0b3J5IG9mIHJlcG9zaXRvcnlXaXRoT25seUNvbW1pdE9yZGVyKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgZmlyc3RDb21taXQgPSBmaXJzdENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5
KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZENvbW1pdCA9IHNlY29u
ZENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAg
ICAgIGlmIChmaXJzdENvbW1pdC5vcmRlcigpID09PSBzZWNvbmRDb21taXQub3JkZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0
Q29tbWl0Lm9yZGVyKCkgLSBzZWNvbmRDb21taXQub3JkZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gc29ydGVk
Q29tbWl0U2V0cy5maWx0ZXIoKGN1cnJlbnRTZXQsIGkpID0+ICFpIHx8ICFjdXJyZW50U2V0LmVx
dWFscyhzb3J0ZWRDb21taXRTZXRzW2kgLSAxXSkpOworICAgIH0KKworICAgIHN0YXRpYyBfY2xv
c2VzdENvbW1pdFNldHNUb0Jpc2VjdGluZ0NvbW1pdEJ5VGltZShzb3J0ZWRDb21taXRTZXRzLCBy
ZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKQorICAg
IHsKKyAgICAgICAgaWYgKCFyZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZS5zaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHNvcnRlZENvbW1pdFNldHM7CisKKyAgICAgICAgY29uc3QgaW5kZXhCeUNv
bW1pdFdpdGhUaW1lID0gbmV3IE1hcDsKKyAgICAgICAgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1l
LnNvcnQoKGZpcnN0Q29tbWl0LCBzZWNvbmRDb21taXQpID0+IGZpcnN0Q29tbWl0LnRpbWUoKSAt
IHNlY29uZENvbW1pdC50aW1lKCkpCisgICAgICAgICAgICAuZm9yRWFjaCgoY29tbWl0LCBpbmRl
eCkgPT4gaW5kZXhCeUNvbW1pdFdpdGhUaW1lLnNldChjb21taXQsIGluZGV4KSk7CisKKyAgICAg
ICAgY29uc3QgY29tbWl0VG9Db21taXRTZXRNYXAgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9i
dWlsZENvbW1pdFRvQ29tbWl0U2V0TWFwKHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lLCBzb3J0
ZWRDb21taXRTZXRzKTsKKyAgICAgICAgY29uc3QgY2xvc2VzdENvbW1pdCA9IENvbW1pdFNldFJh
bmdlQmlzZWN0b3IuX2ZpbmRDbG9zZXN0Q29tbWl0QnlJbmRleChpbmRleEJ5Q29tbWl0V2l0aFRp
bWUsIGNvbW1pdFRvQ29tbWl0U2V0TWFwLmtleXMoKSk7CisgICAgICAgIHJldHVybiBBcnJheS5m
cm9tKGNvbW1pdFRvQ29tbWl0U2V0TWFwLmdldChjbG9zZXN0Q29tbWl0KSk7CisgICAgfQorCisg
ICAgc3RhdGljIF9maW5kQ29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhPcmRl
cihyZW1haW5pbmdDb21taXRTZXRzLCBpbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9z
aXRvcnkpCisgICAgeworICAgICAgICBpZiAoIWluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5
UmVwb3NpdG9yeS5zaXplKQorICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7
CisKKyAgICAgICAgY29uc3QgY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRzID0g
Q29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fYnVpbGRDb21taXRUb0NvbW1pdFNldE1hcChpbmRleEZv
ckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkua2V5cygpLCByZW1haW5pbmdDb21taXRT
ZXRzKTsKKworICAgICAgICBmb3IgKGNvbnN0IFtyZXBvc2l0b3J5LCBpbmRleEJ5Q29tbWl0XSBv
ZiBpbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkpIHsKKyAgICAgICAgICAg
IGNvbnN0IGNvbW1pdHMgPSByZW1haW5pbmdDb21taXRTZXRzLm1hcCgoY29tbWl0U2V0KSA9PiBj
b21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSk7CisgICAgICAgICAgICBj
b25zdCBjbG9zZXN0Q29tbWl0ID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fZmluZENsb3Nlc3RD
b21taXRCeUluZGV4KGluZGV4QnlDb21taXQsIGNvbW1pdHMpOworICAgICAgICAgICAgY29uc3Qg
Y29tbWl0U2V0cyA9IGNvbW1pdE9ubHlPcmRlckF2YWlsYWJsZVRvQ29tbWl0U2V0cy5nZXQoY2xv
c2VzdENvbW1pdCk7CisgICAgICAgICAgICByZW1haW5pbmdDb21taXRTZXRzID0gcmVtYWluaW5n
Q29tbWl0U2V0cy5maWx0ZXIoKGNvbW1pdFNldCkgPT4gY29tbWl0U2V0cy5oYXMoY29tbWl0U2V0
KSk7CisgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoKQorICAgICAg
ICAgICAgICAgIHJldHVybiByZW1haW5pbmdDb21taXRTZXRzOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZW1haW5pbmdDb21taXRTZXRzOworICAgIH0KKworICAgIHN0YXRpYyBfYnVpbGRD
b21taXRUb0NvbW1pdFNldE1hcChyZXBvc2l0b3JpZXMsIGNvbW1pdFNldHMpCisgICAgeworICAg
ICAgICBjb25zdCBjb21taXRUb0NvbW1pdFNldE1hcCA9IG5ldyBNYXA7CisgICAgICAgIGZvciAo
Y29uc3QgcmVwb3NpdG9yeSBvZiByZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGZvciAoY29u
c3QgY29tbWl0U2V0IG9mIGNvbW1pdFNldHMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21t
aXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbW1pdFRvQ29tbWl0U2V0TWFwLmhhcyhjb21taXQpKQorICAgICAgICAg
ICAgICAgICAgICBjb21taXRUb0NvbW1pdFNldE1hcC5zZXQoY29tbWl0LCBuZXcgU2V0KTsKKyAg
ICAgICAgICAgICAgICBjb21taXRUb0NvbW1pdFNldE1hcC5nZXQoY29tbWl0KS5hZGQoY29tbWl0
U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tbWl0VG9D
b21taXRTZXRNYXA7CisgICAgfQorCisgICAgc3RhdGljIF9maW5kQ2xvc2VzdENvbW1pdEJ5SW5k
ZXgoaW5kZXhCeUNvbW1pdCwgY29tbWl0cykKKyAgICB7CisgICAgICAgIGNvbnN0IGRlc2lyZWRD
b21taXRJbmRleCA9IGluZGV4QnlDb21taXQuc2l6ZSAvIDI7CisgICAgICAgIGxldCBtaW5Db21t
aXREaXN0YW5jZSA9IGluZGV4QnlDb21taXQuc2l6ZTsKKyAgICAgICAgbGV0IGNsb3Nlc3RDb21t
aXQgPSBudWxsOworICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdCBvZiBjb21taXRzKSB7CisgICAg
ICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4QnlDb21taXQuZ2V0KGNvbW1pdCk7CisgICAgICAg
ICAgICBjb25zdCBkaXN0YW5jZUZvckNvbW1pdCA9IE1hdGguYWJzKGluZGV4IC0gZGVzaXJlZENv
bW1pdEluZGV4KTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZUZvckNvbW1pdCA8IG1pbkNvbW1p
dERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgbWluQ29tbWl0RGlzdGFuY2UgPSBkaXN0YW5j
ZUZvckNvbW1pdDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0Q29tbWl0ID0gY29tbWl0OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjbG9zZXN0Q29tbWl0OworICAg
IH0KK30KKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAgbW9kdWxlLmV4
cG9ydHMuQ29tbWl0U2V0UmFuZ2VCaXNlY3RvciA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3I7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9pbmRleC5odG1sCmluZGV4IDAyMzNmOTZmZWFlNzgzN2U4MmQ3MDQxMDI3NzYwZWE1
ZTAxYmUzYmYuLjljMDg3NmE2MTg5YjYxZmVlZWQ2MzYxNmZmZTlmMzYxODQyYjE2ZWUgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTQ1LDYg
KzQ1LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2Fk
IHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwcml2aWxlZ2Vk
LWFwaS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJhc3luYy10YXNrLmpzIj48
L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImxhemlseS1ldmFsdWF0ZWQtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tbWl0LXNldC1yYW5nZS1iaXNl
Y3Rvci5qcyI+PC9zY3JpcHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9Im1vZGVscy90aW1lLXNl
cmllcy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvbWVhc3VyZW1l
bnQtYWRhcHRvci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9hbmFseXNpcy10YXNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwppbmRleCA2ZTIyMjg1
NjgxNThkZGMxMzg4MmM4YjNkNzdmYWM0NGY4YmE5MmU5Li40MmYxZTM2OWRkYWE0NWZlNWFjZWU4
MWY4MWQ2OGQ0MGJlOTE5Nzg2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9hbmFseXNpcy10YXNrLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMKQEAgLTE2Nyw2ICsxNjcs
MzEgQEAgY2xhc3MgQW5hbHlzaXNUYXNrIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBjYXRlZ29yeTsKICAgICB9CiAKKyAgICBhc3luYyBjb21taXRTZXRzRnJvbVRlc3RH
cm91cHNBbmRNZWFzdXJlbWVudFNldCgpCisgICAgeworICAgICAgICBjb25zdCBhbGxUZXN0R3Jv
dXBzSW5UYXNrID0gYXdhaXQgVGVzdEdyb3VwLmZldGNoRm9yVGFzayh0aGlzLmlkKCkpOworICAg
ICAgICBjb25zdCBhbGxDb21taXRTZXRzSW5UYXNrID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChj
b25zdCBncm91cCBvZiBhbGxUZXN0R3JvdXBzSW5UYXNrKQorICAgICAgICAgICAgZ3JvdXAucmVx
dWVzdGVkQ29tbWl0U2V0cygpLmZvckVhY2goKGNvbW1pdFNldCkgPT4gYWxsQ29tbWl0U2V0c0lu
VGFzay5hZGQoY29tbWl0U2V0KSk7CisKKyAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBs
YXRmb3JtKCk7CisgICAgICAgIGNvbnN0IG1ldHJpYyA9IHRoaXMubWV0cmljKCk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHBsYXRmb3JtKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQobWV0cmlj
KTsKKyAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVkKG1l
dHJpYyk7CisgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmlu
ZFNldChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAg
YXdhaXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRoaXMuc3RhcnRUaW1lKCksIHRoaXMu
ZW5kVGltZSgpKTsKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRTZXQuZmV0Y2hl
ZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjb25zdCBzdGFy
dFBvaW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElkKCkpOworICAg
ICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1lYXN1cmVtZW50
SWQoKSk7CisKKyAgICAgICAgY29uc3QgdGltZVNlcmllc1ZpZXcgPSBzZXJpZXMudmlld0JldHdl
ZW5Qb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgICAgICBmb3IgKGNvbnN0IHBvaW50
IG9mIHRpbWVTZXJpZXNWaWV3KQorICAgICAgICAgICAgYWxsQ29tbWl0U2V0c0luVGFzay5hZGQo
cG9pbnQuY29tbWl0U2V0KCkpOworCisgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFsbENvbW1p
dFNldHNJblRhc2spOworICAgIH0KKwogICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBbCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAzOWIzMjYwZTJkOGI5M2VlMDY2YTQ4
NThjMjhiMTEyZjNlZTk3MjVhLi4zY2QwNzk0OGQyNTg1Mjc2NDA0MzUyMWE3NTkyMzgxMTdjZGE1
MGU2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVs
cy9jb21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2NvbW1pdC1sb2cuanMKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4
dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKIAogICAgIHJlcG9zaXRvcnkoKSB7IHJldHVybiB0aGlz
Ll9yZXBvc2l0b3J5OyB9CiAgICAgdGltZSgpIHsgcmV0dXJuIG5ldyBEYXRlKHRoaXMuX3Jhd0Rh
dGFbJ3RpbWUnXSk7IH0KKyAgICBoYXNDb21taXRUaW1lKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsndGltZSddID4gMCAmJiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gIT0gbnVsbDsgfQogICAgIGF1
dGhvcigpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ2F1dGhvck5hbWUnXTsgfQogICAgIHJldmlz
aW9uKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsncmV2aXNpb24nXTsgfQogICAgIG1lc3NhZ2Uo
KSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdlJ107IH0KQEAgLTQzLDYgKzQ0LDcgQEAg
Y2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBvd25lZENvbW1p
dHMoKSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdHM7IH0KICAgICBvd25lckNvbW1pdCgpIHsg
cmV0dXJuIHRoaXMuX293bmVyQ29tbWl0OyB9CiAgICAgb3JkZXIoKSB7IHJldHVybiB0aGlzLl9y
YXdEYXRhWydvcmRlciddOyB9CisgICAgaGFzQ29tbWl0T3JkZXIoKSB7IHJldHVybiB0aGlzLl9y
YXdEYXRhWydvcmRlciddICE9IG51bGw7IH0KICAgICBzZXRPd25lckNvbW1pdHMob3duZXJDb21t
aXQpIHsgdGhpcy5fb3duZXJDb21taXQgPSBvd25lckNvbW1pdDsgfQogCiAgICAgbGFiZWwoKQpA
QCAtOTIsNiArOTQsMjAgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0
IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgc3RhdGljIGhhc09yZGVyaW5nKGZpcnN0Q29t
bWl0LCBzZWNvbmRDb21taXQpCisgICAgeworICAgICAgICByZXR1cm4gKGZpcnN0Q29tbWl0Lmhh
c0NvbW1pdFRpbWUoKSAmJiBzZWNvbmRDb21taXQuaGFzQ29tbWl0VGltZSgpKSB8fAorICAgICAg
ICAgICAgZmlyc3RDb21taXQuaGFzQ29tbWl0T3JkZXIoKSAmJiBzZWNvbmRDb21taXQuaGFzQ29t
bWl0T3JkZXIoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgb3JkZXJUd29Db21taXRzKGZpcnN0Q29t
bWl0LCBzZWNvbmRDb21taXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChDb21taXRM
b2cuaGFzT3JkZXJpbmcoZmlyc3RDb21taXQsIHNlY29uZENvbW1pdCkpOworICAgICAgICBjb25z
dCBmaXJzdENvbW1pdFNtYWxsZXIgPSAoZmlyc3RDb21taXQuaGFzQ29tbWl0VGltZSgpICYmIHNl
Y29uZENvbW1pdC5oYXNDb21taXRUaW1lKCkKKyAgICAgICAgICAgICYmIGZpcnN0Q29tbWl0LnRp
bWUoKSA8IHNlY29uZENvbW1pdC50aW1lKCkpIHx8IGZpcnN0Q29tbWl0Lm9yZGVyKCkgPCBzZWNv
bmRDb21taXQub3JkZXIoKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0Q29tbWl0U21hbGxlciA/IFtm
aXJzdENvbW1pdCwgc2Vjb25kQ29tbWl0XSA6IFtzZWNvbmRDb21taXQsIGZpcnN0Q29tbWl0XTsK
KyAgICB9CisKICAgICBvd25lZENvbW1pdEZvck93bmVkUmVwb3NpdG9yeShvd25lZFJlcG9zaXRv
cnkpIHsgcmV0dXJuIHRoaXMuX293bmVkQ29tbWl0QnlPd25lZFJlcG9zaXRvcnkuZ2V0KG93bmVk
UmVwb3NpdG9yeSk7IH0KIAogICAgIGZldGNoT3duZWRDb21taXRzKCkKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCmlu
ZGV4IGYxNzk1MTEwYzRhMWM4OThhNTAzZjI5MWVhNmZkYjNiNDBhMmY1M2UuLjRhNDU4ZjhhNjNj
ZmEwZWM1YWFkODllMWJjNmE3YTA4ZGNmMDE2ZDEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwpAQCAtNzEsNyAr
NzEsNiBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIG93
bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0
b3J5VG9Db21taXRPd25lck1hcC5nZXQocmVwb3NpdG9yeSk7IH0KICAgICB0b3BMZXZlbFJlcG9z
aXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0
aFVSTCh0aGlzLl9yZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9PiAhdGhpcy5vd25l
clJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkpOyB9CiAgICAgb3duZWRSZXBvc2l0
b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZXJS
ZXBvc2l0b3J5VG9Pd25lZFJlcG9zaXRvcmllc01hcC5nZXQocmVwb3NpdG9yeSk7IH0KLSAgICBj
b21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlU
b0NvbW1pdE1hcC5nZXQocmVwb3NpdG9yeSk7IH0KIAogICAgIHJldmlzaW9uRm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KQogICAgIHsKQEAgLTEyMCw2ICsxMTksMTIgQEAgY2xhc3MgQ29tbWl0U2V0
IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIENvbW1pdFNldC5hcmVD
dXN0b21Sb290c0VxdWFsKHRoaXMuX2N1c3RvbVJvb3RzLCBvdGhlci5fY3VzdG9tUm9vdHMpOwog
ICAgIH0KIAorICAgIGhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5sZW5ndGggPT09IHRoaXMuX3JlcG9z
aXRvcnlUb0NvbW1pdE1hcC5zaXplICYmCisgICAgICAgICAgICBjb21taXRTZXQucmVwb3NpdG9y
aWVzKCkuZXZlcnkoKHJlcG9zaXRvcnkpID0+IHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE1hcC5o
YXMocmVwb3NpdG9yeSkpOworICAgIH0KKwogICAgIHN0YXRpYyBhcmVDdXN0b21Sb290c0VxdWFs
KGN1c3RvbVJvb3RzMSwgY3VzdG9tUm9vdHMyKQogICAgIHsKICAgICAgICAgaWYgKGN1c3RvbVJv
b3RzMS5sZW5ndGggIT0gY3VzdG9tUm9vdHMyLmxlbmd0aCkKQEAgLTE0Niw2ICsxNTEsMjIgQEAg
Y2xhc3MgQ29tbWl0U2V0IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAorICAgIGNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5hbGxSb290RmlsZXMoKS5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgdGhpcy5y
ZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgaWYgKHRoaXMub3duZXJDb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgaWYgKHRoaXMub3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3Np
dG9yeSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAodGhp
cy5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHN0
YXRpYyBjcmVhdGVOYW1lV2l0aG91dENvbGxpc2lvbihuYW1lLCBleGlzdGluZ05hbWVTZXQpCiAg
ICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChleGlzdGluZ05hbWVTZXQgaW5zdGFuY2VvZiBT
ZXQpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvdGVzdC1ncm91cC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL3Rlc3QtZ3JvdXAuanMKaW5kZXggMmRhNjIyMDljZjM5YzczZGJmNGMzYmMyY2FjYjRiZGJk
NzYxZjY1Ni4uZTgyMTY3MGFkZjE1NDBlM2NlM2I1YzFjNjQ1OTc3NTY2YWVjMGEwZCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91
cC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0
LWdyb3VwLmpzCkBAIC0xNCw3ICsxNCw3IEBAIGNsYXNzIFRlc3RHcm91cCBleHRlbmRzIExhYmVs
ZWRPYmplY3QgewogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkUmVxdWVzdHMuc29ydCgoYSwgYikg
PT4gYS5vcmRlcigpIC0gYi5vcmRlcigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHRoaXMuX3Jl
cG9zaXRvcmllcyA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRT
ZXRzTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NvbXB1dGVSZXF1
ZXN0ZWRDb21taXRTZXRzLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9jb21wdXRlUmVxdWVz
dGVkQ29tbWl0U2V0c0xhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbihUZXN0R3Jv
dXAuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKTsKICAgICAgICAgdGhpcy5fcmVxdWVzdGVk
Q29tbWl0U2V0cyA9IG51bGw7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldFRvTGFiZWwgPSBuZXcg
TWFwOwogICAgICAgICBjb25zb2xlLmFzc2VydCghb2JqZWN0LnBsYXRmb3JtIHx8IG9iamVjdC5w
bGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKQEAgLTgwLDcgKzgwLDcgQEAgY2xhc3MgVGVz
dEdyb3VwIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jb21w
dXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseS5ldmFsdWF0ZSguLi50aGlzLl9vcmRlcmVkQnVp
bGRSZXF1ZXN0cygpKTsKICAgICB9CiAKLSAgICBfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMo
Li4ub3JkZXJlZEJ1aWxkUmVxdWVzdHMpCisgICAgc3RhdGljIF9jb21wdXRlUmVxdWVzdGVkQ29t
bWl0U2V0cyguLi5vcmRlcmVkQnVpbGRSZXF1ZXN0cykKICAgICB7CiAgICAgICAgIGNvbnN0IHJl
cXVlc3RlZENvbW1pdFNldHMgPSBbXTsKICAgICAgICAgY29uc3QgY29tbWl0U2V0TGFiZWxNYXAg
PSBuZXcgTWFwOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwppbmRleCAwMmNmYWEwNzNkMWY0
Y2M0YThlMGQyZTYxNmM0YzdkM2RkNWRjYmNjLi41MzRmMzY2OTNmOGVlMDk5YmU1OTA1ZDhlY2Jl
YTBiZDA3NDg4NTgwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwpAQCAtMjU4LDYgKzI1
OCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRC
YXNlIHsKICAgICAgICAgdGhpcy5fcmVuZGVyQ3VycmVudFRlc3RHcm91cExhemlseSA9IG5ldyBM
YXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDdXJyZW50VGVzdEdyb3VwLmJpbmQo
dGhpcykpOwogICAgICAgICB0aGlzLl90ZXN0R3JvdXBNYXAgPSBuZXcgTWFwOwogICAgICAgICB0
aGlzLl90ZXN0R3JvdXBzID0gW107CisgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVz
dEdyb3VwID0gbnVsbDsKICAgICAgICAgdGhpcy5fY3VycmVudFRlc3RHcm91cCA9IG51bGw7CiAg
ICAgICAgIHRoaXMuX3Nob3dIaWRkZW5Hcm91cHMgPSBmYWxzZTsKICAgICB9CkBAIC0yNjgsMTYg
KzI2OSwzNCBAQCBjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9u
ZW50QmFzZSB7CiAgICAgICAgIHRoaXMucGFydCgncmV0cnktZm9ybScpLmxpc3RlblRvQWN0aW9u
KCdzdGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CiAgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoQWN0aW9uKCdyZXRyeVRlc3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAs
IHJlcGV0aXRpb25Db3VudCk7CiAgICAgICAgIH0pOworICAgICAgICB0aGlzLnBhcnQoJ2Jpc2Vj
dC1mb3JtJykubGlzdGVuVG9BY3Rpb24oJ3N0YXJ0VGVzdGluZycsIChyZXBldGl0aW9uQ291bnQp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IHRoaXMuX21pZGRsZUNv
bW1pdFNldEJ5VGVzdEdyb3VwLmdldCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKKyAgICAgICAg
ICAgIGNvbnN0IFtvbmVDb21taXRTZXQsIGFub3RoZXJDb21taXRTZXRdID0gdGhpcy5fY3VycmVu
dFRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBjb21t
aXRTZXRzID0gW29uZUNvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0
XTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2Jpc2VjdFRlc3RHcm91cCcsIHRo
aXMuX2N1cnJlbnRUZXN0R3JvdXAsIGNvbW1pdFNldHMsIHJlcGV0aXRpb25Db3VudCk7CisgICAg
ICAgIH0pOwogICAgIH0KIAogICAgIHNldFRlc3RHcm91cHModGVzdEdyb3VwcywgY3VycmVudFRl
c3RHcm91cCwgc2hvd0hpZGRlbkdyb3VwcykKICAgICB7CisgICAgICAgIGNvbnN0IHRlc3RHcm91
cElkU2V0ID0gbmV3IFNldCh0ZXN0R3JvdXBzLm1hcCgodGVzdEdyb3VwKSA9PiB0ZXN0R3JvdXAu
aWQoKSkpOworICAgICAgICBjb25zdCBzYW1lVGVzdEdyb3VwcyA9IHRoaXMuX3Rlc3RHcm91cHMu
bGVuZ3RoID09PSB0ZXN0R3JvdXBzLmxlbmd0aCAmJiB0aGlzLl90ZXN0R3JvdXBzLmV2ZXJ5KCh0
ZXN0R3JvdXApID0+IHRlc3RHcm91cElkU2V0Lmhhcyh0ZXN0R3JvdXAuaWQoKSkpOwogICAgICAg
ICB0aGlzLl90ZXN0R3JvdXBzID0gdGVzdEdyb3VwczsKICAgICAgICAgdGhpcy5fY3VycmVudFRl
c3RHcm91cCA9IGN1cnJlbnRUZXN0R3JvdXA7CiAgICAgICAgIHRoaXMuX3Nob3dIaWRkZW5Hcm91
cHMgPSBzaG93SGlkZGVuR3JvdXBzOwogICAgICAgICB0aGlzLnBhcnQoJ3JldmlzaW9uLXRhYmxl
Jykuc2V0VGVzdEdyb3VwKGN1cnJlbnRUZXN0R3JvdXApOwogICAgICAgICB0aGlzLnBhcnQoJ3Jl
c3VsdHMtdmlld2VyJykuc2V0VGVzdEdyb3VwKGN1cnJlbnRUZXN0R3JvdXApOwotICAgICAgICB0
aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICBpZiAoIXNhbWVUZXN0R3JvdXBzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cCA9IG5ldyBNYXA7Cisg
ICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2VzID0gdGVzdEdyb3Vwcy5tYXAoYXN5bmMg
KHRlc3RHcm91cCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGFuYWx5c2lzVGFzayA9IHRl
c3RHcm91cC50YXNrKCk7CisgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlQ29tbWl0U2V0
cyA9IGF3YWl0IGFuYWx5c2lzVGFzay5jb21taXRTZXRzRnJvbVRlc3RHcm91cHNBbmRNZWFzdXJl
bWVudFNldCgpOworICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0
IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21t
aXRzKHRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCksIGF2YWlsYWJsZUNvbW1pdFNldHMp
OworICAgICAgICAgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwLnNldCh0
ZXN0R3JvdXAsIG1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IFByb21pc2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpLnRoZW4oKCkgPT4gdGhpcy5lbnF1ZXVlVG9S
ZW5kZXIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKICAgICB9CiAKICAgICBzZXRBbmFseXNpc1Jlc3VsdHMoYW5hbHlzaXNSZXN1bHRzLCBt
ZXRyaWMpCkBAIC0zMzcsOSArMzU2LDEyIEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBh
bmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkKICAg
ICAgICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5nZXQoY3VycmVudEdyb3VwKS5saXN0SXRlbS5j
bGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOwogCi0gICAgICAgIGlmIChjdXJyZW50R3JvdXApCisg
ICAgICAgIGlmIChjdXJyZW50R3JvdXApIHsKICAgICAgICAgICAgIHRoaXMucGFydCgncmV0cnkt
Zm9ybScpLnNldFJlcGV0aXRpb25Db3VudChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkp
OworICAgICAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLnNldFJlcGV0aXRpb25Db3Vu
dChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkpOworICAgICAgICB9CiAgICAgICAgIHRo
aXMuY29udGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50R3JvdXAgPyBu
dWxsIDogJ25vbmUnOworICAgICAgICB0aGlzLmNvbnRlbnQoJ2Jpc2VjdC1mb3JtJykuc3R5bGUu
ZGlzcGxheSA9IGN1cnJlbnRHcm91cCAmJiB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91
cC5nZXQoY3VycmVudEdyb3VwKSA/IG51bGwgOiAnbm9uZSc7CiAKICAgICAgICAgY29uc3QgaGlk
ZUJ1dHRvbiA9IHRoaXMuY29udGVudCgnaGlkZS1idXR0b24nKTsKICAgICAgICAgaGlkZUJ1dHRv
bi50ZXh0Q29udGVudCA9IGN1cnJlbnRHcm91cCAmJiBjdXJyZW50R3JvdXAuaXNIaWRkZW4oKSA/
ICdVbmhpZGUnIDogJ0hpZGUnOwpAQCAtMzU2LDYgKzM3OCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFz
a1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICA8
dGVzdC1ncm91cC1yZXN1bHRzLXZpZXdlciBpZD0icmVzdWx0cy12aWV3ZXIiPjwvdGVzdC1ncm91
cC1yZXN1bHRzLXZpZXdlcj4KICAgICAgICAgICAgICAgICA8dGVzdC1ncm91cC1yZXZpc2lvbi10
YWJsZSBpZD0icmV2aXNpb24tdGFibGUiPjwvdGVzdC1ncm91cC1yZXZpc2lvbi10YWJsZT4KICAg
ICAgICAgICAgICAgICA8dGVzdC1ncm91cC1mb3JtIGlkPSJyZXRyeS1mb3JtIj5SZXRyeTwvdGVz
dC1ncm91cC1mb3JtPgorICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLWZvcm0gaWQ9ImJpc2Vj
dC1mb3JtIj5CaXNlY3Q8L3Rlc3QtZ3JvdXAtZm9ybT4KICAgICAgICAgICAgICAgICA8YnV0dG9u
IGlkPSJoaWRlLWJ1dHRvbiI+SGlkZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgIDxzcGFuIGlk
PSJwZW5kaW5nLXJlcXVlc3QtY2FuY2VsLXdhcm5pbmciPihjYW5jZWxzIHBlbmRpbmcgcmVxdWVz
dHMpPC9zcGFuPgogICAgICAgICAgICAgPC9kaXY+YDsKQEAgLTQyMyw3ICs0NDYsNyBAQCBjbGFz
cyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAg
ICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjcmV0
cnktZm9ybSB7CisgICAgICAgICAgICAjcmV0cnktZm9ybSwgI2Jpc2VjdC1mb3JtIHsKICAgICAg
ICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgICAgICBtYXJnaW46IDAuNXJl
bTsKICAgICAgICAgICAgIH0KQEAgLTUwOSw2ICs1MzIsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQ
YWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRv
QWN0aW9uKCdyZW5hbWVUZXN0R3JvdXAnLCAodGVzdEdyb3VwLCBuZXdOYW1lKSA9PiB0aGlzLl91
cGRhdGVUZXN0R3JvdXBOYW1lKHRlc3RHcm91cCwgbmV3TmFtZSkpOwogICAgICAgICBncm91cFBh
bmUubGlzdGVuVG9BY3Rpb24oJ3RvZ2dsZVRlc3RHcm91cFZpc2liaWxpdHknLCAodGVzdEdyb3Vw
KSA9PiB0aGlzLl9oaWRlQ3VycmVudFRlc3RHcm91cCh0ZXN0R3JvdXApKTsKICAgICAgICAgZ3Jv
dXBQYW5lLmxpc3RlblRvQWN0aW9uKCdyZXRyeVRlc3RHcm91cCcsICh0ZXN0R3JvdXAsIHJlcGV0
aXRpb25Db3VudCkgPT4gdGhpcy5fcmV0cnlDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgcmVw
ZXRpdGlvbkNvdW50KSk7CisgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbignYmlzZWN0
VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVwZXRpdGlvbkNvdW50KSA9PiB0
aGlzLl9iaXNlY3RDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVwZXRp
dGlvbkNvdW50KSk7CiAKICAgICAgICAgdGhpcy5wYXJ0KCdjYXVzZS1saXN0JykubGlzdGVuVG9B
Y3Rpb24oJ2FkZEl0ZW0nLCAocmVwb3NpdG9yeSwgcmV2aXNpb24pID0+IHsKICAgICAgICAgICAg
IHRoaXMuX2Fzc29jaWF0ZUNvbW1pdCgnY2F1c2UnLCByZXBvc2l0b3J5LCByZXZpc2lvbik7CkBA
IC03OTMsNyArODE3LDI2IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0
aEhlYWRpbmcgewogICAgICAgICAgICAgLnRoZW4odGhpcy5fZGlkRmV0Y2hUZXN0R3JvdXBzLmJp
bmQodGhpcyksIGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0
byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKICAgICAgICAgfSk7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0NvbW1pdFNldExp
c3QobmV3TmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApOworICAgIH0KKworICAg
IGFzeW5jIF9iaXNlY3RDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVw
ZXRpdGlvbkNvdW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdGFzayk7
CisgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGVzdEdyb3VwLnBsYXRmb3JtKCk7CisgICAgICAg
IGNvbnN0IGV4aXN0aW5nVGVzdEdyb3VwTmFtZXMgPSBuZXcgU2V0KCh0aGlzLl90ZXN0R3JvdXBz
IHx8IFtdKS5tYXAoKHRlc3RHcm91cCkgPT4gdGVzdEdyb3VwLm5hbWUoKSkpOworCisgICAgICAg
IGZvciAobGV0IGkgPSAxOyBpIDwgY29tbWl0U2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgY29uc3QgcHJldmlvdXNDb21taXRTZXQgPSBjb21taXRTZXRzW2kgLSAxXTsKKyAgICAgICAg
ICAgIGNvbnN0IGN1cnJlbnRDb21taXRTZXQgPSBjb21taXRTZXRzW2ldOworICAgICAgICAgICAg
Y29uc3QgdGVzdEdyb3VwTmFtZSA9IENvbW1pdFNldC5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lv
bihDb21taXRTZXQuZGlmZihwcmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1pdFNldCksIGV4
aXN0aW5nVGVzdEdyb3VwTmFtZXMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBjb25zdCB0ZXN0R3JvdXBzID0gYXdhaXQgVGVzdEdyb3VwLmNyZWF0ZVdpdGhDdXN0b21Db25m
aWd1cmF0aW9uKHRoaXMuX3Rhc2ssIHBsYXRmb3JtLCB0ZXN0R3JvdXAudGVzdCgpLCB0ZXN0R3Jv
dXBOYW1lLCByZXBldGl0aW9uQ291bnQsIFtwcmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1p
dFNldF0pOworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RpZEZldGNoVGVzdEdyb3Vwcyh0
ZXN0R3JvdXBzKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQog
CiAgICAgX2NyZWF0ZVRlc3RHcm91cEFmdGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlzdCh0ZXN0R3Jv
dXBOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCkKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IGQwZWZlN2MwZDUyMDQ1ODlk
N2I3ZGY2MGQxYmNmNzEzZGI1NGFhNmMuLjAxZDIzZTJkYTgzMjlhYTg2ZWNiNDNkNzE3OTE4MDEz
YzE1ODMxNWQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92
My1tb2RlbHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1v
ZGVscy5qcwpAQCAtMzcsNSArMzcsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy91cGxvYWRlZC1m
aWxlLmpzJywgJ1VwbG9hZGVkRmlsZScpOwogaW1wb3J0RnJvbVYzKCdwcml2aWxlZ2VkLWFwaS5q
cycsICdQcml2aWxlZ2VkQVBJJyk7CiBpbXBvcnRGcm9tVjMoJ2luc3RydW1lbnRhdGlvbi5qcycs
ICdJbnN0cnVtZW50YXRpb24nKTsKIGltcG9ydEZyb21WMygnbGF6aWx5LWV2YWx1YXRlZC1mdW5j
dGlvbi5qcycsICdMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbicpOworaW1wb3J0RnJvbVYzKCdjb21t
aXQtc2V0LXJhbmdlLWJpc2VjdG9yLmpzJywgJ0NvbW1pdFNldFJhbmdlQmlzZWN0b3InKTsKIAot
Z2xvYmFsLlN0YXRpc3RpY3MgPSByZXF1aXJlKCcuLi8uLi9wdWJsaWMvc2hhcmVkL3N0YXRpc3Rp
Y3MuanMnKTsKK2dsb2JhbC5TdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vLi4vcHVibGljL3NoYXJl
ZC9zdGF0aXN0aWNzLmpzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMu
anMKaW5kZXggODQ5YjAzNjRiNDBhNTliYTFlZjJiNzQ5YTk3MmNhNjBjMjVlMmFjZS4uMGRmMmIw
YzUwMmViZDkyNzYxOGRmZjg4NGRmM2FmMGFkNDg1ZmIyZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcworKysgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCkBAIC05
NSw2ICs5NSwyNiBAQCBmdW5jdGlvbiBvdGhlck93bmVyQ29tbWl0KCkKICAgICB9KTsKIH0KIAor
ZnVuY3Rpb24gb3duZWRDb21taXQoKQoreworICAgIHJldHVybiBuZXcgQ29tbWl0TG9nKDExLCB7
CisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LAorICAgICAg
ICByZXZpc2lvbjogJ293bmVkLWNvbW1pdC0wJywKKyAgICAgICAgb3duc0NvbW1pdHM6IHRydWUs
CisgICAgICAgIHRpbWU6IG51bGwKKyAgICB9KTsKK30KKworZnVuY3Rpb24gYW5vdGhlck93bmVk
Q29tbWl0KCkKK3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZygxMSwgeworICAgICAgICByZXBv
c2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdv
d25lZC1jb21taXQtMScsCisgICAgICAgIG93bnNDb21taXRzOiB0cnVlLAorICAgICAgICB0aW1l
OiBudWxsCisgICAgfSk7Cit9CisKIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAoKSB7
CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIApAQCAtMTgxLDYgKzIwMSw0NCBAQCBkZXNjcmli
ZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAg
IGRlc2NyaWJlKCdoYXNPcmRlcmluZycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1
cm4gInRydWUiIHdoZW4gYm90aCBjb21taXRzIGhhdmUgY29tbWl0IG9yZGVycycsICgpID0+IHsK
KyAgICAgICAgICAgIGFzc2VydC5vayhDb21taXRMb2cuaGFzT3JkZXJpbmcob3N4Q29tbWl0KCks
IG9sZE9TWENvbW1pdCgpKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJ0cnVlIiB3aGVuIGJvdGggY29tbWl0cyBoYXZlIGNvbW1pdCB0aW1lJywgKCkgPT4gewor
ICAgICAgICAgICAgYXNzZXJ0Lm9rKENvbW1pdExvZy5oYXNPcmRlcmluZyh3ZWJraXRDb21taXQo
KSwgb2xkV2ViS2l0Q29tbWl0KCkpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3Vs
ZCByZXR1cm4gImZhbHNlIiB3aGVuIG5laXRoZXIgY29tbWl0IHRpbWUgbm9yIGNvbW1pdCBvcmRl
ciBleGlzdHMnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soIUNvbW1pdExvZy5oYXNP
cmRlcmluZyhvd25lZENvbW1pdCgpLCBhbm90aGVyT3duZWRDb21taXQoKSkpOworICAgICAgICB9
KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAiZmFsc2UiIHdoZW4gb25lIGNvbW1pdCBv
bmx5IGhhcyBjb21taXQgdGltZSBhbmQgYW5vdGhlciBvbmx5IGhhcyBjb21taXQgb3JkZXInLCAo
KSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soIUNvbW1pdExvZy5oYXNPcmRlcmluZyh3ZWJr
aXRDb21taXQoKSwgb3N4Q29tbWl0KCkpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBk
ZXNjcmliZSgnaGFzQ29tbWl0T3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJ0cnVlIiB3aGVuIGEgY29tbWl0IGhhcyBjb21taXQgb3JkZXInLCAoKSA9PiB7CisgICAg
ICAgICAgICBhc3NlcnQub2sob3N4Q29tbWl0KCkuaGFzQ29tbWl0T3JkZXIoKSk7CisgICAgICAg
IH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICJmYWxzZSIgd2hlbiBhIGNvbW1pdCBv
bmx5IGhhcyBjb21taXQgdGltZScsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghd2Vi
a2l0Q29tbWl0KCkuaGFzQ29tbWl0T3JkZXIoKSk7CisgICAgICAgIH0pCisgICAgfSk7CisKKyAg
ICBkZXNjcmliZSgnaGFzQ29tbWl0VGltZScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gInRydWUiIHdoZW4gYSBjb21taXQgaGFzIGNvbW1pdCBvcmRlcicsICgpID0+IHsKKyAg
ICAgICAgICAgIGFzc2VydC5vayghb3N4Q29tbWl0KCkuaGFzQ29tbWl0VGltZSgpKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gImZhbHNlIiB3aGVuIGEgY29tbWl0
IG9ubHkgaGFzIGNvbW1pdCB0aW1lJywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9rKHdl
YmtpdENvbW1pdCgpLmhhc0NvbW1pdFRpbWUoKSk7CisgICAgICAgIH0pCisgICAgfSk7CisKICAg
ICBkZXNjcmliZSgnZmV0Y2hPd25lZENvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgIGJlZm9yZUVh
Y2goKCkgPT4gewogICAgICAgICAgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtcmFuZ2Ut
YmlzZWN0b3ItdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9j
b21taXQtc2V0LXJhbmdlLWJpc2VjdG9yLXRlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMzA1NDc5Yjdl
ZmJjMTk1ZjFjYmU2N2QyZDAyN2YwZmRiOTM1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXJhbmdlLWJpc2VjdG9yLXRl
c3RzLmpzCkBAIC0wLDAgKzEsNTI1IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IGFzc2VydCA9
IHJlcXVpcmUoJ2Fzc2VydCcpOworCityZXF1aXJlKCcuLi90b29scy9qcy92My1tb2RlbHMuanMn
KTsKK2xldCBNb2NrTW9kZWxzID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvbW9jay12My1tb2RlbHMu
anMnKS5Nb2NrTW9kZWxzOworbGV0IE1vY2tSZW1vdGVBUEkgPSByZXF1aXJlKCcuL3Jlc291cmNl
cy9tb2NrLXJlbW90ZS1hcGkuanMnKS5Nb2NrUmVtb3RlQVBJOworCitkZXNjcmliZSgnQ29tbWl0
U2V0UmFuZ2VCaXNlY3RvcicsICgpID0+IHsKKworICAgIGZ1bmN0aW9uIG1ha2VDb21taXQoaWQs
IHJlcG9zaXRvcnksIHJldmlzaW9uLCB0aW1lLCBvcmRlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKGlkLCB7CisgICAgICAgICAgICByZXBvc2l0b3J5
LAorICAgICAgICAgICAgcmV2aXNpb24sCisgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2Us
CisgICAgICAgICAgICB0aW1lLAorICAgICAgICAgICAgb3JkZXIKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc29ydGVkQ29tbWl0U2V0cygpCisgICAgeworICAgICAgICByZXR1
cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7CisgICAgICAg
ICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEwKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1h
a2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xJywgMSksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3Rv
bVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigyLCB7
CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MScsIDEwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0yJywgMjEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMywgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJr
aXQtY29tbWl0LTInLCAyMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21t
aXQtMicsIDIxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQu
ZW5zdXJlU2luZ2xldG9uKDQsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisg
ICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMud2Vi
a2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gs
ICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAg
Q29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig1LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25J
dGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCg2LCBNb2Nr
TW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtNicsIDYwKSwgcmVxdWlyZXNCdWlsZDogZmFs
c2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTMsIE1vY2tN
b2RlbHMub3N4LCAnb3N4LWNvbW1pdC0zJywgMzEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAg
ICAgICAgXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3J0ZWRDb21taXRTZXRzV2l0aG91dFRp
bWVPck9yZGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRT
ZXQuZW5zdXJlU2luZ2xldG9uKDYsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEwMSwgTW9ja01vZGVs
cy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEwMScsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMTEsIE1vY2tNb2Rl
bHMub3N4LCAnb3N4LWNvbW1pdC0xMTEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAg
ICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDcsIHsKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0
KDEwMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEwMScsIDApLCByZXF1aXJl
c0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1p
dCgxMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xMTInLCAwKSwgcmVxdWlyZXNCdWls
ZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9v
dHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDgsIHsKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDEwMiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEw
MicsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNv
bW1pdDogbWFrZUNvbW1pdCgxMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xMTInLCAw
KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2lu
Z2xldG9uKDksIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEwMywgTW9ja01vZGVscy53ZWJraXQsICd3
ZWJraXQtY29tbWl0LTEwMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAg
ICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4
LWNvbW1pdC0xMTMnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDEwLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVt
czogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDYsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDYnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFs
c2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEzLCBNb2Nr
TW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEzJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0K
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAor
ICAgICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldFdpdGhTb21lQ29tbWl0
c09ubHlIYXZlT3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIENv
bW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTEsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0
ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMTApLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01v
ZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAxLCBNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0xJywgMCwgMSksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBb
XX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxMiwgeworICAgICAg
ICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6
IG1ha2VDb21taXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCks
IHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBt
YWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIxKSwgcmVxdWly
ZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21t
aXQoMjAyLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0yJywgMCwg
MiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNp
bmdsZXRvbigxMywgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMiwgTW9ja01vZGVscy53ZWJraXQsICd3
ZWJraXQtY29tbWl0LTInLCAyMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1j
b21taXQtMicsIDIxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAyLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwg
J293bmVyLWNvbW1pdC0yJywgMCwgMiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNCwgeworICAgICAgICAgICAgICAgIHJldmlz
aW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMywg
TW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTMnLCAzMCksIHJlcXVpcmVzQnVpbGQ6
IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBN
b2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2Ug
fSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAyLCBNb2NrTW9k
ZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0yJywgMCwgMiksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJv
b3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNSwgewor
ICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMywgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTMn
LCAzMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMxKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1h
a2VDb21taXQoMjAzLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0z
JywgMCwgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbigxNiwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJr
aXQsICd3ZWJraXQtY29tbWl0LTYnLCA2MCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwg
J29zeC1jb21taXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAzLCBNb2NrTW9kZWxzLm93bmVyUmVwb3Np
dG9yeSwgJ293bmVyLWNvbW1pdC0zJywgMCwgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAg
ICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3QoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFVwbG9hZGVkRmlsZS5lbnN1cmVTaW5nbGV0b24oNDU2LCB7J2NyZWF0ZWRBdCc6
IG5ldyBEYXRlKCcyMDE3LTA1LTAxVDIxOjAzOjI3WicpLCAnZmlsZW5hbWUnOiAncm9vdC5kYXQn
LCAnZXh0ZW5zaW9uJzogJy5kYXQnLCAnYXV0aG9yJzogJ3NvbWUgdXNlcicsCisgICAgICAgICAg
ICBzaXplOiAxNjQ1MjIzNCwgc2hhMjU2OiAnMDNlZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4ZTU1
NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5NjhmNzhmNjU2ZDU4ZCd9KTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjb21taXRTZXRXaXRoUm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0
LmVuc3VyZVNpbmdsZXRvbigxNSwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29t
bWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywg
MSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtj
cmVhdGVSb290KCldCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNl
dCgpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNiwg
eworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1v
Y2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdCisgICAgICAgIH0pOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkgeworICAg
ICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7
CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNv
bW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
ICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xl
dG9uKDIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0
LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMxLCBNb2NrTW9kZWxzLmlvcywgJ2lvcy1jb21taXQt
MScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSkKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICBk
ZXNjcmliZSgnY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzJywgKCkgPT4gewor
ICAgICAgICBNb2NrTW9kZWxzLmluamVjdCgpOworICAgICAgICBsZXQgcmVxdWVzdHMgPSBNb2Nr
UmVtb3RlQVBJLmluamVjdCgpOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICJudWxsIiBp
ZiBubyBjb21tb24gcmVwb3NpdG9yeSBmb3VuZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAg
IGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29t
bWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKGNvbW1pdFNldHNXaXRoTm9Db21tb25S
ZXBvc2l0b3J5KCkuc3BsaWNlKDAsIDIpKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRk
bGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJl
dHVybiAibnVsbCIgdG8gYmlzZWN0IGNvbW1pdCBzZXQgd2l0aCByb290JywgYXN5bmMgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgQ29tbWl0U2V0UmFu
Z2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFsbENvbW1pdHMoW2NvbW1pdFNl
dCgpLCBjb21taXRTZXRXaXRoUm9vdCgpXSwgW2NvbW1pdFNldCgpLCBjb21taXRTZXRXaXRoUm9v
dCgpXSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBudWxsKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gIm51bGwiIGlmIG5vIHJl
cG9zaXRvcnkgd2l0aCB0aW1lIG9yIG9yZGVyIGlzIGZvdW5kJywgYXN5bmMgKCkgPT4geworICAg
ICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9IHNvcnRlZENvbW1pdFNldHNXaXRob3V0VGlt
ZU9yT3JkZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0gYWxsQ29tbWl0
U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENvbW1pdFNldHNb
YWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBD
b21taXRTZXRSYW5nZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0
cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAg
ICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0
IGxvZycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHMgPSBz
b3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBzdGFydENvbW1pdFNldCA9IGFs
bENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRDb21taXRTZXQgPSBhbGxDb21t
aXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25zdCBwcm9t
aXNlID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFs
bENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBhbGxDb21taXRTZXRzKTsK
KyAgICAgICAgICAgIGNvbnN0IHJlamVjdFJlYXNvbiA9ICc0MDQnOworICAgICAgICAgICAgcmVx
dWVzdHNbMF0ucmVqZWN0KHJlamVjdFJlYXNvbik7CisgICAgICAgICAgICBsZXQgZXhjZXB0aW9u
UmFpc2VkID0gZmFsc2U7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0
IHByb21pc2U7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvblJhaXNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVy
cm9yLCByZWplY3RSZWFzb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0Lm9r
KGV4Y2VwdGlvblJhaXNlZCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJudWxsIiBpZiBubyBjb21taXQgc2V0IGlzIGZpbmQgb3RoZXIgdGhhbiB0aGUgY29tbWl0
IHNldHMgZGVmaW5lIHRoZSByYW5nZScsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IGFsbENvbW1pdFNldHMgPSBzb3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBz
dGFydENvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRD
b21taXRTZXQgPSBhbGxDb21taXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAg
ICAgICAgICBsZXQgcHJvbWlzZSA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xv
c2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0XSwg
W3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzBdLnVybCwgJy9hcGkvY29tbWl0cy85Lz9wcmVjZWRpbmdSZXZpc2lvbj1vc3gtY29tbWl0LTEm
bGFzdFJldmlzaW9uPW9zeC1jb21taXQtMycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzFdLnVybCwgJy9hcGkvY29tbWl0cy8xMS8/cHJlY2VkaW5nUmV2aXNpb249d2Via2l0
LWNvbW1pdC0xJmxhc3RSZXZpc2lvbj13ZWJraXQtY29tbWl0LTYnKTsKKyAgICAgICAgICAgIHJl
cXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZTogMjEKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uOiAnb3N4LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMxCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzog
WworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0
b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6
IDIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMics
CisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lOiAyMAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9k
ZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDMsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMycsCisgICAgICAgICAg
ICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lOiAzMAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5p
ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDQsCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtNCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA0MAor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ6IDUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bjogJ3dlYmtpdC1jb21taXQtNScsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0
czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA1MAorICAgICAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWQ6IDYsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1j
b21taXQtNicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA2MAorICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjb25zdCBt
aWRkbGVDb21taXRTZXQgPSBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG1pZGRsZUNvbW1pdFNldCwgbnVsbCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIGJpc2VjdGlvbiBwb2ludCBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YgcmV2aXNp
b24gcmFuZ2UnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRz
ID0gc29ydGVkQ29tbWl0U2V0cygpOworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQg
PSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxs
Q29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHBy
b21pc2UgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9m
QWxsQ29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMp
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMik7CisgICAgICAg
ICAgICBjb25zdCBvc3hfZmV0Y2hfcmVxdWVzdCA9IHJlcXVlc3RzLmZpbmQoKGZldGNoX3JlcXVl
c3QpID0+IGZldGNoX3JlcXVlc3QudXJsID09PSAnL2FwaS9jb21taXRzLzkvP3ByZWNlZGluZ1Jl
dmlzaW9uPW9zeC1jb21taXQtMSZsYXN0UmV2aXNpb249b3N4LWNvbW1pdC0zJyk7CisgICAgICAg
ICAgICBjb25zdCB3ZWJraXRfZmV0Y2hfcmVxdWVzdCA9IHJlcXVlc3RzLmZpbmQoKGZldGNoX3Jl
cXVlc3QpID0+IGZldGNoX3JlcXVlc3QudXJsID09PSAnL2FwaS9jb21taXRzLzExLz9wcmVjZWRp
bmdSZXZpc2lvbj13ZWJraXQtY29tbWl0LTEmbGFzdFJldmlzaW9uPXdlYmtpdC1jb21taXQtNicp
OworICAgICAgICAgICAgd2Via2l0X2ZldGNoX3JlcXVlc3QucmVzb2x2ZSh7CisgICAgICAgICAg
ICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
d2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIwCisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1p
dC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Vi
a2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC01JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYwCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBvc3hfZmV0Y2hfcmVxdWVzdC5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29t
bWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0y
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tN
b2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAg
ICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IHBy
b21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBl
eHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIHNhbWUgYmlzZWN0aW9uIHBvaW50IGV2ZW4gd2hlbiB0d28gY29tbWl0IHNldHMg
ZnJvbSBvcmlnaW5hbCBjb21taXQgc2V0IGhhdmUgaW52ZXJzZWQgb3JkZXInLCBhc3luYyAoKSA9
PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0cygp
OworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOwor
ICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRT
ZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBDb21taXRTZXRSYW5n
ZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0cyhbZW5kQ29tbWl0
U2V0LCBzdGFydENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAgICAgICAgcmVxdWVz
dHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDIwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0Lmlk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
OiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNv
bW1pdC01JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6
IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsK
KyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21t
aXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21t
aXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IG1pZGRs
ZUNvbW1pdFNldCA9IGF3YWl0IHByb21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1p
ZGRsZUNvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwobWlkZGxlQ29tbWl0U2V0LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0p
OworCisgICAgICAgIGl0KCdzaG91bGQgdXNlIGNvbW1pdHMgd2l0aCBvcmRlciBhcyBmYWxsYmFj
ayB3aGVuIG11bHRpcGxlIGNvbW1pdCBzZXRzIGZvdW5kIGZvciB0aGUgY29tbWl0IHRoYXQgaXMg
Y2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIGNvbW1pdHMgd2l0aCB0aW1lJywgYXN5bmMgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9IGNvbW1pdFNldFdpdGhTb21lQ29t
bWl0c09ubHlIYXZlT3JkZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0g
YWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGxldCBwcm9t
aXNlID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFs
bENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBhbGxDb21taXRTZXRzKTsK
KworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMyk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9jb21taXRzLzkvP3ByZWNl
ZGluZ1JldmlzaW9uPW9zeC1jb21taXQtMSZsYXN0UmV2aXNpb249b3N4LWNvbW1pdC0zJyk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2FwaS9jb21taXRzLzEx
MS8/cHJlY2VkaW5nUmV2aXNpb249b3duZXItY29tbWl0LTEmbGFzdFJldmlzaW9uPW93bmVyLWNv
bW1pdC0zJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2Fw
aS9jb21taXRzLzExLz9wcmVjZWRpbmdSZXZpc2lvbj13ZWJraXQtY29tbWl0LTEmbGFzdFJldmlz
aW9uPXdlYmtpdC1jb21taXQtNicpOworCisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZl
KHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1j
b21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJlcXVlc3Rz
WzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxz
Lm93bmVyUmVwb3NpdG9yeS5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDIwMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3duZXItY29tbWl0LTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZTogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiAyCisgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogMjAzLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb246ICdvd25lci1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25z
Q29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3JkZXI6IDMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXF1ZXN0c1syXS5y
ZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJr
aXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTog
MjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICd3ZWJraXQtY29tbWl0LTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMzAKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlkOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJr
aXQtY29tbWl0LTQnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNDAKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
OiA1LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTUn
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZTogNTAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA2LAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTYnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZTogNjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0
IHByb21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFs
bENvbW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0
LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0pOworICAgIH0pOworfSk7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggM2FmMzU3OWEzN2Qz
NGViNzhiMjQzNGYzZTMxZTVlNmRkZjY2MWUyMS4uNThkNzJiMTc5NjkyNWQwNTk1MDFkYjE5YjA4
OWE1OTI3NjkyMzZlNyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQt
dGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0zMjgsNiArMzI4LDQzIEBAIGRlc2Ny
aWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgICAgIH0pOwogICAgIH0pOwogCisgICAgZGVz
Y3JpYmUoJ2NvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCcsICgpID0+IHsKKyAgICAgICAg
aXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgY29tbWl0IGRvZXMgbm90IGNvbnRhaW4gcm9vdCwg
cGF0Y2ggb3Igb3duZWQgY29tbWl0JywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFv
bmVDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAg
ICAgICBhc3NlcnQub2soIWFub3RoZXJDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3du
ZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhBbm90aGVy
V2ViS2l0Q29tbWl0KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAg
ICAgICAgYXNzZXJ0Lm9rKCFjb21taXRTZXRXaXRoU1ZOQ29tbWl0KCkuY29udGFpbnNSb290UGF0
Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90aGVyQ29tbWl0
U2V0V2l0aFNWTkNvbW1pdCgpLmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAg
ICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0V2l0aEdpdENvbW1pdCgpLmNvbnRhaW5zUm9v
dFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayghYW5vdGhlckNv
bW1pdFNldFdpdGhHaXRDb21taXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7
CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29udGFp
bnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90
aGVyQ29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21t
aXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIW9uZU1lYXN1cmVtZW50Q29tbWl0U2V0KCku
Y29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICB9KTsKKworICAgICAg
ICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGlmIGNvbW1pdCBjb250YWlucyByb290LCBwYXRjaCBv
ciBvd25lZCBjb21taXQnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0
V2l0aFBhdGNoKCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAg
ICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhBbm90aGVyUGF0Y2goKS5jb250YWluc1Jvb3RQYXRj
aE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0V2l0aFJv
b3QoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3Nl
cnQub2soYW5vdGhlckNvbW1pdFNldFdpdGhSb290KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVk
Q29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhUd29Sb290cygp
LmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5v
ayhjb21taXRTZXRXaXRoQW5vdGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpLmNvbnRhaW5zUm9vdFBh
dGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmli
ZSgnaGFzU2FtZVJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1
cm4gdHJ1ZSBpZiB0d28gY29tbWl0IHNldHMgaGF2ZSBzYW1lIHJlcG9zaXRvcmllcycsICgpID0+
IHsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNTYW1lUmVwb3NpdG9y
aWVzKGFub3RoZXJDb21taXRTZXQoKSkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNl
dFdpdGhHaXRDb21taXQoKS5oYXNTYW1lUmVwb3NpdG9yaWVzKGFub3RoZXJDb21taXRTZXRXaXRo
R2l0Q29tbWl0KCkpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNT
YW1lUmVwb3NpdG9yaWVzKG9uZUNvbW1pdFNldCgpKSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHR3byBjb21taXQgc2V0cyBoYXZlIGRpZmZlcmVu
IHJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0
V2l0aEdpdENvbW1pdCgpLmhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0V2l0aFNWTkNvbW1p
dCgpKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCku
aGFzU2FtZVJlcG9zaXRvcmllcyhjb21taXRTZXRXaXRoR2l0Q29tbWl0KCkpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKICAgICBkZXNjcmliZSgnZGlmZicsICAoKSA9PiB7CiAgICAgICAgIGl0
KCdzaG91bGQgZGVzY3JpYmUgcGF0Y2ggZGlmZmVyZW5jZScsICgpID0+IHsKICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChDb21taXRTZXQuZGlmZihjb21taXRTZXRXaXRoUGF0Y2goKSwgY29tbWl0
U2V0V2l0aEFub3RoZXJQYXRjaCgpKSwgJ1dlYktpdDogcGF0Y2guZGF0IC0gcGF0Y2guZGF0ICgy
KScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338218</attachid>
            <date>2018-04-18 09:13:48 -0700</date>
            <delta_ts>2018-04-18 22:22:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183888-20180418091321.patch</filename>
            <type>text/plain</type>
            <size>61394</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNzUyCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkZTJiYjliMDRmMWY5NzFjN2RjNTVmZmRjYjRiNTg2NTIyMjE1Yzg2Li5iNmQ4YmIyOWRj
OTAyY2NjM2U1ZTcwNDY2MTBhNTgyYmZjNjcyYWM2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4MCBAQAorMjAxOC0wNC0xNyAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBiaXNlY3QgYnV0dG9uIHRvIGF1dG9tYXRpY2Fs
bHkgc2NoZWR1bGUgYmlzZWN0aW5nIEEvQiB0YXNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIEFuYWx5c2lzVGFzaydzIGFiaWxpdHkg
dG8gZmlndXJlIG91dCBiaXNlY3RpbmcgQS9CIHRhc2tzIGJhc2VkIG9uIGV4aXN0aW5nIGRhdGEg
cG9pbnRzIGFuZCB0ZXN0IGdyb3Vwcy4KKyAgICAgICAgVXBkYXRlZCBhbmFseXNpcyBwYWdlIFVJ
IHRvIHNob3cgYmlzZWN0IGJ1dHRvbiB3aGljaCB3aWxsIG9ubHkgYXBwZWFyIHdoZW4gdGhlIG1p
ZGRsZSBjb21taXQgc2V0IG9mIHRoZSByYW5nZSBpbgorICAgICAgICB0ZXN0IGdyb3VwIGNhbiBi
ZSBmb3VuZC4KKworICAgICAgICBGaW5kaW5nIG1pZGRsZSBjb21taXQgc2V0IGFsZ29yaXRobSBp
cyBkZXNjcmliZWQgYXMgZm9sbG93czoKKyAgICAgICAgMS4gRmluZCBhbGwgY29tbWl0cyBmcm9t
IG11bHRpcGxlIHJlcG9zaXRvcmllcyBhbW9uZyB0aGUgcmFuZ2VzIHNwZWNpZmllZCBieSB0d28g
Y29tbWl0IHNldHMgaW4gdGVzdCBncm91cC4gSW4KKyAgICAgICAgdGhlIG1lYW53aGlsZSwgbWVy
Z2UgYWxsIGNvbW1pdHMgdGhhdCBoYXZlIGNvbW1pdCB0aW1lIGludG8gYSBzaW5nbGUgbGlzdC4g
Rm9yIGNvbW1pdHMgb25seSBoYXZlIGNvbW1pdCBvcmRlciwKKyAgICAgICAgcHV0IHRob3NlIGNv
bW1pdHMgaW50byBzZXBhcmF0ZSBsaXN0cy4KKyAgICAgICAgMi4gRmlsdGVyIGFsbCB0aGUgYXZh
aWxhYmxlIGNvbW1pdCBzZXRzIGluIGN1cnJlbnQgYW5hbHlzaXMgdGFzayBieSBrZWVwaW5nIHRo
ZSBvbmVzIGhhdmUgZXhhY3QgcmVwb3NpdG9yaWVzCisgICAgICAgIGFzIHRoZSB0d28gY29tbWl0
IHNldHMgaW4gc3BlY2lmaWVkIHRlc3QgZ3JvdXAsIGFuZCBldmVyeSBjb21taXQgb2YgYSBjb21t
aXQgc2V0IGlzIGluIHNpZGUgdGhlIGNvbW1pdCByYW5nZS4KKyAgICAgICAgQWZ0ZXIgZmlsdGVy
aW5nIHRoZSBjb21taXQgc2V0cywgc29ydCB0aGUgcmVtYWluaW5nIG9uZXMgYW5kIG9ubHkga2Vl
cCBvbmUgY29tbWl0IHNldCBpZiBtdWx0aXBsZSBjb21taXQgc2V0cworICAgICAgICBhcmUgZXF1
YWwgdG8gZWFjaCBvdGhlci4KKyAgICAgICAgMy4gQW1vbmcgY29tbWl0cyBwcm9jZXNzZWQgYnkg
c3RlcCAyLCBmaW5kIHRoZSBjb21taXQgc2V0cyB0aGF0IGhhdmUgdGhlIGNvbW1pdCB3aGljaCBp
cyBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgYWxsIGNvbW1pdHMgdGhhdCBoYXZl
IGNvbW1pdCB0aW1lIGNyZWF0ZWQgZnJvbSBzdGVwIDEuCisgICAgICAgIDQuIEFtb25nIGNvbW1p
dHMgcHJvY2Vzc2VkIGJ5IHN0ZXAgMywgZmluZCB0aGUgY29tbWl0IHNldHMgdGhhdCBoYXZlIHRo
ZSBjb21taXQgd2hpY2ggaXMgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mCisgICAgICAgIGNvbW1p
dHMgdGhhdCBvbmx5IGhhdmUgY29tbWl0IG9yZGVyIGFuZCBjYXRlZ29yaXplZCBieSByZXBvc2l0
b3J5LgorICAgICAgICA1LiBJZiBtb3JlIHRoYW4gb25lIGNvbW1pdCBzZXRzIGFyZSBmb3VuZCwg
Y2hvb3NlIHRoZSBtaWRkbGUgY29tbWl0IHNldC4KKworICAgICAgICAqIHB1YmxpYy92My9jb21t
aXQtc2V0LXJhbmdlLWJpc2VjdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKENvbW1pdFNldFJhbmdl
QmlzZWN0b3IuYXN5bmMuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKTogSW5z
dGVhZCBvZiBuYWl2ZWx5IHJldHVybmluZyB0aGUgbWlkZGxlIG9mCisgICAgICAgIGV4aXN0aW5n
IGNvbW1pdCBzZXQgYXJyYXksIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyBhIGJpc2VjdCBiaXNlY3Rp
b24gcG9pbnRzIHRoYXQgaXMgY2xvc2VzdCB0byBhY3R1YWxseSBtaWRkbGUgb2YKKyAgICAgICAg
dGhlIHJldmlzaW9uIHJhbmdlIGJhc2VkIG9uIGFsbCByZXZpc2lvbnMgcmVwb3J0ZWQgdG8gcGVy
Zm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAgICAoQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fZmlu
ZENvbW1pdFNldHNXaXRoaW5SYW5nZSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGNvbW1pdCBz
ZXRzIHRob3NlIGFyZSBpbiBzcGVjaWZpZWQgcmFuZ2UuCisgICAgICAgIChDb21taXRTZXRSYW5n
ZUJpc2VjdG9yLl9zb3J0QW5kVW5pcXVlQ29tbWl0U2V0cyk6IEhlbHBlciBmdW5jdGlvbiB0byBz
b3J0IGFuZCB1bmlxdWUgY29tbWl0IHNldHMuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2Vj
dG9yLl9jbG9zZXN0Q29tbWl0U2V0c1RvQmlzZWN0aW5nQ29tbWl0QnlUaW1lKTogSGVscGVyIGZ1
bmN0aW9uIHRvIGZpbmQgdGhlIGNvbW1pdCBzZXRzCisgICAgICAgIHRob3NlIGFyZSBjbG9zZXN0
IHRvIHRoZSBtaWRkbGUgb2YgYW1vbmcgYWxsIHRoZSBjb21taXRzIGluIHRoZSByYW5nZSB0aGF0
IGhhdmUgY29tbWl0IHRpbWUuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9maW5k
Q29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhPcmRlcik6IEhlbHBlciBmdW5j
dGlvbiB3aGljaCBnb2VzIHRocm91Z2ggYWxsCisgICAgICAgIHJlcG9zaXRvcmllcyB0aGUgY29t
bWl0IG9mIHdoaWNoIGhhcyBjb21taXQgb3JkZXIsIGFuZCBmaW5kIHRoZSBjb21taXQgc2V0cyB0
aG9zZSBhcmUgY2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIGNvbW1pdHMKKyAgICAgICAgZm9yIGVh
Y2ggcmVwb3NpdG9yeS4KKyAgICAgICAgKENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2J1aWxkQ29t
bWl0VG9Db21taXRTZXRNYXApOiBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGRlciBtYXBwaW5nIGZy
b20gYSBjb21taXQgdG8gY29tbWl0IHNldHMgdGhvc2UKKyAgICAgICAgY29udGFpbnMgdGhpcyBj
b21taXQuCisgICAgICAgIChDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9maW5kQ2xvc2VzdENvbW1p
dEJ5SW5kZXgpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBjbG9zZXN0IGNvbW1pdCB0byB0aGUg
bWlkZGxlIG9mIGluZGV4LgorICAgICAgICAoQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvcik6CisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEltcG9ydHMgJ3B1YmxpYy92My9jb21taXQtc2V0
LXJhbmdlLWJpc2VjdG9yLmpzJy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lz
LXRhc2suanM6CisgICAgICAgIChBbmFseXNpc1Rhc2sucHJvdG90eXBlLmFzeW5jLm1pZGRsZUNv
bW1pdFNldEZvclRlc3RHcm91cCk6IEludm9rZXMgTWlkZGxlQ29tbWl0U2V0RmluZGVyIHRvIGZp
bmQgdGhlIG1pZGRsZSBjb21taXQgc2V0LgorICAgICAgICAoQW5hbHlzaXNUYXNrLnByb3RvdHlw
ZS5hc3luYy5jb21taXRTZXRzRnJvbVRlc3RHcm91cHNBbmRNZWFzdXJlbWVudFNldCk6IEFnZ3Jl
Z2F0ZXMgYWxsIGV4aXN0aW5nIGNvbW1pdCBzZXRzIGluIHRlc3QgZ3JvdXBzIG9mIGN1cnJlbnQg
YW5hbHlzaXMgdGFza3MuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpz
OgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5oYXNDb21taXRUaW1lKTogQSBoZWxwZXIg
ZnVuY3Rpb24gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21taXQgaGFzIGEgY29tbWl0IHRpbWUuIEZv
ciBjb21taXQKKyAgICAgICAgdGhhdCBkb2VzIG5vdCBoYXZlIHRpbWUsIHNlcnZlciB3aWxsIHJl
dHVybiBjb21taXQgdGltZSBhcyB6ZXJvLiBBcyBpdCBpcyB1bnJlYWxpc3RpYyBmb3IgYSBjb21t
aXQgaGFzIGNvbW1pdCB0aW1lCisgICAgICAgIDAsIGl0IHdvdWxkIGJlIHNhZmUgdG8gYXNzdW1l
IGEgdmFsaWQgY29tbWl0IHRpbWUgaXMgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIChDb21taXRM
b2cucHJvdG90eXBlLmhhc0NvbW1pdE9yZGVyKTogUmV0dXJucyB3aGV0aGVyIGEgY29tbWl0IGhh
cyBhIGNvbW1pdCBvZGVyLgorICAgICAgICAoQ29tbWl0TG9nLmhhc09yZGVyaW5nKToKKyAgICAg
ICAgKENvbW1pdExvZy5vcmRlclR3b0NvbW1pdHMpOgorICAgICAgICAqIHB1YmxpYy92My9tb2Rl
bHMvY29tbWl0LXNldC5qczoKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUuaGFzU2FtZVJl
cG9zaXRvcmllcyk6IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29t
bWl0IHNldCBoYXMgc2FtZSByZXBvc2l0b3JpZXMKKyAgICAgICAgYXMgY3VycmVudCByZXBvc2l0
b3J5LgorICAgICAgICAoQ29tbWl0U2V0LmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCk6
IEEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGN1cnJlbnQgY29tbWl0IHNl
dCBoYXMgcm9vdCwKKyAgICAgICAgcGF0Y2ggb3Igb3duZWQgY29tbWl0LgorICAgICAgICAoQ29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkpOiBUaGlzIGZ1bmN0aW9uIGRlZmluZWQgdHdpY2Ug
aWRlbnRpY2FsbHksIHJlbW92ZSBvbmUgb2YgdGhlbS4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9k
ZWxzL3Rlc3QtZ3JvdXAuanM6IE1ha2UgJ19jb21wdXRlUmVxdWVzdGVkQ29tbWl0U2V0cycgYSBz
dGF0aWMgZnVuY3Rpb24gYXMgaXQgZG9lcyBub3QgdXNlIGFueSBpbnN0YW5jZQorICAgICAgICB2
YXJpYWJsZXMuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5q
czogQWRkZWQgYmlzZWN0IGJ1dHRvbi4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Rlc3RHcm91cFBh
bmUpOgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuZGlkQ29u
c3RydWN0U2hhZG93VHJlZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnBy
b3RvdHlwZS5hc3luYy5zZXRUZXN0R3JvdXBzKTogVXBkYXRlICdzZXRUZXN0R3JvdXBzJyB0byB1
cGRhdGUgX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwCisgICAgICAgIHdoZW4gdGhlIHRlc3Qg
Z3JvdXBzIGNoYW5nZXMuCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnByb3Rv
dHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6IEFkZGVkIGNvZGUgdG8gY29uZGl0aW9uYWxs
eSBzaG93IGJpc2VjdCBidXR0b24uCisgICAgICAgIEJpc2VjdCBidXR0b24gd2lsbCBvbmx5IHNo
b3cgd2hlbiB0aGVyZSBpcyBhIG1pZGRsZSBjb21taXQgc2V0IGZvciB0aGF0IHRlc3QgZ3JvdXAu
CisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmh0bWxUZW1wbGF0ZSk6CisgICAg
ICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEFu
YWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOgorICAgICAg
ICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JldHJ5Q3VycmVudFRlc3RHcm91cCk6Cisg
ICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5hc3luYy5fYmlzZWN0Q3VycmVudFRl
c3RHcm91cCk6IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiBiaXNlY3QgYnV0
dG9uIGlzIGNsaWNrZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fZGlk
RmV0Y2hUZXN0R3JvdXBzKTogRGVsZXRlZCBhIHN0YXRlbWVudCBhZnRlciBmdW5jdGlvbidzIHJl
dHVybnMuCisgICAgICAgICogdG9vbHMvanMvdjMtbW9kZWxzLmpzOgorICAgICAgICAqIHVuaXQt
dGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ0NvbW1pdExv
Zy5oYXNDb21taXRUaW1lJywgJ0NvbW1pdExvZy5oYXNDb21taXRPcmRlcicgYW5kICdDb21taXRM
b2cuaGFzT3JkZXJpbmcnLgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5q
czogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ0NvbW1pdFNldC5oYXNTYW1lUmVwb3NpdG9yaWVzJyBh
bmQgJ0NvbW1pdFNldC5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQnLgorICAgICAgICAq
IHVuaXQtdGVzdHMvY29tbWl0LXNldC1yYW5nZS1iaXNlY3Rvci10ZXN0cy5qczogQWRkZWQgdW5p
dCB0ZXN0cyBmb3IgJ0NvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xvc2VzdFRvTWlk
ZGxlT2ZBbGxDb21taXRzJy4KKwogMjAxOC0wNC0xNiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFw
cGxlLmNvbT4KIAogICAgICAgICBDb21taXQgb3JkZXIgc2hvdWxkIGFsd2F5cyBiZSByZXR1cm5l
ZCBieSBhcGkuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbW1pdC1zZXQtcmFuZ2UtYmlzZWN0b3IuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2NvbW1pdC1zZXQtcmFuZ2UtYmlzZWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJhM2Iz
NmU3Yjc3NmExMmZjMGEwNDBhM2Y0Y2IwYzMwMWQyNDdiZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tbWl0LXNldC1yYW5nZS1iaXNlY3Rv
ci5qcwpAQCAtMCwwICsxLDE3MiBAQAorJ3VzZSBzdHJpY3QnOworCisKK2NsYXNzIENvbW1pdFNl
dFJhbmdlQmlzZWN0b3IgeworICAgIHN0YXRpYyBhc3luYyBjb21taXRTZXRDbG9zZXN0VG9NaWRk
bGVPZkFsbENvbW1pdHMoY29tbWl0U2V0c1RvU3BsaXQsIGF2YWlsYWJsZUNvbW1pdFNldHMpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRTZXRzVG9TcGxpdC5sZW5ndGggPT09
IDIpOworICAgICAgICBjb25zdCBbZmlyc3RDb21taXRTZXQsIHNlY29uZENvbW1pdFNldF0gPSBj
b21taXRTZXRzVG9TcGxpdDsKKyAgICAgICAgaWYgKGZpcnN0Q29tbWl0U2V0LmNvbnRhaW5zUm9v
dFBhdGNoT3JPd25lZENvbW1pdCgpIHx8IHNlY29uZENvbW1pdFNldC5jb250YWluc1Jvb3RQYXRj
aE9yT3duZWRDb21taXQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlm
ICghZmlyc3RDb21taXRTZXQuaGFzU2FtZVJlcG9zaXRvcmllcyhzZWNvbmRDb21taXRTZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yaWVzV2l0
aENvbW1pdFRpbWUgPSBuZXcgU2V0OworICAgICAgICBjb25zdCBjb21taXRSYW5nZUJ5UmVwb3Np
dG9yeSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnN0IGluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRl
ckJ5UmVwb3NpdG9yeSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZXMg
PSBbXTsKKyAgICAgICAgY29uc3QgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lID0gW107CisgICAg
ICAgIGNvbnN0IHRvcExldmVsUmVwb3NpdG9yaWVzV2l0aENvbW1pdENoYW5nZSA9IGZpcnN0Q29t
bWl0U2V0LnRvcExldmVsUmVwb3NpdG9yaWVzKCkKKyAgICAgICAgICAgIC5maWx0ZXIoKHJlcG9z
aXRvcnkpID0+IGZpcnN0Q29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkg
IT09IHNlY29uZENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKTsKKwor
ICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgdG9wTGV2ZWxSZXBvc2l0b3JpZXNXaXRo
Q29tbWl0Q2hhbmdlKSB7CisgICAgICAgICAgICBjb25zdCBmaXJzdENvbW1pdCA9IGZpcnN0Q29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25z
dCBzZWNvbmRDb21taXQgPSBzZWNvbmRDb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KTsKKworICAgICAgICAgICAgaWYgKCFDb21taXRMb2cuaGFzT3JkZXJpbmcoZmlyc3RD
b21taXQsIHNlY29uZENvbW1pdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGNvbnN0IFtzdGFydENvbW1pdCwgZW5kQ29tbWl0XSA9IENvbW1pdExvZy5vcmRlclR3
b0NvbW1pdHMoZmlyc3RDb21taXQsIHNlY29uZENvbW1pdCk7CisKKyAgICAgICAgICAgIGZldGNo
aW5nUHJvbWlzZXMucHVzaChDb21taXRMb2cuZmV0Y2hCZXR3ZWVuUmV2aXNpb25zKHJlcG9zaXRv
cnksIHN0YXJ0Q29tbWl0LnJldmlzaW9uKCksIGVuZENvbW1pdC5yZXZpc2lvbigpKQorICAgICAg
ICAgICAgICAgIC50aGVuKChjb21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dGFydENvbW1pdC5oYXNDb21taXRUaW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFs
bENvbW1pdHNXaXRoQ29tbWl0VGltZS5wdXNoKHN0YXJ0Q29tbWl0LCAuLi5jb21taXRzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0
b3J5LCAoY29tbWl0KSA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5oYXND
b21taXRUaW1lKCkgJiYgc3RhcnRDb21taXQudGltZSgpIDw9IGNvbW1pdC50aW1lKCkgJiYgY29t
bWl0LnRpbWUoKSA8PSBlbmRDb21taXQudGltZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lLmFkZChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4QnlD
b21taXQgPSBuZXcgTWFwOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhCeUNvbW1pdC5z
ZXQoc3RhcnRDb21taXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5mb3JF
YWNoKChjb21taXQsIGluZGV4KSA9PiBpbmRleEJ5Q29tbWl0LnNldChjb21taXQsIGluZGV4ICsg
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVy
QnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBpbmRleEJ5Q29tbWl0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCAoY29t
bWl0KSA9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5oYXNDb21taXRPcmRl
cigpICYmIHN0YXJ0Q29tbWl0Lm9yZGVyKCkgPD0gY29tbWl0Lm9yZGVyKCkgJiYgY29tbWl0Lm9y
ZGVyKCkgPD0gZW5kQ29tbWl0Lm9yZGVyKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGZl
dGNoaW5nUHJvbWlzZXMpOworCisgICAgICAgIGlmICghcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRp
bWUuc2l6ZSAmJiAhaW5kZXhGb3JDb21taXRXaXRoT25seU9yZGVyQnlSZXBvc2l0b3J5LnNpemUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBjb25zdCBjb21taXRTZXRzSW5S
YW5nZSA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2ZpbmRDb21taXRTZXRzV2l0aGluUmFuZ2Uo
Zmlyc3RDb21taXRTZXQsIGF2YWlsYWJsZUNvbW1pdFNldHMsIGNvbW1pdFJhbmdlQnlSZXBvc2l0
b3J5KTsKKyAgICAgICAgbGV0IHNvcnRlZENvbW1pdFNldHMgPSBDb21taXRTZXRSYW5nZUJpc2Vj
dG9yLl9zb3J0QW5kVW5pcXVlQ29tbWl0U2V0cyhjb21taXRTZXRzSW5SYW5nZSwgcmVwb3NpdG9y
aWVzV2l0aENvbW1pdFRpbWUsIFsuLi5pbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9z
aXRvcnkua2V5cygpXSk7CisgICAgICAgIGNvbnN0IHNvcnRlZENvbW1pdFNldHNMZW5ndGggPSBz
b3J0ZWRDb21taXRTZXRzLmxlbmd0aDsKKyAgICAgICAgaWYgKHNvcnRlZENvbW1pdFNldHNMZW5n
dGggPD0gMikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KChmaXJzdENvbW1pdFNldC5lcXVhbHMoc29ydGVkQ29tbWl0U2V0c1swXSkgJiYgc2Vjb25k
Q29tbWl0U2V0LmVxdWFscyhzb3J0ZWRDb21taXRTZXRzW3NvcnRlZENvbW1pdFNldHNMZW5ndGgg
LSAxXSkpCisgICAgICAgICAgICB8fCAoZmlyc3RDb21taXRTZXQuZXF1YWxzKHNvcnRlZENvbW1p
dFNldHNbc29ydGVkQ29tbWl0U2V0c0xlbmd0aCAtIDFdKSAmJiBzZWNvbmRDb21taXRTZXQuZXF1
YWxzKHNvcnRlZENvbW1pdFNldHNbMF0pKSk7CisKKyAgICAgICAgbGV0IHJlbWFpbmluZ0NvbW1p
dFNldHMgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9jbG9zZXN0Q29tbWl0U2V0c1RvQmlzZWN0
aW5nQ29tbWl0QnlUaW1lKHNvcnRlZENvbW1pdFNldHMuc2xpY2UoMSwgLTEpLCByZXBvc2l0b3Jp
ZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKTsKKyAgICAgICAgcmVt
YWluaW5nQ29tbWl0U2V0cyA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuX2ZpbmRDb21taXRTZXRz
Q2xvc2VzdFRvTWlkZGxlT2ZDb21taXRzV2l0aE9yZGVyKHJlbWFpbmluZ0NvbW1pdFNldHMsIGlu
ZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5UmVwb3NpdG9yeSk7CisKKyAgICAgICAgaWYgKCFy
ZW1haW5pbmdDb21taXRTZXRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICByZXR1cm4gcmVtYWluaW5nQ29tbWl0U2V0c1tNYXRoLmZsb29yKHJlbWFpbmluZ0NvbW1p
dFNldHMubGVuZ3RoIC8gMildOworICAgIH0KKworICAgIHN0YXRpYyBfZmluZENvbW1pdFNldHNX
aXRoaW5SYW5nZShmaWx0ZXJpbmdDb21taXRTZXQsIGF2YWlsYWJsZUNvbW1pdFNldHMsIGNvbW1p
dFJhbmdlQnlSZXBvc2l0b3J5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUNvbW1p
dFNldHMuZmlsdGVyKChjb21taXRTZXQpID0+IHsKKyAgICAgICAgICAgIGlmICghY29tbWl0U2V0
Lmhhc1NhbWVSZXBvc2l0b3JpZXMoZmlsdGVyaW5nQ29tbWl0U2V0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXBvc2l0b3J5LCBpc0Nv
bW1pdEluUmFuZ2VdIG9mIGNvbW1pdFJhbmdlQnlSZXBvc2l0b3J5KSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NvbW1pdEluUmFuZ2UoY29tbWl0KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHN0YXRpYyBfc29ydEFuZFVu
aXF1ZUNvbW1pdFNldHMoY29tbWl0U2V0cywgcmVwb3NpdG9yaWVzV2l0aENvbW1pdFRpbWUsIHJl
cG9zaXRvcnlXaXRoT25seUNvbW1pdE9yZGVyKQorICAgIHsKKyAgICAgICAgY29uc3Qgc29ydGVk
Q29tbWl0U2V0cyA9IGNvbW1pdFNldHMuc29ydCgoZmlyc3RDb21taXRTZXQsIHNlY29uZENvbW1p
dFNldCkgPT4geworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRv
cmllc1dpdGhDb21taXRUaW1lKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb21taXQg
PSBmaXJzdENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAg
ICAgICAgICAgIGNvbnN0IHNlY29uZENvbW1pdCA9IHNlY29uZENvbW1pdFNldC5jb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbW1pdC50
aW1lKCkgPT09IHNlY29uZENvbW1pdC50aW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENvbW1pdC50aW1lKCkgLSBzZWNvbmRD
b21taXQudGltZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChjb25zdCByZXBv
c2l0b3J5IG9mIHJlcG9zaXRvcnlXaXRoT25seUNvbW1pdE9yZGVyKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgZmlyc3RDb21taXQgPSBmaXJzdENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5
KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZENvbW1pdCA9IHNlY29u
ZENvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAg
ICAgIGlmIChmaXJzdENvbW1pdC5vcmRlcigpID09PSBzZWNvbmRDb21taXQub3JkZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0
Q29tbWl0Lm9yZGVyKCkgLSBzZWNvbmRDb21taXQub3JkZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gc29ydGVk
Q29tbWl0U2V0cy5maWx0ZXIoKGN1cnJlbnRTZXQsIGkpID0+ICFpIHx8ICFjdXJyZW50U2V0LmVx
dWFscyhzb3J0ZWRDb21taXRTZXRzW2kgLSAxXSkpOworICAgIH0KKworICAgIHN0YXRpYyBfY2xv
c2VzdENvbW1pdFNldHNUb0Jpc2VjdGluZ0NvbW1pdEJ5VGltZShzb3J0ZWRDb21taXRTZXRzLCBy
ZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZSwgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1lKQorICAg
IHsKKyAgICAgICAgaWYgKCFyZXBvc2l0b3JpZXNXaXRoQ29tbWl0VGltZS5zaXplKQorICAgICAg
ICAgICAgcmV0dXJuIHNvcnRlZENvbW1pdFNldHM7CisKKyAgICAgICAgY29uc3QgaW5kZXhCeUNv
bW1pdFdpdGhUaW1lID0gbmV3IE1hcDsKKyAgICAgICAgYWxsQ29tbWl0c1dpdGhDb21taXRUaW1l
LnNvcnQoKGZpcnN0Q29tbWl0LCBzZWNvbmRDb21taXQpID0+IGZpcnN0Q29tbWl0LnRpbWUoKSAt
IHNlY29uZENvbW1pdC50aW1lKCkpCisgICAgICAgICAgICAuZm9yRWFjaCgoY29tbWl0LCBpbmRl
eCkgPT4gaW5kZXhCeUNvbW1pdFdpdGhUaW1lLnNldChjb21taXQsIGluZGV4KSk7CisKKyAgICAg
ICAgY29uc3QgY29tbWl0VG9Db21taXRTZXRNYXAgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLl9i
dWlsZENvbW1pdFRvQ29tbWl0U2V0TWFwKHJlcG9zaXRvcmllc1dpdGhDb21taXRUaW1lLCBzb3J0
ZWRDb21taXRTZXRzKTsKKyAgICAgICAgY29uc3QgY2xvc2VzdENvbW1pdCA9IENvbW1pdFNldFJh
bmdlQmlzZWN0b3IuX2ZpbmRDbG9zZXN0Q29tbWl0QnlJbmRleChpbmRleEJ5Q29tbWl0V2l0aFRp
bWUsIGNvbW1pdFRvQ29tbWl0U2V0TWFwLmtleXMoKSk7CisgICAgICAgIHJldHVybiBBcnJheS5m
cm9tKGNvbW1pdFRvQ29tbWl0U2V0TWFwLmdldChjbG9zZXN0Q29tbWl0KSk7CisgICAgfQorCisg
ICAgc3RhdGljIF9maW5kQ29tbWl0U2V0c0Nsb3Nlc3RUb01pZGRsZU9mQ29tbWl0c1dpdGhPcmRl
cihyZW1haW5pbmdDb21taXRTZXRzLCBpbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9z
aXRvcnkpCisgICAgeworICAgICAgICBpZiAoIWluZGV4Rm9yQ29tbWl0V2l0aE9ubHlPcmRlckJ5
UmVwb3NpdG9yeS5zaXplKQorICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0NvbW1pdFNldHM7
CisKKyAgICAgICAgY29uc3QgY29tbWl0T25seU9yZGVyQXZhaWxhYmxlVG9Db21taXRTZXRzID0g
Q29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fYnVpbGRDb21taXRUb0NvbW1pdFNldE1hcChpbmRleEZv
ckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkua2V5cygpLCByZW1haW5pbmdDb21taXRT
ZXRzKTsKKworICAgICAgICBmb3IgKGNvbnN0IFtyZXBvc2l0b3J5LCBpbmRleEJ5Q29tbWl0XSBv
ZiBpbmRleEZvckNvbW1pdFdpdGhPbmx5T3JkZXJCeVJlcG9zaXRvcnkpIHsKKyAgICAgICAgICAg
IGNvbnN0IGNvbW1pdHMgPSByZW1haW5pbmdDb21taXRTZXRzLm1hcCgoY29tbWl0U2V0KSA9PiBj
b21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSk7CisgICAgICAgICAgICBj
b25zdCBjbG9zZXN0Q29tbWl0ID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5fZmluZENsb3Nlc3RD
b21taXRCeUluZGV4KGluZGV4QnlDb21taXQsIGNvbW1pdHMpOworICAgICAgICAgICAgY29uc3Qg
Y29tbWl0U2V0cyA9IGNvbW1pdE9ubHlPcmRlckF2YWlsYWJsZVRvQ29tbWl0U2V0cy5nZXQoY2xv
c2VzdENvbW1pdCk7CisgICAgICAgICAgICByZW1haW5pbmdDb21taXRTZXRzID0gcmVtYWluaW5n
Q29tbWl0U2V0cy5maWx0ZXIoKGNvbW1pdFNldCkgPT4gY29tbWl0U2V0cy5oYXMoY29tbWl0U2V0
KSk7CisgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ0NvbW1pdFNldHMubGVuZ3RoKQorICAgICAg
ICAgICAgICAgIHJldHVybiByZW1haW5pbmdDb21taXRTZXRzOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZW1haW5pbmdDb21taXRTZXRzOworICAgIH0KKworICAgIHN0YXRpYyBfYnVpbGRD
b21taXRUb0NvbW1pdFNldE1hcChyZXBvc2l0b3JpZXMsIGNvbW1pdFNldHMpCisgICAgeworICAg
ICAgICBjb25zdCBjb21taXRUb0NvbW1pdFNldE1hcCA9IG5ldyBNYXA7CisgICAgICAgIGZvciAo
Y29uc3QgcmVwb3NpdG9yeSBvZiByZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGZvciAoY29u
c3QgY29tbWl0U2V0IG9mIGNvbW1pdFNldHMpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21t
aXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbW1pdFRvQ29tbWl0U2V0TWFwLmhhcyhjb21taXQpKQorICAgICAgICAg
ICAgICAgICAgICBjb21taXRUb0NvbW1pdFNldE1hcC5zZXQoY29tbWl0LCBuZXcgU2V0KTsKKyAg
ICAgICAgICAgICAgICBjb21taXRUb0NvbW1pdFNldE1hcC5nZXQoY29tbWl0KS5hZGQoY29tbWl0
U2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tbWl0VG9D
b21taXRTZXRNYXA7CisgICAgfQorCisgICAgc3RhdGljIF9maW5kQ2xvc2VzdENvbW1pdEJ5SW5k
ZXgoaW5kZXhCeUNvbW1pdCwgY29tbWl0cykKKyAgICB7CisgICAgICAgIGNvbnN0IGRlc2lyZWRD
b21taXRJbmRleCA9IGluZGV4QnlDb21taXQuc2l6ZSAvIDI7CisgICAgICAgIGxldCBtaW5Db21t
aXREaXN0YW5jZSA9IGluZGV4QnlDb21taXQuc2l6ZTsKKyAgICAgICAgbGV0IGNsb3Nlc3RDb21t
aXQgPSBudWxsOworICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdCBvZiBjb21taXRzKSB7CisgICAg
ICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4QnlDb21taXQuZ2V0KGNvbW1pdCk7CisgICAgICAg
ICAgICBjb25zdCBkaXN0YW5jZUZvckNvbW1pdCA9IE1hdGguYWJzKGluZGV4IC0gZGVzaXJlZENv
bW1pdEluZGV4KTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZUZvckNvbW1pdCA8IG1pbkNvbW1p
dERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgbWluQ29tbWl0RGlzdGFuY2UgPSBkaXN0YW5j
ZUZvckNvbW1pdDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0Q29tbWl0ID0gY29tbWl0OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjbG9zZXN0Q29tbWl0OworICAg
IH0KK30KKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAgbW9kdWxlLmV4
cG9ydHMuQ29tbWl0U2V0UmFuZ2VCaXNlY3RvciA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3I7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9pbmRleC5odG1sCmluZGV4IDAyMzNmOTZmZWFlNzgzN2U4MmQ3MDQxMDI3NzYwZWE1
ZTAxYmUzYmYuLjljMDg3NmE2MTg5YjYxZmVlZWQ2MzYxNmZmZTlmMzYxODQyYjE2ZWUgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTQ1LDYg
KzQ1LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2Fk
IHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwcml2aWxlZ2Vk
LWFwaS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJhc3luYy10YXNrLmpzIj48
L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImxhemlseS1ldmFsdWF0ZWQtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tbWl0LXNldC1yYW5nZS1iaXNl
Y3Rvci5qcyI+PC9zY3JpcHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9Im1vZGVscy90aW1lLXNl
cmllcy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJtb2RlbHMvbWVhc3VyZW1l
bnQtYWRhcHRvci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9hbmFseXNpcy10YXNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYW5hbHlzaXMtdGFzay5qcwppbmRleCA2ZTIyMjg1
NjgxNThkZGMxMzg4MmM4YjNkNzdmYWM0NGY4YmE5MmU5Li40MmYxZTM2OWRkYWE0NWZlNWFjZWU4
MWY4MWQ2OGQ0MGJlOTE5Nzg2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9hbmFseXNpcy10YXNrLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2FuYWx5c2lzLXRhc2suanMKQEAgLTE2Nyw2ICsxNjcs
MzEgQEAgY2xhc3MgQW5hbHlzaXNUYXNrIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBjYXRlZ29yeTsKICAgICB9CiAKKyAgICBhc3luYyBjb21taXRTZXRzRnJvbVRlc3RH
cm91cHNBbmRNZWFzdXJlbWVudFNldCgpCisgICAgeworICAgICAgICBjb25zdCBhbGxUZXN0R3Jv
dXBzSW5UYXNrID0gYXdhaXQgVGVzdEdyb3VwLmZldGNoRm9yVGFzayh0aGlzLmlkKCkpOworICAg
ICAgICBjb25zdCBhbGxDb21taXRTZXRzSW5UYXNrID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChj
b25zdCBncm91cCBvZiBhbGxUZXN0R3JvdXBzSW5UYXNrKQorICAgICAgICAgICAgZ3JvdXAucmVx
dWVzdGVkQ29tbWl0U2V0cygpLmZvckVhY2goKGNvbW1pdFNldCkgPT4gYWxsQ29tbWl0U2V0c0lu
VGFzay5hZGQoY29tbWl0U2V0KSk7CisKKyAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBs
YXRmb3JtKCk7CisgICAgICAgIGNvbnN0IG1ldHJpYyA9IHRoaXMubWV0cmljKCk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHBsYXRmb3JtKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQobWV0cmlj
KTsKKyAgICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcGxhdGZvcm0ubGFzdE1vZGlmaWVkKG1l
dHJpYyk7CisgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmlu
ZFNldChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAg
YXdhaXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRoaXMuc3RhcnRUaW1lKCksIHRoaXMu
ZW5kVGltZSgpKTsKKyAgICAgICAgY29uc3Qgc2VyaWVzID0gbWVhc3VyZW1lbnRTZXQuZmV0Y2hl
ZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjb25zdCBzdGFy
dFBvaW50ID0gc2VyaWVzLmZpbmRCeUlkKHRoaXMuc3RhcnRNZWFzdXJlbWVudElkKCkpOworICAg
ICAgICBjb25zdCBlbmRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLmVuZE1lYXN1cmVtZW50
SWQoKSk7CisKKyAgICAgICAgY29uc3QgdGltZVNlcmllc1ZpZXcgPSBzZXJpZXMudmlld0JldHdl
ZW5Qb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgICAgICBmb3IgKGNvbnN0IHBvaW50
IG9mIHRpbWVTZXJpZXNWaWV3KQorICAgICAgICAgICAgYWxsQ29tbWl0U2V0c0luVGFzay5hZGQo
cG9pbnQuY29tbWl0U2V0KCkpOworCisgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFsbENvbW1p
dFNldHNJblRhc2spOworICAgIH0KKwogICAgIHN0YXRpYyBjYXRlZ29yaWVzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBbCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAzOWIzMjYwZTJkOGI5M2VlMDY2YTQ4
NThjMjhiMTEyZjNlZTk3MjVhLi4zY2QwNzk0OGQyNTg1Mjc2NDA0MzUyMWE3NTkyMzgxMTdjZGE1
MGU2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVs
cy9jb21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2NvbW1pdC1sb2cuanMKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4
dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKIAogICAgIHJlcG9zaXRvcnkoKSB7IHJldHVybiB0aGlz
Ll9yZXBvc2l0b3J5OyB9CiAgICAgdGltZSgpIHsgcmV0dXJuIG5ldyBEYXRlKHRoaXMuX3Jhd0Rh
dGFbJ3RpbWUnXSk7IH0KKyAgICBoYXNDb21taXRUaW1lKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsndGltZSddID4gMCAmJiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gIT0gbnVsbDsgfQogICAgIGF1
dGhvcigpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ2F1dGhvck5hbWUnXTsgfQogICAgIHJldmlz
aW9uKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsncmV2aXNpb24nXTsgfQogICAgIG1lc3NhZ2Uo
KSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdlJ107IH0KQEAgLTQzLDYgKzQ0LDcgQEAg
Y2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBvd25lZENvbW1p
dHMoKSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdHM7IH0KICAgICBvd25lckNvbW1pdCgpIHsg
cmV0dXJuIHRoaXMuX293bmVyQ29tbWl0OyB9CiAgICAgb3JkZXIoKSB7IHJldHVybiB0aGlzLl9y
YXdEYXRhWydvcmRlciddOyB9CisgICAgaGFzQ29tbWl0T3JkZXIoKSB7IHJldHVybiB0aGlzLl9y
YXdEYXRhWydvcmRlciddICE9IG51bGw7IH0KICAgICBzZXRPd25lckNvbW1pdHMob3duZXJDb21t
aXQpIHsgdGhpcy5fb3duZXJDb21taXQgPSBvd25lckNvbW1pdDsgfQogCiAgICAgbGFiZWwoKQpA
QCAtOTIsNiArOTQsMjAgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0
IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgc3RhdGljIGhhc09yZGVyaW5nKGZpcnN0Q29t
bWl0LCBzZWNvbmRDb21taXQpCisgICAgeworICAgICAgICByZXR1cm4gKGZpcnN0Q29tbWl0Lmhh
c0NvbW1pdFRpbWUoKSAmJiBzZWNvbmRDb21taXQuaGFzQ29tbWl0VGltZSgpKSB8fAorICAgICAg
ICAgICAgZmlyc3RDb21taXQuaGFzQ29tbWl0T3JkZXIoKSAmJiBzZWNvbmRDb21taXQuaGFzQ29t
bWl0T3JkZXIoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgb3JkZXJUd29Db21taXRzKGZpcnN0Q29t
bWl0LCBzZWNvbmRDb21taXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChDb21taXRM
b2cuaGFzT3JkZXJpbmcoZmlyc3RDb21taXQsIHNlY29uZENvbW1pdCkpOworICAgICAgICBjb25z
dCBmaXJzdENvbW1pdFNtYWxsZXIgPSAoZmlyc3RDb21taXQuaGFzQ29tbWl0VGltZSgpICYmIHNl
Y29uZENvbW1pdC5oYXNDb21taXRUaW1lKCkKKyAgICAgICAgICAgICYmIGZpcnN0Q29tbWl0LnRp
bWUoKSA8IHNlY29uZENvbW1pdC50aW1lKCkpIHx8IGZpcnN0Q29tbWl0Lm9yZGVyKCkgPCBzZWNv
bmRDb21taXQub3JkZXIoKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0Q29tbWl0U21hbGxlciA/IFtm
aXJzdENvbW1pdCwgc2Vjb25kQ29tbWl0XSA6IFtzZWNvbmRDb21taXQsIGZpcnN0Q29tbWl0XTsK
KyAgICB9CisKICAgICBvd25lZENvbW1pdEZvck93bmVkUmVwb3NpdG9yeShvd25lZFJlcG9zaXRv
cnkpIHsgcmV0dXJuIHRoaXMuX293bmVkQ29tbWl0QnlPd25lZFJlcG9zaXRvcnkuZ2V0KG93bmVk
UmVwb3NpdG9yeSk7IH0KIAogICAgIGZldGNoT3duZWRDb21taXRzKCkKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCmlu
ZGV4IGYxNzk1MTEwYzRhMWM4OThhNTAzZjI5MWVhNmZkYjNiNDBhMmY1M2UuLjRhNDU4ZjhhNjNj
ZmEwZWM1YWFkODllMWJjNmE3YTA4ZGNmMDE2ZDEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwpAQCAtNzEsNyAr
NzEsNiBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIG93
bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0
b3J5VG9Db21taXRPd25lck1hcC5nZXQocmVwb3NpdG9yeSk7IH0KICAgICB0b3BMZXZlbFJlcG9z
aXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0
aFVSTCh0aGlzLl9yZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9PiAhdGhpcy5vd25l
clJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkpOyB9CiAgICAgb3duZWRSZXBvc2l0
b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZXJS
ZXBvc2l0b3J5VG9Pd25lZFJlcG9zaXRvcmllc01hcC5nZXQocmVwb3NpdG9yeSk7IH0KLSAgICBj
b21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlU
b0NvbW1pdE1hcC5nZXQocmVwb3NpdG9yeSk7IH0KIAogICAgIHJldmlzaW9uRm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KQogICAgIHsKQEAgLTEyMCw2ICsxMTksMTIgQEAgY2xhc3MgQ29tbWl0U2V0
IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIENvbW1pdFNldC5hcmVD
dXN0b21Sb290c0VxdWFsKHRoaXMuX2N1c3RvbVJvb3RzLCBvdGhlci5fY3VzdG9tUm9vdHMpOwog
ICAgIH0KIAorICAgIGhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKS5sZW5ndGggPT09IHRoaXMuX3JlcG9z
aXRvcnlUb0NvbW1pdE1hcC5zaXplICYmCisgICAgICAgICAgICBjb21taXRTZXQucmVwb3NpdG9y
aWVzKCkuZXZlcnkoKHJlcG9zaXRvcnkpID0+IHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE1hcC5o
YXMocmVwb3NpdG9yeSkpOworICAgIH0KKwogICAgIHN0YXRpYyBhcmVDdXN0b21Sb290c0VxdWFs
KGN1c3RvbVJvb3RzMSwgY3VzdG9tUm9vdHMyKQogICAgIHsKICAgICAgICAgaWYgKGN1c3RvbVJv
b3RzMS5sZW5ndGggIT0gY3VzdG9tUm9vdHMyLmxlbmd0aCkKQEAgLTE0Niw2ICsxNTEsMjIgQEAg
Y2xhc3MgQ29tbWl0U2V0IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAorICAgIGNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5hbGxSb290RmlsZXMoKS5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgdGhpcy5y
ZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgaWYgKHRoaXMub3duZXJDb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgaWYgKHRoaXMub3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3Np
dG9yeSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAodGhp
cy5wYXRjaEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHN0
YXRpYyBjcmVhdGVOYW1lV2l0aG91dENvbGxpc2lvbihuYW1lLCBleGlzdGluZ05hbWVTZXQpCiAg
ICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChleGlzdGluZ05hbWVTZXQgaW5zdGFuY2VvZiBT
ZXQpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvdGVzdC1ncm91cC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL3Rlc3QtZ3JvdXAuanMKaW5kZXggMmRhNjIyMDljZjM5YzczZGJmNGMzYmMyY2FjYjRiZGJk
NzYxZjY1Ni4uZTgyMTY3MGFkZjE1NDBlM2NlM2I1YzFjNjQ1OTc3NTY2YWVjMGEwZCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91
cC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy90ZXN0
LWdyb3VwLmpzCkBAIC0xNCw3ICsxNCw3IEBAIGNsYXNzIFRlc3RHcm91cCBleHRlbmRzIExhYmVs
ZWRPYmplY3QgewogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkUmVxdWVzdHMuc29ydCgoYSwgYikg
PT4gYS5vcmRlcigpIC0gYi5vcmRlcigpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHRoaXMuX3Jl
cG9zaXRvcmllcyA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRT
ZXRzTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NvbXB1dGVSZXF1
ZXN0ZWRDb21taXRTZXRzLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9jb21wdXRlUmVxdWVz
dGVkQ29tbWl0U2V0c0xhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbihUZXN0R3Jv
dXAuX2NvbXB1dGVSZXF1ZXN0ZWRDb21taXRTZXRzKTsKICAgICAgICAgdGhpcy5fcmVxdWVzdGVk
Q29tbWl0U2V0cyA9IG51bGw7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldFRvTGFiZWwgPSBuZXcg
TWFwOwogICAgICAgICBjb25zb2xlLmFzc2VydCghb2JqZWN0LnBsYXRmb3JtIHx8IG9iamVjdC5w
bGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKQEAgLTgwLDcgKzgwLDcgQEAgY2xhc3MgVGVz
dEdyb3VwIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jb21w
dXRlUmVxdWVzdGVkQ29tbWl0U2V0c0xhemlseS5ldmFsdWF0ZSguLi50aGlzLl9vcmRlcmVkQnVp
bGRSZXF1ZXN0cygpKTsKICAgICB9CiAKLSAgICBfY29tcHV0ZVJlcXVlc3RlZENvbW1pdFNldHMo
Li4ub3JkZXJlZEJ1aWxkUmVxdWVzdHMpCisgICAgc3RhdGljIF9jb21wdXRlUmVxdWVzdGVkQ29t
bWl0U2V0cyguLi5vcmRlcmVkQnVpbGRSZXF1ZXN0cykKICAgICB7CiAgICAgICAgIGNvbnN0IHJl
cXVlc3RlZENvbW1pdFNldHMgPSBbXTsKICAgICAgICAgY29uc3QgY29tbWl0U2V0TGFiZWxNYXAg
PSBuZXcgTWFwOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwppbmRleCAwMmNmYWEwNzNkMWY0
Y2M0YThlMGQyZTYxNmM0YzdkM2RkNWRjYmNjLi41MzRmMzY2OTNmOGVlMDk5YmU1OTA1ZDhlY2Jl
YTBiZDA3NDg4NTgwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwpAQCAtMjU4LDYgKzI1
OCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRC
YXNlIHsKICAgICAgICAgdGhpcy5fcmVuZGVyQ3VycmVudFRlc3RHcm91cExhemlseSA9IG5ldyBM
YXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDdXJyZW50VGVzdEdyb3VwLmJpbmQo
dGhpcykpOwogICAgICAgICB0aGlzLl90ZXN0R3JvdXBNYXAgPSBuZXcgTWFwOwogICAgICAgICB0
aGlzLl90ZXN0R3JvdXBzID0gW107CisgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVz
dEdyb3VwID0gbnVsbDsKICAgICAgICAgdGhpcy5fY3VycmVudFRlc3RHcm91cCA9IG51bGw7CiAg
ICAgICAgIHRoaXMuX3Nob3dIaWRkZW5Hcm91cHMgPSBmYWxzZTsKICAgICB9CkBAIC0yNjgsMTYg
KzI2OSwzNCBAQCBjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9u
ZW50QmFzZSB7CiAgICAgICAgIHRoaXMucGFydCgncmV0cnktZm9ybScpLmxpc3RlblRvQWN0aW9u
KCdzdGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50KSA9PiB7CiAgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoQWN0aW9uKCdyZXRyeVRlc3RHcm91cCcsIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAs
IHJlcGV0aXRpb25Db3VudCk7CiAgICAgICAgIH0pOworICAgICAgICB0aGlzLnBhcnQoJ2Jpc2Vj
dC1mb3JtJykubGlzdGVuVG9BY3Rpb24oJ3N0YXJ0VGVzdGluZycsIChyZXBldGl0aW9uQ291bnQp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IHRoaXMuX21pZGRsZUNv
bW1pdFNldEJ5VGVzdEdyb3VwLmdldCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKKyAgICAgICAg
ICAgIGNvbnN0IFtvbmVDb21taXRTZXQsIGFub3RoZXJDb21taXRTZXRdID0gdGhpcy5fY3VycmVu
dFRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBjb21t
aXRTZXRzID0gW29uZUNvbW1pdFNldCwgbWlkZGxlQ29tbWl0U2V0LCBhbm90aGVyQ29tbWl0U2V0
XTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2Jpc2VjdFRlc3RHcm91cCcsIHRo
aXMuX2N1cnJlbnRUZXN0R3JvdXAsIGNvbW1pdFNldHMsIHJlcGV0aXRpb25Db3VudCk7CisgICAg
ICAgIH0pOwogICAgIH0KIAogICAgIHNldFRlc3RHcm91cHModGVzdEdyb3VwcywgY3VycmVudFRl
c3RHcm91cCwgc2hvd0hpZGRlbkdyb3VwcykKICAgICB7CisgICAgICAgIGNvbnN0IHRlc3RHcm91
cElkU2V0ID0gbmV3IFNldCh0ZXN0R3JvdXBzLm1hcCgodGVzdEdyb3VwKSA9PiB0ZXN0R3JvdXAu
aWQoKSkpOworICAgICAgICBjb25zdCBzYW1lVGVzdEdyb3VwcyA9IHRoaXMuX3Rlc3RHcm91cHMu
bGVuZ3RoID09PSB0ZXN0R3JvdXBzLmxlbmd0aCAmJiB0aGlzLl90ZXN0R3JvdXBzLmV2ZXJ5KCh0
ZXN0R3JvdXApID0+IHRlc3RHcm91cElkU2V0Lmhhcyh0ZXN0R3JvdXAuaWQoKSkpOwogICAgICAg
ICB0aGlzLl90ZXN0R3JvdXBzID0gdGVzdEdyb3VwczsKICAgICAgICAgdGhpcy5fY3VycmVudFRl
c3RHcm91cCA9IGN1cnJlbnRUZXN0R3JvdXA7CiAgICAgICAgIHRoaXMuX3Nob3dIaWRkZW5Hcm91
cHMgPSBzaG93SGlkZGVuR3JvdXBzOwogICAgICAgICB0aGlzLnBhcnQoJ3JldmlzaW9uLXRhYmxl
Jykuc2V0VGVzdEdyb3VwKGN1cnJlbnRUZXN0R3JvdXApOwogICAgICAgICB0aGlzLnBhcnQoJ3Jl
c3VsdHMtdmlld2VyJykuc2V0VGVzdEdyb3VwKGN1cnJlbnRUZXN0R3JvdXApOwotICAgICAgICB0
aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICBpZiAoIXNhbWVUZXN0R3JvdXBzKSB7Cisg
ICAgICAgICAgICB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91cCA9IG5ldyBNYXA7Cisg
ICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2VzID0gdGVzdEdyb3Vwcy5tYXAoYXN5bmMg
KHRlc3RHcm91cCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGFuYWx5c2lzVGFzayA9IHRl
c3RHcm91cC50YXNrKCk7CisgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlQ29tbWl0U2V0
cyA9IGF3YWl0IGFuYWx5c2lzVGFzay5jb21taXRTZXRzRnJvbVRlc3RHcm91cHNBbmRNZWFzdXJl
bWVudFNldCgpOworICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0
IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21t
aXRzKHRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCksIGF2YWlsYWJsZUNvbW1pdFNldHMp
OworICAgICAgICAgICAgICAgIHRoaXMuX21pZGRsZUNvbW1pdFNldEJ5VGVzdEdyb3VwLnNldCh0
ZXN0R3JvdXAsIG1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IFByb21pc2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpLnRoZW4oKCkgPT4gdGhpcy5lbnF1ZXVlVG9S
ZW5kZXIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKICAgICB9CiAKICAgICBzZXRBbmFseXNpc1Jlc3VsdHMoYW5hbHlzaXNSZXN1bHRzLCBt
ZXRyaWMpCkBAIC0zMzcsOSArMzU2LDEyIEBAIGNsYXNzIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBh
bmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkKICAg
ICAgICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5nZXQoY3VycmVudEdyb3VwKS5saXN0SXRlbS5j
bGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOwogCi0gICAgICAgIGlmIChjdXJyZW50R3JvdXApCisg
ICAgICAgIGlmIChjdXJyZW50R3JvdXApIHsKICAgICAgICAgICAgIHRoaXMucGFydCgncmV0cnkt
Zm9ybScpLnNldFJlcGV0aXRpb25Db3VudChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkp
OworICAgICAgICAgICAgdGhpcy5wYXJ0KCdiaXNlY3QtZm9ybScpLnNldFJlcGV0aXRpb25Db3Vu
dChjdXJyZW50R3JvdXAucmVwZXRpdGlvbkNvdW50KCkpOworICAgICAgICB9CiAgICAgICAgIHRo
aXMuY29udGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50R3JvdXAgPyBu
dWxsIDogJ25vbmUnOworICAgICAgICB0aGlzLmNvbnRlbnQoJ2Jpc2VjdC1mb3JtJykuc3R5bGUu
ZGlzcGxheSA9IGN1cnJlbnRHcm91cCAmJiB0aGlzLl9taWRkbGVDb21taXRTZXRCeVRlc3RHcm91
cC5nZXQoY3VycmVudEdyb3VwKSA/IG51bGwgOiAnbm9uZSc7CiAKICAgICAgICAgY29uc3QgaGlk
ZUJ1dHRvbiA9IHRoaXMuY29udGVudCgnaGlkZS1idXR0b24nKTsKICAgICAgICAgaGlkZUJ1dHRv
bi50ZXh0Q29udGVudCA9IGN1cnJlbnRHcm91cCAmJiBjdXJyZW50R3JvdXAuaXNIaWRkZW4oKSA/
ICdVbmhpZGUnIDogJ0hpZGUnOwpAQCAtMzU2LDYgKzM3OCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFz
a1Rlc3RHcm91cFBhbmUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICA8
dGVzdC1ncm91cC1yZXN1bHRzLXZpZXdlciBpZD0icmVzdWx0cy12aWV3ZXIiPjwvdGVzdC1ncm91
cC1yZXN1bHRzLXZpZXdlcj4KICAgICAgICAgICAgICAgICA8dGVzdC1ncm91cC1yZXZpc2lvbi10
YWJsZSBpZD0icmV2aXNpb24tdGFibGUiPjwvdGVzdC1ncm91cC1yZXZpc2lvbi10YWJsZT4KICAg
ICAgICAgICAgICAgICA8dGVzdC1ncm91cC1mb3JtIGlkPSJyZXRyeS1mb3JtIj5SZXRyeTwvdGVz
dC1ncm91cC1mb3JtPgorICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLWZvcm0gaWQ9ImJpc2Vj
dC1mb3JtIj5CaXNlY3Q8L3Rlc3QtZ3JvdXAtZm9ybT4KICAgICAgICAgICAgICAgICA8YnV0dG9u
IGlkPSJoaWRlLWJ1dHRvbiI+SGlkZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgIDxzcGFuIGlk
PSJwZW5kaW5nLXJlcXVlc3QtY2FuY2VsLXdhcm5pbmciPihjYW5jZWxzIHBlbmRpbmcgcmVxdWVz
dHMpPC9zcGFuPgogICAgICAgICAgICAgPC9kaXY+YDsKQEAgLTQyMyw3ICs0NDYsNyBAQCBjbGFz
cyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAg
ICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjcmV0
cnktZm9ybSB7CisgICAgICAgICAgICAjcmV0cnktZm9ybSwgI2Jpc2VjdC1mb3JtIHsKICAgICAg
ICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgICAgICBtYXJnaW46IDAuNXJl
bTsKICAgICAgICAgICAgIH0KQEAgLTUwOSw2ICs1MzIsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQ
YWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRv
QWN0aW9uKCdyZW5hbWVUZXN0R3JvdXAnLCAodGVzdEdyb3VwLCBuZXdOYW1lKSA9PiB0aGlzLl91
cGRhdGVUZXN0R3JvdXBOYW1lKHRlc3RHcm91cCwgbmV3TmFtZSkpOwogICAgICAgICBncm91cFBh
bmUubGlzdGVuVG9BY3Rpb24oJ3RvZ2dsZVRlc3RHcm91cFZpc2liaWxpdHknLCAodGVzdEdyb3Vw
KSA9PiB0aGlzLl9oaWRlQ3VycmVudFRlc3RHcm91cCh0ZXN0R3JvdXApKTsKICAgICAgICAgZ3Jv
dXBQYW5lLmxpc3RlblRvQWN0aW9uKCdyZXRyeVRlc3RHcm91cCcsICh0ZXN0R3JvdXAsIHJlcGV0
aXRpb25Db3VudCkgPT4gdGhpcy5fcmV0cnlDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgcmVw
ZXRpdGlvbkNvdW50KSk7CisgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbignYmlzZWN0
VGVzdEdyb3VwJywgKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVwZXRpdGlvbkNvdW50KSA9PiB0
aGlzLl9iaXNlY3RDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVwZXRp
dGlvbkNvdW50KSk7CiAKICAgICAgICAgdGhpcy5wYXJ0KCdjYXVzZS1saXN0JykubGlzdGVuVG9B
Y3Rpb24oJ2FkZEl0ZW0nLCAocmVwb3NpdG9yeSwgcmV2aXNpb24pID0+IHsKICAgICAgICAgICAg
IHRoaXMuX2Fzc29jaWF0ZUNvbW1pdCgnY2F1c2UnLCByZXBvc2l0b3J5LCByZXZpc2lvbik7CkBA
IC03OTMsNyArODE3LDI2IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0
aEhlYWRpbmcgewogICAgICAgICAgICAgLnRoZW4odGhpcy5fZGlkRmV0Y2hUZXN0R3JvdXBzLmJp
bmQodGhpcyksIGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0
byBjcmVhdGUgYSBuZXcgdGVzdCBncm91cDogJyArIGVycm9yKTsKICAgICAgICAgfSk7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0NvbW1pdFNldExp
c3QobmV3TmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApOworICAgIH0KKworICAg
IGFzeW5jIF9iaXNlY3RDdXJyZW50VGVzdEdyb3VwKHRlc3RHcm91cCwgY29tbWl0U2V0cywgcmVw
ZXRpdGlvbkNvdW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdGFzayk7
CisgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGVzdEdyb3VwLnBsYXRmb3JtKCk7CisgICAgICAg
IGNvbnN0IGV4aXN0aW5nVGVzdEdyb3VwTmFtZXMgPSBuZXcgU2V0KCh0aGlzLl90ZXN0R3JvdXBz
IHx8IFtdKS5tYXAoKHRlc3RHcm91cCkgPT4gdGVzdEdyb3VwLm5hbWUoKSkpOworCisgICAgICAg
IGZvciAobGV0IGkgPSAxOyBpIDwgY29tbWl0U2V0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgY29uc3QgcHJldmlvdXNDb21taXRTZXQgPSBjb21taXRTZXRzW2kgLSAxXTsKKyAgICAgICAg
ICAgIGNvbnN0IGN1cnJlbnRDb21taXRTZXQgPSBjb21taXRTZXRzW2ldOworICAgICAgICAgICAg
Y29uc3QgdGVzdEdyb3VwTmFtZSA9IENvbW1pdFNldC5jcmVhdGVOYW1lV2l0aG91dENvbGxpc2lv
bihDb21taXRTZXQuZGlmZihwcmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1pdFNldCksIGV4
aXN0aW5nVGVzdEdyb3VwTmFtZXMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBjb25zdCB0ZXN0R3JvdXBzID0gYXdhaXQgVGVzdEdyb3VwLmNyZWF0ZVdpdGhDdXN0b21Db25m
aWd1cmF0aW9uKHRoaXMuX3Rhc2ssIHBsYXRmb3JtLCB0ZXN0R3JvdXAudGVzdCgpLCB0ZXN0R3Jv
dXBOYW1lLCByZXBldGl0aW9uQ291bnQsIFtwcmV2aW91c0NvbW1pdFNldCwgY3VycmVudENvbW1p
dFNldF0pOworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RpZEZldGNoVGVzdEdyb3Vwcyh0
ZXN0R3JvdXBzKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOiAnICsgZXJyb3IpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQog
CiAgICAgX2NyZWF0ZVRlc3RHcm91cEFmdGVyVmVyaWZ5aW5nQ29tbWl0U2V0TGlzdCh0ZXN0R3Jv
dXBOYW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCkKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IGQwZWZlN2MwZDUyMDQ1ODlk
N2I3ZGY2MGQxYmNmNzEzZGI1NGFhNmMuLjAxZDIzZTJkYTgzMjlhYTg2ZWNiNDNkNzE3OTE4MDEz
YzE1ODMxNWQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92
My1tb2RlbHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1v
ZGVscy5qcwpAQCAtMzcsNSArMzcsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy91cGxvYWRlZC1m
aWxlLmpzJywgJ1VwbG9hZGVkRmlsZScpOwogaW1wb3J0RnJvbVYzKCdwcml2aWxlZ2VkLWFwaS5q
cycsICdQcml2aWxlZ2VkQVBJJyk7CiBpbXBvcnRGcm9tVjMoJ2luc3RydW1lbnRhdGlvbi5qcycs
ICdJbnN0cnVtZW50YXRpb24nKTsKIGltcG9ydEZyb21WMygnbGF6aWx5LWV2YWx1YXRlZC1mdW5j
dGlvbi5qcycsICdMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbicpOworaW1wb3J0RnJvbVYzKCdjb21t
aXQtc2V0LXJhbmdlLWJpc2VjdG9yLmpzJywgJ0NvbW1pdFNldFJhbmdlQmlzZWN0b3InKTsKIAot
Z2xvYmFsLlN0YXRpc3RpY3MgPSByZXF1aXJlKCcuLi8uLi9wdWJsaWMvc2hhcmVkL3N0YXRpc3Rp
Y3MuanMnKTsKK2dsb2JhbC5TdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vLi4vcHVibGljL3NoYXJl
ZC9zdGF0aXN0aWNzLmpzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMu
anMKaW5kZXggODQ5YjAzNjRiNDBhNTliYTFlZjJiNzQ5YTk3MmNhNjBjMjVlMmFjZS4uMGRmMmIw
YzUwMmViZDkyNzYxOGRmZjg4NGRmM2FmMGFkNDg1ZmIyZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcworKysgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCkBAIC05
NSw2ICs5NSwyNiBAQCBmdW5jdGlvbiBvdGhlck93bmVyQ29tbWl0KCkKICAgICB9KTsKIH0KIAor
ZnVuY3Rpb24gb3duZWRDb21taXQoKQoreworICAgIHJldHVybiBuZXcgQ29tbWl0TG9nKDExLCB7
CisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LAorICAgICAg
ICByZXZpc2lvbjogJ293bmVkLWNvbW1pdC0wJywKKyAgICAgICAgb3duc0NvbW1pdHM6IHRydWUs
CisgICAgICAgIHRpbWU6IG51bGwKKyAgICB9KTsKK30KKworZnVuY3Rpb24gYW5vdGhlck93bmVk
Q29tbWl0KCkKK3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZygxMSwgeworICAgICAgICByZXBv
c2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdv
d25lZC1jb21taXQtMScsCisgICAgICAgIG93bnNDb21taXRzOiB0cnVlLAorICAgICAgICB0aW1l
OiBudWxsCisgICAgfSk7Cit9CisKIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAoKSB7
CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIApAQCAtMTgxLDYgKzIwMSw0NCBAQCBkZXNjcmli
ZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAg
IGRlc2NyaWJlKCdoYXNPcmRlcmluZycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1
cm4gInRydWUiIHdoZW4gYm90aCBjb21taXRzIGhhdmUgY29tbWl0IG9yZGVycycsICgpID0+IHsK
KyAgICAgICAgICAgIGFzc2VydC5vayhDb21taXRMb2cuaGFzT3JkZXJpbmcob3N4Q29tbWl0KCks
IG9sZE9TWENvbW1pdCgpKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJ0cnVlIiB3aGVuIGJvdGggY29tbWl0cyBoYXZlIGNvbW1pdCB0aW1lJywgKCkgPT4gewor
ICAgICAgICAgICAgYXNzZXJ0Lm9rKENvbW1pdExvZy5oYXNPcmRlcmluZyh3ZWJraXRDb21taXQo
KSwgb2xkV2ViS2l0Q29tbWl0KCkpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3Vs
ZCByZXR1cm4gImZhbHNlIiB3aGVuIG5laXRoZXIgY29tbWl0IHRpbWUgbm9yIGNvbW1pdCBvcmRl
ciBleGlzdHMnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soIUNvbW1pdExvZy5oYXNP
cmRlcmluZyhvd25lZENvbW1pdCgpLCBhbm90aGVyT3duZWRDb21taXQoKSkpOworICAgICAgICB9
KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAiZmFsc2UiIHdoZW4gb25lIGNvbW1pdCBv
bmx5IGhhcyBjb21taXQgdGltZSBhbmQgYW5vdGhlciBvbmx5IGhhcyBjb21taXQgb3JkZXInLCAo
KSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soIUNvbW1pdExvZy5oYXNPcmRlcmluZyh3ZWJr
aXRDb21taXQoKSwgb3N4Q29tbWl0KCkpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBk
ZXNjcmliZSgnaGFzQ29tbWl0T3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJ0cnVlIiB3aGVuIGEgY29tbWl0IGhhcyBjb21taXQgb3JkZXInLCAoKSA9PiB7CisgICAg
ICAgICAgICBhc3NlcnQub2sob3N4Q29tbWl0KCkuaGFzQ29tbWl0T3JkZXIoKSk7CisgICAgICAg
IH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICJmYWxzZSIgd2hlbiBhIGNvbW1pdCBv
bmx5IGhhcyBjb21taXQgdGltZScsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghd2Vi
a2l0Q29tbWl0KCkuaGFzQ29tbWl0T3JkZXIoKSk7CisgICAgICAgIH0pCisgICAgfSk7CisKKyAg
ICBkZXNjcmliZSgnaGFzQ29tbWl0VGltZScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gInRydWUiIHdoZW4gYSBjb21taXQgaGFzIGNvbW1pdCBvcmRlcicsICgpID0+IHsKKyAg
ICAgICAgICAgIGFzc2VydC5vayghb3N4Q29tbWl0KCkuaGFzQ29tbWl0VGltZSgpKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gImZhbHNlIiB3aGVuIGEgY29tbWl0
IG9ubHkgaGFzIGNvbW1pdCB0aW1lJywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9rKHdl
YmtpdENvbW1pdCgpLmhhc0NvbW1pdFRpbWUoKSk7CisgICAgICAgIH0pCisgICAgfSk7CisKICAg
ICBkZXNjcmliZSgnZmV0Y2hPd25lZENvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgIGJlZm9yZUVh
Y2goKCkgPT4gewogICAgICAgICAgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtcmFuZ2Ut
YmlzZWN0b3ItdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9j
b21taXQtc2V0LXJhbmdlLWJpc2VjdG9yLXRlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMzA1NDc5Yjdl
ZmJjMTk1ZjFjYmU2N2QyZDAyN2YwZmRiOTM1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXJhbmdlLWJpc2VjdG9yLXRl
c3RzLmpzCkBAIC0wLDAgKzEsNTI1IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IGFzc2VydCA9
IHJlcXVpcmUoJ2Fzc2VydCcpOworCityZXF1aXJlKCcuLi90b29scy9qcy92My1tb2RlbHMuanMn
KTsKK2xldCBNb2NrTW9kZWxzID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvbW9jay12My1tb2RlbHMu
anMnKS5Nb2NrTW9kZWxzOworbGV0IE1vY2tSZW1vdGVBUEkgPSByZXF1aXJlKCcuL3Jlc291cmNl
cy9tb2NrLXJlbW90ZS1hcGkuanMnKS5Nb2NrUmVtb3RlQVBJOworCitkZXNjcmliZSgnQ29tbWl0
U2V0UmFuZ2VCaXNlY3RvcicsICgpID0+IHsKKworICAgIGZ1bmN0aW9uIG1ha2VDb21taXQoaWQs
IHJlcG9zaXRvcnksIHJldmlzaW9uLCB0aW1lLCBvcmRlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKGlkLCB7CisgICAgICAgICAgICByZXBvc2l0b3J5
LAorICAgICAgICAgICAgcmV2aXNpb24sCisgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2Us
CisgICAgICAgICAgICB0aW1lLAorICAgICAgICAgICAgb3JkZXIKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc29ydGVkQ29tbWl0U2V0cygpCisgICAgeworICAgICAgICByZXR1
cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7CisgICAgICAg
ICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDog
bWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtMScsIDEwKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1h
a2VDb21taXQoMTEsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xJywgMSksIHJlcXVpcmVz
QnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3Rv
bVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigyLCB7
CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MScsIDEwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0yJywgMjEp
LCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICBjdXN0b21Sb290czogW119KSwKKyAgICAgICAgICAgIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMywgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJr
aXQtY29tbWl0LTInLCAyMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21t
aXQtMicsIDIxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQu
ZW5zdXJlU2luZ2xldG9uKDQsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisg
ICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMsIE1vY2tNb2RlbHMud2Vi
a2l0LCAnd2Via2l0LWNvbW1pdC0zJywgMzApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAg
ICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMywgTW9ja01vZGVscy5vc3gs
ICdvc3gtY29tbWl0LTMnLCAzMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAg
Q29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbig1LCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25J
dGVtczogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCg2LCBNb2Nr
TW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQtNicsIDYwKSwgcmVxdWlyZXNCdWlsZDogZmFs
c2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTMsIE1vY2tN
b2RlbHMub3N4LCAnb3N4LWNvbW1pdC0zJywgMzEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBjdXN0b21Sb290czogW119KSwKKyAg
ICAgICAgXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3J0ZWRDb21taXRTZXRzV2l0aG91dFRp
bWVPck9yZGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBDb21taXRT
ZXQuZW5zdXJlU2luZ2xldG9uKDYsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEwMSwgTW9ja01vZGVs
cy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEwMScsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9
LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMTEsIE1vY2tNb2Rl
bHMub3N4LCAnb3N4LWNvbW1pdC0xMTEnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAg
ICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDcsIHsKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0
KDEwMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEwMScsIDApLCByZXF1aXJl
c0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1p
dCgxMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xMTInLCAwKSwgcmVxdWlyZXNCdWls
ZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9v
dHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDgsIHsKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDEwMiwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEw
MicsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNv
bW1pdDogbWFrZUNvbW1pdCgxMTIsIE1vY2tNb2RlbHMub3N4LCAnb3N4LWNvbW1pdC0xMTInLCAw
KSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2lu
Z2xldG9uKDksIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEwMywgTW9ja01vZGVscy53ZWJraXQsICd3
ZWJraXQtY29tbWl0LTEwMycsIDApLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAg
ICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMTMsIE1vY2tNb2RlbHMub3N4LCAnb3N4
LWNvbW1pdC0xMTMnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21t
aXRTZXQuZW5zdXJlU2luZ2xldG9uKDEwLCB7CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVt
czogWworICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMDYsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xMDYnLCAwKSwgcmVxdWlyZXNCdWlsZDogZmFs
c2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMTEzLCBNb2Nr
TW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMTEzJywgMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0K
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAor
ICAgICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNldFdpdGhTb21lQ29tbWl0
c09ubHlIYXZlT3JkZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIENv
bW1pdFNldC5lbnN1cmVTaW5nbGV0b24oMTEsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0
ZW1zOiBbCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tN
b2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMTApLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNvbW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01v
ZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAxLCBNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0xJywgMCwgMSksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBb
XX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxMiwgeworICAgICAg
ICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6
IG1ha2VDb21taXQoMSwgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnLCAxMCks
IHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBt
YWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMicsIDIxKSwgcmVxdWly
ZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21t
aXQoMjAyLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0yJywgMCwg
MiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNp
bmdsZXRvbigxMywgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMiwgTW9ja01vZGVscy53ZWJraXQsICd3
ZWJraXQtY29tbWl0LTInLCAyMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEyLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1j
b21taXQtMicsIDIxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAyLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwg
J293bmVyLWNvbW1pdC0yJywgMCwgMiksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAg
ICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNCwgeworICAgICAgICAgICAgICAgIHJldmlz
aW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMywg
TW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTMnLCAzMCksIHJlcXVpcmVzQnVpbGQ6
IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBN
b2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2Ug
fSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAyLCBNb2NrTW9k
ZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0yJywgMCwgMiksIHJlcXVpcmVzQnVp
bGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJv
b3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNSwgewor
ICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAgICAgICAgICAgICAgICAgICAgeyBj
b21taXQ6IG1ha2VDb21taXQoMywgTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTMn
LCAzMCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgICAgIHsgY29t
bWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwgJ29zeC1jb21taXQtMycsIDMxKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1h
a2VDb21taXQoMjAzLCBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgJ293bmVyLWNvbW1pdC0z
JywgMCwgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAgICAgICAgICAgQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbigxNiwgeworICAgICAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFsKKyAg
ICAgICAgICAgICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoNiwgTW9ja01vZGVscy53ZWJr
aXQsICd3ZWJraXQtY29tbWl0LTYnLCA2MCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDEzLCBNb2NrTW9kZWxzLm9zeCwg
J29zeC1jb21taXQtMycsIDMxKSwgcmVxdWlyZXNCdWlsZDogZmFsc2UgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBjb21taXQ6IG1ha2VDb21taXQoMjAzLCBNb2NrTW9kZWxzLm93bmVyUmVwb3Np
dG9yeSwgJ293bmVyLWNvbW1pdC0zJywgMCwgMyksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0KKyAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXX0pLAorICAg
ICAgICBdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3QoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFVwbG9hZGVkRmlsZS5lbnN1cmVTaW5nbGV0b24oNDU2LCB7J2NyZWF0ZWRBdCc6
IG5ldyBEYXRlKCcyMDE3LTA1LTAxVDIxOjAzOjI3WicpLCAnZmlsZW5hbWUnOiAncm9vdC5kYXQn
LCAnZXh0ZW5zaW9uJzogJy5kYXQnLCAnYXV0aG9yJzogJ3NvbWUgdXNlcicsCisgICAgICAgICAg
ICBzaXplOiAxNjQ1MjIzNCwgc2hhMjU2OiAnMDNlZWQ3YTg0OTRhYjg3OTRjNDRiN2Q0MzA4ZTU1
NDQ4ZmM1NmY0ZDZjMTc1ODA5YmE5NjhmNzhmNjU2ZDU4ZCd9KTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjb21taXRTZXRXaXRoUm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0
LmVuc3VyZVNpbmdsZXRvbigxNSwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29t
bWl0OiBtYWtlQ29tbWl0KDEsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywg
MSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtj
cmVhdGVSb290KCldCisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbW1pdFNl
dCgpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNiwg
eworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBtYWtlQ29tbWl0KDEsIE1v
Y2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZh
bHNlIH1dLAorICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdCisgICAgICAgIH0pOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGNvbW1pdFNldHNXaXRoTm9Db21tb25SZXBvc2l0b3J5KCkgeworICAg
ICAgICByZXR1cm4gWworICAgICAgICAgICAgQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCB7
CisgICAgICAgICAgICAgICAgcmV2aXNpb25JdGVtczogWworICAgICAgICAgICAgICAgICAgICB7
IGNvbW1pdDogbWFrZUNvbW1pdCgxLCBNb2NrTW9kZWxzLndlYmtpdCwgJ3dlYmtpdC1jb21taXQt
MScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICB7IGNv
bW1pdDogbWFrZUNvbW1pdCgxMSwgTW9ja01vZGVscy5vc3gsICdvc3gtY29tbWl0LTEnLCAxKSwg
cmVxdWlyZXNCdWlsZDogZmFsc2UgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
ICAgY3VzdG9tUm9vdHM6IFtdfSksCisgICAgICAgICAgICBDb21taXRTZXQuZW5zdXJlU2luZ2xl
dG9uKDIsIHsKKyAgICAgICAgICAgICAgICByZXZpc2lvbkl0ZW1zOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDIsIE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0
LWNvbW1pdC0xJywgMSksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsgY29tbWl0OiBtYWtlQ29tbWl0KDMxLCBNb2NrTW9kZWxzLmlvcywgJ2lvcy1jb21taXQt
MScsIDEpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgY3VzdG9tUm9vdHM6IFtdfSkKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICBk
ZXNjcmliZSgnY29tbWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzJywgKCkgPT4gewor
ICAgICAgICBNb2NrTW9kZWxzLmluamVjdCgpOworICAgICAgICBsZXQgcmVxdWVzdHMgPSBNb2Nr
UmVtb3RlQVBJLmluamVjdCgpOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICJudWxsIiBp
ZiBubyBjb21tb24gcmVwb3NpdG9yeSBmb3VuZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAg
IGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29t
bWl0U2V0Q2xvc2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKGNvbW1pdFNldHNXaXRoTm9Db21tb25S
ZXBvc2l0b3J5KCkuc3BsaWNlKDAsIDIpKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtaWRk
bGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJl
dHVybiAibnVsbCIgdG8gYmlzZWN0IGNvbW1pdCBzZXQgd2l0aCByb290JywgYXN5bmMgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgQ29tbWl0U2V0UmFu
Z2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFsbENvbW1pdHMoW2NvbW1pdFNl
dCgpLCBjb21taXRTZXRXaXRoUm9vdCgpXSwgW2NvbW1pdFNldCgpLCBjb21taXRTZXRXaXRoUm9v
dCgpXSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBudWxsKTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gIm51bGwiIGlmIG5vIHJl
cG9zaXRvcnkgd2l0aCB0aW1lIG9yIG9yZGVyIGlzIGZvdW5kJywgYXN5bmMgKCkgPT4geworICAg
ICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9IHNvcnRlZENvbW1pdFNldHNXaXRob3V0VGlt
ZU9yT3JkZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0gYWxsQ29tbWl0
U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENvbW1pdFNldHNb
YWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBD
b21taXRTZXRSYW5nZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0
cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAg
ICAgICAgY29uc3QgbWlkZGxlQ29tbWl0U2V0ID0gYXdhaXQgcHJvbWlzZTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChtaWRkbGVDb21taXRTZXQsIG51bGwpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpZiBmYWlsZWQgdG8gZmV0Y2ggY29tbWl0
IGxvZycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGFsbENvbW1pdFNldHMgPSBz
b3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBzdGFydENvbW1pdFNldCA9IGFs
bENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRDb21taXRTZXQgPSBhbGxDb21t
aXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25zdCBwcm9t
aXNlID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFs
bENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBhbGxDb21taXRTZXRzKTsK
KyAgICAgICAgICAgIGNvbnN0IHJlamVjdFJlYXNvbiA9ICc0MDQnOworICAgICAgICAgICAgcmVx
dWVzdHNbMF0ucmVqZWN0KHJlamVjdFJlYXNvbik7CisgICAgICAgICAgICBsZXQgZXhjZXB0aW9u
UmFpc2VkID0gZmFsc2U7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGF3YWl0
IHByb21pc2U7CisgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAg
IGV4Y2VwdGlvblJhaXNlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVy
cm9yLCByZWplY3RSZWFzb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0Lm9r
KGV4Y2VwdGlvblJhaXNlZCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuICJudWxsIiBpZiBubyBjb21taXQgc2V0IGlzIGZpbmQgb3RoZXIgdGhhbiB0aGUgY29tbWl0
IHNldHMgZGVmaW5lIHRoZSByYW5nZScsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IGFsbENvbW1pdFNldHMgPSBzb3J0ZWRDb21taXRTZXRzKCk7CisgICAgICAgICAgICBjb25zdCBz
dGFydENvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbMF07CisgICAgICAgICAgICBjb25zdCBlbmRD
b21taXRTZXQgPSBhbGxDb21taXRTZXRzW2FsbENvbW1pdFNldHMubGVuZ3RoIC0gMV07CisgICAg
ICAgICAgICBsZXQgcHJvbWlzZSA9IENvbW1pdFNldFJhbmdlQmlzZWN0b3IuY29tbWl0U2V0Q2xv
c2VzdFRvTWlkZGxlT2ZBbGxDb21taXRzKFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0XSwg
W3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzBdLnVybCwgJy9hcGkvY29tbWl0cy85Lz9wcmVjZWRpbmdSZXZpc2lvbj1vc3gtY29tbWl0LTEm
bGFzdFJldmlzaW9uPW9zeC1jb21taXQtMycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzFdLnVybCwgJy9hcGkvY29tbWl0cy8xMS8/cHJlY2VkaW5nUmV2aXNpb249d2Via2l0
LWNvbW1pdC0xJmxhc3RSZXZpc2lvbj13ZWJraXQtY29tbWl0LTYnKTsKKyAgICAgICAgICAgIHJl
cXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLm9zeC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDEyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvc3gtY29tbWl0LTInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZTogMjEKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uOiAnb3N4LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMxCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzog
WworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0
b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6
IDIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMics
CisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lOiAyMAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9k
ZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDMsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtMycsCisgICAgICAgICAg
ICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lOiAzMAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5p
ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDQsCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXZpc2lvbjogJ3dlYmtpdC1jb21taXQtNCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA0MAor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ6IDUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bjogJ3dlYmtpdC1jb21taXQtNScsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0
czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA1MAorICAgICAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWQ6IDYsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dlYmtpdC1j
b21taXQtNicsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiA2MAorICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjb25zdCBt
aWRkbGVDb21taXRTZXQgPSBhd2FpdCBwcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG1pZGRsZUNvbW1pdFNldCwgbnVsbCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIGJpc2VjdGlvbiBwb2ludCBjbG9zZXN0IHRvIHRoZSBtaWRkbGUgb2YgcmV2aXNp
b24gcmFuZ2UnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRz
ID0gc29ydGVkQ29tbWl0U2V0cygpOworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQg
PSBhbGxDb21taXRTZXRzWzBdOworICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxs
Q29tbWl0U2V0c1thbGxDb21taXRTZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHBy
b21pc2UgPSBDb21taXRTZXRSYW5nZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9m
QWxsQ29tbWl0cyhbc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMp
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMik7CisgICAgICAg
ICAgICBjb25zdCBvc3hfZmV0Y2hfcmVxdWVzdCA9IHJlcXVlc3RzLmZpbmQoKGZldGNoX3JlcXVl
c3QpID0+IGZldGNoX3JlcXVlc3QudXJsID09PSAnL2FwaS9jb21taXRzLzkvP3ByZWNlZGluZ1Jl
dmlzaW9uPW9zeC1jb21taXQtMSZsYXN0UmV2aXNpb249b3N4LWNvbW1pdC0zJyk7CisgICAgICAg
ICAgICBjb25zdCB3ZWJraXRfZmV0Y2hfcmVxdWVzdCA9IHJlcXVlc3RzLmZpbmQoKGZldGNoX3Jl
cXVlc3QpID0+IGZldGNoX3JlcXVlc3QudXJsID09PSAnL2FwaS9jb21taXRzLzExLz9wcmVjZWRp
bmdSZXZpc2lvbj13ZWJraXQtY29tbWl0LTEmbGFzdFJldmlzaW9uPXdlYmtpdC1jb21taXQtNicp
OworICAgICAgICAgICAgd2Via2l0X2ZldGNoX3JlcXVlc3QucmVzb2x2ZSh7CisgICAgICAgICAg
ICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
d2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIwCisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1p
dC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Vi
a2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC01JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6
IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDYwCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBvc3hfZmV0Y2hfcmVxdWVzdC5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29t
bWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3N4LWNvbW1pdC0y
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tN
b2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMTMsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21taXQtMycsCisgICAgICAgICAgICAg
ICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0IHBy
b21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0LCBl
eHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIHNhbWUgYmlzZWN0aW9uIHBvaW50IGV2ZW4gd2hlbiB0d28gY29tbWl0IHNldHMg
ZnJvbSBvcmlnaW5hbCBjb21taXQgc2V0IGhhdmUgaW52ZXJzZWQgb3JkZXInLCBhc3luYyAoKSA9
PiB7CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRzID0gc29ydGVkQ29tbWl0U2V0cygp
OworICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSBhbGxDb21taXRTZXRzWzBdOwor
ICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gYWxsQ29tbWl0U2V0c1thbGxDb21taXRT
ZXRzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgbGV0IHByb21pc2UgPSBDb21taXRTZXRSYW5n
ZUJpc2VjdG9yLmNvbW1pdFNldENsb3Nlc3RUb01pZGRsZU9mQWxsQ29tbWl0cyhbZW5kQ29tbWl0
U2V0LCBzdGFydENvbW1pdFNldF0sIGFsbENvbW1pdFNldHMpOworICAgICAgICAgICAgcmVxdWVz
dHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NvbW1pdHMnOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0yJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWU6IDIwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0Lmlk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0zJywKKyAgICAgICAgICAgICAgICAgICAgICAg
IG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDMwCisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
OiAnd2Via2l0LWNvbW1pdC00JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDQwCisgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNv
bW1pdC01JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDUwCisgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6
IE1vY2tNb2RlbHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpZDogNiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC02JywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWU6IDYwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgXQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsK
KyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDb21t
aXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1jb21t
aXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IG1pZGRs
ZUNvbW1pdFNldCA9IGF3YWl0IHByb21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1p
ZGRsZUNvbW1pdFNldCA9IGFsbENvbW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwobWlkZGxlQ29tbWl0U2V0LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0p
OworCisgICAgICAgIGl0KCdzaG91bGQgdXNlIGNvbW1pdHMgd2l0aCBvcmRlciBhcyBmYWxsYmFj
ayB3aGVuIG11bHRpcGxlIGNvbW1pdCBzZXRzIGZvdW5kIGZvciB0aGUgY29tbWl0IHRoYXQgaXMg
Y2xvc2VzdCB0byB0aGUgbWlkZGxlIG9mIGNvbW1pdHMgd2l0aCB0aW1lJywgYXN5bmMgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgYWxsQ29tbWl0U2V0cyA9IGNvbW1pdFNldFdpdGhTb21lQ29t
bWl0c09ubHlIYXZlT3JkZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0g
YWxsQ29tbWl0U2V0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IGFsbENv
bW1pdFNldHNbYWxsQ29tbWl0U2V0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGxldCBwcm9t
aXNlID0gQ29tbWl0U2V0UmFuZ2VCaXNlY3Rvci5jb21taXRTZXRDbG9zZXN0VG9NaWRkbGVPZkFs
bENvbW1pdHMoW3N0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXRdLCBhbGxDb21taXRTZXRzKTsK
KworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMyk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9jb21taXRzLzkvP3ByZWNl
ZGluZ1JldmlzaW9uPW9zeC1jb21taXQtMSZsYXN0UmV2aXNpb249b3N4LWNvbW1pdC0zJyk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2FwaS9jb21taXRzLzEx
MS8/cHJlY2VkaW5nUmV2aXNpb249b3duZXItY29tbWl0LTEmbGFzdFJldmlzaW9uPW93bmVyLWNv
bW1pdC0zJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2Fw
aS9jb21taXRzLzExLz9wcmVjZWRpbmdSZXZpc2lvbj13ZWJraXQtY29tbWl0LTEmbGFzdFJldmlz
aW9uPXdlYmtpdC1jb21taXQtNicpOworCisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZl
KHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3guaWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldmlzaW9uOiAnb3N4LWNvbW1pdC0yJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bnND
b21taXRzOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDIxCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LmlkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZDogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ29zeC1j
b21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAzMQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHJlcXVlc3Rz
WzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjb21taXRzJzogWworICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxz
Lm93bmVyUmVwb3NpdG9yeS5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDIwMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3duZXItY29tbWl0LTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZTogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiAyCisgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LmlkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZDogMjAzLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb246ICdvd25lci1jb21taXQtMycsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25z
Q29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3JkZXI6IDMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIF0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXF1ZXN0c1syXS5y
ZXNvbHZlKHsKKyAgICAgICAgICAgICAgICAnY29tbWl0cyc6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJr
aXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTog
MjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlkOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb246ICd3ZWJraXQtY29tbWl0LTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0Nv
bW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMzAKKyAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlkOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJr
aXQtY29tbWl0LTQnLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogNDAKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
OiA1LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTUn
LAorICAgICAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZTogNTAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiA2LAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTYnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZTogNjAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IG1pZGRsZUNvbW1pdFNldCA9IGF3YWl0
IHByb21pc2U7CisgICAgICAgICAgICBjb25zdCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCA9IGFs
bENvbW1pdFNldHNbM107CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobWlkZGxlQ29tbWl0U2V0
LCBleHBlY3RlZE1pZGRsZUNvbW1pdFNldCk7CisgICAgICAgIH0pOworICAgIH0pOworfSk7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggM2FmMzU3OWEzN2Qz
NGViNzhiMjQzNGYzZTMxZTVlNmRkZjY2MWUyMS4uNThkNzJiMTc5NjkyNWQwNTk1MDFkYjE5YjA4
OWE1OTI3NjkyMzZlNyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQt
dGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0zMjgsNiArMzI4LDQzIEBAIGRlc2Ny
aWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgICAgIH0pOwogICAgIH0pOwogCisgICAgZGVz
Y3JpYmUoJ2NvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCcsICgpID0+IHsKKyAgICAgICAg
aXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgY29tbWl0IGRvZXMgbm90IGNvbnRhaW4gcm9vdCwg
cGF0Y2ggb3Igb3duZWQgY29tbWl0JywgKCkgPT4geworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFv
bmVDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAg
ICAgICBhc3NlcnQub2soIWFub3RoZXJDb21taXRTZXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3du
ZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhBbm90aGVy
V2ViS2l0Q29tbWl0KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAg
ICAgICAgYXNzZXJ0Lm9rKCFjb21taXRTZXRXaXRoU1ZOQ29tbWl0KCkuY29udGFpbnNSb290UGF0
Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90aGVyQ29tbWl0
U2V0V2l0aFNWTkNvbW1pdCgpLmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAg
ICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0V2l0aEdpdENvbW1pdCgpLmNvbnRhaW5zUm9v
dFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayghYW5vdGhlckNv
bW1pdFNldFdpdGhHaXRDb21taXQoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7
CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29udGFp
bnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKCFhbm90
aGVyQ29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21t
aXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIW9uZU1lYXN1cmVtZW50Q29tbWl0U2V0KCku
Y29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICB9KTsKKworICAgICAg
ICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGlmIGNvbW1pdCBjb250YWlucyByb290LCBwYXRjaCBv
ciBvd25lZCBjb21taXQnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0
V2l0aFBhdGNoKCkuY29udGFpbnNSb290UGF0Y2hPck93bmVkQ29tbWl0KCkpOworICAgICAgICAg
ICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhBbm90aGVyUGF0Y2goKS5jb250YWluc1Jvb3RQYXRj
aE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3NlcnQub2soY29tbWl0U2V0V2l0aFJv
b3QoKS5jb250YWluc1Jvb3RQYXRjaE9yT3duZWRDb21taXQoKSk7CisgICAgICAgICAgICBhc3Nl
cnQub2soYW5vdGhlckNvbW1pdFNldFdpdGhSb290KCkuY29udGFpbnNSb290UGF0Y2hPck93bmVk
Q29tbWl0KCkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNldFdpdGhUd29Sb290cygp
LmNvbnRhaW5zUm9vdFBhdGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5v
ayhjb21taXRTZXRXaXRoQW5vdGhlckNvbW1pdFBhdGNoQW5kUm9vdCgpLmNvbnRhaW5zUm9vdFBh
dGNoT3JPd25lZENvbW1pdCgpKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmli
ZSgnaGFzU2FtZVJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1
cm4gdHJ1ZSBpZiB0d28gY29tbWl0IHNldHMgaGF2ZSBzYW1lIHJlcG9zaXRvcmllcycsICgpID0+
IHsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNTYW1lUmVwb3NpdG9y
aWVzKGFub3RoZXJDb21taXRTZXQoKSkpOworICAgICAgICAgICAgYXNzZXJ0Lm9rKGNvbW1pdFNl
dFdpdGhHaXRDb21taXQoKS5oYXNTYW1lUmVwb3NpdG9yaWVzKGFub3RoZXJDb21taXRTZXRXaXRo
R2l0Q29tbWl0KCkpKTsKKyAgICAgICAgICAgIGFzc2VydC5vayhvbmVDb21taXRTZXQoKS5oYXNT
YW1lUmVwb3NpdG9yaWVzKG9uZUNvbW1pdFNldCgpKSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIHR3byBjb21taXQgc2V0cyBoYXZlIGRpZmZlcmVu
IHJlcG9zaXRvcmllcycsICgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydC5vayghY29tbWl0U2V0
V2l0aEdpdENvbW1pdCgpLmhhc1NhbWVSZXBvc2l0b3JpZXMoY29tbWl0U2V0V2l0aFNWTkNvbW1p
dCgpKSk7CisgICAgICAgICAgICBhc3NlcnQub2soIWNvbW1pdFNldFdpdGhUd29Db21taXRzKCku
aGFzU2FtZVJlcG9zaXRvcmllcyhjb21taXRTZXRXaXRoR2l0Q29tbWl0KCkpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKICAgICBkZXNjcmliZSgnZGlmZicsICAoKSA9PiB7CiAgICAgICAgIGl0
KCdzaG91bGQgZGVzY3JpYmUgcGF0Y2ggZGlmZmVyZW5jZScsICgpID0+IHsKICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChDb21taXRTZXQuZGlmZihjb21taXRTZXRXaXRoUGF0Y2goKSwgY29tbWl0
U2V0V2l0aEFub3RoZXJQYXRjaCgpKSwgJ1dlYktpdDogcGF0Y2guZGF0IC0gcGF0Y2guZGF0ICgy
KScpOwo=
</data>
<flag name="review"
          id="356515"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>