<?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>170955</bug_id>
          
          <creation_ts>2017-04-18 10:59:38 -0700</creation_ts>
          <short_desc>Picking an emoji via the emoji dialog (Ctrl+Cmd+Space) fires inconsistent beforeinput events.</short_desc>
          <delta_ts>2019-02-06 09:18:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>macOS 10.12</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>charleyroy</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1298353</commentid>
    <comment_count>0</comment_count>
    <who name="">charleyroy</who>
    <bug_when>2017-04-18 10:59:38 -0700</bug_when>
    <thetext>To reproduce this, you&apos;ll need to use some kind of keyboard event logger (Eg. https://cdn.rawgit.com/w3c/uievents/gh-pages/tools/key-event-viewer.html).

Case 1:
1. Focus on a text field.
2. Open the emoji picker via Ctrl+Cmd+Space.
3. Select an emoji.

Observe that a beforeinput event was fired with the &apos;insertReplacementText&apos; type and that the emoji picker has become hidden.

Case 2:
1. Focus on a text field
2. Open the emoji picker via Ctrl+Cmd+Space.
3. Move the emoji picker so that it is no longer docked to the text field.
4. Select an emoji.

Observe that a beforeinput event was fired with the &apos;insertText&apos; type and that the emoji picker has become hidden.

This is inconsistent with the semantics of these event types (as well as native behavior, where inserting an emoji via the picker doesn&apos;t replace the text unless there is a selection). These should both be insertText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298551</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-04-18 18:45:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/31697653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342632</commentid>
    <comment_count>2</comment_count>
      <attachid>319133</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-25 23:51:21 -0700</bug_when>
    <thetext>Created attachment 319133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342742</commentid>
    <comment_count>3</comment_count>
      <attachid>319133</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-27 16:59:03 -0700</bug_when>
    <thetext>Comment on attachment 319133
Patch

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

&gt; LayoutTests/fast/events/before-input-prevent-insert-replacement.html:40
&gt; +        UIHelper.replaceTextAtRange(&quot;b&quot;, 0, 1)
&gt; +        .then(() =&gt; {
&gt; +            write(`The editor now has text content: ${editable.textContent}`);
&gt; +            write(&quot;(3) Inserting &apos;c&apos; after &apos;a&apos;...&quot;);
&gt; +            return UIHelper.replaceTextAtRange(&quot;c&quot;, 1, 0);
&gt; +        })
&gt; +        .then(() =&gt; {
&gt; +            write(`The editor now has text content: ${editable.textContent}`);
&gt; +            write(&quot;(4) Selecting all and preventing replacement with &apos;d&apos;...&quot;);
&gt; +            document.execCommand(&quot;SelectAll&quot;)
&gt; +            return UIHelper.replaceTextAtRange(&quot;d&quot;, 0, 2);
&gt; +        })
&gt; +        .then(() =&gt; {
&gt; +            write(`The editor now has text content: ${editable.textContent}`);
&gt; +            testRunner.notifyDone();
&gt; +        });

We typically put then after the last line like:
(() =&gt; ~).then(() =&gt; {
})

But why don&apos;t we just wrap this in an async function so that we can just do:
await UIHelper.replaceTextAtRange(&quot;c&quot;, 1, 0);
instead?

&gt; LayoutTests/resources/ui-helper.js:116
&gt; +    static replaceTextAtRange(text, location, length) {
&gt; +        return new Promise(resolve =&gt; {
&gt; +            testRunner.runUIScript(`(() =&gt; {
&gt; +                uiController.insertText(&quot;${text}&quot;, ${location}, ${length});

It&apos;s strange to call this function replaceTextAtRange when uiController&apos;s method is called insertText
We should stick with one or the other, and I think replaceTextAtRange is a more descriptive of the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342754</commentid>
    <comment_count>4</comment_count>
      <attachid>319133</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-27 19:13:13 -0700</bug_when>
    <thetext>Comment on attachment 319133
Patch

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

&gt;&gt; LayoutTests/fast/events/before-input-prevent-insert-replacement.html:40
&gt;&gt; +        });
&gt; 
&gt; We typically put then after the last line like:
&gt; (() =&gt; ~).then(() =&gt; {
&gt; })
&gt; 
&gt; But why don&apos;t we just wrap this in an async function so that we can just do:
&gt; await UIHelper.replaceTextAtRange(&quot;c&quot;, 1, 0);
&gt; instead?

Sounds good -- adopted async/await in these two tests.

&gt;&gt; LayoutTests/resources/ui-helper.js:116
&gt;&gt; +                uiController.insertText(&quot;${text}&quot;, ${location}, ${length});
&gt; 
&gt; It&apos;s strange to call this function replaceTextAtRange when uiController&apos;s method is called insertText
&gt; We should stick with one or the other, and I think replaceTextAtRange is a more descriptive of the two.

Ok! I agree -- replaceTextAtRange is much better than insertText. I think this was originally named insertText() to match the platform AppKit -insertText: API, but there&apos;s no reason this needs to be the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342755</commentid>
    <comment_count>5</comment_count>
      <attachid>319164</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-27 19:30:35 -0700</bug_when>
    <thetext>Created attachment 319164
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342758</commentid>
    <comment_count>6</comment_count>
      <attachid>319164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-27 22:13:00 -0700</bug_when>
    <thetext>Comment on attachment 319164
Patch for landing

Clearing flags on attachment: 319164

Committed r221234: &lt;http://trac.webkit.org/changeset/221234&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348864</commentid>
    <comment_count>7</comment_count>
    <who name="">charleyroy</who>
    <bug_when>2017-09-14 11:04:35 -0700</bug_when>
    <thetext>I&apos;m still seeing a subset of this issue.

To reproduce this, you&apos;ll need to use some kind of keyboard event logger (Eg. https://cdn.rawgit.com/w3c/uievents/gh-pages/tools/key-event-viewer.html).

Setup: Populate the text field with content, eg. &quot;abc&quot;

Case 1:
1. Focus on a text field and select &quot;b&quot;
2. Open the emoji picker via Ctrl+Cmd+Space.
3. Select an emoji.

Observe that a beforeinput event was fired with the &apos;insertReplacementText&apos; type and that the emoji picker has become hidden.

Case 2:
1. Focus on a text field and select &quot;b&quot;
2. Open the emoji picker via Ctrl+Cmd+Space.
3. Move the emoji picker so that it is no longer docked to the text field.
4. Select an emoji.

Observe that a beforeinput event was fired with the &apos;insertText&apos; type and that the emoji picker has become hidden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348913</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-14 12:13:12 -0700</bug_when>
    <thetext>(In reply to charleyroy from comment #7)
&gt; I&apos;m still seeing a subset of this issue.
&gt; 
&gt; To reproduce this, you&apos;ll need to use some kind of keyboard event logger
&gt; (Eg.
&gt; https://cdn.rawgit.com/w3c/uievents/gh-pages/tools/key-event-viewer.html).
&gt; 
&gt; Setup: Populate the text field with content, eg. &quot;abc&quot;
&gt; 
&gt; Case 1:
&gt; 1. Focus on a text field and select &quot;b&quot;
&gt; 2. Open the emoji picker via Ctrl+Cmd+Space.
&gt; 3. Select an emoji.
&gt; 
&gt; Observe that a beforeinput event was fired with the &apos;insertReplacementText&apos;
&gt; type and that the emoji picker has become hidden.
&gt; 
&gt; Case 2:
&gt; 1. Focus on a text field and select &quot;b&quot;
&gt; 2. Open the emoji picker via Ctrl+Cmd+Space.
&gt; 3. Move the emoji picker so that it is no longer docked to the text field.
&gt; 4. Select an emoji.
&gt; 
&gt; Observe that a beforeinput event was fired with the &apos;insertText&apos; type and
&gt; that the emoji picker has become hidden.

Ah, I see...so on ToT, the reason case 1 fires an insertReplacementText event is that it&apos;s using an input-method-like mechanism to replace an existing range of text, whereas in case 2, undocking the emoji picker makes it behave more like an on-screen keyboard, so replacing a selected range using that UI just fires insertText (this is the same as what happens if you select a range of text and type a key on the keyboard, or if you show the on-screen keyboard and press one of the keys to insert text).

The spec (https://www.w3.org/TR/input-events-2/) is somewhat vague about when `InsertReplacementText` should be fired, as opposed to just `insertText`. According to the spec, the `InsertReplacementText` input type is fired when &quot;[replacing] existing text by means of a spell checker, auto-correct or similar&quot;. What&apos;s happening currently is that in docked mode, the emoji picker behaves like a spell-checking/auto-correct input method, but when undocked, it behaves more like an onscreen keyboard, so the text insertion codepath changes to match that of on-screen keyboard input.

* * *

However, I would&apos;ve thought that there shouldn&apos;t really be a difference between handling `InsertReplacementText` or `InsertText`, since in both cases, WebKit is replacing a (possibly empty) range in the DOM with some data, so the default behavior in both cases is really:

1. Delete the contents of the target range.
2. Insert the event data.

...and the `InsertReplacementText` really just indicates whether the insertion is happening from a source that the platform considers to be some kind of alternate input method. Is there a reason Google Docs might need to distinguish between the cases of `InsertReplacementText` and `InsertText`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348924</commentid>
    <comment_count>9</comment_count>
    <who name="">charleyroy</who>
    <bug_when>2017-09-14 12:34:34 -0700</bug_when>
    <thetext>The main difference we were distinguishing between the two was to correctly handle autocorrect. Even if the user has no text selected, selecting a spell-check correction from the touch bar would fire &apos;insertReplacementText&apos; and would expect the entire word to be replaced. Not sure if there is some alternative in the spec for this scenario? We were potentially expanding the range of the selection depending on whether the event was insertReplacementText and there was a selection (where as we didn&apos;t do any expansion for insertText).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348930</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-14 12:47:09 -0700</bug_when>
    <thetext>(In reply to charleyroy from comment #9)
&gt; The main difference we were distinguishing between the two was to correctly
&gt; handle autocorrect. Even if the user has no text selected, selecting a
&gt; spell-check correction from the touch bar would fire &apos;insertReplacementText&apos;
&gt; and would expect the entire word to be replaced. Not sure if there is some
&gt; alternative in the spec for this scenario? We were potentially expanding the
&gt; range of the selection depending on whether the event was
&gt; insertReplacementText and there was a selection (where as we didn&apos;t do any
&gt; expansion for insertText).

Interesting! So the idea is that if the inputType is &quot;insertReplacementText&quot;, then you would prevent default and instead expand the selection range to the word and replace it?

In that case, it seems the emoji picker should only fire input events with &quot;insertText&quot;, and we should instead limit &quot;insertReplacementText&quot; to spellcheck and autocorrect. Otherwise, attempting to insert an emoji in the middle of a word would cause us to replace the word with that emoji (which, I assume, would not be desired?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348934</commentid>
    <comment_count>11</comment_count>
    <who name="">charleyroy</who>
    <bug_when>2017-09-14 12:51:42 -0700</bug_when>
    <thetext>That is what we were aiming for, but that very well may be considered straying from the spec :) Just unclear what the best way to handle the autocorrect is otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487221</commentid>
    <comment_count>12</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-12-12 09:00:19 -0800</bug_when>
    <thetext>This was addressed by a change in another part of the OS, which first landed in macOS Mojave (&lt;rdar://problem/36021755&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503286</commentid>
    <comment_count>13</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:18:59 -0800</bug_when>
    <thetext>Mass move bugs into the DOM component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319133</attachid>
            <date>2017-08-25 23:51:21 -0700</date>
            <delta_ts>2017-08-27 16:59:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170955-20170825235121.patch</filename>
            <type>text/plain</type>
            <size>32370</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkzOGYyODg0MDBmYmNmZDkw
ZjJhN2Q2NTQ4ZjhjZDgxZGU0ODdhMmMuLjFlNmY1N2Q4NDhhNjY4NjRhMGQzZjU3OWY4MzcwYzI4
NjAxMTFkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDgtMjUgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUGlja2luZyBhbiBlbW9q
aSB2aWEgdGhlIGVtb2ppIGRpYWxvZyAoQ3RybCtDbWQrU3BhY2UpIGZpcmVzIGluY29uc2lzdGVu
dCBiZWZvcmVpbnB1dCBldmVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA5NTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNjk3NjUzPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRs
eSwgd2UgaW5zZXJ0IHRleHQgd2l0aCBUZXh0RXZlbnRJbnB1dEF1dG9jb21wbGV0aW9uIGFzIHRo
ZSB0ZXh0IGV2ZW50IGlucHV0IHR5cGUgaWYgYW55IHRleHQgcmFuZ2UgdG8KKyAgICAgICAgcmVw
bGFjZSB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBwbGF0Zm9ybS4gSW5zdGVhZCwgbGltaXQgdGhpcyBv
bmx5IHRvIHdoZW4gdGhlIHRleHQgcmVwbGFjZW1lbnQgcmFuZ2UgaXMgbm90IGVtcHR5LgorICAg
ICAgICBUaGlzIG1vcmUgY2xvc2VseSBtYXRjaGVzIHRoZSBpbnRlbnRpb24gb2YgdGhlIHNwZWMs
IHdoaWNoIHN0YXRlcyB0aGF0IHRoZSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IiBpbnB1dFR5cGUK
KyAgICAgICAgc2hvdWxkIGJlIHVzZWQgd2hlbiAiW3JlcGxhY2luZ10gZXhpc3RpbmcgdGV4dCBi
eSBtZWFucyBvZiBhIHNwZWxsIGNoZWNrZXIsIGF1dG8tY29ycmVjdCBvciBzaW1pbGFyIi4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6aW5zZXJ0VGV4dEFzeW5jKToKKwogMjAxNy0wOC0yNSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NhY2hlIEFQSV0gVUlQcm9jZXNzIHNo
b3VsZCBwcm92aWRlIHRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0byBzdG9yZSBDYWNoZSBTdG9y
YWdlIGRhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA4MDQ0NGU2NzJkMDIzNjZj
YmQyOTI4MzFlYTU1M2ZlMGQzZTk4ZDUzLi41ZDg2ODJiY2RjYmYyMDE1ZGY0OTkzNTY5YmQ1ZDUx
ZTRmMjExNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTctMDgtMjUgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgUGlja2luZyBhbiBlbW9qaSB2aWEgdGhlIGVtb2ppIGRpYWxvZyAoQ3RybCtDbWQrU3Bh
Y2UpIGZpcmVzIGluY29uc2lzdGVudCBiZWZvcmVpbnB1dCBldmVudHMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NTUKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzMxNjk3NjUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFR3ZWFrIC1pbnNlcnRUZXh0OiB0byBwYXNzIFRleHRFdmVudElucHV0QXV0
b2NvbXBsZXRpb24gdG8gRWRpdG9yOjppbnNlcnRUZXh0IHdoZW4gaW5zZXJ0aW5nIHRleHQsIGlm
IGV4aXN0aW5nCisgICAgICAgIHRleHQgaXMgYmVpbmcgcmVwbGFjZWQuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0
Ol0pOgorCiAyMDE3LTA4LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0RpcmVjdG9yeSBVcGxvYWRdIEFkZCBiYXNpYyBzdXBwb3J0IGZvciBpbnB1dC53ZWJr
aXRkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKaW5kZXggMDRhZTI0ZjA1NDBkY2MyOGJhMDg3ZjZkZTQwNTlkODMwMGNhMjUzOC4uYWViNWY1
Mzk5ODg5MjgzY2NiYzExZWI4ZDVkOGY1YjdhM2JhMTE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ4NDMsMTEgKzQ4NDMsMTAgQEAgdm9p
ZCBXZWJQYWdlOjppbnNlcnRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0
aW5nUmFuZ2UmIHJlcGxhY2VtZW4KIAogICAgIGJvb2wgcmVwbGFjZXNUZXh0ID0gZmFsc2U7CiAg
ICAgaWYgKHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHJhbmdlRnJvbUVkaXRpbmdS
YW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UsIHN0YXRpY19jYXN0PEVkaXRpbmdS
YW5nZUlzUmVsYXRpdmVUbz4oZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKSk7Ci0gICAgICAgIGlm
IChyZXBsYWNlbWVudFJhbmdlKSB7CisgICAgICAgIGlmIChhdXRvIHJlcGxhY2VtZW50UmFuZ2Ug
PSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLCBz
dGF0aWNfY2FzdDxFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8+KGVkaXRpbmdSYW5nZUlzUmVsYXRp
dmVUbykpKSB7CiAgICAgICAgICAgICBTZXRGb3JTY29wZTxib29sPiBpc1NlbGVjdGluZ1RleHRX
aGlsZUluc2VydGluZ0FzeW5jaHJvbm91c2x5KG1faXNTZWxlY3RpbmdUZXh0V2hpbGVJbnNlcnRp
bmdBc3luY2hyb25vdXNseSwgc3VwcHJlc3NTZWxlY3Rpb25VcGRhdGUpOwogICAgICAgICAgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJlcGxhY2Vt
ZW50UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgICAgICAgICByZXBsYWNlc1Rl
eHQgPSB0cnVlOworICAgICAgICAgICAgcmVwbGFjZXNUZXh0ID0gcmVwbGFjZW1lbnRFZGl0aW5n
UmFuZ2UubGVuZ3RoOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggODZkMjkxMWUzYzcyNmVkMGQ2
ZWVlMDUyYTdjZGVkZmRlOGQ0MGQyMC4uOGZjN2Y2M2M1ZGM0ZTFlY2Q3ODQxZTVmNGNkYTc0NmI0
OWMyZTU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCkBAIC03MTU0LDExICs3MTU0LDEzIEBAIC0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3Ry
aW5nCiAgICAgX3ByaXZhdGUtPnNvZnRTcGFjZVJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CiAjZW5kaWYKIAorICAgIGJvb2wgcmVwbGFjZXNUZXh0ID0gZmFsc2U7CiAgICAgaWYg
KHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewogICAgICAgICBXZWJS
YW5nZUlzUmVsYXRpdmVUbyByYW5nZUlzUmVsYXRpdmVUbyA9IG5lZWRUb1JlbW92ZVNvZnRTcGFj
ZSA/IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGggOiBXZWJSYW5nZUlzUmVsYXRpdmVU
bzo6RWRpdGFibGVSb290OwotICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvbVJhbmdlID0gW1tzZWxm
IF9mcmFtZV0gX2NvbnZlcnRUb0RPTVJhbmdlOnJlcGxhY2VtZW50UmFuZ2UgcmFuZ2VJc1JlbGF0
aXZlVG86cmFuZ2VJc1JlbGF0aXZlVG9dOwotICAgICAgICBpZiAoZG9tUmFuZ2UpCisgICAgICAg
IGlmIChhdXRvIGRvbVJhbmdlID0gW1tzZWxmIF9mcmFtZV0gX2NvbnZlcnRUb0RPTVJhbmdlOnJl
cGxhY2VtZW50UmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86cmFuZ2VJc1JlbGF0aXZlVG9dKSB7CiAg
ICAgICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKCpkb21SYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgICAgIHJl
cGxhY2VzVGV4dCA9IHJlcGxhY2VtZW50UmFuZ2UubGVuZ3RoOworICAgICAgICB9CiAgICAgfQog
CiAgICAgYm9vbCBldmVudEhhbmRsZWQgPSBmYWxzZTsKQEAgLTcxNzEsNyArNzE3Myw3IEBAIC0g
KHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCiAgICAgICAgIGlmICghZGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gY29y
ZUZyYW1lLT5lZGl0b3IoKS5pbnNlcnREaWN0YXRlZFRleHQoZXZlbnRUZXh0LCBkaWN0YXRpb25B
bHRlcm5hdGl2ZUxvY2F0aW9ucywgZXZlbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
dmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmluc2VydFRleHQoZXZlbnRUZXh0LCBl
dmVudCk7CisgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmlu
c2VydFRleHQoZXZlbnRUZXh0LCBldmVudCwgcmVwbGFjZXNUZXh0ID8gVGV4dEV2ZW50SW5wdXRB
dXRvY29tcGxldGlvbiA6IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwogICAgICAgICAKICNpZiBV
U0UoSU5TRVJUSU9OX1VORE9fR1JPVVBJTkcpCiAgICAgICAgIGlmIChyZWdpc3RlclVuZG9Hcm91
cCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5
NjMyNmFlNmNjOGNiMjBmZTBiNWU4ZWFkYWNhZmFmYjViNzg2YTRmLi43NjY0MDkxMGJhNjkxMDBk
MDVjYWVhNjhiOWJkODIzYTEyZjA1ZjRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDgtMjUgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUGlja2luZyBhbiBlbW9q
aSB2aWEgdGhlIGVtb2ppIGRpYWxvZyAoQ3RybCtDbWQrU3BhY2UpIGZpcmVzIGluY29uc2lzdGVu
dCBiZWZvcmVpbnB1dCBldmVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA5NTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNjk3NjUzPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCB1aUNvbnRyb2xsZXIuaW5zZXJ0VGV4dCBpbiBXZWJLaXQxLiBTZWUgY29ycmVzcG9uZGluZyBs
YXlvdXQgdGVzdHMgKGlucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5odG1sCisgICAgICAg
IGFuZCBiZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQuaHRtbCkgZm9yIG1v
cmUgZGV0YWlsLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQXBw
S2l0VGVzdFNQSS5oOiBBZGRlZC4KKworICAgICAgICBJbnRyb2R1Y2UgYW4gU1BJIGhlYWRlciBm
b3IgcHJpdmF0ZSBBcHBLaXQgaGVhZGVycyBuZWVkZWQgdG8gc3VwcG9ydCBEdW1wUmVuZGVyVHJl
ZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMu
bW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dCk6CisKIDIw
MTctMDgtMjUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCBidWlsZCBicmVha2FnZSB3aXRoIFB1YmxpYyBpT1MgMTEgU0RLCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBkNjMxMGU3NTBkZWI4N2IyYjk2MWMxZmI0ZmJhOWIxMWU3MWQ5ZDBl
Li43YWU3YTNiNTI1YTNiY2I4NzY1ZGJhZTI1YTJjNzFiNDYyNWRhNzlhIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI4NCw2ICsyODQsNyBAQAogCQkyRDQwM0YxOTE1MDg3MUY5MDA1
MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdEhlbHBlcjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMkRBMkUzQTMxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJU
cmVlU3BlbGxDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IER1bXBS
ZW5kZXJUcmVlU3BlbGxDaGVja2VyLmg7IHBhdGggPSBtYWMvRHVtcFJlbmRlclRyZWVTcGVsbENo
ZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBMkUzQTQxRTFCQTU0MTAw
QTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHBh
dGggPSBtYWMvRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJFREUwREFBMUY1MTMxREUwMEQ1RjhERiAvKiBBcHBLaXRUZXN0U1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFwcEtpdFRlc3RTUEkuaDsgcGF0aCA9IG1hYy9BcHBLaXRUZXN0U1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNBMTVEOUE1NkEwMDE2M0JD
OCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHBhdGggPSBtYWMvTW9j
a1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNb2NrV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIubW07IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI2OEVCQTFFRjA2QTk1MDAxOTYz
RTIgLyogVUlLaXRUZXN0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVJ
S2l0VGVzdFNQSS5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9zcGkvVUlLaXRUZXN0U1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDUsNiArNTQ2LDcgQEAKIAkJMEY2
QTBFMDAxRDZFMEY4QTAwRjFDOUE4IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJMkVERTBEQUExRjUxMzFERTAwRDVGOERGIC8qIEFwcEtpdFRl
c3RTUEkuaCAqLywKIAkJCQkwRjE4RTcwRTFENkJBQ0I2MDAyN0U1NDcgLyogVUlTY3JpcHRDb250
cm9sbGVyTWFjLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBtYWM7CkBAIC02MDMsMTAgKzYwNSwx
MCBAQAogCQkJCUJDQTE4QjZFMEM5QjA4REIwMDExNDM2OSAvKiBOYXZpZ2F0aW9uQ29udHJvbGxl
ci5tICovLAogCQkJCUJDQTE4QjJGMEM5QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxlci5o
ICovLAogCQkJCUJDQTE4QjMwMEM5QjAxQjQwMDExNDM2OSAvKiBPYmpDQ29udHJvbGxlci5tICov
LAotCQkJCUY0RDQyMzYwMURENTA0NjkwMDY3ODI5MCAvKiBUZXh0SW5wdXRDb250cm9sbGVyLmgg
Ki8sCiAJCQkJQkMwMTMxRDgwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5uZXIuY3BwICovLAog
CQkJCUJDMDEzMUQ5MEM5NzcyMDEwMDg3MzE3RCAvKiBUZXN0UnVubmVyLmggKi8sCiAJCQkJQkNB
MThCMjIwQzlCMDE0QjAwMTE0MzY5IC8qIFRlc3RSdW5uZXJNYWMubW0gKi8sCisJCQkJRjRENDIz
NjAxREQ1MDQ2OTAwNjc4MjkwIC8qIFRleHRJbnB1dENvbnRyb2xsZXIuaCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gQ29udHJvbGxlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTA2
MSw3ICsxMDYzLDYgQEAKIAkJCWZpbGVzID0gKAogCQkJCUExMzRFNTM2MTg5MDVFRkYwMDkwMUQw
NiAvKiBBY2Nlc3NpYmlsaXR5Q29tbW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEMDhC
M0EwRTEwNTdFRjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNw
ZWxsQ2hlY2tlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFBNUExNUVGMTZFMTVDRDAwMEY3QzU2
MSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
RDA4QjcxMEUxMDU5RDIwMEE3RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTgwMDQ1QUVFMTQ3NzE4RTcwMDgyOTBBOCAvKiBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLApAQCAtMTA4MCw2ICsxMDgx
LDcgQEAKIAkJCQlCQ0ExOEI3QjBDOUIwOEYxMDAxMTQzNjkgLyogRHVtcFJlbmRlclRyZWVEcmFn
Z2luZ0luZm8ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEQ3OUNFQjBGQzI4QjJDMDA0QUM4RkUg
LyogRHVtcFJlbmRlclRyZWVGaWxlRHJhZ2dpbmdTb3VyY2UubSBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QjkxQURBMENGM0IzMkYwMDhGOTFGRiAvKiBEdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW0g
aW4gU291cmNlcyAqLywKKwkJCQkyREEyRTNBNTFFMUJBNTQxMDBBM0JCRDAgLyogRHVtcFJlbmRl
clRyZWVTcGVsbENoZWNrZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEI5MUFEQzBDRjNCMzJG
MDA4RjkxRkYgLyogRHVtcFJlbmRlclRyZWVXaW5kb3cubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0ExOEI2MjBDOUIwOEMyMDAxMTQzNjkgLyogRWRpdGluZ0RlbGVnYXRlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNBMThCNzAwQzlCMDhEQjAwMTE0MzY5IC8qIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKQEAgLTEwODcsNiArMTA4OSw3IEBACiAJCQkJQkNGNkM2NTAw
Qzk4RTlDMDAwQUMwNjNFIC8qIEdDQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0ExOEIyMzBDOUIwMTRCMDAxMTQzNjkgLyogR0NDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE4NUY2QjIxMDcxNEUwNzAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTMxMjk0M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBJT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0U4OEZBMjE3MTI0RDhD
MDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjE4RTcwNjFENkJBMDIzMDAyN0U1NDcgLyogSlNVSVNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxOEU3MTMxRDZCQzQzQTAwMjdFNTQ3IC8qIEpTV3JhcHBlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTEwOTgsMjIgKzExMDEsMjEgQEAKIAkJCQlCQ0ExOEI4MDBDOUIw
OEYxMDAxMTQzNjkgLyogT2JqQ1BsdWdpbkZ1bmN0aW9uLm0gaW4gU291cmNlcyAqLywKIAkJCQk4
NDY1RTJDNzBGRkE4REYyMDAzQjgzNDIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0IyODRDRDBDRkE4M0M4MDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydENH
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUY0RDQyMzYxMURENTA0ODIwMDY3ODI5MCAvKiBUZXh0
SW5wdXRDb250cm9sbGVySU9TLm0gaW4gU291cmNlcyAqLywKIAkJCQlBMTE1OEQ1OTE4OTI3NDM2
MDA4OEMxN0IgLyogUGl4ZWxEdW1wU3VwcG9ydElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
QjI4NEQ2MENGQTgzRDEwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNBMThCNjYwQzlCMDhDMjAwMTE0MzY5IC8qIFBvbGljeURlbGVnYXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCNjgwQzlCMDhDMjAwMTE0MzY5IC8qIFJlc291cmNl
TG9hZERlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NCQkMzMjMxRERGQ0Y5QTAwNzg2
QjlEIC8qIFRlc3RPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMTMxREEwQzk3NzIw
MTAwODczMTdEIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCMjQw
QzlCMDE0QjAwMTE0MzY5IC8qIFRlc3RSdW5uZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
NEQ0MjM2MTFERDUwNDgyMDA2NzgyOTAgLyogVGV4dElucHV0Q29udHJvbGxlcklPUy5tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBMThCNDkwQzlCMDJDNDAwMTE0MzY5IC8qIFRleHRJbnB1dENvbnRy
b2xsZXJNYWMubSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjZBMEM5QjA4QzIwMDExNDM2OSAv
KiBVSURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU2RUMxRDZCOUMwNzAwMjdF
NTQ3IC8qIFVJU2NyaXB0Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTZFRDFE
NkI5QzA3MDAyN0U1NDcgLyogVUlTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMThFNzBEMUQ2QkFDOEMwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRyb2xsZXJJT1MubW0g
aW4gU291cmNlcyAqLywKLQkJCQk3Q0JCQzMyMzFEREZDRjlBMDA3ODZCOUQgLyogVGVzdE9wdGlv
bnMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTcwRjFENkJBQ0I2MDAyN0U1NDcgLyogVUlT
Y3JpcHRDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5RDkwMjQwQzk3NDcy
RTAwOTlBNEEzIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzMTI5NDNGOTFF
NzFGMkI0MDAxRUUyQ0MgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNBMThCMjYwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BcHBLaXRU
ZXN0U1BJLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQXBwS2l0VGVzdFNQSS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRiNzZjYTdlNTQxYzQ3ZWJjMzAyMTFmZjlhMWIxYjQwZDUyNjU1YzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQXBwS2l0VGVzdFNQSS5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1B
QykKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpbXBvcnQgPEFwcEtpdC9OU1Rl
eHRJbnB1dENvbnRleHRfUHJpdmF0ZS5oPgorCisjZWxzZQorCitleHRlcm4gIkMiIHsKK2V4dGVy
biBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZTsKK30K
KworI2VuZGlmCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCmluZGV4IDIzZDQwZWQ3ZjA0
MTJhZTBkMGNlYTU5YWVhZTQ0OWY1NGU4NjIyMzYuLjE2NWE3M2IzMGRiZjNhMDBlMjA0MjU5ZDcy
OTI4YTY4ZTVlMTNhODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSVNj
cmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJU2Ny
aXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMzYsNiArMzYsOCBAQAogCiAjaWYgUExBVEZPUk0oTUFD
KQogCisjaW1wb3J0ICJBcHBLaXRUZXN0U1BJLmgiCisKIG5hbWVzcGFjZSBXVFIgewogCiB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9Bc3luY1Rhc2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKQEAg
LTY0LDggKzY2LDEzIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAgICAgZG9Bc3luY1Rhc2soY2Fs
bGJhY2spOwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1N0cmlu
Z1JlZiwgaW50LCBpbnQpCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1N0
cmluZ1JlZiB0ZXh0LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCiB7CisgICAgYXV0byB0ZXh0
VG9JbnNlcnQgPSBhZG9wdENGKEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIHRleHQpKTsKKyAgICBhdXRvIHJhbmdlQXR0cmlidXRlID0gYWRvcHROUyhbW05TRGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpOU1N0cmluZ0Zyb21SYW5nZShOU01h
a2VSYW5nZShsb2NhdGlvbiA9PSAtMSA/IE5TTm90Rm91bmQgOiBsb2NhdGlvbiwgbGVuZ3RoKSks
IE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUsIG5pbF0pOworICAgIGF1
dG8gdGV4dEFuZFJhbmdlID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6KE5TU3RyaW5nICopdGV4dFRvSW5zZXJ0LmdldCgpIGF0dHJpYnV0ZXM6cmFu
Z2VBdHRyaWJ1dGUuZ2V0KCldKTsKKworICAgIFttYWluRnJhbWUud2ViVmlldyBpbnNlcnRUZXh0
OnRleHRBbmRSYW5nZS5nZXQoKV07CiB9CiAKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp6b29t
VG9TY2FsZShkb3VibGUgc2NhbGUsIEpTVmFsdWVSZWYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjk5Njg0
Njc4M2M4YzQ4ZmQ2MjlmYWJkODA4YjRmMjBiMDllYTY1Ny4uZGM0MWYxODkxMDJmNGU4NWMyMDdm
MTA2MzIwNzgwODI5YmIzMWE0NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDE3LTA4LTI1ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCisgICAgICAgIFBpY2tpbmcg
YW4gZW1vamkgdmlhIHRoZSBlbW9qaSBkaWFsb2cgKEN0cmwrQ21kK1NwYWNlKSBmaXJlcyBpbmNv
bnNpc3RlbnQgYmVmb3JlaW5wdXQgZXZlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTU1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTY5
NzY1Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
dWdtZW50cyB0d28gZXhpc3RpbmcgbGF5b3V0IHRlc3RzIHRvIGNoZWNrIGZvciBhZGRpdGlvbmFs
IGNhc2VzIG9mIGluc2VydGluZyB0ZXh0IHdpdGggcmVwbGFjZW1lbnQgcmFuZ2VzLgorICAgICAg
ICBBbHNvIGVuYWJsZXMgdGhpcyB0ZXN0IGZvciBXZWJLaXQxIG9uIE1hYy4gQm90aCB0aGVzZSB0
ZXN0cyBhcmUgY3VycmVudGx5IGVuYWJsZWQgb25seSBmb3IgV2ViS2l0MiwgYW5kIGFsc28gb25s
eQorICAgICAgICBjaGVjayB0aGUgY2FzZSB3aGVyZSB3ZSdyZSByZXBsYWNpbmcgYW4gZXhpc3Rp
bmcgbm9uLWVtcHR5IHJhbmdlIG9mIHRleHQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9iZWZv
cmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5o
dG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVu
dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0
LXJlcGxhY2VtZW50Lmh0bWw6CisKKyAgICAgICAgVGVzdHMgZm9yIGNhc2VzIG9mIHJlcGxhY2lu
ZyBleGlzdGluZyB0ZXh0IHJhbmdlcywgYW5kIGluc2VydGluZyB0ZXh0IGF0IGEgcG9zaXRpb24u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAg
ICogcmVzb3VyY2VzL3VpLWhlbHBlci5qczoKKworICAgICAgICBBZGQgYSBuZXcgVUlIZWxwZXIg
ZnVuY3Rpb24gdG8gaW5zZXJ0IHRleHQgYXQgYSBnaXZlbiByZXBsYWNlbWVudCByYW5nZS4gVGhp
cyBjb2RlcGF0aCBpcyB0YWtlbiB3aGVuIHNlbGVjdGluZworICAgICAgICBhbiBlbW9qaSB1c2lu
ZyB0aGUgZW1vamkgcGlja2VyIG1lbnUgb24gTWFjLCBhbmQgYWxzbyB3aGVuIHNlbGVjdGluZyBh
IGRlYWQga2V5IG9wdGlvbiBhZnRlciBob2xkaW5nIGRvd24gb24gYQorICAgICAgICB2b3dlbCBr
ZXkuCisKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UpOgorCisy
MDE3LTA4LTI1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCiAgICAg
ICAgIFVzaW5nIHRoZSB0b3VjaGJhciwgYm90aCBhbGlnbiBsZWZ0IGFuZCBhbGlnbiBqdXN0aWZ5
IHNlbmQgYSBiZWZvcmVpbnB1dCBldmVudCB3aXRoIHRoZSAnZm9ybWF0SnVzdGlmeUxlZnQnIGlu
cHV0VHlwZS4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2ODY2OQogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA2MzkxNTU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFj
ZW1lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLWlucHV0
LXByZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50LWV4cGVjdGVkLnR4dAppbmRleCA5NWEwMjE5NDkw
YmM0NDBmMjVlNWQ3YTM3YTdhYTcyMTJkZDNiMDUwLi5jYjI2YmE4ZTMxODI1NTQ3ZTQ1NWZiMjYz
OTljNGZiODg2Njk2NWE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZv
cmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2VydC1yZXBsYWNl
bWVudC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwyMCBAQAotYQotVHlwaW5nICdhJy4uLgotKGVk
aXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFRleHQsIGRhdGE9YGFg
LCBkYXRhVHJhbnNmZXI9YG51bGxgCi0oZWRpdGFibGUpOiB0eXBlPWlucHV0LCBpbnB1dFR5cGU9
aW5zZXJ0VGV4dCwgZGF0YT1gYWAsIGRhdGFUcmFuc2Zlcj1gbnVsbGAKLUF0dGVtcHRpbmcgdG8g
cmVwbGFjZSAnYScgd2l0aCAnYicuLi4KLShlZGl0YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlu
cHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQsIGRhdGE9YG51bGxgLCBkYXRhVHJhbnNmZXI9
YHBsYWluOiJiIiwgaHRtbDoiYiJgCitUbyBtYW51YWxseSB0ZXN0LCBwcmVzcyBhbmQgaG9sZCBk
b3duICdhJyBhbmQgc2VsZWN0IG9uZSBvZiB0aGUgYWNjZW50ZWQgY2hhcmFjdGVycy4KK1lvdSBz
aG91bGQgb2JzZXJ2ZSB0aGF0IHRoZSByZXBsYWNlbWVudCBhY2NlbnRlZCBjaGFyYWN0ZXIgZG9l
cyBub3QgcmVwbGFjZSAnYScuCitUaGVuIGluc2VydCBhbiBlbW9qaSB1c2luZyB0aGUgZW1vamkg
cGlja2VyLiBUaGlzIHNob3VsZCBpbnNlcnQgc29tZXRoaW5nIGludG8gdGhlIGVkaXRvci4KK0Zp
bmFsbHksIHNlbGVjdCBhbGwgdGhlIGNvbnRlbnQgYW5kIGF0dGVtcHQgdG8gcmVwbGFjZSBpdCB3
aXRoIGFuIGVtb2ppLiBUaGlzIHNob3VsZCBkbyBub3RoaW5nLgorYWMKKygxKSBUeXBpbmcgJ2En
Li4uCisoZWRpdGFibGUpOiB0eXBlPWJlZm9yZWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwg
ZGF0YT1hLCBkYXRhVHJhbnNmZXI9KG51bGwpCisoZWRpdGFibGUpOiB0eXBlPWlucHV0LCBpbnB1
dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1hLCBkYXRhVHJhbnNmZXI9KG51bGwpCitUaGUgZWRpdG9y
IG5vdyBoYXMgdGV4dCBjb250ZW50OiBhCisoMikgUHJldmVudGluZyBkZWZhdWx0IHdoZW4gcmVw
bGFjaW5nICdhJyB3aXRoICdiJy4uLgorKGVkaXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5w
dXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwgZGF0YT1udWxsLCBkYXRhVHJhbnNmZXI9cGxh
aW46ImIiLCBodG1sOiJiIgorVGhlIGVkaXRvciBub3cgaGFzIHRleHQgY29udGVudDogYQorKDMp
IEluc2VydGluZyAnYycgYWZ0ZXIgJ2EnLi4uCisoZWRpdGFibGUpOiB0eXBlPWJlZm9yZWlucHV0
LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1jLCBkYXRhVHJhbnNmZXI9KG51bGwpCisoZWRp
dGFibGUpOiB0eXBlPWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1jLCBkYXRhVHJh
bnNmZXI9KG51bGwpCitUaGUgZWRpdG9yIG5vdyBoYXMgdGV4dCBjb250ZW50OiBhYworKDQpIFNl
bGVjdGluZyBhbGwgYW5kIHByZXZlbnRpbmcgcmVwbGFjZW1lbnQgd2l0aCAnZCcuLi4KKyhlZGl0
YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlucHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQs
IGRhdGE9bnVsbCwgZGF0YVRyYW5zZmVyPXBsYWluOiJkIiwgaHRtbDoiZCIKK1RoZSBlZGl0b3Ig
bm93IGhhcyB0ZXh0IGNvbnRlbnQ6IGFjCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLWlucHV0LXByZXZlbnQtaW5zZXJ0LXJlcGxhY2Vt
ZW50Lmh0bWwKaW5kZXggMGIwZTdiNWM4NjE3ZGE0ODg3NmI5NmQ4ZDY0ZTA3NDg4YjBhNWRkZi4u
OGEwZTEwZjExNDE5Mzg1MTYwMGU1N2E3YzUwOTAwMjQwNjMzNGYzMyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLWlucHV0LXByZXZlbnQtaW5zZXJ0LXJlcGxhY2Vt
ZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLWlucHV0LXByZXZl
bnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKQEAgLTEsNjAgKzEsNTMgQEAKIDwhRE9DVFlQRSBo
dG1sPgogPGh0bWw+Ci08Ym9keT4KLSAgICA8ZGl2IGlkPSJlZGl0YWJsZSIgb25iZWZvcmVpbnB1
dD1oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KSBvbmlucHV0PWhhbmRsZUlucHV0RXZlbnQoZXZlbnQp
IGNvbnRlbnRlZGl0YWJsZT48L2Rpdj4KLSAgICA8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICAgICAgbGV0IHdyaXRlID0gcyA9
PiBvdXRwdXQuaW5uZXJIVE1MICs9IHMgKyAiPGJyPiI7Ci0gICAgICAgIHZhciBwcm9ncmVzcyA9
IDA7Ci0gICAgICAgIGVkaXRhYmxlLmZvY3VzKCk7Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KIAotICAgICAgICBp
ZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICAgICAg
aW50ZXJuYWxzLnNldHRpbmdzLnNldElucHV0RXZlbnRzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7Ci0gICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyICYmIHRlc3RS
dW5uZXIucnVuVUlTY3JpcHQpIHsKLSAgICAgICAgICAgICAgICB3cml0ZSgiVHlwaW5nICdhJy4u
LiIpOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oImEiKTsKLSAgICAgICAg
ICAgICAgICB3cml0ZSgiQXR0ZW1wdGluZyB0byByZXBsYWNlICdhJyB3aXRoICdiJy4uLiIpOwot
ICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgKHJl
c3VsdCkgPT4gaW5jcmVtZW50UHJvZ3Jlc3MoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB3cml0ZSgiVG8gbWFudWFsbHkgdGVzdCwgcHJlc3MgYW5kIGhv
bGQgZG93biAnYScgYW5kIHNlbGVjdCBvbmUgb2YgdGhlIGFjY2VudGVkIGNoYXJhY3RlcnMuIik7
Ci0gICAgICAgICAgICB3cml0ZSgiWW91IHNob3VsZCBvYnNlcnZlIHRoYXQgdGhlIHJlcGxhY2Vt
ZW50IGFjY2VudGVkIGNoYXJhY3RlciBkb2VzIG5vdCByZXBsYWNlICdhJy4iKTsKLSAgICAgICAg
fQorPGRpdj5UbyBtYW51YWxseSB0ZXN0LCBwcmVzcyBhbmQgaG9sZCBkb3duICdhJyBhbmQgc2Vs
ZWN0IG9uZSBvZiB0aGUgYWNjZW50ZWQgY2hhcmFjdGVycy48L2Rpdj4KKzxkaXY+WW91IHNob3Vs
ZCBvYnNlcnZlIHRoYXQgdGhlIHJlcGxhY2VtZW50IGFjY2VudGVkIGNoYXJhY3RlciBkb2VzIG5v
dCByZXBsYWNlICdhJy48L2Rpdj4KKzxkaXY+VGhlbiBpbnNlcnQgYW4gZW1vamkgdXNpbmcgdGhl
IGVtb2ppIHBpY2tlci4gVGhpcyBzaG91bGQgaW5zZXJ0IHNvbWV0aGluZyBpbnRvIHRoZSBlZGl0
b3IuPC9kaXY+Cis8ZGl2PkZpbmFsbHksIHNlbGVjdCBhbGwgdGhlIGNvbnRlbnQgYW5kIGF0dGVt
cHQgdG8gcmVwbGFjZSBpdCB3aXRoIGFuIGVtb2ppLiBUaGlzIHNob3VsZCBkbyBub3RoaW5nLjwv
ZGl2PgorPGRpdiBpZD0iZWRpdGFibGUiIG9uYmVmb3JlaW5wdXQ9aGFuZGxlSW5wdXRFdmVudChl
dmVudCkgb25pbnB1dD1oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KSBjb250ZW50ZWRpdGFibGU+PC9k
aXY+Cis8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgogCi0gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVu
dFByb2dyZXNzKCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvZ3Jlc3MrKzsKLSAgICAgICAg
ICAgIGlmIChwcm9ncmVzcyA9PSAyKQotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOwotICAgICAgICB9Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAg
bGV0IHdyaXRlID0gcyA9PiBvdXRwdXQuaW5uZXJIVE1MICs9IHMgKyAiPGJyPiI7CisgICAgZWRp
dGFibGUuZm9jdXMoKTsKIAotICAgICAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZShgKCR7ZXZlbnQudGFyZ2V0LmlkfSk6IHR5
cGU9JHtldmVudC50eXBlfSwgaW5wdXRUeXBlPSR7ZXZlbnQuaW5wdXRUeXBlfSwgZGF0YT1cYCR7
ZXZlbnQuZGF0YX1cYCwgZGF0YVRyYW5zZmVyPVxgJHtkYXRhVHJhbnNmZXJBc1N0cmluZyhldmVu
dC5kYXRhVHJhbnNmZXIpfVxgYCk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuaW5wdXRUeXBlID09
PSAiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IikgewotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgaW5jcmVtZW50UHJvZ3Jlc3MoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cu
ZXZlbnRTZW5kZXIgJiYgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkgeworICAgICAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cisg
ICAgICAgIHdyaXRlKCIoMSkgVHlwaW5nICdhJy4uLiIpOworICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJhIik7CisgICAgICAgIHdyaXRlKGBUaGUgZWRpdG9yIG5vdyBoYXMgdGV4dCBjb250
ZW50OiAke2VkaXRhYmxlLnRleHRDb250ZW50fWApOworICAgICAgICB3cml0ZSgiKDIpIFByZXZl
bnRpbmcgZGVmYXVsdCB3aGVuIHJlcGxhY2luZyAnYScgd2l0aCAnYicuLi4iKTsKKyAgICAgICAg
VUlIZWxwZXIucmVwbGFjZVRleHRBdFJhbmdlKCJiIiwgMCwgMSkKKyAgICAgICAgLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgd3JpdGUoYFRoZSBlZGl0b3Igbm93IGhhcyB0ZXh0IGNvbnRlbnQ6
ICR7ZWRpdGFibGUudGV4dENvbnRlbnR9YCk7CisgICAgICAgICAgICB3cml0ZSgiKDMpIEluc2Vy
dGluZyAnYycgYWZ0ZXIgJ2EnLi4uIik7CisgICAgICAgICAgICByZXR1cm4gVUlIZWxwZXIucmVw
bGFjZVRleHRBdFJhbmdlKCJjIiwgMSwgMCk7CisgICAgICAgIH0pCisgICAgICAgIC50aGVuKCgp
ID0+IHsKKyAgICAgICAgICAgIHdyaXRlKGBUaGUgZWRpdG9yIG5vdyBoYXMgdGV4dCBjb250ZW50
OiAke2VkaXRhYmxlLnRleHRDb250ZW50fWApOworICAgICAgICAgICAgd3JpdGUoIig0KSBTZWxl
Y3RpbmcgYWxsIGFuZCBwcmV2ZW50aW5nIHJlcGxhY2VtZW50IHdpdGggJ2QnLi4uIik7CisgICAg
ICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIikKKyAgICAgICAgICAgIHJl
dHVybiBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImQiLCAwLCAyKTsKKyAgICAgICAgfSkK
KyAgICAgICAgLnRoZW4oKCkgPT4geworICAgICAgICAgICAgd3JpdGUoYFRoZSBlZGl0b3Igbm93
IGhhcyB0ZXh0IGNvbnRlbnQ6ICR7ZWRpdGFibGUudGV4dENvbnRlbnR9YCk7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSk7CisgICAgfQogCi0gICAgICAg
IGZ1bmN0aW9uIGRhdGFUcmFuc2ZlckFzU3RyaW5nKGRhdGFUcmFuc2ZlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFkYXRhVHJhbnNmZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJu
dWxsIjsKKyAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50KQorICAgIHsKKyAgICAg
ICAgbGV0IGRhdGFUcmFuc2ZlclN0cmluZyA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGBwbGFpbjoi
JHtldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9wbGFpbicpfSIsIGh0bWw6IiR7ZXZl
bnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvaHRtbCcpfSJgIDogIihudWxsKSI7CisgICAg
ICAgIHdyaXRlKGAoJHtldmVudC50YXJnZXQuaWR9KTogdHlwZT0ke2V2ZW50LnR5cGV9LCBpbnB1
dFR5cGU9JHtldmVudC5pbnB1dFR5cGV9LCBkYXRhPSR7ZXZlbnQuZGF0YX0sIGRhdGFUcmFuc2Zl
cj0ke2RhdGFUcmFuc2ZlclN0cmluZ31gKTsKIAotICAgICAgICAgICAgcmV0dXJuIGBwbGFpbjoi
JHtkYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9wbGFpbicpfSIsIGh0bWw6IiR7ZGF0YVRyYW5z
ZmVyLmdldERhdGEoJ3RleHQvaHRtbCcpfSJgOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZ2V0VUlTY3JpcHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYAotICAgICAg
ICAgICAgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbnNlcnRU
ZXh0KCJiIiwgMCwgMSk7Ci0gICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29t
cGxldGUoKTsKLSAgICAgICAgICAgIH0pKCk7YAotICAgICAgICB9Ci0gICAgPC9zY3JpcHQ+Cisg
ICAgICAgIGlmIChldmVudC50eXBlID09PSAiYmVmb3JlaW5wdXQiICYmIGV2ZW50LmlucHV0VHlw
ZSA9PT0gImluc2VydFJlcGxhY2VtZW50VGV4dCIpCisgICAgICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOworICAgIH0KKzwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lu
cHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9pbnB1dC1ldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGNjY2RhYjM4YTA0OWNkMWEyNTM3NDA5NmQ2ZTYyZGI0MjJjMWFiZmMuLjE4ZTY5MzczNzYx
NWQ3M2UxNjNjMDI1ZTdlYTljMTEzMzQzOThmZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50
LWV4cGVjdGVkLnR4dApAQCAtMSwxMSArMSwyMyBAQAorVG8gbWFudWFsbHkgdGVzdCwgcHJlc3Mg
YW5kIGhvbGQgZG93biAnYScgYW5kIHNlbGVjdCBvbmUgb2YgdGhlIGFjY2VudGVkIGNoYXJhY3Rl
cnMuIgorWW91IHNob3VsZCBvYnNlcnZlIGEgcGFpciBvZiBiZWZvcmVpbnB1dC9pbnB1dCBldmVu
dHMgZm9yIGJvdGggJ2EnIGFuZCB0aGUgcmVwbGFjZW1lbnQgYWNjZW50ZWQgY2hhcmFjdGVyLiIK
K0ltcG9ydGFudGx5LCB0aGUgaW5wdXRUeXBlIG9mIHRoZXNlIGZvdXIgZXZlbnRzIHNob3VsZCBi
ZSAnaW5zZXJ0UmVwbGFjZW1lbnRUZXh0Jy4iCitUaGVuIGluc2VydCBhIHNpbmdsZSBlbW9qaSBj
aGFyYWN0ZXIuIFlvdSBzaG91bGQgb2JzZXJ2ZSBiZWZvcmVpbnB1dC9pbnB1dCBldmVudHMgZm9y
IHRoZSBpbnNlcnRlZCBlbW9qaS4iCitJbXBvcnRhbnRseSwgdGhlIGlucHV0VHlwZSBvZiB0aGVz
ZSB0d28gZXZlbnRzIHNob3VsZCBiZSAnaW5zZXJ0VGV4dCcuIgogCi1UeXBpbmcgJ2EnLi4uCi0o
ZWRpdGFibGUpOiB0eXBlPWJlZm9yZWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1g
YWAsIGRhdGFUcmFuc2Zlcj1gbnVsbGAKLShlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlw
ZT1pbnNlcnRUZXh0LCBkYXRhPWBhYCwgZGF0YVRyYW5zZmVyPWBudWxsYAorKDEpIFR5cGluZyAn
YScuLi4KKyhlZGl0YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0
LCBkYXRhPWEsIGRhdGFUcmFuc2Zlcj1udWxsCisoZWRpdGFibGUpOiB0eXBlPWlucHV0LCBpbnB1
dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1hLCBkYXRhVHJhbnNmZXI9bnVsbAogVGhlIHZhbHVlIG9m
IHRoZSBpbnB1dCBpcyBub3c6IGEKLQotUmVwbGFjaW5nICdhJyB3aXRoICdiJy4uLgotKGVkaXRh
YmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwg
ZGF0YT1gYmAsIGRhdGFUcmFuc2Zlcj1gbnVsbGAKLShlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlu
cHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQsIGRhdGE9YGJgLCBkYXRhVHJhbnNmZXI9YG51
bGxgCisoMikgUmVwbGFjaW5nICdhJyB3aXRoICdiJy4uLgorKGVkaXRhYmxlKTogdHlwZT1iZWZv
cmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwgZGF0YT1iLCBkYXRhVHJh
bnNmZXI9bnVsbAorKGVkaXRhYmxlKTogdHlwZT1pbnB1dCwgaW5wdXRUeXBlPWluc2VydFJlcGxh
Y2VtZW50VGV4dCwgZGF0YT1iLCBkYXRhVHJhbnNmZXI9bnVsbAogVGhlIHZhbHVlIG9mIHRoZSBp
bnB1dCBpcyBub3c6IGIKKygzKSBJbnNlcnRpbmcgJ2MnIGFmdGVyICdiJy4uLgorKGVkaXRhYmxl
KTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFRleHQsIGRhdGE9YywgZGF0YVRy
YW5zZmVyPW51bGwKKyhlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0
LCBkYXRhPWMsIGRhdGFUcmFuc2Zlcj1udWxsCitUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGlzIG5v
dzogYmMKKyg0KSBTZWxlY3RpbmcgYWxsIGFuZCByZXBsYWNpbmcgd2l0aCAnZCcuLi4KKyhlZGl0
YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlucHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQs
IGRhdGE9ZCwgZGF0YVRyYW5zZmVyPW51bGwKKyhlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0
VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQsIGRhdGE9ZCwgZGF0YVRyYW5zZmVyPW51bGwKK1Ro
ZSB2YWx1ZSBvZiB0aGUgaW5wdXQgaXMgbm93OiBkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKaW5k
ZXggOTU0YmM1NTg3MTNlMDI4MjkwM2ZmNWM2ODMwOTY5MmUzN2M0ZWRhZS4uNThhNzA4NzZjNjgy
ZDA0MDFlNDdjNWYwODExZmIyN2FkYWJjZDAwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKQEAg
LTEsNTUgKzEsNDggQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+Ci08Ym9keT4KLSAgICA8aW5w
dXQgaWQ9ImVkaXRhYmxlIiBvbmJlZm9yZWlucHV0PWxvZ0lucHV0RXZlbnQoZXZlbnQpIG9uaW5w
dXQ9bG9nSW5wdXRFdmVudChldmVudCk+PC9pbnB1dD4KLSAgICA8ZGl2IGlkPSJvdXRwdXQiPjwv
ZGl2PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICAgICAgbGV0IHdy
aXRlID0gcyA9PiBvdXRwdXQuaW5uZXJIVE1MICs9IHMgKyAiPGJyPiI7Ci0gICAgICAgIHZhciBw
cm9ncmVzcyA9IDA7Ci0gICAgICAgIGVkaXRhYmxlLmZvY3VzKCk7Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KIAot
ICAgICAgICBpZiAod2luZG93LmludGVybmFscyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgewotICAg
ICAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldElucHV0RXZlbnRzRW5hYmxlZCh0cnVlKTsK
LSAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
ICYmIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQpIHsKLSAgICAgICAgICAgICAgICB3cml0ZSgiVHlw
aW5nICdhJy4uLiIpOwotICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oImEiKTsK
LSAgICAgICAgICAgICAgICB3cml0ZShgVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6ICR7
ZWRpdGFibGUudmFsdWV9YCk7Ci0gICAgICAgICAgICAgICAgd3JpdGUoIiIpOwotICAgICAgICAg
ICAgICAgIHdyaXRlKCJSZXBsYWNpbmcgJ2EnIHdpdGggJ2InLi4uIik7Ci0gICAgICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlwdCgpLCAocmVzdWx0KSA9PiBpbmNy
ZW1lbnRQcm9ncmVzcygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHdyaXRlKCJUbyBtYW51YWxseSB0ZXN0LCBwcmVzcyBhbmQgaG9sZCBkb3duICdhJyBh
bmQgc2VsZWN0IG9uZSBvZiB0aGUgYWNjZW50ZWQgY2hhcmFjdGVycy4iKTsKLSAgICAgICAgICAg
IHdyaXRlKCJZb3Ugc2hvdWxkIG9ic2VydmUgYSBwYWlyIG9mIGJlZm9yZWlucHV0L2lucHV0IGV2
ZW50cyBmb3IgYm90aCAnYScgYW5kIHRoZSByZXBsYWNlbWVudCBhY2NlbnRlZCBjaGFyYWN0ZXIu
Iik7Ci0gICAgICAgICAgICB3cml0ZSgiSW1wb3J0YW50bHksIHRoZSBpbnB1dFR5cGUgb2YgdGhl
IGxhc3QgdHdvIGV2ZW50cyBzaG91bGQgYmUgJ2luc2VydFJlcGxhY2VtZW50VGV4dCcuIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbmNyZW1lbnRQcm9ncmVzcygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHByb2dyZXNzKys7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MgIT0g
NSkKLSAgICAgICAgICAgICAgICByZXR1cm47Cis8ZGl2PlRvIG1hbnVhbGx5IHRlc3QsIHByZXNz
IGFuZCBob2xkIGRvd24gJ2EnIGFuZCBzZWxlY3Qgb25lIG9mIHRoZSBhY2NlbnRlZCBjaGFyYWN0
ZXJzLiI8L2Rpdj4KKzxkaXY+WW91IHNob3VsZCBvYnNlcnZlIGEgcGFpciBvZiBiZWZvcmVpbnB1
dC9pbnB1dCBldmVudHMgZm9yIGJvdGggJ2EnIGFuZCB0aGUgcmVwbGFjZW1lbnQgYWNjZW50ZWQg
Y2hhcmFjdGVyLiI8L2Rpdj4KKzxkaXY+SW1wb3J0YW50bHksIHRoZSBpbnB1dFR5cGUgb2YgdGhl
c2UgZm91ciBldmVudHMgc2hvdWxkIGJlICdpbnNlcnRSZXBsYWNlbWVudFRleHQnLiI8L2Rpdj4K
KzxkaXY+VGhlbiBpbnNlcnQgYSBzaW5nbGUgZW1vamkgY2hhcmFjdGVyLiBZb3Ugc2hvdWxkIG9i
c2VydmUgYmVmb3JlaW5wdXQvaW5wdXQgZXZlbnRzIGZvciB0aGUgaW5zZXJ0ZWQgZW1vamkuIjwv
ZGl2PgorPGRpdj5JbXBvcnRhbnRseSwgdGhlIGlucHV0VHlwZSBvZiB0aGVzZSB0d28gZXZlbnRz
IHNob3VsZCBiZSAnaW5zZXJ0VGV4dCcuIjwvZGl2PgogCis8aW5wdXQgaWQ9ImVkaXRhYmxlIiBv
bmJlZm9yZWlucHV0PWxvZ0lucHV0RXZlbnQoZXZlbnQpIG9uaW5wdXQ9bG9nSW5wdXRFdmVudChl
dmVudCk+PC9pbnB1dD4KKzxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisgICAgbGV0IHdyaXRlID0gcyA9PiBvdXRwdXQuaW5uZXJIVE1MICs9
IHMgKyAiPGJyPiI7CisgICAgZWRpdGFibGUuZm9jdXMoKTsKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIgJiYgd2luZG93LmV2ZW50U2VuZGVyICYmIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQpIHsK
KyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworICAgICAgICB3cml0ZSgiKDEpIFR5cGluZyAnYScuLi4iKTsKKyAgICAg
ICAgZXZlbnRTZW5kZXIua2V5RG93bigiYSIpOworICAgICAgICB3cml0ZShgVGhlIHZhbHVlIG9m
IHRoZSBpbnB1dCBpcyBub3c6ICR7ZWRpdGFibGUudmFsdWV9YCk7CisgICAgICAgIHdyaXRlKCIo
MikgUmVwbGFjaW5nICdhJyB3aXRoICdiJy4uLiIpOworICAgICAgICBVSUhlbHBlci5yZXBsYWNl
VGV4dEF0UmFuZ2UoImIiLCAwLCAxKQorICAgICAgICAudGhlbigoKSA9PiB7CisgICAgICAgICAg
ICB3cml0ZShgVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6ICR7ZWRpdGFibGUudmFsdWV9
YCk7CisgICAgICAgICAgICB3cml0ZSgiKDMpIEluc2VydGluZyAnYycgYWZ0ZXIgJ2InLi4uIik7
CisgICAgICAgICAgICByZXR1cm4gVUlIZWxwZXIucmVwbGFjZVRleHRBdFJhbmdlKCJjIiwgMSwg
MCk7CisgICAgICAgIH0pCisgICAgICAgIC50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIHdyaXRl
KGBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGlzIG5vdzogJHtlZGl0YWJsZS52YWx1ZX1gKTsKKyAg
ICAgICAgICAgIHdyaXRlKCIoNCkgU2VsZWN0aW5nIGFsbCBhbmQgcmVwbGFjaW5nIHdpdGggJ2Qn
Li4uIik7CisgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiU2VsZWN0QWxsIikKKyAg
ICAgICAgICAgIHJldHVybiBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImQiLCAwLCAyKTsK
KyAgICAgICAgfSkKKyAgICAgICAgLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgd3JpdGUoYFRo
ZSB2YWx1ZSBvZiB0aGUgaW5wdXQgaXMgbm93OiAke2VkaXRhYmxlLnZhbHVlfWApOwogICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBsb2dJbnB1dEV2ZW50KGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZShg
KCR7ZXZlbnQudGFyZ2V0LmlkfSk6IHR5cGU9JHtldmVudC50eXBlfSwgaW5wdXRUeXBlPSR7ZXZl
bnQuaW5wdXRUeXBlfSwgZGF0YT1cYCR7ZXZlbnQuZGF0YX1cYCwgZGF0YVRyYW5zZmVyPVxgJHtl
dmVudC5kYXRhVHJhbnNmZXJ9XGBgKTsKLSAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNzKCk7
Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGdldFVJ
U2NyaXB0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGAKLSAgICAgICAgICAgIChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW5zZXJ0VGV4dCgiYiIs
IDAsIDEpOwotICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7
Ci0gICAgICAgICAgICB9KSgpO2AKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9ib2R5Pgor
ICAgIGZ1bmN0aW9uIGxvZ0lucHV0RXZlbnQoZXZlbnQpCisgICAgeworICAgICAgICB3cml0ZShg
KCR7ZXZlbnQudGFyZ2V0LmlkfSk6IHR5cGU9JHtldmVudC50eXBlfSwgaW5wdXRUeXBlPSR7ZXZl
bnQuaW5wdXRUeXBlfSwgZGF0YT0ke2V2ZW50LmRhdGF9LCBkYXRhVHJhbnNmZXI9JHtldmVudC5k
YXRhVHJhbnNmZXJ9YCk7CisgICAgfQorPC9zY3JpcHQ+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IDhmOWZiNGMyZDI5NmQxNzNmZDFmMzQwNTc4NDA1YzlkZDJhZjlkMmUuLjM0
NTEyNzAwMDc2NGJhNzQxNzk4NmFmNWI0NTgxNWUwZDc0MmZkOTIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTg1LDEwICs4NSw2IEBAIGZh
c3QvZm9ybXMvZmlsZS9vcGVuLWZpbGUtcGFuZWwuaHRtbCBbIFNraXAgXQogIyBXSzEgYW5kIFdL
MiBtb3VzZW1vdmUgZXZlbnRzIGFyZSBzdWJ0bHkgZGlmZmVyZW50IGluIHdheXMgdGhhdCBicmVh
ayB0aGlzIHRlc3Qgb24gV0sxLgogZmFzdC9ldmVudHMvZ2hvc3RseS1tb3VzZW1vdmVzLWluLXN1
YmZyYW1lLmh0bWwgWyBTa2lwIF0KIAotIyBUZXN0IHN1cHBvcnQgZm9yIGluc2VydGluZyBzcGVj
aWFsIGNoYXJhY3RlcnMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBvbiBXSzEuCi1mYXN0L2V2ZW50
cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQuaHRtbCBbIFNraXAgXQot
ZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwgWyBTa2lwIF0K
LQogIyBNZWRpYSBTdHJlYW0gQVBJIHRlc3RpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgV0sxIHll
dC4KIGZhc3QvbWVkaWFzdHJlYW0KIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc3RyZWFtCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMv
cmVzb3VyY2VzL3VpLWhlbHBlci5qcwppbmRleCA3ODhmZGY4Y2M1OTMwMmFhNTAxN2RjMjc5N2Ew
YThmYjczZDY2ZWUyLi5mYTA2MGIzMmRhOTlmMWQyMGYzMDBmM2ZkOGM5MDQ2OWZiMjg2N2QxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCisrKyBiL0xheW91
dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMKQEAgLTExMCw2ICsxMTAsMTUgQEAgd2luZG93
LlVJSGVscGVyID0gY2xhc3MgVUlIZWxwZXIgewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBz
dGF0aWMgcmVwbGFjZVRleHRBdFJhbmdlKHRleHQsIGxvY2F0aW9uLCBsZW5ndGgpIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ydW5VSVNjcmlwdChgKCgpID0+IHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW5z
ZXJ0VGV4dCgiJHt0ZXh0fSIsICR7bG9jYXRpb259LCAke2xlbmd0aH0pOworICAgICAgICAgICAg
ICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCdEb25lJyk7CisgICAgICAgICAgICB9
KSgpYCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIHN0YXRpYyB3YWl0KHBy
b21pc2UpCiAgICAgewogICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
</data>
<flag name="review"
          id="339470"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319164</attachid>
            <date>2017-08-27 19:30:35 -0700</date>
            <delta_ts>2017-08-27 22:13:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170955-20170827193034.patch</filename>
            <type>text/plain</type>
            <size>36154</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI4MmI0ZTBiMDNlZjdmMDU1
M2Q4N2Q2NzZlNmIyYzAxNThiYTJlNmIuLmRkMzE5YWUxNTRkMmI5MDBhODM2MWQ1YTc4YjMwNjRj
MjYyOTlkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjEgQEAKIDIwMTctMDgtMjcgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKKyAgICAgICAgUGlja2luZyBhbiBlbW9q
aSB2aWEgdGhlIGVtb2ppIGRpYWxvZyAoQ3RybCtDbWQrU3BhY2UpIGZpcmVzIGluY29uc2lzdGVu
dCBiZWZvcmVpbnB1dCBldmVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA5NTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNjk3NjUzPgor
CisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBDdXJyZW50bHks
IHdlIGluc2VydCB0ZXh0IHdpdGggVGV4dEV2ZW50SW5wdXRBdXRvY29tcGxldGlvbiBhcyB0aGUg
dGV4dCBldmVudCBpbnB1dCB0eXBlIGlmIGFueSB0ZXh0IHJhbmdlIHRvCisgICAgICAgIHJlcGxh
Y2Ugd2FzIHNwZWNpZmllZCBieSB0aGUgcGxhdGZvcm0uIEluc3RlYWQsIGxpbWl0IHRoaXMgb25s
eSB0byB3aGVuIHRoZSB0ZXh0IHJlcGxhY2VtZW50IHJhbmdlIGlzIG5vdCBlbXB0eS4KKyAgICAg
ICAgVGhpcyBtb3JlIGNsb3NlbHkgbWF0Y2hlcyB0aGUgaW50ZW50aW9uIG9mIHRoZSBzcGVjLCB3
aGljaCBzdGF0ZXMgdGhhdCB0aGUgImluc2VydFJlcGxhY2VtZW50VGV4dCIgaW5wdXRUeXBlCisg
ICAgICAgIHNob3VsZCBiZSB1c2VkIHdoZW4gIltyZXBsYWNpbmddIGV4aXN0aW5nIHRleHQgYnkg
bWVhbnMgb2YgYSBzcGVsbCBjaGVja2VyLCBhdXRvLWNvcnJlY3Qgb3Igc2ltaWxhciIuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6Omluc2VydFRleHRBc3luYyk6CisKKzIwMTctMDgtMjcgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKICAgICAgICAgW2lPUyBXSzJdIFdlYiBwcm9jZXNz
IGNyYXNoZXMgYWZ0ZXIgY2hhbmdpbmcgc2VsZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGRvY3Vt
ZW50IHdoZW4gc3BlYWtpbmcgYSBzZWxlY3Rpb24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjAxMQogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI2
MTQwOTU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggODA0NDRlNjcyZDAyMzY2Y2Jk
MjkyODMxZWE1NTNmZTBkM2U5OGQ1My4uOTdiNGRmOGNjM2M2Mjc5NzY2YTJhZGE3OWFhN2I0ZDQ3
MzBkNmYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDE3LTA4LTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAg
ICAgIFBpY2tpbmcgYW4gZW1vamkgdmlhIHRoZSBlbW9qaSBkaWFsb2cgKEN0cmwrQ21kK1NwYWNl
KSBmaXJlcyBpbmNvbnNpc3RlbnQgYmVmb3JlaW5wdXQgZXZlbnRzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTU1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMTY5NzY1Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisK
KyAgICAgICAgVHdlYWsgLWluc2VydFRleHQ6IHRvIHBhc3MgVGV4dEV2ZW50SW5wdXRBdXRvY29t
cGxldGlvbiB0byBFZGl0b3I6Omluc2VydFRleHQgd2hlbiBpbnNlcnRpbmcgdGV4dCwgaWYgZXhp
c3RpbmcKKyAgICAgICAgdGV4dCBpcyBiZWluZyByZXBsYWNlZC4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGluc2VydFRleHQ6XSk6
CisKIDIwMTctMDgtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBbRGlyZWN0b3J5IFVwbG9hZF0gQWRkIGJhc2ljIHN1cHBvcnQgZm9yIGlucHV0LndlYmtpdGRp
cmVjdG9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCBjN2VlMzFiYmU0NDc3N2ZiNzUxYTYzZTNlYmNjMTI2MDU5NTQzOGRkLi5hMTY2Y2RlOTJi
ZTQ3ZDdiZDhiNTMxNmVhZjU0NzE2MjI4YTc2NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNDg0MywxMSArNDg0MywxMCBAQCB2b2lkIFdl
YlBhZ2U6Omluc2VydFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdS
YW5nZSYgcmVwbGFjZW1lbgogCiAgICAgYm9vbCByZXBsYWNlc1RleHQgPSBmYWxzZTsKICAgICBp
ZiAocmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmFuZ2VGcm9tRWRpdGluZ1Jhbmdl
KGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSwgc3RhdGljX2Nhc3Q8RWRpdGluZ1Jhbmdl
SXNSZWxhdGl2ZVRvPihlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8pKTsKLSAgICAgICAgaWYgKHJl
cGxhY2VtZW50UmFuZ2UpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHJh
bmdlRnJvbUVkaXRpbmdSYW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UsIHN0YXRp
Y19jYXN0PEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbz4oZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRv
KSkpIHsKICAgICAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IGlzU2VsZWN0aW5nVGV4dFdoaWxl
SW5zZXJ0aW5nQXN5bmNocm9ub3VzbHkobV9pc1NlbGVjdGluZ1RleHRXaGlsZUluc2VydGluZ0Fz
eW5jaHJvbm91c2x5LCBzdXBwcmVzc1NlbGVjdGlvblVwZGF0ZSk7CiAgICAgICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmVwbGFjZW1lbnRS
YW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICAgICAgICAgIHJlcGxhY2VzVGV4dCA9
IHRydWU7CisgICAgICAgICAgICByZXBsYWNlc1RleHQgPSByZXBsYWNlbWVudEVkaXRpbmdSYW5n
ZS5sZW5ndGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA4NmQyOTExZTNjNzI2ZWQwZDZlZWUw
NTJhN2NkZWRmZGU4ZDQwZDIwLi44ZmM3ZjYzYzVkYzRlMWVjZDc4NDFlNWY0Y2RhNzQ2YjQ5YzJl
NTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTcxNTQsMTEgKzcxNTQsMTMgQEAgLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcK
ICAgICBfcHJpdmF0ZS0+c29mdFNwYWNlUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKICNlbmRpZgogCisgICAgYm9vbCByZXBsYWNlc1RleHQgPSBmYWxzZTsKICAgICBpZiAocmVw
bGFjZW1lbnRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKSB7CiAgICAgICAgIFdlYlJhbmdl
SXNSZWxhdGl2ZVRvIHJhbmdlSXNSZWxhdGl2ZVRvID0gbmVlZFRvUmVtb3ZlU29mdFNwYWNlID8g
V2ViUmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFncmFwaCA6IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpF
ZGl0YWJsZVJvb3Q7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gZG9tUmFuZ2UgPSBbW3NlbGYgX2Zy
YW1lXSBfY29udmVydFRvRE9NUmFuZ2U6cmVwbGFjZW1lbnRSYW5nZSByYW5nZUlzUmVsYXRpdmVU
bzpyYW5nZUlzUmVsYXRpdmVUb107Ci0gICAgICAgIGlmIChkb21SYW5nZSkKKyAgICAgICAgaWYg
KGF1dG8gZG9tUmFuZ2UgPSBbW3NlbGYgX2ZyYW1lXSBfY29udmVydFRvRE9NUmFuZ2U6cmVwbGFj
ZW1lbnRSYW5nZSByYW5nZUlzUmVsYXRpdmVUbzpyYW5nZUlzUmVsYXRpdmVUb10pIHsKICAgICAg
ICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24oKmRvbVJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICAgICAgcmVwbGFj
ZXNUZXh0ID0gcmVwbGFjZW1lbnRSYW5nZS5sZW5ndGg7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBib29sIGV2ZW50SGFuZGxlZCA9IGZhbHNlOwpAQCAtNzE3MSw3ICs3MTczLDcgQEAgLSAodm9p
ZClpbnNlcnRUZXh0OihpZClzdHJpbmcKICAgICAgICAgaWYgKCFkaWN0YXRpb25BbHRlcm5hdGl2
ZUxvY2F0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJh
bWUtPmVkaXRvcigpLmluc2VydERpY3RhdGVkVGV4dChldmVudFRleHQsIGRpY3RhdGlvbkFsdGVy
bmF0aXZlTG9jYXRpb25zLCBldmVudCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV2ZW50
SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50
KTsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0
VGV4dChldmVudFRleHQsIGV2ZW50LCByZXBsYWNlc1RleHQgPyBUZXh0RXZlbnRJbnB1dEF1dG9j
b21wbGV0aW9uIDogVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CiAgICAgICAgIAogI2lmIFVTRShJ
TlNFUlRJT05fVU5ET19HUk9VUElORykKICAgICAgICAgaWYgKHJlZ2lzdGVyVW5kb0dyb3VwKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI1MzFj
YjBkY2YwNzE3ZWQ0MDkwN2Y1Zjk2YTM3MzQwZTVlZDZjNjMuLjZjNWIzY2QxM2U1YWYzYWJmNGNj
Zjg4YTcxOTIyYzE4NWExNDE2NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNyBAQAogMjAxNy0wOC0yNyAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAorICAgICAgICBQaWNraW5nIGFuIGVtb2ppIHZp
YSB0aGUgZW1vamkgZGlhbG9nIChDdHJsK0NtZCtTcGFjZSkgZmlyZXMgaW5jb25zaXN0ZW50IGJl
Zm9yZWlucHV0IGV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDk1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE2OTc2NTM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIFJlcGxhY2UgVUlTY3Jp
cHRDb250cm9sbGVyLmluc2VydFRleHQgd2l0aCBVSVNjcmlwdENvbnRyb2xsZXIucmVwbGFjZVRl
eHRBdFJhbmdlLCBhbmQgaW1wbGVtZW50CisgICAgICAgIHJlcGxhY2VUZXh0QXRSYW5nZSBpbiBX
ZWJLaXQxLiBTZWUgY29ycmVzcG9uZGluZyBsYXlvdXQgdGVzdHMgKGlucHV0LWV2ZW50LWluc2Vy
dC1yZXBsYWNlbWVudC5odG1sIGFuZAorICAgICAgICBiZWZvcmUtaW5wdXQtcHJldmVudC1pbnNl
cnQtcmVwbGFjZW1lbnQuaHRtbCkgZm9yIG1vcmUgZGV0YWlsLgorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQXBwS2l0VGVzdFNQSS5oOiBBZGRlZC4KKworICAgICAg
ICBJbnRyb2R1Y2UgYW4gU1BJIGhlYWRlciBmb3IgcHJpdmF0ZSBBcHBLaXQgaGVhZGVycyBuZWVk
ZWQgdG8gc3VwcG9ydCBEdW1wUmVuZGVyVHJlZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29u
dHJvbGxlcjo6cmVwbGFjZVRleHRBdFJhbmdlKToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250
cm9sbGVyOjppbnNlcnRUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAg
ICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6cmVwbGFjZVRleHRBdFJhbmdl
KToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjppbnNlcnRUZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRy
b2xsZXJNYWMubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6cmVwbGFjZVRl
eHRBdFJhbmdlKToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjppbnNlcnRUZXh0
KTogRGVsZXRlZC4KKworICAgICAgICBSZXBsYWNlIFVJU2NyaXB0Q29udHJvbGxlci5pbnNlcnRU
ZXh0IHdpdGggVUlTY3JpcHRDb250cm9sbGVyLnJlcGxhY2VUZXh0QXRSYW5nZSwgd2hpY2ggYmV0
dGVyIGRlc2NyaWJlcyB0aGUKKyAgICAgICAgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbi4KKwor
MjAxNy0wOC0yNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKwogICAg
ICAgICBbaU9TIFdLMl0gV2ViIHByb2Nlc3MgY3Jhc2hlcyBhZnRlciBjaGFuZ2luZyBzZWxlY3Rp
b24gdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2hlbiBzcGVha2luZyBhIHNlbGVjdGlvbgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MDExCiAg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjYxNDA5NT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGQ2MzEwZTc1MGRlYjg3YjJiOTYxYzFmYjRmYmE5YjExZTcxZDlkMGUuLjdhZTdhM2I1
MjVhM2JjYjg3NjVkYmFlMjVhMmM3MWI0NjI1ZGE3OWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjg0LDYgKzI4NCw3IEBACiAJCTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBM
YXlvdXRUZXN0SGVscGVyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBMYXlvdXRUZXN0SGVscGVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQkyREEyRTNBMzFFMUJBNTQxMDBBM0JCRDAgLyogRHVtcFJlbmRlclRyZWVTcGVsbENo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHVtcFJlbmRlclRyZWVT
cGVsbENoZWNrZXIuaDsgcGF0aCA9IG1hYy9EdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREEyRTNBNDFFMUJBNTQxMDBBM0JCRDAgLyog
RHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbTsgcGF0aCA9IG1hYy9E
dW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkVERTBEQUExRjUxMzFERTAwRDVGOERGIC8qIEFwcEtpdFRlc3RTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQXBwS2l0VGVzdFNQSS5oOyBwYXRoID0gbWFjL0FwcEtpdFRlc3RTUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMTdCM0ExNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tX
ZWJOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgcGF0aCA9IG1hYy9Nb2NrV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMTdCM0Ix
NUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5tbTsgcGF0aCA9IG1hYy9Nb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjY4RUJBMUVGMDZBOTUwMDE5NjNFMiAvKiBVSUtp
dFRlc3RTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVUlLaXRUZXN0U1BJ
Lmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL3NwaS9VSUtpdFRlc3RTUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NSw2ICs1NDYsNyBAQAogCQkwRjZBMEUwMDFENkUw
RjhBMDBGMUM5QTggLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkyRURFMERBQTFGNTEzMURFMDBENUY4REYgLyogQXBwS2l0VGVzdFNQSS5oICov
LAogCQkJCTBGMThFNzBFMUQ2QkFDQjYwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRyb2xsZXJNYWMu
bW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG1hYzsKQEAgLTYwMywxMCArNjA1LDEwIEBACiAJCQkJ
QkNBMThCNkUwQzlCMDhEQjAwMTE0MzY5IC8qIE5hdmlnYXRpb25Db250cm9sbGVyLm0gKi8sCiAJ
CQkJQkNBMThCMkYwQzlCMDFCNDAwMTE0MzY5IC8qIE9iakNDb250cm9sbGVyLmggKi8sCiAJCQkJ
QkNBMThCMzAwQzlCMDFCNDAwMTE0MzY5IC8qIE9iakNDb250cm9sbGVyLm0gKi8sCi0JCQkJRjRE
NDIzNjAxREQ1MDQ2OTAwNjc4MjkwIC8qIFRleHRJbnB1dENvbnRyb2xsZXIuaCAqLywKIAkJCQlC
QzAxMzFEODBDOTc3MjAxMDA4NzMxN0QgLyogVGVzdFJ1bm5lci5jcHAgKi8sCiAJCQkJQkMwMTMx
RDkwQzk3NzIwMTAwODczMTdEIC8qIFRlc3RSdW5uZXIuaCAqLywKIAkJCQlCQ0ExOEIyMjBDOUIw
MTRCMDAxMTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSAqLywKKwkJCQlGNEQ0MjM2MDFERDUwNDY5
MDA2NzgyOTAgLyogVGV4dElucHV0Q29udHJvbGxlci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBD
b250cm9sbGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDYxLDcgKzEwNjMs
NiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQTEzNEU1MzYxODkwNUVGRjAwOTAxRDA2IC8qIEFjY2Vz
c2liaWxpdHlDb21tb25NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0QwOEIzQTBFMTA1N0VG
MDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMkRBMkUzQTUxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2Vy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQUE1QTE1RUYxNkUxNUNEMDAwRjdDNTYxIC8qIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEMDhCNzEwRTEw
NTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xMDgwLDYgKzEwODEsNyBAQAogCQkJ
CUJDQTE4QjdCMEM5QjA4RjEwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE4RDc5Q0VCMEZDMjhCMkMwMDRBQzhGRSAvKiBEdW1wUmVu
ZGVyVHJlZUZpbGVEcmFnZ2luZ1NvdXJjZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThCOTFBREEw
Q0YzQjMyRjAwOEY5MUZGIC8qIER1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxs
Q2hlY2tlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QjkxQURDMENGM0IzMkYwMDhGOTFGRiAv
KiBEdW1wUmVuZGVyVHJlZVdpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjYyMEM5
QjA4QzIwMDExNDM2OSAvKiBFZGl0aW5nRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0ExOEI3MDBDOUIwOERCMDAxMTQzNjkgLyogRXZlbnRTZW5kaW5nQ29udHJvbGxlci5tbSBpbiBT
b3VyY2VzICovLApAQCAtMTA4Nyw2ICsxMDg5LDcgQEAKIAkJCQlCQ0Y2QzY1MDBDOThFOUMwMDBB
QzA2M0UgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjIzMEM5
QjAxNEIwMDExNDM2OSAvKiBHQ0NvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RjZCMjEwNzE0RTA3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIElPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDRTg4RkEyMTcxMjREOEMwMDczNEZDMCAv
KiBKYXZhU2NyaXB0VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNzA2MUQ2
QkEwMjMwMDI3RTU0NyAvKiBKU1VJU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjE4RTcxMzFENkJDNDNBMDAyN0U1NDcgLyogSlNXcmFwcGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMTA5OCwyMiArMTEwMSwyMSBAQAogCQkJCUJDQTE4QjgwMEM5QjA4RjEwMDExNDM2
OSAvKiBPYmpDUGx1Z2luRnVuY3Rpb24ubSBpbiBTb3VyY2VzICovLAogCQkJCTg0NjVFMkM3MEZG
QThERjIwMDNCODM0MiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQjI4NENEMENGQTgzQzgwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0Q0cuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJRjRENDIzNjExREQ1MDQ4MjAwNjc4MjkwIC8qIFRleHRJbnB1dENvbnRy
b2xsZXJJT1MubSBpbiBTb3VyY2VzICovLAogCQkJCUExMTU4RDU5MTg5Mjc0MzYwMDg4QzE3QiAv
KiBQaXhlbER1bXBTdXBwb3J0SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMjg0RDYwQ0ZB
ODNEMTAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0ExOEI2NjBDOUIwOEMyMDAxMTQzNjkgLyogUG9saWN5RGVsZWdhdGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQ0ExOEI2ODBDOUIwOEMyMDAxMTQzNjkgLyogUmVzb3VyY2VMb2FkRGVsZWdh
dGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0JCQzMyMzFEREZDRjlBMDA3ODZCOUQgLyogVGVz
dE9wdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAxMzFEQTBDOTc3MjAxMDA4NzMxN0Qg
LyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ExOEIyNDBDOUIwMTRCMDAx
MTQzNjkgLyogVGVzdFJ1bm5lck1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUY0RDQyMzYxMURE
NTA0ODIwMDY3ODI5MCAvKiBUZXh0SW5wdXRDb250cm9sbGVySU9TLm0gaW4gU291cmNlcyAqLywK
IAkJCQlCQ0ExOEI0OTBDOUIwMkM0MDAxMTQzNjkgLyogVGV4dElucHV0Q29udHJvbGxlck1hYy5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMThCNkEwQzlCMDhDMjAwMTE0MzY5IC8qIFVJRGVsZWdh
dGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTZFQzFENkI5QzA3MDAyN0U1NDcgLyogVUlT
Y3JpcHRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNkVEMUQ2QjlDMDcwMDI3
RTU0NyAvKiBVSVNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU3
MEQxRDZCQUM4QzAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTdDQkJDMzIzMURERkNGOUEwMDc4NkI5RCAvKiBUZXN0T3B0aW9ucy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTBGMThFNzBGMUQ2QkFDQjYwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRy
b2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzlEOTAyNDBDOTc0NzJFMDA5OUE0QTMg
LyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMxMjk0M0Y5MUU3MUYyQjQwMDFF
RTJDQyAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRlbU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FwcEtpdFRlc3RTUEkuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BcHBLaXRUZXN0U1BJLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI3
NmNhN2U1NDFjNDdlYmMzMDIxMWZmOWExYjFiNDBkNTI2NTVjNAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BcHBLaXRUZXN0U1BJLmgKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8QXBwS2l0L05TVGV4dElucHV0Q29u
dGV4dF9Qcml2YXRlLmg+CisKKyNlbHNlCisKK2V4dGVybiAiQyIgeworZXh0ZXJuIE5TU3RyaW5n
ICpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOworfQorCisjZW5kaWYK
KworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggMjNkNDBlZDdmMDQxMmFlMGQwY2Vh
NTlhZWFlNDQ5ZjU0ZTg2MjIzNi4uODJlNGRjZTdiMmQwZDlkZDhhMjY3MmRlYjJkZjZlYjVlZGRh
MDQyYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJU2NyaXB0Q29udHJv
bGxlck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlTY3JpcHRDb250cm9s
bGVyTWFjLm1tCkBAIC0zNiw2ICszNiw4IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBv
cnQgIkFwcEtpdFRlc3RTUEkuaCIKKwogbmFtZXNwYWNlIFdUUiB7CiAKIHZvaWQgVUlTY3JpcHRD
b250cm9sbGVyOjpkb0FzeW5jVGFzayhKU1ZhbHVlUmVmIGNhbGxiYWNrKQpAQCAtNjQsOCArNjYs
MTMgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvQWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGUoSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICBkb0FzeW5jVGFzayhjYWxsYmFjayk7CiB9
CiAKLXZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjppbnNlcnRUZXh0KEpTU3RyaW5nUmVmLCBpbnQs
IGludCkKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpyZXBsYWNlVGV4dEF0UmFuZ2UoSlNTdHJp
bmdSZWYgdGV4dCwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKQogeworICAgIGF1dG8gdGV4dFRv
SW5zZXJ0ID0gYWRvcHRDRihKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCB0ZXh0KSk7CisgICAgYXV0byByYW5nZUF0dHJpYnV0ZSA9IGFkb3B0TlMoW1tOU0RpY3Rpb25h
cnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6TlNTdHJpbmdGcm9tUmFuZ2UoTlNNYWtl
UmFuZ2UobG9jYXRpb24gPT0gLTEgPyBOU05vdEZvdW5kIDogbG9jYXRpb24sIGxlbmd0aCkpLCBO
U1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lLCBuaWxdKTsKKyAgICBhdXRv
IHRleHRBbmRSYW5nZSA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOihOU1N0cmluZyAqKXRleHRUb0luc2VydC5nZXQoKSBhdHRyaWJ1dGVzOnJhbmdl
QXR0cmlidXRlLmdldCgpXSk7CisKKyAgICBbbWFpbkZyYW1lLndlYlZpZXcgaW5zZXJ0VGV4dDp0
ZXh0QW5kUmFuZ2UuZ2V0KCldOwogfQogCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6em9vbVRv
U2NhbGUoZG91YmxlIHNjYWxlLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250
cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRp
bmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggMzJhOTVjMDZmZTkzODkyYWI5ZTM3YjQ2
YjY0ODcwNTU3NDNiZTNlMC4uZTM3MzIzMGM1NmExZTY0YWJlNDI5N2Q3ZGRiOTdjMmZlYzYwNTNl
MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmlu
ZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0yMjYs
NyArMjI2LDcgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIG9iamVjdCB0ZXh0U2VsZWN0aW9uQ2FyZXRSZWN0OyAvLyBBbiBvYmplY3Qgd2l0
aCAnbGVmdCcsICd0b3AnLCAnd2lkdGgnLCAnaGVpZ2h0JyBwcm9wZXJ0aWVzLgogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBvYmplY3QgaW5wdXRWaWV3Qm91bmRzOwogCi0gICAgdm9pZCBpbnNlcnRU
ZXh0KERPTVN0cmluZyB0ZXh0LCBsb25nIGxvY2F0aW9uLCBsb25nIGxlbmd0aCk7CisgICAgdm9p
ZCByZXBsYWNlVGV4dEF0UmFuZ2UoRE9NU3RyaW5nIHRleHQsIGxvbmcgbG9jYXRpb24sIGxvbmcg
bGVuZ3RoKTsKICAgICB2b2lkIHJlbW92ZUFsbER5bmFtaWNEaWN0aW9uYXJpZXMoKTsKIAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2Nyb2xsaW5nVHJlZUFzVGV4dDsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDdiMDg5NTZmZDYyZDg3YjkwOWFhMzExYWMxOWZkMGQw
YWRkMmIzMTkuLmJhMTBkYmZhOTA5MmI0NjZlNTA3N2VhZTVlOWExODliNjE3MGY5MDAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
VUlTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgVUlTY3JpcHRD
b250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQog
ewogfQogCi12b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1N0cmluZ1JlZiwg
aW50LCBpbnQpCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6cmVwbGFjZVRleHRBdFJhbmdlKEpT
U3RyaW5nUmVmLCBpbnQsIGludCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCBk
OTk4M2UyM2IyNDBkMDdhMTgzYWEwOGUwZjI4NDhkMTk3YWNlY2Q1Li41NDZlMGZmNjRkOTI2ZDM0
NzIzNjEyNWQ3ZWQzN2U0MGZiNTMxYmIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAtMTUx
LDcgKzE1MSw3IEBAIHB1YmxpYzoKICAgICBKU09iamVjdFJlZiB0ZXh0U2VsZWN0aW9uQ2FyZXRS
ZWN0KCkgY29uc3Q7CiAgICAgSlNPYmplY3RSZWYgaW5wdXRWaWV3Qm91bmRzKCkgY29uc3Q7CiAK
LSAgICB2b2lkIGluc2VydFRleHQoSlNTdHJpbmdSZWYsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0
aCk7CisgICAgdm9pZCByZXBsYWNlVGV4dEF0UmFuZ2UoSlNTdHJpbmdSZWYsIGludCBsb2NhdGlv
biwgaW50IGxlbmd0aCk7CiAgICAgdm9pZCByZW1vdmVBbGxEeW5hbWljRGljdGlvbmFyaWVzKCk7
CiAgICAgCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcm9sbGluZ1RyZWVBc1RleHQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0
Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29u
dHJvbGxlck1hYy5tbQppbmRleCA0MTM1NGMwMDRmMmMyN2ZhOGU1YWEwMGM2ZGM1NTc0ZTU4YTcz
NTc4Li42NTA4MzBiY2RiZjZiMWZhMDI4YTRjZTU1MWQ4OWM0NDdjMThiNWI0IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNjcmlwdENvbnRyb2xsZXJNYWMubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlTY3JpcHRDb250cm9sbGVyTWFjLm1tCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpkb0FmdGVyVmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlKEpTVmFsdWVSZWYgY2FsbGJhY2spCiAgICAgZG9Bc3luY1Rhc2soY2Fs
bGJhY2spOwogfQogCi12b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1N0cmlu
Z1JlZiB0ZXh0LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCit2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6cmVwbGFjZVRleHRBdFJhbmdlKEpTU3RyaW5nUmVmIHRleHQsIGludCBsb2NhdGlvbiwg
aW50IGxlbmd0aCkKIHsKICNpZiBXS19BUElfRU5BQkxFRAogICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBjODU1NGFkNjdmYTMwMWQ1ODYxYzNkNzQwY2IxNTBhMmYzMGRiYTA2Li5hOTVl
NDczNWVhMzlkZjNlNzhkNjhkZmI3MjdlZWM5NmFkZjdlZjE1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTctMDgtMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisK
KyAgICAgICAgUGlja2luZyBhbiBlbW9qaSB2aWEgdGhlIGVtb2ppIGRpYWxvZyAoQ3RybCtDbWQr
U3BhY2UpIGZpcmVzIGluY29uc2lzdGVudCBiZWZvcmVpbnB1dCBldmVudHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NTUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzMxNjk3NjUzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3
YS4KKworICAgICAgICBBdWdtZW50cyB0d28gZXhpc3RpbmcgbGF5b3V0IHRlc3RzIHRvIGNoZWNr
IGZvciBhZGRpdGlvbmFsIGNhc2VzIG9mIGluc2VydGluZyB0ZXh0IHdpdGggcmVwbGFjZW1lbnQg
cmFuZ2VzLgorICAgICAgICBBbHNvIGVuYWJsZXMgdGhpcyB0ZXN0IGZvciBXZWJLaXQxIG9uIE1h
Yy4gQm90aCB0aGVzZSB0ZXN0cyBhcmUgY3VycmVudGx5IGVuYWJsZWQgb25seSBmb3IgV2ViS2l0
MiwgYW5kIGFsc28gb25seQorICAgICAgICBjaGVjayB0aGUgY2FzZSB3aGVyZSB3ZSdyZSByZXBs
YWNpbmcgYW4gZXhpc3Rpbmcgbm9uLWVtcHR5IHJhbmdlIG9mIHRleHQuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2Vy
dC1yZXBsYWNlbWVudC5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWlu
c2VydC1yZXBsYWNlbWVudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVudHMvaW5w
dXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWw6CisKKyAgICAgICAgVGVzdHMgZm9yIGNh
c2VzIG9mIHJlcGxhY2luZyBleGlzdGluZyB0ZXh0IHJhbmdlcywgYW5kIGluc2VydGluZyB0ZXh0
IGF0IGEgcG9zaXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgICogcmVzb3VyY2VzL3VpLWhlbHBlci5qczoKKworICAgICAgICBBZGQg
YSBuZXcgVUlIZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IHRleHQgYXQgYSBnaXZlbiByZXBsYWNl
bWVudCByYW5nZS4gVGhpcyBjb2RlcGF0aCBpcyB0YWtlbiB3aGVuIHNlbGVjdGluZworICAgICAg
ICBhbiBlbW9qaSB1c2luZyB0aGUgZW1vamkgcGlja2VyIG1lbnUgb24gTWFjLCBhbmQgYWxzbyB3
aGVuIHNlbGVjdGluZyBhIGRlYWQga2V5IG9wdGlvbiBhZnRlciBob2xkaW5nIGRvd24gb24gYQor
ICAgICAgICB2b3dlbCBrZXkuCisKKyAgICAgICAgKHdpbmRvdy5VSUhlbHBlci5yZXBsYWNlVGV4
dEF0UmFuZ2UpOgorCiAyMDE3LTA4LTI3ICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vz
c28uY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlY29yZCBhY3Rpb25zIHBlcmZvcm1l
ZCBvbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2VydC1yZXBsYWNlbWVudC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQt
cmVwbGFjZW1lbnQtZXhwZWN0ZWQudHh0CmluZGV4IDk1YTAyMTk0OTBiYzQ0MGYyNWU1ZDdhMzdh
N2FhNzIxMmRkM2IwNTAuLmNiMjZiYThlMzE4MjU1NDdlNDU1ZmIyNjM5OWM0ZmI4ODY2OTY1YTQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50
LWluc2VydC1yZXBsYWNlbWVudC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvYmVmb3JlLWlucHV0LXByZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50LWV4cGVjdGVkLnR4
dApAQCAtMSw3ICsxLDIwIEBACi1hCi1UeXBpbmcgJ2EnLi4uCi0oZWRpdGFibGUpOiB0eXBlPWJl
Zm9yZWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1gYWAsIGRhdGFUcmFuc2Zlcj1g
bnVsbGAKLShlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRh
PWBhYCwgZGF0YVRyYW5zZmVyPWBudWxsYAotQXR0ZW1wdGluZyB0byByZXBsYWNlICdhJyB3aXRo
ICdiJy4uLgotKGVkaXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFJl
cGxhY2VtZW50VGV4dCwgZGF0YT1gbnVsbGAsIGRhdGFUcmFuc2Zlcj1gcGxhaW46ImIiLCBodG1s
OiJiImAKK1RvIG1hbnVhbGx5IHRlc3QsIHByZXNzIGFuZCBob2xkIGRvd24gJ2EnIGFuZCBzZWxl
Y3Qgb25lIG9mIHRoZSBhY2NlbnRlZCBjaGFyYWN0ZXJzLgorWW91IHNob3VsZCBvYnNlcnZlIHRo
YXQgdGhlIHJlcGxhY2VtZW50IGFjY2VudGVkIGNoYXJhY3RlciBkb2VzIG5vdCByZXBsYWNlICdh
Jy4KK1RoZW4gaW5zZXJ0IGFuIGVtb2ppIHVzaW5nIHRoZSBlbW9qaSBwaWNrZXIuIFRoaXMgc2hv
dWxkIGluc2VydCBzb21ldGhpbmcgaW50byB0aGUgZWRpdG9yLgorRmluYWxseSwgc2VsZWN0IGFs
bCB0aGUgY29udGVudCBhbmQgYXR0ZW1wdCB0byByZXBsYWNlIGl0IHdpdGggYW4gZW1vamkuIFRo
aXMgc2hvdWxkIGRvIG5vdGhpbmcuCithYworKDEpIFR5cGluZyAnYScuLi4KKyhlZGl0YWJsZSk6
IHR5cGU9YmVmb3JlaW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRhPWEsIGRhdGFUcmFu
c2Zlcj0obnVsbCkKKyhlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0
LCBkYXRhPWEsIGRhdGFUcmFuc2Zlcj0obnVsbCkKK1RoZSBlZGl0b3Igbm93IGhhcyB0ZXh0IGNv
bnRlbnQ6IGEKKygyKSBQcmV2ZW50aW5nIGRlZmF1bHQgd2hlbiByZXBsYWNpbmcgJ2EnIHdpdGgg
J2InLi4uCisoZWRpdGFibGUpOiB0eXBlPWJlZm9yZWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0UmVw
bGFjZW1lbnRUZXh0LCBkYXRhPW51bGwsIGRhdGFUcmFuc2Zlcj1wbGFpbjoiYiIsIGh0bWw6ImIi
CitUaGUgZWRpdG9yIG5vdyBoYXMgdGV4dCBjb250ZW50OiBhCisoMykgSW5zZXJ0aW5nICdjJyBh
ZnRlciAnYScuLi4KKyhlZGl0YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlucHV0VHlwZT1pbnNl
cnRUZXh0LCBkYXRhPWMsIGRhdGFUcmFuc2Zlcj0obnVsbCkKKyhlZGl0YWJsZSk6IHR5cGU9aW5w
dXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRhPWMsIGRhdGFUcmFuc2Zlcj0obnVsbCkKK1Ro
ZSBlZGl0b3Igbm93IGhhcyB0ZXh0IGNvbnRlbnQ6IGFjCisoNCkgU2VsZWN0aW5nIGFsbCBhbmQg
cHJldmVudGluZyByZXBsYWNlbWVudCB3aXRoICdkJy4uLgorKGVkaXRhYmxlKTogdHlwZT1iZWZv
cmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwgZGF0YT1udWxsLCBkYXRh
VHJhbnNmZXI9cGxhaW46ImQiLCBodG1sOiJkIgorVGhlIGVkaXRvciBub3cgaGFzIHRleHQgY29u
dGVudDogYWMKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvYmVmb3JlLWlu
cHV0LXByZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQuaHRtbAppbmRleCAw
YjBlN2I1Yzg2MTdkYTQ4ODc2Yjk2ZDhkNjRlMDc0ODhiMGE1ZGRmLi43NGU3YjhkMzI4ZDJhN2Qy
YTlkNmM0N2I0MjIxYjk2MjU0NTNkMDM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9iZWZvcmUtaW5wdXQtcHJldmVudC1pbnNlcnQtcmVwbGFj
ZW1lbnQuaHRtbApAQCAtMSw2MCArMSw1MiBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KLTxi
b2R5PgotICAgIDxkaXYgaWQ9ImVkaXRhYmxlIiBvbmJlZm9yZWlucHV0PWhhbmRsZUlucHV0RXZl
bnQoZXZlbnQpIG9uaW5wdXQ9aGFuZGxlSW5wdXRFdmVudChldmVudCkgY29udGVudGVkaXRhYmxl
PjwvZGl2PgotICAgIDxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgotICAgICAgICBsZXQgd3JpdGUgPSBzID0+IG91dHB1dC5pbm5lckhU
TUwgKz0gcyArICI8YnI+IjsKLSAgICAgICAgdmFyIHByb2dyZXNzID0gMDsKLSAgICAgICAgZWRp
dGFibGUuZm9jdXMoKTsKKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy91aS1o
ZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgogCi0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzICYmIHdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGlu
Z3Muc2V0SW5wdXRFdmVudHNFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLSAg
ICAgICAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIgJiYgdGVzdFJ1bm5lci5ydW5VSVNjcmlw
dCkgewotICAgICAgICAgICAgICAgIHdyaXRlKCJUeXBpbmcgJ2EnLi4uIik7Ci0gICAgICAgICAg
ICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigiYSIpOwotICAgICAgICAgICAgICAgIHdyaXRlKCJB
dHRlbXB0aW5nIHRvIHJlcGxhY2UgJ2EnIHdpdGggJ2InLi4uIik7Ci0gICAgICAgICAgICAgICAg
dGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlwdCgpLCAocmVzdWx0KSA9PiBpbmNyZW1l
bnRQcm9ncmVzcygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHdyaXRlKCJUbyBtYW51YWxseSB0ZXN0LCBwcmVzcyBhbmQgaG9sZCBkb3duICdhJyBhbmQg
c2VsZWN0IG9uZSBvZiB0aGUgYWNjZW50ZWQgY2hhcmFjdGVycy4iKTsKLSAgICAgICAgICAgIHdy
aXRlKCJZb3Ugc2hvdWxkIG9ic2VydmUgdGhhdCB0aGUgcmVwbGFjZW1lbnQgYWNjZW50ZWQgY2hh
cmFjdGVyIGRvZXMgbm90IHJlcGxhY2UgJ2EnLiIpOwotICAgICAgICB9Cis8ZGl2PlRvIG1hbnVh
bGx5IHRlc3QsIHByZXNzIGFuZCBob2xkIGRvd24gJ2EnIGFuZCBzZWxlY3Qgb25lIG9mIHRoZSBh
Y2NlbnRlZCBjaGFyYWN0ZXJzLjwvZGl2PgorPGRpdj5Zb3Ugc2hvdWxkIG9ic2VydmUgdGhhdCB0
aGUgcmVwbGFjZW1lbnQgYWNjZW50ZWQgY2hhcmFjdGVyIGRvZXMgbm90IHJlcGxhY2UgJ2EnLjwv
ZGl2PgorPGRpdj5UaGVuIGluc2VydCBhbiBlbW9qaSB1c2luZyB0aGUgZW1vamkgcGlja2VyLiBU
aGlzIHNob3VsZCBpbnNlcnQgc29tZXRoaW5nIGludG8gdGhlIGVkaXRvci48L2Rpdj4KKzxkaXY+
RmluYWxseSwgc2VsZWN0IGFsbCB0aGUgY29udGVudCBhbmQgYXR0ZW1wdCB0byByZXBsYWNlIGl0
IHdpdGggYW4gZW1vamkuIFRoaXMgc2hvdWxkIGRvIG5vdGhpbmcuPC9kaXY+Cis8ZGl2IGlkPSJl
ZGl0YWJsZSIgb25iZWZvcmVpbnB1dD1oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KSBvbmlucHV0PWhh
bmRsZUlucHV0RXZlbnQoZXZlbnQpIGNvbnRlbnRlZGl0YWJsZT48L2Rpdj4KKzxkaXYgaWQ9Im91
dHB1dCI+PC9kaXY+CiAKLSAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50UHJvZ3Jlc3MoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVzcysrOwotICAgICAgICAgICAgaWYgKHByb2dyZXNz
ID09IDIpCi0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAg
IH0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBsZXQgd3JpdGUgPSBzID0+
IG91dHB1dC5pbm5lckhUTUwgKz0gcyArICI8YnI+IjsKKyAgICBlZGl0YWJsZS5mb2N1cygpOwog
Ci0gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdyaXRlKGAoJHtldmVudC50YXJnZXQuaWR9KTogdHlwZT0ke2V2ZW50LnR5cGV9
LCBpbnB1dFR5cGU9JHtldmVudC5pbnB1dFR5cGV9LCBkYXRhPVxgJHtldmVudC5kYXRhfVxgLCBk
YXRhVHJhbnNmZXI9XGAke2RhdGFUcmFuc2ZlckFzU3RyaW5nKGV2ZW50LmRhdGFUcmFuc2Zlcil9
XGBgKTsKLSAgICAgICAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICJpbnNlcnRSZXBsYWNl
bWVudFRleHQiKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgICAgICAgICBpbmNyZW1lbnRQcm9ncmVzcygpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5ldmVudFNlbmRlciAmJiB0
ZXN0UnVubmVyLnJ1blVJU2NyaXB0KSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgcnVuVGVzdCgp
OworICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBkYXRhVHJhbnNmZXJBc1N0cmluZyhkYXRhVHJh
bnNmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZGF0YVRyYW5zZmVyKQotICAgICAg
ICAgICAgICAgIHJldHVybiAibnVsbCI7CisgICAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgICAgICAgd3JpdGUoIigxKSBUeXBpbmcgJ2EnLi4uIik7CisgICAgICAgIGV2ZW50U2VuZGVy
LmtleURvd24oImEiKTsKKyAgICAgICAgd3JpdGUoYFRoZSBlZGl0b3Igbm93IGhhcyB0ZXh0IGNv
bnRlbnQ6ICR7ZWRpdGFibGUudGV4dENvbnRlbnR9YCk7CisgICAgICAgIHdyaXRlKCIoMikgUHJl
dmVudGluZyBkZWZhdWx0IHdoZW4gcmVwbGFjaW5nICdhJyB3aXRoICdiJy4uLiIpOworICAgICAg
ICBhd2FpdCBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImIiLCAwLCAxKQorICAgICAgICB3
cml0ZShgVGhlIGVkaXRvciBub3cgaGFzIHRleHQgY29udGVudDogJHtlZGl0YWJsZS50ZXh0Q29u
dGVudH1gKTsKKyAgICAgICAgd3JpdGUoIigzKSBJbnNlcnRpbmcgJ2MnIGFmdGVyICdhJy4uLiIp
OworICAgICAgICBhd2FpdCBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImMiLCAxLCAwKTsK
KyAgICAgICAgd3JpdGUoYFRoZSBlZGl0b3Igbm93IGhhcyB0ZXh0IGNvbnRlbnQ6ICR7ZWRpdGFi
bGUudGV4dENvbnRlbnR9YCk7CisgICAgICAgIHdyaXRlKCIoNCkgU2VsZWN0aW5nIGFsbCBhbmQg
cHJldmVudGluZyByZXBsYWNlbWVudCB3aXRoICdkJy4uLiIpOworICAgICAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgiU2VsZWN0QWxsIikKKyAgICAgICAgYXdhaXQgVUlIZWxwZXIucmVwbGFjZVRl
eHRBdFJhbmdlKCJkIiwgMCwgMik7CisgICAgICAgIHdyaXRlKGBUaGUgZWRpdG9yIG5vdyBoYXMg
dGV4dCBjb250ZW50OiAke2VkaXRhYmxlLnRleHRDb250ZW50fWApOwogCi0gICAgICAgICAgICBy
ZXR1cm4gYHBsYWluOiIke2RhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyl9IiwgaHRt
bDoiJHtkYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9odG1sJyl9ImA7Ci0gICAgICAgIH0KKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfQogCi0gICAgICAgIGZ1bmN0aW9u
IGdldFVJU2NyaXB0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGAKLSAgICAgICAg
ICAgIChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW5zZXJ0VGV4
dCgiYiIsIDAsIDEpOwotICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBs
ZXRlKCk7Ci0gICAgICAgICAgICB9KSgpO2AKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgorICAg
IGZ1bmN0aW9uIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQpCisgICAgeworICAgICAgICBsZXQgZGF0
YVRyYW5zZmVyU3RyaW5nID0gZXZlbnQuZGF0YVRyYW5zZmVyID8gYHBsYWluOiIke2V2ZW50LmRh
dGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyl9IiwgaHRtbDoiJHtldmVudC5kYXRhVHJh
bnNmZXIuZ2V0RGF0YSgndGV4dC9odG1sJyl9ImAgOiAiKG51bGwpIjsKKyAgICAgICAgd3JpdGUo
YCgke2V2ZW50LnRhcmdldC5pZH0pOiB0eXBlPSR7ZXZlbnQudHlwZX0sIGlucHV0VHlwZT0ke2V2
ZW50LmlucHV0VHlwZX0sIGRhdGE9JHtldmVudC5kYXRhfSwgZGF0YVRyYW5zZmVyPSR7ZGF0YVRy
YW5zZmVyU3RyaW5nfWApOworCisgICAgICAgIGlmIChldmVudC50eXBlID09PSAiYmVmb3JlaW5w
dXQiICYmIGV2ZW50LmlucHV0VHlwZSA9PT0gImluc2VydFJlcGxhY2VtZW50VGV4dCIpCisgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KKzwvc2NyaXB0PgogPC9ib2R5
PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2VydC1yZXBsYWNlbWVu
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pbnB1dC1ldmVudC1pbnNl
cnQtcmVwbGFjZW1lbnQtZXhwZWN0ZWQudHh0CmluZGV4IGNjY2RhYjM4YTA0OWNkMWEyNTM3NDA5
NmQ2ZTYyZGI0MjJjMWFiZmMuLjE4ZTY5MzczNzYxNWQ3M2UxNjNjMDI1ZTdlYTljMTEzMzQzOThm
ZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWluc2Vy
dC1yZXBsYWNlbWVudC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
aW5wdXQtZXZlbnQtaW5zZXJ0LXJlcGxhY2VtZW50LWV4cGVjdGVkLnR4dApAQCAtMSwxMSArMSwy
MyBAQAorVG8gbWFudWFsbHkgdGVzdCwgcHJlc3MgYW5kIGhvbGQgZG93biAnYScgYW5kIHNlbGVj
dCBvbmUgb2YgdGhlIGFjY2VudGVkIGNoYXJhY3RlcnMuIgorWW91IHNob3VsZCBvYnNlcnZlIGEg
cGFpciBvZiBiZWZvcmVpbnB1dC9pbnB1dCBldmVudHMgZm9yIGJvdGggJ2EnIGFuZCB0aGUgcmVw
bGFjZW1lbnQgYWNjZW50ZWQgY2hhcmFjdGVyLiIKK0ltcG9ydGFudGx5LCB0aGUgaW5wdXRUeXBl
IG9mIHRoZXNlIGZvdXIgZXZlbnRzIHNob3VsZCBiZSAnaW5zZXJ0UmVwbGFjZW1lbnRUZXh0Jy4i
CitUaGVuIGluc2VydCBhIHNpbmdsZSBlbW9qaSBjaGFyYWN0ZXIuIFlvdSBzaG91bGQgb2JzZXJ2
ZSBiZWZvcmVpbnB1dC9pbnB1dCBldmVudHMgZm9yIHRoZSBpbnNlcnRlZCBlbW9qaS4iCitJbXBv
cnRhbnRseSwgdGhlIGlucHV0VHlwZSBvZiB0aGVzZSB0d28gZXZlbnRzIHNob3VsZCBiZSAnaW5z
ZXJ0VGV4dCcuIgogCi1UeXBpbmcgJ2EnLi4uCi0oZWRpdGFibGUpOiB0eXBlPWJlZm9yZWlucHV0
LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1gYWAsIGRhdGFUcmFuc2Zlcj1gbnVsbGAKLShl
ZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRhPWBhYCwgZGF0
YVRyYW5zZmVyPWBudWxsYAorKDEpIFR5cGluZyAnYScuLi4KKyhlZGl0YWJsZSk6IHR5cGU9YmVm
b3JlaW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRhPWEsIGRhdGFUcmFuc2Zlcj1udWxs
CisoZWRpdGFibGUpOiB0eXBlPWlucHV0LCBpbnB1dFR5cGU9aW5zZXJ0VGV4dCwgZGF0YT1hLCBk
YXRhVHJhbnNmZXI9bnVsbAogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6IGEKLQotUmVw
bGFjaW5nICdhJyB3aXRoICdiJy4uLgotKGVkaXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5w
dXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwgZGF0YT1gYmAsIGRhdGFUcmFuc2Zlcj1gbnVs
bGAKLShlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRl
eHQsIGRhdGE9YGJgLCBkYXRhVHJhbnNmZXI9YG51bGxgCisoMikgUmVwbGFjaW5nICdhJyB3aXRo
ICdiJy4uLgorKGVkaXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRUeXBlPWluc2VydFJl
cGxhY2VtZW50VGV4dCwgZGF0YT1iLCBkYXRhVHJhbnNmZXI9bnVsbAorKGVkaXRhYmxlKTogdHlw
ZT1pbnB1dCwgaW5wdXRUeXBlPWluc2VydFJlcGxhY2VtZW50VGV4dCwgZGF0YT1iLCBkYXRhVHJh
bnNmZXI9bnVsbAogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6IGIKKygzKSBJbnNlcnRp
bmcgJ2MnIGFmdGVyICdiJy4uLgorKGVkaXRhYmxlKTogdHlwZT1iZWZvcmVpbnB1dCwgaW5wdXRU
eXBlPWluc2VydFRleHQsIGRhdGE9YywgZGF0YVRyYW5zZmVyPW51bGwKKyhlZGl0YWJsZSk6IHR5
cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRUZXh0LCBkYXRhPWMsIGRhdGFUcmFuc2Zlcj1udWxs
CitUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGlzIG5vdzogYmMKKyg0KSBTZWxlY3RpbmcgYWxsIGFu
ZCByZXBsYWNpbmcgd2l0aCAnZCcuLi4KKyhlZGl0YWJsZSk6IHR5cGU9YmVmb3JlaW5wdXQsIGlu
cHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQsIGRhdGE9ZCwgZGF0YVRyYW5zZmVyPW51bGwK
KyhlZGl0YWJsZSk6IHR5cGU9aW5wdXQsIGlucHV0VHlwZT1pbnNlcnRSZXBsYWNlbWVudFRleHQs
IGRhdGE9ZCwgZGF0YVRyYW5zZmVyPW51bGwKK1RoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgaXMgbm93
OiBkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lucHV0LWV2ZW50LWlu
c2VydC1yZXBsYWNlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZl
bnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKaW5kZXggOTU0YmM1NTg3MTNlMDI4MjkwM2ZmNWM2
ODMwOTY5MmUzN2M0ZWRhZS4uODM3NDU1MWQ0ZWI1YzY5NjlkMGNkMWNmODBmYmQwNDc5NDg3ZDc5
OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZlbnQtaW5zZXJ0
LXJlcGxhY2VtZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW5wdXQtZXZl
bnQtaW5zZXJ0LXJlcGxhY2VtZW50Lmh0bWwKQEAgLTEsNTUgKzEsNDcgQEAKIDwhRE9DVFlQRSBo
dG1sPgogPGh0bWw+Ci08Ym9keT4KLSAgICA8aW5wdXQgaWQ9ImVkaXRhYmxlIiBvbmJlZm9yZWlu
cHV0PWxvZ0lucHV0RXZlbnQoZXZlbnQpIG9uaW5wdXQ9bG9nSW5wdXRFdmVudChldmVudCk+PC9p
bnB1dD4KLSAgICA8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgotICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KLSAgICAgICAgbGV0IHdyaXRlID0gcyA9PiBvdXRwdXQuaW5uZXJIVE1M
ICs9IHMgKyAiPGJyPiI7Ci0gICAgICAgIHZhciBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGVkaXRh
YmxlLmZvY3VzKCk7Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdWktaGVs
cGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KIAotICAgICAgICBpZiAod2luZG93LmludGVybmFs
cyAmJiB3aW5kb3cudGVzdFJ1bm5lcikgewotICAgICAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdz
LnNldElucHV0RXZlbnRzRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOwotICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAg
ICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyICYmIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQp
IHsKLSAgICAgICAgICAgICAgICB3cml0ZSgiVHlwaW5nICdhJy4uLiIpOwotICAgICAgICAgICAg
ICAgIGV2ZW50U2VuZGVyLmtleURvd24oImEiKTsKLSAgICAgICAgICAgICAgICB3cml0ZShgVGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6ICR7ZWRpdGFibGUudmFsdWV9YCk7Ci0gICAgICAg
ICAgICAgICAgd3JpdGUoIiIpOwotICAgICAgICAgICAgICAgIHdyaXRlKCJSZXBsYWNpbmcgJ2En
IHdpdGggJ2InLi4uIik7Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChn
ZXRVSVNjcmlwdCgpLCAocmVzdWx0KSA9PiBpbmNyZW1lbnRQcm9ncmVzcygpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdyaXRlKCJUbyBtYW51YWxseSB0
ZXN0LCBwcmVzcyBhbmQgaG9sZCBkb3duICdhJyBhbmQgc2VsZWN0IG9uZSBvZiB0aGUgYWNjZW50
ZWQgY2hhcmFjdGVycy4iKTsKLSAgICAgICAgICAgIHdyaXRlKCJZb3Ugc2hvdWxkIG9ic2VydmUg
YSBwYWlyIG9mIGJlZm9yZWlucHV0L2lucHV0IGV2ZW50cyBmb3IgYm90aCAnYScgYW5kIHRoZSBy
ZXBsYWNlbWVudCBhY2NlbnRlZCBjaGFyYWN0ZXIuIik7Ci0gICAgICAgICAgICB3cml0ZSgiSW1w
b3J0YW50bHksIHRoZSBpbnB1dFR5cGUgb2YgdGhlIGxhc3QgdHdvIGV2ZW50cyBzaG91bGQgYmUg
J2luc2VydFJlcGxhY2VtZW50VGV4dCcuIik7Ci0gICAgICAgIH0KKzxkaXY+VG8gbWFudWFsbHkg
dGVzdCwgcHJlc3MgYW5kIGhvbGQgZG93biAnYScgYW5kIHNlbGVjdCBvbmUgb2YgdGhlIGFjY2Vu
dGVkIGNoYXJhY3RlcnMuIjwvZGl2PgorPGRpdj5Zb3Ugc2hvdWxkIG9ic2VydmUgYSBwYWlyIG9m
IGJlZm9yZWlucHV0L2lucHV0IGV2ZW50cyBmb3IgYm90aCAnYScgYW5kIHRoZSByZXBsYWNlbWVu
dCBhY2NlbnRlZCBjaGFyYWN0ZXIuIjwvZGl2PgorPGRpdj5JbXBvcnRhbnRseSwgdGhlIGlucHV0
VHlwZSBvZiB0aGVzZSBmb3VyIGV2ZW50cyBzaG91bGQgYmUgJ2luc2VydFJlcGxhY2VtZW50VGV4
dCcuIjwvZGl2PgorPGRpdj5UaGVuIGluc2VydCBhIHNpbmdsZSBlbW9qaSBjaGFyYWN0ZXIuIFlv
dSBzaG91bGQgb2JzZXJ2ZSBiZWZvcmVpbnB1dC9pbnB1dCBldmVudHMgZm9yIHRoZSBpbnNlcnRl
ZCBlbW9qaS4iPC9kaXY+Cis8ZGl2PkltcG9ydGFudGx5LCB0aGUgaW5wdXRUeXBlIG9mIHRoZXNl
IHR3byBldmVudHMgc2hvdWxkIGJlICdpbnNlcnRUZXh0Jy4iPC9kaXY+CiAKLSAgICAgICAgZnVu
Y3Rpb24gaW5jcmVtZW50UHJvZ3Jlc3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmVz
cysrOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzICE9IDUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOworPGlucHV0IGlkPSJlZGl0YWJsZSIgb25iZWZvcmVpbnB1dD1sb2dJbnB1dEV2ZW50KGV2
ZW50KSBvbmlucHV0PWxvZ0lucHV0RXZlbnQoZXZlbnQpPjwvaW5wdXQ+Cis8ZGl2IGlkPSJvdXRw
dXQiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgIGxldCB3cml0
ZSA9IHMgPT4gb3V0cHV0LmlubmVySFRNTCArPSBzICsgIjxicj4iOworICAgIGVkaXRhYmxlLmZv
Y3VzKCk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5ldmVudFNlbmRlciAm
JiB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgcnVuVGVz
dCgpOworICAgIH0KIAotICAgICAgICAgICAgd3JpdGUoYFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQg
aXMgbm93OiAke2VkaXRhYmxlLnZhbHVlfWApOwotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Ci0gICAgICAgIH0KKyAgICBmdW5jdGlvbiBsb2dJbnB1dEV2ZW50KGV2ZW50KQor
ICAgIHsKKyAgICAgICAgd3JpdGUoYCgke2V2ZW50LnRhcmdldC5pZH0pOiB0eXBlPSR7ZXZlbnQu
dHlwZX0sIGlucHV0VHlwZT0ke2V2ZW50LmlucHV0VHlwZX0sIGRhdGE9JHtldmVudC5kYXRhfSwg
ZGF0YVRyYW5zZmVyPSR7ZXZlbnQuZGF0YVRyYW5zZmVyfWApOworICAgIH0KIAotICAgICAgICBm
dW5jdGlvbiBsb2dJbnB1dEV2ZW50KGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0
ZShgKCR7ZXZlbnQudGFyZ2V0LmlkfSk6IHR5cGU9JHtldmVudC50eXBlfSwgaW5wdXRUeXBlPSR7
ZXZlbnQuaW5wdXRUeXBlfSwgZGF0YT1cYCR7ZXZlbnQuZGF0YX1cYCwgZGF0YVRyYW5zZmVyPVxg
JHtldmVudC5kYXRhVHJhbnNmZXJ9XGBgKTsKLSAgICAgICAgICAgIGluY3JlbWVudFByb2dyZXNz
KCk7Ci0gICAgICAgIH0KKyAgICBhc3luYyBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICB3
cml0ZSgiKDEpIFR5cGluZyAnYScuLi4iKTsKKyAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigi
YSIpOworICAgICAgICB3cml0ZShgVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6ICR7ZWRp
dGFibGUudmFsdWV9YCk7CisgICAgICAgIHdyaXRlKCIoMikgUmVwbGFjaW5nICdhJyB3aXRoICdi
Jy4uLiIpOworICAgICAgICBhd2FpdCBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImIiLCAw
LCAxKTsKKyAgICAgICAgd3JpdGUoYFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgaXMgbm93OiAke2Vk
aXRhYmxlLnZhbHVlfWApOworICAgICAgICB3cml0ZSgiKDMpIEluc2VydGluZyAnYycgYWZ0ZXIg
J2InLi4uIik7CisgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlcGxhY2VUZXh0QXRSYW5nZSgiYyIs
IDEsIDApOworICAgICAgICB3cml0ZShgVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBub3c6ICR7
ZWRpdGFibGUudmFsdWV9YCk7CisgICAgICAgIHdyaXRlKCIoNCkgU2VsZWN0aW5nIGFsbCBhbmQg
cmVwbGFjaW5nIHdpdGggJ2QnLi4uIik7CisgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJT
ZWxlY3RBbGwiKQorICAgICAgICBhd2FpdCBVSUhlbHBlci5yZXBsYWNlVGV4dEF0UmFuZ2UoImQi
LCAwLCAyKTsKKyAgICAgICAgd3JpdGUoYFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgaXMgbm93OiAk
e2VkaXRhYmxlLnZhbHVlfWApOwogCi0gICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGAKLSAgICAgICAgICAgIChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW5zZXJ0VGV4dCgiYiIsIDAsIDEpOwotICAg
ICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7Ci0gICAgICAgICAg
ICB9KSgpO2AKLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgfQorPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOGY5ZmI0YzJkMjk2ZDE3M2ZkMWYzNDA1Nzg0MDVj
OWRkMmFmOWQyZS4uMzQ1MTI3MDAwNzY0YmE3NDE3OTg2YWY1YjQ1ODE1ZTBkNzQyZmQ5MiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODUs
MTAgKzg1LDYgQEAgZmFzdC9mb3Jtcy9maWxlL29wZW4tZmlsZS1wYW5lbC5odG1sIFsgU2tpcCBd
CiAjIFdLMSBhbmQgV0syIG1vdXNlbW92ZSBldmVudHMgYXJlIHN1YnRseSBkaWZmZXJlbnQgaW4g
d2F5cyB0aGF0IGJyZWFrIHRoaXMgdGVzdCBvbiBXSzEuCiBmYXN0L2V2ZW50cy9naG9zdGx5LW1v
dXNlbW92ZXMtaW4tc3ViZnJhbWUuaHRtbCBbIFNraXAgXQogCi0jIFRlc3Qgc3VwcG9ydCBmb3Ig
aW5zZXJ0aW5nIHNwZWNpYWwgY2hhcmFjdGVycyBpcyBub3QgeWV0IGltcGxlbWVudGVkIG9uIFdL
MS4KLWZhc3QvZXZlbnRzL2JlZm9yZS1pbnB1dC1wcmV2ZW50LWluc2VydC1yZXBsYWNlbWVudC5o
dG1sIFsgU2tpcCBdCi1mYXN0L2V2ZW50cy9pbnB1dC1ldmVudC1pbnNlcnQtcmVwbGFjZW1lbnQu
aHRtbCBbIFNraXAgXQotCiAjIE1lZGlhIFN0cmVhbSBBUEkgdGVzdGluZyBpcyBub3Qgc3VwcG9y
dGVkIGZvciBXSzEgeWV0LgogZmFzdC9tZWRpYXN0cmVhbQogaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIuanMg
Yi9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvdWktaGVscGVyLmpzCmluZGV4IDc4OGZkZjhjYzU5MzAy
YWE1MDE3ZGMyNzk3YTBhOGZiNzNkNjZlZTIuLjQ0OTBkNTEyZjFlNzc3NTk1NTYwZWFiZjI1N2Jk
M2JjN2UwYjAyMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291cmNlcy91aS1oZWxwZXIu
anMKKysrIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3VpLWhlbHBlci5qcwpAQCAtMTEwLDYgKzEx
MCwxNSBAQCB3aW5kb3cuVUlIZWxwZXIgPSBjbGFzcyBVSUhlbHBlciB7CiAgICAgICAgIH0pOwog
ICAgIH0KIAorICAgIHN0YXRpYyByZXBsYWNlVGV4dEF0UmFuZ2UodGV4dCwgbG9jYXRpb24sIGxl
bmd0aCkgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAg
ICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGAoKCkgPT4geworICAgICAgICAgICAgICAgIHVp
Q29udHJvbGxlci5yZXBsYWNlVGV4dEF0UmFuZ2UoIiR7dGV4dH0iLCAke2xvY2F0aW9ufSwgJHts
ZW5ndGh9KTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgn
RG9uZScpOworICAgICAgICAgICAgfSkoKWAsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9
CisKICAgICBzdGF0aWMgd2FpdChwcm9taXNlKQogICAgIHsKICAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>