<?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>47384</bug_id>
          
          <creation_ts>2010-10-07 16:34:19 -0700</creation_ts>
          <short_desc>ARMv7 JIT should generated conditional branches when possible</short_desc>
          <delta_ts>2010-10-13 23:45:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Goodwin">david_goodwin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291320</commentid>
    <comment_count>0</comment_count>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-07 16:34:19 -0700</bug_when>
    <thetext>Current, ARMv7 JIT generates a conditional branch using IT with an unconditional branch. The JIT should instead use a conditional branch when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291321</commentid>
    <comment_count>1</comment_count>
      <attachid>70170</attachid>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-07 16:40:12 -0700</bug_when>
    <thetext>Created attachment 70170
patch to use conditional branches when possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291324</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 16:46:00 -0700</bug_when>
    <thetext>Attachment 70170 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/assembler/ARMv7Assembler.h:751:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:759:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:766:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:2161:  JUMP_TEMPORARY_REGISTER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291994</commentid>
    <comment_count>3</comment_count>
      <attachid>70170</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-08 18:10:22 -0700</bug_when>
    <thetext>Comment on attachment 70170
patch to use conditional branches when possible

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

You need a more detailed changelog but other than that this looks good

&gt; JavaScriptCore/ChangeLog:7
&gt; +

You should have a description of what you&apos;re changing in a patch this size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292528</commentid>
    <comment_count>4</comment_count>
      <attachid>70443</attachid>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-11 10:19:13 -0700</bug_when>
    <thetext>Created attachment 70443
Add more descriptive ChangeLog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292531</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 10:21:09 -0700</bug_when>
    <thetext>Attachment 70443 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:16:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:17:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/ChangeLog:18:  Line contains tab character.  [whitespace/tab] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:751:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:759:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:766:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:2161:  JUMP_TEMPORARY_REGISTER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292539</commentid>
    <comment_count>6</comment_count>
      <attachid>70449</attachid>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-11 10:26:08 -0700</bug_when>
    <thetext>Created attachment 70449
more descriptive ChangeLog (now without tabs, sigh)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292543</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 10:28:51 -0700</bug_when>
    <thetext>Attachment 70449 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/assembler/ARMv7Assembler.h:751:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:759:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:766:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/assembler/ARMv7Assembler.h:2161:  JUMP_TEMPORARY_REGISTER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292619</commentid>
    <comment_count>8</comment_count>
      <attachid>70449</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-11 12:59:14 -0700</bug_when>
    <thetext>Comment on attachment 70449
more descriptive ChangeLog (now without tabs, sigh)

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

I&apos;m not really comfortable with the new jumptype naming schem -- could you explain what patchable means?

you should also replace the a == 0 checks with !a

&gt; JavaScriptCore/assembler/ARMv7Assembler.h:482
&gt; +    enum JumpType { JumpFixed, JumpNoCondition, JumpCondition, PatchableJumpNoCondition, PatchableJumpCondition, JumpTypeCount };
&gt; +    enum JumpLinkType { LinkInvalid, LinkJumpT1, LinkJumpT2, LinkJumpT3,

I don&apos;t really get this naming scheme -- what&apos;s meant by patchable vs. non patchable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293445</commentid>
    <comment_count>9</comment_count>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-13 08:51:16 -0700</bug_when>
    <thetext>A patchable jump is one that is not compressed because it may need to be patched after code generation. I&apos;m happy to change the names to anything you think is more appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293549</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-10-13 11:23:41 -0700</bug_when>
    <thetext>Here&apos;s an alternative:

1. JumpConditionFixedSize, JumpNoConditionFixedSize. &quot;Fixed size&quot; is a little more specific and modular, since you don&apos;t have to know that the patching machinery relies on fixed sized instructions in order to know what &quot;fixed size&quot; means. Using a suffix helps communicate that these are just like the other similarly named jumps, with the modifier of having a fixed size.

I think it would also be helpful to readability to add a &quot;canCompact(JumpType)&quot; helper function. That way, branch compacting code can just do this:

if (!canCompact(jumpType))
    // bail out

And if we add / remove jump types, we only need to modify the central helper function, not each of these clients. We can also place the comment explaining which jump types can&apos;t compact in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293663</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 13:16:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Here&apos;s an alternative:
&gt; 
&gt; 1. JumpConditionFixedSize, JumpNoConditionFixedSize. &quot;Fixed size&quot; is a little more specific and modular, since you don&apos;t have to know that the patching machinery relies on fixed sized instructions in order to know what &quot;fixed size&quot; means. Using a suffix helps communicate that these are just like the other similarly named jumps, with the modifier of having a fixed size.
&gt; 
&gt; I think it would also be helpful to readability to add a &quot;canCompact(JumpType)&quot; helper function. That way, branch compacting code can just do this:
&gt; 
&gt; if (!canCompact(jumpType))
&gt;     // bail out
&gt; 
&gt; And if we add / remove jump types, we only need to modify the central helper function, not each of these clients. We can also place the comment explaining which jump types can&apos;t compact in one place.

These seem like good names, and canCompact is a good addition.  My primary issue with the Patchable prefixes were that I felt you could reasonably interpret &quot;Patchable&quot; as meaning the linker was able to patch the link into another form.

David you may find it helpful to run the style checker before you upload, it&apos;s in the normal checkout at:
WebKitTools/Scripts/check-webkit-style

There&apos;s also the webkit-patch script that can automate the process of submitting a patch if you&apos;re interested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293705</commentid>
    <comment_count>12</comment_count>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-13 14:14:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; David you may find it helpful to run the style checker before you upload, it&apos;s in the normal checkout at:
&gt; WebKitTools/Scripts/check-webkit-style
&gt; 
&gt; There&apos;s also the webkit-patch script that can automate the process of submitting a patch if you&apos;re interested.

Yeah, I use that, but there are a lot of violations in the file already so it takes some work to weed out the new ones that I&apos;ve introduced. Plus something like the JUMP_TEMPORARY_REGISTER I assume I can&apos;t fix because I am just using something that is already defined and in use elsewhere in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293708</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 14:20:46 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; David you may find it helpful to run the style checker before you upload, it&apos;s in the normal checkout at:
&gt; &gt; WebKitTools/Scripts/check-webkit-style
&gt; &gt; 
&gt; &gt; There&apos;s also the webkit-patch script that can automate the process of submitting a patch if you&apos;re interested.
&gt; 
&gt; Yeah, I use that, but there are a lot of violations in the file already so it takes some work to weed out the new ones that I&apos;ve introduced. Plus something like the JUMP_TEMPORARY_REGISTER I assume I can&apos;t fix because I am just using something that is already defined and in use elsewhere in the code.

Ah i forgot it did that :-/

if you do:

webkit-patch post

Assuming you haven&apos;t made any changes to the header of the changelog (the bug url, etc) it should correctly post the changelog to the correct bug.  Before it does that though it will run check-webkit-style in such a way that it only complains about errors in the diff.

I wonder if check-webkit-style works &quot;correctly&quot; if you just run it on a diff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293748</commentid>
    <comment_count>14</comment_count>
      <attachid>70672</attachid>
    <who name="David Goodwin">david_goodwin</who>
    <bug_when>2010-10-13 15:25:03 -0700</bug_when>
    <thetext>Created attachment 70672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293750</commentid>
    <comment_count>15</comment_count>
      <attachid>70672</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 15:27:14 -0700</bug_when>
    <thetext>Comment on attachment 70672
Patch

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293752</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-13 15:28:06 -0700</bug_when>
    <thetext>Attachment 70672 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/assembler/ARMv7Assembler.h:2169:  JUMP_TEMPORARY_REGISTER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293894</commentid>
    <comment_count>17</comment_count>
      <attachid>70672</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-13 18:22:21 -0700</bug_when>
    <thetext>Comment on attachment 70672
Patch

Rejecting patch 70672 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--quiet&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
ul.
Files=14, Tests=304,  1 wallclock secs ( 0.74 cusr +  0.17 csys =  0.91 CPU)
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Projects/CommitQueue/LayoutTests
Testing 21548 test cases.
http/tests/incremental/frame-focus-before-load.html -&gt; failed

Exiting early after 1 failures. 20655 tests run.
431.05s total testing time

20654 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
34 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/4434017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293913</commentid>
    <comment_count>18</comment_count>
      <attachid>70672</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 19:52:56 -0700</bug_when>
    <thetext>Comment on attachment 70672
Patch

/me stabs commit queue and tries again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293919</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-13 20:14:51 -0700</bug_when>
    <thetext>You should really stab the flaky tests. :)  I&apos;m working on making the commit-queue *even* less sensitive to flaky tests.  It requires tests to flake twice in a row to have such a failure currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293980</commentid>
    <comment_count>20</comment_count>
      <attachid>70672</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-13 23:45:35 -0700</bug_when>
    <thetext>Comment on attachment 70672
Patch

Clearing flags on attachment: 70672

Committed r69743: &lt;http://trac.webkit.org/changeset/69743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293981</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-13 23:45:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70170</attachid>
            <date>2010-10-07 16:40:12 -0700</date>
            <delta_ts>2010-10-11 10:19:13 -0700</delta_ts>
            <desc>patch to use conditional branches when possible</desc>
            <filename>47384.txt</filename>
            <type>text/plain</type>
            <size>30639</size>
            <attacher name="David Goodwin">david_goodwin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MzUxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMTAtMDcgIERhdmlkIEdv
b2R3aW4gIDxkYXZpZF9nb29kd2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUk12NyBKSVQgc2hvdWxkIGdlbmVyYXRlZCBjb25k
aXRpb25hbCBicmFuY2hlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NAorCisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3
QXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OkptcFNyYzo6Sm1wU3JjKToKKyAgICAgICAgKEpT
Qzo6QVJNdjdBc3NlbWJsZXI6OmlmVGhlbkVsc2UpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6anVtcFNpemVEZWx0YSk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjb21w
dXRlSnVtcFR5cGUpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6bGluayk6CisgICAg
ICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjYW5CZUp1bXBUMSk6CisgICAgICAgIChKU0M6OkFS
TXY3QXNzZW1ibGVyOjpjYW5CZUp1bXBUMyk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVy
OjpjYW5CZUp1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcFQx
KToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wVDMpOgorICAgICAgICAo
SlNDOjpBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNz
ZW1ibGVyOjpsaW5rQ29uZGl0aW9uYWxKdW1wVDQpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6bGlua0JYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtDb25kaXRp
b25hbEJYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wQWJzb2x1dGUp
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtC
dWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpjb21wdXRlSnVtcFR5cGUp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wU2l6ZURlbHRhKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6anVtcCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6Om5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk12Nzo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJldCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnRhaWxSZWN1cnNpdmVDYWxsKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bWFrZUp1bXApOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjptYWtlQnJhbmNoKToKKwogMjAxMC0xMC0wNiAgQ2hy
aXMgRXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZp
ZCBMZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
LmNwcAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdB
c3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgaW50IEFSTXY3QXNzZW1ibGVyOjpKdW1wU2l6ZXNbXSA9IHsgMHhmZmZm
ZmZmZiwgc2l6ZW9mKHVpbnQxNl90KSwgc2l6ZW9mKHVpbnQxNl90KSwKLSAgICAyICogc2l6ZW9m
KHVpbnQxNl90KSwgMiAqIHNpemVvZih1aW50MTZfdCksIDUgKiBzaXplb2YodWludDE2X3QpIH07
CisgICAgMiAqIHNpemVvZih1aW50MTZfdCksIDIgKiBzaXplb2YodWludDE2X3QpLCAzICogc2l6
ZW9mKHVpbnQxNl90KSwgNSAqIHNpemVvZih1aW50MTZfdCksIDYgKiBzaXplb2YodWludDE2X3Qp
IH07Citjb25zdCBpbnQgQVJNdjdBc3NlbWJsZXI6Okp1bXBQYWRkaW5nU2l6ZXNbXSA9IHsgMCwg
NSAqIHNpemVvZih1aW50MTZfdCksIDYgKiBzaXplb2YodWludDE2X3QpLAorICAgIDUgKiBzaXpl
b2YodWludDE2X3QpLCA2ICogc2l6ZW9mKHVpbnQxNl90KSB9OwogCiB9CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lvbiA2OTMzMykKKysr
IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NzgsMTEgKzQ3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIENvbmRpdGlvbkludmFsaWQK
ICAgICB9IENvbmRpdGlvbjsKIAotICAgIGVudW0gSnVtcFR5cGUgeyBKdW1wTm9Db25kaXRpb24s
IEp1bXBDb25kaXRpb24sIEp1bXBGdWxsU2l6ZSB9OwotICAgIGVudW0gSnVtcExpbmtUeXBlIHsg
TGlua0ludmFsaWQsIExpbmtKdW1wVDIsIExpbmtDb25kaXRpb25hbEp1bXBUMiwgCi0gICAgICAg
IExpbmtKdW1wVDQsIExpbmtDb25kaXRpb25hbEp1bXBUNCwgTGlua0JYLCBKdW1wVHlwZUNvdW50
IH07Ci0gICAgc3RhdGljIGNvbnN0IGludCBKdW1wU2l6ZXNbSnVtcFR5cGVDb3VudF07Ci0gICAg
ZW51bSB7IEp1bXBQYWRkaW5nU2l6ZSA9IDUgKiBzaXplb2YodWludDE2X3QpIH07CisgICAgZW51
bSBKdW1wVHlwZSB7IEp1bXBGaXhlZCwgSnVtcE5vQ29uZGl0aW9uLCBKdW1wQ29uZGl0aW9uLCBQ
YXRjaGFibGVKdW1wTm9Db25kaXRpb24sIFBhdGNoYWJsZUp1bXBDb25kaXRpb24sIEp1bXBUeXBl
Q291bnQgfTsKKyAgICBlbnVtIEp1bXBMaW5rVHlwZSB7IExpbmtJbnZhbGlkLCBMaW5rSnVtcFQx
LCBMaW5rSnVtcFQyLCBMaW5rSnVtcFQzLAorICAgICAgICBMaW5rSnVtcFQ0LCBMaW5rQ29uZGl0
aW9uYWxKdW1wVDQsIExpbmtCWCwgTGlua0NvbmRpdGlvbmFsQlgsIEp1bXBMaW5rVHlwZUNvdW50
IH07CisgICAgc3RhdGljIGNvbnN0IGludCBKdW1wU2l6ZXNbSnVtcExpbmtUeXBlQ291bnRdOwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgSnVtcFBhZGRpbmdTaXplc1tKdW1wVHlwZUNvdW50XTsKICAg
ICBjbGFzcyBMaW5rUmVjb3JkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExpbmtSZWNvcmQoaW50
cHRyX3QgZnJvbSwgaW50cHRyX3QgdG8sIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBjb25kaXRp
b24pCkBAIC01MDMsOCArNTAzLDggQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIGlu
dHB0cl90IG1fZnJvbSA6IDMxOwogICAgICAgICBpbnRwdHJfdCBtX3RvIDogMzE7Ci0gICAgICAg
IEp1bXBUeXBlIG1fdHlwZSA6IDI7Ci0gICAgICAgIEp1bXBMaW5rVHlwZSBtX2xpbmtUeXBlIDog
MzsKKyAgICAgICAgSnVtcFR5cGUgbV90eXBlIDogMzsKKyAgICAgICAgSnVtcExpbmtUeXBlIG1f
bGlua1R5cGUgOiA0OwogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb24gOiAxNjsKICAgICB9
OwogICAgIApAQCAtNTI0LDcgKzUyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV9jb25k
aXRpb24oQ29uZGl0aW9uSW52YWxpZCkKICAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gSnVtcENvbmRpdGlvbik7CisgICAg
ICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8fCBtX3R5cGUgPT0gSnVtcE5vQ29u
ZGl0aW9uIHx8IG1fdHlwZSA9PSBQYXRjaGFibGVKdW1wTm9Db25kaXRpb24pOwogICAgICAgICB9
CiAKICAgICAgICAgSm1wU3JjKGludCBvZmZzZXQsIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBj
b25kaXRpb24pCkBAIC01MzIsNyArNTMyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX2Nv
bmRpdGlvbihjb25kaXRpb24pCiAgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBDb25kaXRpb24gfHwgbV90eXBlID09
IEp1bXBGdWxsU2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8
fCBtX3R5cGUgPT0gSnVtcENvbmRpdGlvbiB8fCBtX3R5cGUgPT0gUGF0Y2hhYmxlSnVtcENvbmRp
dGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgbV9vZmZzZXQ7CkBAIC02MjksNiArNjI5
LDcgQEAgcHJpdmF0ZToKICAgICB9IE9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAg
ICAgICAgT1BfQl9UMSAgICAgICAgID0gMHhEMDAwLAogICAgICAgICBPUF9CX1QyICAgICAgICAg
PSAweEUwMDAsCiAgICAgICAgIE9QX0FORF9yZWdfVDIgICA9IDB4RUEwMCwKICAgICAgICAgT1Bf
VFNUX3JlZ19UMiAgID0gMHhFQTEwLApAQCAtNjU3LDYgKzY1OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIE9QX1ZDVlRfRlBJVkZQICA9IDB4RUVCMCwKICAgICAgICAgT1BfVk1PVl9JTU1fVDIgID0g
MHhFRUIwLAogICAgICAgICBPUF9WTVJTICAgICAgICAgPSAweEVFQjAsCisgICAgICAgIE9QX0Jf
VDNhICAgICAgICA9IDB4RjAwMCwKICAgICAgICAgT1BfQl9UNGEgICAgICAgID0gMHhGMDAwLAog
ICAgICAgICBPUF9BTkRfaW1tX1QxICAgPSAweEYwMDAsCiAgICAgICAgIE9QX1RTVF9pbW0gICAg
ICA9IDB4RjAxMCwKQEAgLTcwOSw2ICs3MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBPUF9WQ1ZU
X0ZQSVZGUGIgPSAweDBBNDAsCiAgICAgICAgIE9QX1ZTVUJfVDJiICAgICA9IDB4MEE0MCwKICAg
ICAgICAgT1BfTk9QX1QyYiAgICAgID0gMHg4MDAwLAorICAgICAgICBPUF9CX1QzYiAgICAgICAg
PSAweDgwMDAsCiAgICAgICAgIE9QX0JfVDRiICAgICAgICA9IDB4OTAwMCwKICAgICB9IE9wY29k
ZUlEMjsKIApAQCAtNzQ1LDcgKzc0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB8IChpZlRo
ZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDNpZikgPDwgMikKICAgICAgICAgICAg
IHwgKGlmVGhlbkVsc2VDb25kaXRpb25CaXQoY29uZGl0aW9uLCBpbnN0NGlmKSA8PCAxKQogICAg
ICAgICAgICAgfCAxOwotICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkg
fHwgKG1hc2sgJiAobWFzayAtIDEpKSk7CisgICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENv
bmRpdGlvbkFMKSB8fCAoKG1hc2sgJiAobWFzayAtIDEpKSA9PSAwKSk7CiAgICAgICAgIHJldHVy
biAoY29uZGl0aW9uIDw8IDQpIHwgbWFzazsKICAgICB9CiAgICAgdWludDhfdCBpZlRoZW5FbHNl
KENvbmRpdGlvbiBjb25kaXRpb24sIGJvb2wgaW5zdDJpZiwgYm9vbCBpbnN0M2lmKQpAQCAtNzUz
LDIxICs3NTYsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IG1hc2sgPSAoaWZUaGVuRWxzZUNv
bmRpdGlvbkJpdChjb25kaXRpb24sIGluc3QyaWYpIDw8IDMpCiAgICAgICAgICAgICB8IChpZlRo
ZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDNpZikgPDwgMikKICAgICAgICAgICAg
IHwgMjsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29uZGl0aW9uQUwpIHx8IChtYXNr
ICYgKG1hc2sgLSAxKSkpOworICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25B
TCkgfHwgKChtYXNrICYgKG1hc2sgLSAxKSkgPT0gMCkpOwogICAgICAgICByZXR1cm4gKGNvbmRp
dGlvbiA8PCA0KSB8IG1hc2s7CiAgICAgfQogICAgIHVpbnQ4X3QgaWZUaGVuRWxzZShDb25kaXRp
b24gY29uZGl0aW9uLCBib29sIGluc3QyaWYpCiAgICAgewogICAgICAgICBpbnQgbWFzayA9IChp
ZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDJpZikgPDwgMykKICAgICAgICAg
ICAgIHwgNDsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29uZGl0aW9uQUwpIHx8ICht
YXNrICYgKG1hc2sgLSAxKSkpOworICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRp
b25BTCkgfHwgKChtYXNrICYgKG1hc2sgLSAxKSkgPT0gMCkpOwogICAgICAgICByZXR1cm4gKGNv
bmRpdGlvbiA8PCA0KSB8IG1hc2s7CiAgICAgfQogCiAgICAgdWludDhfdCBpZlRoZW5FbHNlKENv
bmRpdGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAgICBpbnQgbWFzayA9IDg7Ci0gICAgICAg
IEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFMKSB8fCAobWFzayAmIChtYXNrIC0gMSkp
KTsKICAgICAgICAgcmV0dXJuIChjb25kaXRpb24gPDwgNCkgfCBtYXNrOwogICAgIH0KIApAQCAt
MTY2NCw3ICsxNjY2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdCo+KG1fZm9ybWF0dGVyLmRhdGEoKSlbbG9jYXRpb24gLyBzaXplb2YoaW50MzJfdCkgLSAx
XTsKICAgICB9CiAgICAgCi0gICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcExpbmtUeXBlIGp1bXBM
aW5rVHlwZSkgeyByZXR1cm4gSnVtcFBhZGRpbmdTaXplIC0gSnVtcFNpemVzW2p1bXBMaW5rVHlw
ZV07IH0KKyAgICBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtU
eXBlIGp1bXBMaW5rVHlwZSkgeyByZXR1cm4gSnVtcFBhZGRpbmdTaXplc1tqdW1wVHlwZV0gLSBK
dW1wU2l6ZXNbanVtcExpbmtUeXBlXTsgfQogICAgIAogICAgIC8vIEFzc2VtYmxlciBhZG1pbiBt
ZXRob2RzOgogCkBAIC0xNjc4LDM5ICsxNjgwLDY1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGEuZnJvbSgpIDwgYi5mcm9tKCk7CiAgICAgfQogCi0gICAgSnVtcExpbmtUeXBlIGNvbXB1dGVK
dW1wVHlwZShMaW5rUmVjb3JkJiByZWNvcmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVp
bnQ4X3QqIHRvKQorICAgIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoSnVtcFR5cGUganVt
cFR5cGUsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQogICAgIHsKLSAg
ICAgICAgaWYgKHJlY29yZC50eXBlKCkgPj0gSnVtcEZ1bGxTaXplKSB7Ci0gICAgICAgICAgICBy
ZWNvcmQuc2V0TGlua1R5cGUoTGlua0JYKTsKKyAgICAgICAgaWYgKGp1bXBUeXBlID09IEp1bXBG
aXhlZCkKKyAgICAgICAgICAgIHJldHVybiBMaW5rSW52YWxpZDsKKyAgICAgICAgCisgICAgICAg
IC8vIGZvciBwYXRjaGFibGUganVtcCB3ZSBtdXN0IGxlYXZlIHNwYWNlIGZvciB0aGUgbG9uZ2Vz
dCBjb2RlIHNlcXVlbmNlCisgICAgICAgIGlmIChqdW1wVHlwZSA9PSBQYXRjaGFibGVKdW1wTm9D
b25kaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gTGlua0JYOwotICAgICAgICB9Ci0gICAgICAg
IGNvbnN0IHVpbnQxNl90KiBqdW1wVDJMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDE2X3QqPihmcm9tICAtIChKdW1wUGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBU
Ml0pKTsKLSAgICAgICAgaWYgKGNhbkJlSnVtcFQyKGp1bXBUMkxvY2F0aW9uLCB0bykpIHsKLSAg
ICAgICAgICAgIGlmIChyZWNvcmQudHlwZSgpID09IEp1bXBDb25kaXRpb24pIHsKLSAgICAgICAg
ICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0NvbmRpdGlvbmFsSnVtcFQyKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsSnVtcFQyOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtKdW1wVDIpOwotICAgICAgICAgICAg
cmV0dXJuIExpbmtKdW1wVDI7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGp1bXBUeXBlID09IFBh
dGNoYWJsZUp1bXBDb25kaXRpb24pCisgICAgICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFs
Qlg7CisgICAgICAgIAorICAgICAgICBjb25zdCBpbnQgcGFkZGluZ1NpemUgPSBKdW1wUGFkZGlu
Z1NpemVzW2p1bXBUeXBlXTsKICAgICAgICAgYm9vbCBtYXlUcmlnZ2VyRXJyYXRhID0gZmFsc2U7
Ci0gICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDRMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDE2X3QqPihmcm9tICAtIChKdW1wUGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNb
TGlua0p1bXBUNF0pKTsKLSAgICAgICAgaWYgKCFjYW5CZUp1bXBUNChqdW1wVDRMb2NhdGlvbiwg
dG8sIG1heVRyaWdnZXJFcnJhdGEpKSB7Ci0gICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUo
TGlua0JYKTsKLSAgICAgICAgICAgIHJldHVybiBMaW5rQlg7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1heVRyaWdnZXJFcnJhdGEpIHsKLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShM
aW5rQlgpOworICAgICAgICAKKyAgICAgICAgaWYgKGp1bXBUeXBlID09IEp1bXBDb25kaXRpb24p
IHsKKyAgICAgICAgICAgIC8vIDItYnl0ZSBjb25kaXRpb25hbCBUMQorICAgICAgICAgICAgY29u
c3QgdWludDE2X3QqIGp1bXBUMUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MTZfdCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUMV0pKTsKKyAg
ICAgICAgICAgIGlmIChjYW5CZUp1bXBUMShqdW1wVDFMb2NhdGlvbiwgdG8pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBMaW5rSnVtcFQxOworICAgICAgICAgICAgLy8gNC1ieXRlIGNvbmRpdGlv
bmFsIFQzCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQzTG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAtIChwYWRkaW5nU2l6ZSAtIEp1bXBT
aXplc1tMaW5rSnVtcFQzXSkpOworICAgICAgICAgICAgaWYgKGNhbkJlSnVtcFQzKGp1bXBUM0xv
Y2F0aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0YSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1h
eVRyaWdnZXJFcnJhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcFQzOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gNC1ieXRlIGNvbmRpdGlvbmFsIFQ0IHdpdGgg
SVQKKyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBjb25kaXRpb25hbEp1bXBUNExvY2F0aW9u
ID0gCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAt
IChwYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rQ29uZGl0aW9uYWxKdW1wVDRdKSk7CisgICAg
ICAgICAgICBpZiAoY2FuQmVKdW1wVDQoY29uZGl0aW9uYWxKdW1wVDRMb2NhdGlvbiwgdG8sIG1h
eVRyaWdnZXJFcnJhdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXlUcmlnZ2VyRXJyYXRh
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsSnVtcFQ0OworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gMi1ieXRlIHVuY29u
ZGl0aW9uYWwgVDIKKyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDJMb2NhdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0g
SnVtcFNpemVzW0xpbmtKdW1wVDJdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVKdW1wVDIoanVt
cFQyTG9jYXRpb24sIHRvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUMjsKKyAg
ICAgICAgICAgIC8vIDQtYnl0ZSB1bmNvbmRpdGlvbmFsIFQ0CisgICAgICAgICAgICBjb25zdCB1
aW50MTZfdCoganVtcFQ0TG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90
Kj4oZnJvbSAtIChwYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rSnVtcFQ0XSkpOworICAgICAg
ICAgICAgaWYgKGNhbkJlSnVtcFQ0KGp1bXBUNExvY2F0aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0
YSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1heVRyaWdnZXJFcnJhdGEpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBMaW5rSnVtcFQ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyB1c2UgbG9uZyBqdW1wIHNlcXVlbmNlCiAgICAgICAgICAgICByZXR1
cm4gTGlua0JYOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZWNvcmQudHlwZSgpID09IEp1bXBD
b25kaXRpb24pIHsKLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rQ29uZGl0aW9u
YWxKdW1wVDQpOwotICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEp1bXBUNDsKLSAg
ICAgICAgfQotICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0p1bXBUNCk7Ci0gICAgICAg
IHJldHVybiBMaW5rSnVtcFQ0OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGp1bXBUeXBlID09
IEp1bXBDb25kaXRpb24pOworICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsQlg7CiAgICAg
fQotCisgICAgCisgICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShMaW5rUmVjb3JkJiBy
ZWNvcmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQorICAgIHsKKyAg
ICAgICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gY29tcHV0ZUp1bXBUeXBlKHJlY29yZC50eXBl
KCksIGZyb20sIHRvKTsKKyAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKGxpbmtUeXBlKTsKKyAg
ICAgICAgcmV0dXJuIGxpbmtUeXBlOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlY29yZExpbmtP
ZmZzZXRzKGludDMyX3QgcmVnaW9uU3RhcnQsIGludDMyX3QgcmVnaW9uRW5kLCBpbnQzMl90IG9m
ZnNldCkKICAgICB7CiAgICAgICAgIGludDMyX3QgcHRyID0gcmVnaW9uU3RhcnQgLyBzaXplb2Yo
aW50MzJfdCk7CkBAIC0xNzI4LDIxICsxNzU2LDI1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGlu
ayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKQogICAgIHsK
LSAgICAgICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gcmVjb3JkLmxpbmtUeXBlKCk7Ci0gICAg
ICAgIEFTU0VSVChsaW5rVHlwZSAhPSBMaW5rSW52YWxpZCk7Ci0gICAgICAgIGlmICgobGlua1R5
cGUgPT0gTGlua0NvbmRpdGlvbmFsSnVtcFQyKSB8fCAobGlua1R5cGUgPT0gTGlua0NvbmRpdGlv
bmFsSnVtcFQ0KSkgewotICAgICAgICAgICAgdWludDE2X3QqIGl0dHRMb2NhdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tIC0gSnVtcFNpemVzW2xpbmtUeXBlXSAtIDIpOwot
ICAgICAgICAgICAgaXR0dExvY2F0aW9uWzBdID0gaWZUaGVuRWxzZShyZWNvcmQuY29uZGl0aW9u
KCkpIHwgT1BfSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChsaW5rVHlwZSkgeworICAg
ICAgICBzd2l0Y2ggKHJlY29yZC5saW5rVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGlua0p1bXBU
MToKKyAgICAgICAgICAgIGxpbmtKdW1wVDEocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJl
dF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIExpbmtKdW1wVDI6Ci0gICAgICAgIGNhc2UgTGlua0NvbmRpdGlvbmFsSnVtcFQyOgog
ICAgICAgICAgICAgbGlua0p1bXBUMihyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSks
IHRvKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtKdW1wVDM6CisgICAg
ICAgICAgICBsaW5rSnVtcFQzKHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDx1
aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBM
aW5rSnVtcFQ0OgotICAgICAgICBjYXNlIExpbmtDb25kaXRpb25hbEp1bXBUNDoKICAgICAgICAg
ICAgIGxpbmtKdW1wVDQocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxKdW1wVDQ6Cisg
ICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxKdW1wVDQocmVjb3JkLmNvbmRpdGlvbigpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExpbmtDb25kaXRpb25hbEJYOgorICAgICAgICAgICAgbGlua0NvbmRpdGlv
bmFsQlgocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJv
bSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtCWDoKICAgICAg
ICAgICAgIGxpbmtCWChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTk2OSw2ICsyMDAxLDE5IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiAoaW5zdHJ1Y3Rpb25bMF0gPT0gT1BfTk9QX1QyYSkgJiYgKGluc3RydWN0aW9uWzFd
ID09IE9QX05PUF9UMmIpOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbkJlSnVtcFQxKGNv
bnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOworICAgICAgICAKKyAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
c3RydWN0aW9uKSk7CisgICAgICAgIC8vIEl0IGRvZXMgbm90IGFwcGVhciB0byBiZSBkb2N1bWVu
dGVkIGluIHRoZSBBUk0gQVJNIChiaWcgc3VycHJpc2UpLCBidXQKKyAgICAgICAgLy8gZm9yIE9Q
X0JfVDEgdGhlIGJyYW5jaCBkaXNwbGFjZW1lbnQgZW5jb2RlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24g
aXMgMiAKKyAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBhY3R1YWwgZGlzcGxhY2VtZW50LgorICAg
ICAgICByZWxhdGl2ZSAtPSAyOworICAgICAgICByZXR1cm4gKChyZWxhdGl2ZSA8PCAyMykgPj4g
MjMpID09IHJlbGF0aXZlOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgYm9vbCBjYW5CZUp1bXBU
Mihjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZvaWQqIHRhcmdldCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9u
KSAmIDEpKTsKQEAgLTE5ODIsNyArMjAyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAo
KHJlbGF0aXZlIDw8IDIwKSA+PiAyMCkgPT0gcmVsYXRpdmU7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIGNhbkJlSnVtcFQ0KGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qg
dm9pZCogdGFyZ2V0LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQorICAgIHN0YXRpYyBib29sIGNh
bkJlSnVtcFQzKGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0
LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOwpAQCAtMjAwMCwzNCAr
MjA0NSw0OCBAQCBwcml2YXRlOgogICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGluIHRoZSBmaXJz
dCBwYWdlIGlmIHRoZSBqdW1wIGJyYW5jaCBiYWNrIGJ5IFszLi4weDEwMDJdIGJ5dGVzCiAgICAg
ICAgIGJvb2wgdGFyZ2V0SW5GaXJzdFBhZ2UgPSAocmVsYXRpdmUgPj0gLTB4MTAwMikgJiYgKHJl
bGF0aXZlIDwgLTIpOwogICAgICAgICBib29sIHdvdWxkVHJpZ2dlckE4RXJyYXRhID0gc3BhbnNU
d280SyAmJiB0YXJnZXRJbkZpcnN0UGFnZTsKLSAgICAgICAgcmV0dXJuICgocmVsYXRpdmUgPDwg
NykgPj4gNykgPT0gcmVsYXRpdmUgJiYgIXdvdWxkVHJpZ2dlckE4RXJyYXRhOworICAgICAgICBy
ZXR1cm4gKChyZWxhdGl2ZSA8PCAxMSkgPj4gMTEpID09IHJlbGF0aXZlICYmICF3b3VsZFRyaWdn
ZXJBOEVycmF0YTsKICAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBsaW5rQlgodWludDE2X3QqIGlu
c3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCisgICAgCisgICAgc3RhdGljIGJvb2wgY2FuQmVKdW1w
VDQoY29uc3QgdWludDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJnZXQsIGJvb2wm
IG1heVRyaWdnZXJFcnJhdGEpCiAgICAgewotICAgICAgICBsaW5rSnVtcEFic29sdXRlKGluc3Ry
dWN0aW9uLCB0YXJnZXQpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCBy
ZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gRnJvbSBDb3J0ZXgt
QTggZXJyYXRhOgorICAgICAgICAvLyBJZiB0aGUgMzItYml0IFRodW1iLTIgYnJhbmNoIGluc3Ry
dWN0aW9uIHNwYW5zIHR3byA0S2lCIHJlZ2lvbnMgYW5kCisgICAgICAgIC8vIHRoZSB0YXJnZXQg
b2YgdGhlIGJyYW5jaCBmYWxscyB3aXRoaW4gdGhlIGZpcnN0IHJlZ2lvbiBpdCBpcworICAgICAg
ICAvLyBwb3NzaWJsZSBmb3IgdGhlIHByb2Nlc3NvciB0byBpbmNvcnJlY3RseSBkZXRlcm1pbmUg
dGhlIGJyYW5jaAorICAgICAgICAvLyBpbnN0cnVjdGlvbiwgYW5kIGl0IGlzIGFsc28gcG9zc2li
bGUgaW4gc29tZSBjYXNlcyBmb3IgdGhlIHByb2Nlc3NvcgorICAgICAgICAvLyB0byBlbnRlciBh
IGRlYWRsb2NrIHN0YXRlLgorICAgICAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gaXMgc3Bhbm5pbmcg
dHdvIHBhZ2VzIGlmIGl0IGVuZHMgYXQgYW4gYWRkcmVzcyBlbmRpbmcgMHgwMDIKKyAgICAgICAg
Ym9vbCBzcGFuc1R3bzRLID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlv
bikgJiAweGZmZikgPT0gMHgwMDIpOworICAgICAgICBtYXlUcmlnZ2VyRXJyYXRhID0gc3BhbnNU
d280SzsKKyAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBpZiB0aGUg
anVtcCBicmFuY2ggYmFjayBieSBbMy4uMHgxMDAyXSBieXRlcworICAgICAgICBib29sIHRhcmdl
dEluRmlyc3RQYWdlID0gKHJlbGF0aXZlID49IC0weDEwMDIpICYmIChyZWxhdGl2ZSA8IC0yKTsK
KyAgICAgICAgYm9vbCB3b3VsZFRyaWdnZXJBOEVycmF0YSA9IHNwYW5zVHdvNEsgJiYgdGFyZ2V0
SW5GaXJzdFBhZ2U7CisgICAgICAgIHJldHVybiAoKHJlbGF0aXZlIDw8IDcpID4+IDcpID09IHJl
bGF0aXZlICYmICF3b3VsZFRyaWdnZXJBOEVycmF0YTsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IHZvaWQgbGlua0p1bXBUNCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAg
ICB2b2lkIGxpbmtKdW1wVDEoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwg
dm9pZCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVw
IGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKICAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAg
ICAgICBBU1NFUlQoY2FuQmVKdW1wVDEoaW5zdHJ1Y3Rpb24sIHRhcmdldCkpOwogICAgICAgICAK
ICAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7Ci0gICAg
ICAgIGJvb2wgc2NyYXRjaDsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgICAg
ICBBU1NFUlQoY2FuQmVKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCwgc2NyYXRjaCkpOwotICAg
ICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhlIHNpZ24g
Yml0IGlzICdwZWN1bGlhcicuCi0gICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQotICAgICAgICAg
ICAgcmVsYXRpdmUgXj0gMHhDMDAwMDA7Ci0KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgYXBwZWFy
IHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIEFSTSBBUk0gKGJpZyBzdXJwcmlzZSksIGJ1dAorICAg
ICAgICAvLyBmb3IgT1BfQl9UMSB0aGUgYnJhbmNoIGRpc3BsYWNlbWVudCBlbmNvZGVkIGluIHRo
ZSBpbnN0cnVjdGlvbiBpcyAyIAorICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIGFjdHVhbCBkaXNw
bGFjZW1lbnQuCisgICAgICAgIHJlbGF0aXZlIC09IDI7CisgICAgICAgIAogICAgICAgICAvLyBB
bGwgYnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCiAgICAgICAgIEFT
U0VSVCghKHJlbGF0aXZlICYgMSkpOwotICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0
YSB8ICgocmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAw
MCkgPj4gMTIpOwotICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRp
dmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAo
KHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9C
X1QxIHwgKChjb25kICYgMHhmKSA8PCA4KSB8ICgocmVsYXRpdmUgJiAweDFmZSkgPj4gMSk7CiAg
ICAgfQotCisgICAgCiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXBUMih1aW50MTZfdCogaW5zdHJ1
Y3Rpb24sIHZvaWQqIHRhcmdldCkKICAgICB7CiAgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3Vs
ZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCkBAIC0yMDQ2
LDI0ICsyMTA1LDkwIEBAIHByaXZhdGU6CiAgICAgICAgIGluc3RydWN0aW9uWy0xXSA9IE9QX0Jf
VDIgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxp
bmtKdW1wVDMoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFy
Z2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBN
YWNyb0Fzc2VtYmxlciBsYXllci4gOi0oCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgYm9vbCBzY3JhdGNo
OworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVChjYW5CZUp1
bXBUMyhpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3JhdGNoKSk7CisgICAgICAgIAorICAgICAgICBp
bnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEFsbCBicmFuY2ggb2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5jZS4KKyAg
ICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CisgICAgICAgIGluc3RydWN0aW9uWy0yXSA9
IE9QX0JfVDNhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwKSA+PiAxMCkgfCAoKGNvbmQgJiAweGYp
IDw8IDYpIHwgKChyZWxhdGl2ZSAmIDB4M2YwMDApID4+IDEyKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25bLTFdID0gT1BfQl9UM2IgfCAoKHJlbGF0aXZlICYgMHg4MDAwMCkgPj4gOCkgfCAoKHJlbGF0
aXZlICYgMHg0MDAwMCkgPj4gNSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcFQ0KHVpbnQxNl90KiBpbnN0cnVjdGlvbiwg
dm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVw
IGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAg
ICAgICBib29sIHNjcmF0Y2g7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0Y2gpKTsKKyAg
ICAgICAgCisgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikp
OworICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhl
IHNpZ24gYml0IGlzICdwZWN1bGlhcicuCisgICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQorICAg
ICAgICAgICAgcmVsYXRpdmUgXj0gMHhDMDAwMDA7CisgICAgICAgIAorICAgICAgICAvLyBBbGwg
YnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCisgICAgICAgIEFTU0VS
VCghKHJlbGF0aXZlICYgMSkpOworICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8
ICgocmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkg
Pj4gMTIpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUg
JiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJl
bGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtDb25kaXRp
b25hbEp1bXBUNChDb25kaXRpb24gY29uZCwgdWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0
YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhl
IE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSggICAgICAgIAorICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAor
ICAgICAgICBpbnN0cnVjdGlvblstM10gPSBpZlRoZW5FbHNlKGNvbmQpIHwgT1BfSVQ7CisgICAg
ICAgIGxpbmtKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIGxpbmtCWCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAg
ICB7CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3Nl
bWJsZXIgbGF5ZXIuIDotKAorICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50
MTZfdCBKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiA9IEFSTVJlZ2lzdGVyczo6aXA7CisgICAgICAg
IEFSTVRodW1iSW1tZWRpYXRlIGxvMTYgPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihz
dGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSAr
IDEpKTsKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRpYXRl
OjptYWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Pih0YXJnZXQpID4+IDE2KSk7CisgICAgICAgIGluc3RydWN0aW9uWy01XSA9IHR3b1dvcmRP
cDVpNkltbTRSZWc0RW5jb2RlZEltbUZpcnN0KE9QX01PVl9pbW1fVDMsIGxvMTYpOworICAgICAg
ICBpbnN0cnVjdGlvblstNF0gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1TZWNvbmQo
SlVNUF9URU1QT1JBUllfUkVHSVNURVIsIGxvMTYpOworICAgICAgICBpbnN0cnVjdGlvblstM10g
PSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZULCBoaTE2KTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25bLTJdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tU2Vj
b25kKEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSLCBoaTE2KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25b
LTFdID0gT1BfQlggfCAoSlVNUF9URU1QT1JBUllfUkVHSVNURVIgPDwgMyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgbGlua0NvbmRpdGlvbmFsQlgoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBp
bnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMg
c2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOworICAgICAgICAKKyAgICAgICAgbGlua0JYKGluc3RydWN0aW9uLCB0YXJnZXQpOwor
ICAgICAgICBpbnN0cnVjdGlvblstNl0gPSBpZlRoZW5FbHNlKGNvbmQsIHRydWUsIHRydWUpIHwg
T1BfSVQ7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wQWJzb2x1dGUodWlu
dDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCiAgICAgewogICAgICAgICAvLyBGSU1Y
RTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSgKICAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOwotCisgICAgICAgIAogICAgICAgICBBU1NFUlQoKGlzTU9WX2ltbV9UMyhpbnN0cnVj
dGlvbiAtIDUpICYmIGlzTU9WVChpbnN0cnVjdGlvbiAtIDMpICYmIGlzQlgoaW5zdHJ1Y3Rpb24g
LSAxKSkKLSAgICAgICAgICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9Q
X1QyKGluc3RydWN0aW9uIC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKLQotICAgICAg
ICBpbnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkg
LSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgICAg
ICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9QX1QyKGluc3RydWN0aW9u
IC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wg
c2NyYXRjaDsKICAgICAgICAgaWYgKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNj
cmF0Y2gpKSB7Ci0gICAgICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJp
dHMgYmVsb3cgdGhlIHNpZ24gYml0IGlzICdwZWN1bGlhcicuCi0gICAgICAgICAgICBpZiAocmVs
YXRpdmUgPj0gMCkKLSAgICAgICAgICAgICAgICByZWxhdGl2ZSBePSAweEMwMDAwMDsKLQotICAg
ICAgICAgICAgLy8gQWxsIGJyYW5jaCBvZmZzZXRzIHNob3VsZCBiZSBhbiBldmVuIGRpc3RhbmNl
LgotICAgICAgICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CiAgICAgICAgICAgICAvLyBU
aGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLCBidXQgcmlnaHQgbm93IHB1dCB0
aGUgTk9QcyBmaXJzdCwgc2luY2UgaW4gdGhlCiAgICAgICAgICAgICAvLyBjYXNlIG9mIGFuIGNv
bmRpdGlvbmFsIGJyYW5jaCB0aGlzIHdpbGwgYmUgY29taW5nIGFmdGVyIGFuIElUVFQgcHJlZGlj
YXRpbmcgKnRocmVlKgogICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb25zISAgTG9va2luZyBiYWNr
d2FyZHMgdG8gbW9kaWZ5IHRoZSBJVFRUIHRvIGFuIElUIGlzIG5vdCBlYXN5LCBkdWUgdG8KQEAg
LTIwNzIsOCArMjE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNV0g
PSBPUF9OT1BfVDE7CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNF0gPSBPUF9OT1BfVDJhOwog
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bLTNdID0gT1BfTk9QX1QyYjsKLSAgICAgICAgICAgIGlu
c3RydWN0aW9uWy0yXSA9IE9QX0JfVDRhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwMCkgPj4gMTQp
IHwgKChyZWxhdGl2ZSAmIDB4M2ZmMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBpbnN0cnVjdGlv
blstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxh
dGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAg
ICAgICAgICAgbGlua0p1bXBUNChpbnN0cnVjdGlvbiwgdGFyZ2V0KTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90IEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSID0g
QVJNUmVnaXN0ZXJzOjppcDsKICAgICAgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGxvMTYgPSBB
Uk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSArIDEpKTsKQEAgLTIwODUsNyArMjIwOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CWCB8IChKVU1QX1RF
TVBPUkFSWV9SRUdJU1RFUiA8PCAzKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHN0
YXRpYyB1aW50MTZfdCB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdCh1aW50MTZf
dCBvcCwgQVJNVGh1bWJJbW1lZGlhdGUgaW1tKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wIHwg
KGltbS5tX3ZhbHVlLmkgPDwgMTApIHwgaW1tLm1fdmFsdWUuaW1tNDsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzUsMTIgKzIzNSwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHRhcmdldCA9IGxpbmtCYXNlICsganVtcHNU
b0xpbmtbaV0udG8oKSAtIG1fYXNzZW1ibGVyLT5leGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBzVG9M
aW5rW2ldLnRvKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKdW1wTGlua1R5cGUganVt
cExpbmtUeXBlID0gbV9hc3NlbWJsZXItPmNvbXB1dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwg
bGlua0Jhc2UgKyB3cml0ZVB0ciwgdGFyZ2V0KTsKLQotICAgICAgICAgICAgLy8gU3RlcCBiYWNr
IGluIHRoZSB3cml0ZSBzdHJlYW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBtX2Fzc2Vt
Ymxlci0+anVtcFNpemVEZWx0YShqdW1wTGlua1R5cGUpOwotICAgICAgICAgICAgaWYgKGRlbHRh
KSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVQdHIgLT0gZGVsdGE7Ci0gICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXItPnJlY29yZExpbmtPZmZzZXRzKGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRl
bHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQdHIpOworICAgICAgICAgICAgQVNTRVJUKGp1
bXBMaW5rVHlwZSAhPSBBUk12N0Fzc2VtYmxlcjo6TGlua0ludmFsaWQpOworICAgICAgICAgICAg
aWYgKGp1bXBMaW5rVHlwZSAhPSBBUk12N0Fzc2VtYmxlcjo6TGlua0ludmFsaWQpIHsKKyAgICAg
ICAgICAgICAgICAvLyBTdGVwIGJhY2sgaW4gdGhlIHdyaXRlIHN0cmVhbQorICAgICAgICAgICAg
ICAgIGludDMyX3QgZGVsdGEgPSBtX2Fzc2VtYmxlci0+anVtcFNpemVEZWx0YShqdW1wc1RvTGlu
a1tpXS50eXBlKCksIGp1bXBMaW5rVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7
CisgICAgICAgICAgICAgICAgICAgIHdyaXRlUHRyIC09IGRlbHRhOworICAgICAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci0+cmVjb3JkTGlua09mZnNldHMoanVtcHNUb0xpbmtbaV0uZnJvbSgp
IC0gZGVsdGEsIHJlYWRQdHIsIHJlYWRQdHIgLSB3cml0ZVB0cik7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAganVtcHNUb0xpbmtbaV0uc2V0RnJvbSh3cml0
ZVB0cik7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJN
djcgOiBwdWJsaWMgQWJzdHIKIAogcHVibGljOgogICAgIHR5cGVkZWYgQVJNdjdBc3NlbWJsZXI6
OkxpbmtSZWNvcmQgTGlua1JlY29yZDsKKyAgICB0eXBlZGVmIEFSTXY3QXNzZW1ibGVyOjpKdW1w
VHlwZSBKdW1wVHlwZTsKICAgICB0eXBlZGVmIEFSTXY3QXNzZW1ibGVyOjpKdW1wTGlua1R5cGUg
SnVtcExpbmtUeXBlOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJBUk12NygpCkBAIC01Nyw5ICs1OCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UoKSB7IG1faW5V
bmludGVycnVwdGVkU2VxdWVuY2UgPSBmYWxzZTsgfQogICAgIFZlY3RvcjxMaW5rUmVjb3JkPiYg
anVtcHNUb0xpbmsoKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wc1RvTGluaygpOyB9CiAgICAg
dm9pZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIudW5saW5rZWRDb2RlKCk7
IH0KKyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1bXBUeXBlLCBj
b25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4gbV9hc3NlbWJs
ZXIuY29tcHV0ZUp1bXBUeXBlKGp1bXBUeXBlLCBmcm9tLCB0byk7IH0KICAgICBKdW1wTGlua1R5
cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWludDhfdCogZnJv
bSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmNvbXB1dGVKdW1wVHlw
ZShyZWNvcmQsIGZyb20sIHRvKTsgfQogICAgIHZvaWQgcmVjb3JkTGlua09mZnNldHMoaW50MzJf
dCByZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGludDMyX3Qgb2Zmc2V0KSB7cmV0dXJu
IG1fYXNzZW1ibGVyLnJlY29yZExpbmtPZmZzZXRzKHJlZ2lvblN0YXJ0LCByZWdpb25FbmQsIG9m
ZnNldCk7IH0KLSAgICBpbnQganVtcFNpemVEZWx0YShKdW1wTGlua1R5cGUganVtcExpbmtUeXBl
KSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wU2l6ZURlbHRhKGp1bXBMaW5rVHlwZSk7IH0KKyAg
ICBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtUeXBlIGp1bXBM
aW5rVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcFNpemVEZWx0YShqdW1wVHlwZSwganVt
cExpbmtUeXBlKTsgfQogICAgIHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3Qq
IGZyb20sIHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5saW5rKHJlY29yZCwgZnJv
bSwgdG8pOyB9CiAKICAgICBzdHJ1Y3QgQXJtQWRkcmVzcyB7CkBAIC05ODYsMTQgKzk4OCwxNCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewotICAg
ICAgICBtX2Fzc2VtYmxlci5ieCh0YXJnZXQsIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBB
Uk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRp
dGlvbik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1
bXBGaXhlZCk7CiAgICAgfQogCiAgICAgLy8gQWRkcmVzcyBpcyBhIG1lbW9yeSBsb2NhdGlvbiBj
b250YWluaW5nIHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8KICAgICB2b2lkIGp1bXAoQWRkcmVzcyBh
ZGRyZXNzKQogICAgIHsKICAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIp
OwotICAgICAgICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0
ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1i
bGVyOjpKdW1wTm9Db25kaXRpb24pOworICAgICAgICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJl
Z2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKTsKICAgICB9CiAKIApAQCAtMTA4Miwy
OSArMTA4NCwyOSBAQCBwdWJsaWM6CiAgICAgQ2FsbCBuZWFyQ2FsbCgpCiAgICAgewogICAgICAg
ICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAg
ICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3
QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgICAgICBy
ZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJs
ZXI6Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQogCiAgICAgQ2FsbCBj
YWxsKCkKICAgICB7CiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRh
dGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0
YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSksIENhbGw6Okxpbmth
YmxlKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0
ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQog
CiAgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IENhbGwobV9hc3NlbWJsZXIuYmx4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6
ZSksIENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgodGFy
Z2V0LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6Tm9uZSk7CiAgICAgfQogCiAg
ICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIGxvYWQzMihhZGRy
ZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIu
Ymx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxs
OjpOb25lKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVn
aXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpOb25lKTsKICAgICB9CiAK
ICAgICB2b2lkIHJldCgpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5ieChsaW5rUmVnaXN0
ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpOworICAgICAgICBtX2Fzc2VtYmxlci5i
eChsaW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOwogICAgIH0KIAogICAg
IHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTIwNCw3ICsxMjA2LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgbGluay4KICAgICAg
ICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0g
ICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3
QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgICAgIHJldHVy
biBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpK
dW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQpAQCAtMTIyOCwxNCArMTIzMCwxNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlSnVtcCgpCiAgICAgewogICAgICAg
ICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAg
ICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIGluVW5pbnRlcnJ1
cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3Nl
bWJsZXI6Okp1bXBOb0NvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChk
YXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXBOb0NvbmRpdGlvbiA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25k
aXRpb24pOwogICAgIH0KIAogICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUJyYW5jaChB
Uk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5pdChjb25kLCB0cnVlLCB0cnVlKTsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJ
bW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5i
eChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3Nl
bWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBjb25k
KTsKKyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIGluVW5p
bnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcENvbmRp
dGlvbiA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBjb25kKTsKICAgICB9CiAgICAg
QVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlQnJhbmNoKENvbmRpdGlvbiBjb25kKSB7IHJldHVy
biBtYWtlQnJhbmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQogICAgIEFSTXY3QXNzZW1ibGVy
OjpKbXBTcmMgbWFrZUJyYW5jaChEb3VibGVDb25kaXRpb24gY29uZCkgeyByZXR1cm4gbWFrZUJy
YW5jaChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0K
</data>
<flag name="review"
          id="59964"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70443</attachid>
            <date>2010-10-11 10:19:13 -0700</date>
            <delta_ts>2010-10-11 10:26:08 -0700</delta_ts>
            <desc>Add more descriptive ChangeLog entry</desc>
            <filename>47384.txt</filename>
            <type>text/plain</type>
            <size>31320</size>
            <attacher name="David Goodwin">david_goodwin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MzUxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMTAtMDcgIERhdmlkIEdv
b2R3aW4gIDxkYXZpZF9nb29kd2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUk12NyBKSVQgc2hvdWxkIGdlbmVyYXRlZCBjb25k
aXRpb25hbCBicmFuY2hlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NAorCisJVXNlIGRpZmZlcmVudCBqdW1wIHBhZGRp
bmcgc2l6ZXMgZm9yIGNvbmRpdGlvbmFsIGFuZCB1bmNvbmRpdGlvbmFsCisJanVtcHMgKDEyIGJ5
dGVzIGFuZCAxMCBieXRlcyByZXNwZWN0aXZlbHkpLiBUaGlzIGFsbG93cyB0aGUgSklUIHRvCisJ
aW5jbHVkZSB0aGUgSVQgaW5zdHJ1Y3Rpb24gYXMgcGFydCBvZiB0aGUgY29uZGl0aW9uYWwganVt
cCBzZXF1ZW5jZQorCXdoaWNoIGluIHR1cm4gYWxsb3dzIGl0IHRvIG9wdGltaXplIGF3YXkgdGhl
IElUIHVzaW5nIGFuIEFSTXY3IAorCWNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbi4gVXNl
IDItYnl0ZSBCKFQxKSBhbmQgNC1ieXRlIEIoVDMpIGZvcgorCWNvbmRpdGlvbmFsIGJyYW5jaGVz
IHdoZW4gZGlzcGxhY2VtZW50IGlzIGluIHJhbmdlLiBBbHNvIHVzZSBJVC9CKFQ0KQorCWZvciBj
b25kaXRpb25hbCBicmFuY2ggd2hlbiBkaXNwbGFjZW1lbnQgZG9lcyBub3QgZml0IGluIEIoVDMp
LgorCisJRm9yIHVuY29uZGl0aW9uYWwganVtcCwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uIG9wdGlv
bnMgYXJlOgorCUIoVDIpLCBCKFQ0KSwgTU9WVy9NT1ZUL0JYLiBGb3IgY29uZGl0aW9uYWwganVt
cCwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uCisJb3B0aW9ucyBhcmU6IEIoVDEpLCBCKFQzKSwgSVQv
QihUNCksIElUVFQvTU9WVy9NT1ZUL0JYLgorCisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OkptcFNyYzo6Sm1wU3JjKToKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6OmlmVGhlbkVsc2UpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6anVtcFNpemVEZWx0YSk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjb21wdXRl
SnVtcFR5cGUpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6bGluayk6CisgICAgICAg
IChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjYW5CZUp1bXBUMSk6CisgICAgICAgIChKU0M6OkFSTXY3
QXNzZW1ibGVyOjpjYW5CZUp1bXBUMyk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpj
YW5CZUp1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcFQxKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wVDMpOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1i
bGVyOjpsaW5rQ29uZGl0aW9uYWxKdW1wVDQpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6bGlua0JYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtDb25kaXRpb25h
bEJYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wQWJzb2x1dGUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpjb21wdXRlSnVtcFR5cGUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpqdW1wU2l6ZURlbHRhKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNdjc6Om5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk12Nzo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJldCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bWFrZUp1bXApOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjptYWtlQnJhbmNoKToKKwogMjAxMC0xMC0wNiAgQ2hyaXMg
RXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBM
ZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmNw
cAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3Nl
bWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgaW50IEFSTXY3QXNzZW1ibGVyOjpKdW1wU2l6ZXNbXSA9IHsgMHhmZmZmZmZm
Ziwgc2l6ZW9mKHVpbnQxNl90KSwgc2l6ZW9mKHVpbnQxNl90KSwKLSAgICAyICogc2l6ZW9mKHVp
bnQxNl90KSwgMiAqIHNpemVvZih1aW50MTZfdCksIDUgKiBzaXplb2YodWludDE2X3QpIH07Cisg
ICAgMiAqIHNpemVvZih1aW50MTZfdCksIDIgKiBzaXplb2YodWludDE2X3QpLCAzICogc2l6ZW9m
KHVpbnQxNl90KSwgNSAqIHNpemVvZih1aW50MTZfdCksIDYgKiBzaXplb2YodWludDE2X3QpIH07
Citjb25zdCBpbnQgQVJNdjdBc3NlbWJsZXI6Okp1bXBQYWRkaW5nU2l6ZXNbXSA9IHsgMCwgNSAq
IHNpemVvZih1aW50MTZfdCksIDYgKiBzaXplb2YodWludDE2X3QpLAorICAgIDUgKiBzaXplb2Yo
dWludDE2X3QpLCA2ICogc2l6ZW9mKHVpbnQxNl90KSB9OwogCiB9CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lvbiA2OTMzMykKKysrIEph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NzgsMTEgKzQ3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIENvbmRpdGlvbkludmFsaWQKICAg
ICB9IENvbmRpdGlvbjsKIAotICAgIGVudW0gSnVtcFR5cGUgeyBKdW1wTm9Db25kaXRpb24sIEp1
bXBDb25kaXRpb24sIEp1bXBGdWxsU2l6ZSB9OwotICAgIGVudW0gSnVtcExpbmtUeXBlIHsgTGlu
a0ludmFsaWQsIExpbmtKdW1wVDIsIExpbmtDb25kaXRpb25hbEp1bXBUMiwgCi0gICAgICAgIExp
bmtKdW1wVDQsIExpbmtDb25kaXRpb25hbEp1bXBUNCwgTGlua0JYLCBKdW1wVHlwZUNvdW50IH07
Ci0gICAgc3RhdGljIGNvbnN0IGludCBKdW1wU2l6ZXNbSnVtcFR5cGVDb3VudF07Ci0gICAgZW51
bSB7IEp1bXBQYWRkaW5nU2l6ZSA9IDUgKiBzaXplb2YodWludDE2X3QpIH07CisgICAgZW51bSBK
dW1wVHlwZSB7IEp1bXBGaXhlZCwgSnVtcE5vQ29uZGl0aW9uLCBKdW1wQ29uZGl0aW9uLCBQYXRj
aGFibGVKdW1wTm9Db25kaXRpb24sIFBhdGNoYWJsZUp1bXBDb25kaXRpb24sIEp1bXBUeXBlQ291
bnQgfTsKKyAgICBlbnVtIEp1bXBMaW5rVHlwZSB7IExpbmtJbnZhbGlkLCBMaW5rSnVtcFQxLCBM
aW5rSnVtcFQyLCBMaW5rSnVtcFQzLAorICAgICAgICBMaW5rSnVtcFQ0LCBMaW5rQ29uZGl0aW9u
YWxKdW1wVDQsIExpbmtCWCwgTGlua0NvbmRpdGlvbmFsQlgsIEp1bXBMaW5rVHlwZUNvdW50IH07
CisgICAgc3RhdGljIGNvbnN0IGludCBKdW1wU2l6ZXNbSnVtcExpbmtUeXBlQ291bnRdOworICAg
IHN0YXRpYyBjb25zdCBpbnQgSnVtcFBhZGRpbmdTaXplc1tKdW1wVHlwZUNvdW50XTsKICAgICBj
bGFzcyBMaW5rUmVjb3JkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExpbmtSZWNvcmQoaW50cHRy
X3QgZnJvbSwgaW50cHRyX3QgdG8sIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBjb25kaXRpb24p
CkBAIC01MDMsOCArNTAzLDggQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIGludHB0
cl90IG1fZnJvbSA6IDMxOwogICAgICAgICBpbnRwdHJfdCBtX3RvIDogMzE7Ci0gICAgICAgIEp1
bXBUeXBlIG1fdHlwZSA6IDI7Ci0gICAgICAgIEp1bXBMaW5rVHlwZSBtX2xpbmtUeXBlIDogMzsK
KyAgICAgICAgSnVtcFR5cGUgbV90eXBlIDogMzsKKyAgICAgICAgSnVtcExpbmtUeXBlIG1fbGlu
a1R5cGUgOiA0OwogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb24gOiAxNjsKICAgICB9Owog
ICAgIApAQCAtNTI0LDcgKzUyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbV9jb25kaXRp
b24oQ29uZGl0aW9uSW52YWxpZCkKICAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gSnVtcENvbmRpdGlvbik7CisgICAgICAg
ICAgICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8fCBtX3R5cGUgPT0gSnVtcE5vQ29uZGl0
aW9uIHx8IG1fdHlwZSA9PSBQYXRjaGFibGVKdW1wTm9Db25kaXRpb24pOwogICAgICAgICB9CiAK
ICAgICAgICAgSm1wU3JjKGludCBvZmZzZXQsIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBjb25k
aXRpb24pCkBAIC01MzIsNyArNTMyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX2NvbmRp
dGlvbihjb25kaXRpb24pCiAgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBDb25kaXRpb24gfHwgbV90eXBlID09IEp1
bXBGdWxsU2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8fCBt
X3R5cGUgPT0gSnVtcENvbmRpdGlvbiB8fCBtX3R5cGUgPT0gUGF0Y2hhYmxlSnVtcENvbmRpdGlv
bik7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgbV9vZmZzZXQ7CkBAIC02MjksNiArNjI5LDcg
QEAgcHJpdmF0ZToKICAgICB9IE9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAg
ICAgT1BfQl9UMSAgICAgICAgID0gMHhEMDAwLAogICAgICAgICBPUF9CX1QyICAgICAgICAgPSAw
eEUwMDAsCiAgICAgICAgIE9QX0FORF9yZWdfVDIgICA9IDB4RUEwMCwKICAgICAgICAgT1BfVFNU
X3JlZ19UMiAgID0gMHhFQTEwLApAQCAtNjU3LDYgKzY1OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IE9QX1ZDVlRfRlBJVkZQICA9IDB4RUVCMCwKICAgICAgICAgT1BfVk1PVl9JTU1fVDIgID0gMHhF
RUIwLAogICAgICAgICBPUF9WTVJTICAgICAgICAgPSAweEVFQjAsCisgICAgICAgIE9QX0JfVDNh
ICAgICAgICA9IDB4RjAwMCwKICAgICAgICAgT1BfQl9UNGEgICAgICAgID0gMHhGMDAwLAogICAg
ICAgICBPUF9BTkRfaW1tX1QxICAgPSAweEYwMDAsCiAgICAgICAgIE9QX1RTVF9pbW0gICAgICA9
IDB4RjAxMCwKQEAgLTcwOSw2ICs3MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBPUF9WQ1ZUX0ZQ
SVZGUGIgPSAweDBBNDAsCiAgICAgICAgIE9QX1ZTVUJfVDJiICAgICA9IDB4MEE0MCwKICAgICAg
ICAgT1BfTk9QX1QyYiAgICAgID0gMHg4MDAwLAorICAgICAgICBPUF9CX1QzYiAgICAgICAgPSAw
eDgwMDAsCiAgICAgICAgIE9QX0JfVDRiICAgICAgICA9IDB4OTAwMCwKICAgICB9IE9wY29kZUlE
MjsKIApAQCAtNzQ1LDcgKzc0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB8IChpZlRoZW5F
bHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDNpZikgPDwgMikKICAgICAgICAgICAgIHwg
KGlmVGhlbkVsc2VDb25kaXRpb25CaXQoY29uZGl0aW9uLCBpbnN0NGlmKSA8PCAxKQogICAgICAg
ICAgICAgfCAxOwotICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkgfHwg
KG1hc2sgJiAobWFzayAtIDEpKSk7CisgICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRp
dGlvbkFMKSB8fCAoKG1hc2sgJiAobWFzayAtIDEpKSA9PSAwKSk7CiAgICAgICAgIHJldHVybiAo
Y29uZGl0aW9uIDw8IDQpIHwgbWFzazsKICAgICB9CiAgICAgdWludDhfdCBpZlRoZW5FbHNlKENv
bmRpdGlvbiBjb25kaXRpb24sIGJvb2wgaW5zdDJpZiwgYm9vbCBpbnN0M2lmKQpAQCAtNzUzLDIx
ICs3NTYsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IG1hc2sgPSAoaWZUaGVuRWxzZUNvbmRp
dGlvbkJpdChjb25kaXRpb24sIGluc3QyaWYpIDw8IDMpCiAgICAgICAgICAgICB8IChpZlRoZW5F
bHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDNpZikgPDwgMikKICAgICAgICAgICAgIHwg
MjsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29uZGl0aW9uQUwpIHx8IChtYXNrICYg
KG1hc2sgLSAxKSkpOworICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkg
fHwgKChtYXNrICYgKG1hc2sgLSAxKSkgPT0gMCkpOwogICAgICAgICByZXR1cm4gKGNvbmRpdGlv
biA8PCA0KSB8IG1hc2s7CiAgICAgfQogICAgIHVpbnQ4X3QgaWZUaGVuRWxzZShDb25kaXRpb24g
Y29uZGl0aW9uLCBib29sIGluc3QyaWYpCiAgICAgewogICAgICAgICBpbnQgbWFzayA9IChpZlRo
ZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDJpZikgPDwgMykKICAgICAgICAgICAg
IHwgNDsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29uZGl0aW9uQUwpIHx8IChtYXNr
ICYgKG1hc2sgLSAxKSkpOworICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25B
TCkgfHwgKChtYXNrICYgKG1hc2sgLSAxKSkgPT0gMCkpOwogICAgICAgICByZXR1cm4gKGNvbmRp
dGlvbiA8PCA0KSB8IG1hc2s7CiAgICAgfQogCiAgICAgdWludDhfdCBpZlRoZW5FbHNlKENvbmRp
dGlvbiBjb25kaXRpb24pCiAgICAgewogICAgICAgICBpbnQgbWFzayA9IDg7Ci0gICAgICAgIEFT
U0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFMKSB8fCAobWFzayAmIChtYXNrIC0gMSkpKTsK
ICAgICAgICAgcmV0dXJuIChjb25kaXRpb24gPDwgNCkgfCBtYXNrOwogICAgIH0KIApAQCAtMTY2
NCw3ICsxNjY2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dCo+KG1fZm9ybWF0dGVyLmRhdGEoKSlbbG9jYXRpb24gLyBzaXplb2YoaW50MzJfdCkgLSAxXTsK
ICAgICB9CiAgICAgCi0gICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcExpbmtUeXBlIGp1bXBMaW5r
VHlwZSkgeyByZXR1cm4gSnVtcFBhZGRpbmdTaXplIC0gSnVtcFNpemVzW2p1bXBMaW5rVHlwZV07
IH0KKyAgICBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtUeXBl
IGp1bXBMaW5rVHlwZSkgeyByZXR1cm4gSnVtcFBhZGRpbmdTaXplc1tqdW1wVHlwZV0gLSBKdW1w
U2l6ZXNbanVtcExpbmtUeXBlXTsgfQogICAgIAogICAgIC8vIEFzc2VtYmxlciBhZG1pbiBtZXRo
b2RzOgogCkBAIC0xNjc4LDM5ICsxNjgwLDY1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGEu
ZnJvbSgpIDwgYi5mcm9tKCk7CiAgICAgfQogCi0gICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1w
VHlwZShMaW5rUmVjb3JkJiByZWNvcmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4
X3QqIHRvKQorICAgIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoSnVtcFR5cGUganVtcFR5
cGUsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQogICAgIHsKLSAgICAg
ICAgaWYgKHJlY29yZC50eXBlKCkgPj0gSnVtcEZ1bGxTaXplKSB7Ci0gICAgICAgICAgICByZWNv
cmQuc2V0TGlua1R5cGUoTGlua0JYKTsKKyAgICAgICAgaWYgKGp1bXBUeXBlID09IEp1bXBGaXhl
ZCkKKyAgICAgICAgICAgIHJldHVybiBMaW5rSW52YWxpZDsKKyAgICAgICAgCisgICAgICAgIC8v
IGZvciBwYXRjaGFibGUganVtcCB3ZSBtdXN0IGxlYXZlIHNwYWNlIGZvciB0aGUgbG9uZ2VzdCBj
b2RlIHNlcXVlbmNlCisgICAgICAgIGlmIChqdW1wVHlwZSA9PSBQYXRjaGFibGVKdW1wTm9Db25k
aXRpb24pCiAgICAgICAgICAgICByZXR1cm4gTGlua0JYOwotICAgICAgICB9Ci0gICAgICAgIGNv
bnN0IHVpbnQxNl90KiBqdW1wVDJMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDE2X3QqPihmcm9tICAtIChKdW1wUGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUMl0p
KTsKLSAgICAgICAgaWYgKGNhbkJlSnVtcFQyKGp1bXBUMkxvY2F0aW9uLCB0bykpIHsKLSAgICAg
ICAgICAgIGlmIChyZWNvcmQudHlwZSgpID09IEp1bXBDb25kaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0NvbmRpdGlvbmFsSnVtcFQyKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsSnVtcFQyOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtKdW1wVDIpOwotICAgICAgICAgICAgcmV0
dXJuIExpbmtKdW1wVDI7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGp1bXBUeXBlID09IFBhdGNo
YWJsZUp1bXBDb25kaXRpb24pCisgICAgICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsQlg7
CisgICAgICAgIAorICAgICAgICBjb25zdCBpbnQgcGFkZGluZ1NpemUgPSBKdW1wUGFkZGluZ1Np
emVzW2p1bXBUeXBlXTsKICAgICAgICAgYm9vbCBtYXlUcmlnZ2VyRXJyYXRhID0gZmFsc2U7Ci0g
ICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDRMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDE2X3QqPihmcm9tICAtIChKdW1wUGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlu
a0p1bXBUNF0pKTsKLSAgICAgICAgaWYgKCFjYW5CZUp1bXBUNChqdW1wVDRMb2NhdGlvbiwgdG8s
IG1heVRyaWdnZXJFcnJhdGEpKSB7Ci0gICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlu
a0JYKTsKLSAgICAgICAgICAgIHJldHVybiBMaW5rQlg7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1heVRyaWdnZXJFcnJhdGEpIHsKLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5r
QlgpOworICAgICAgICAKKyAgICAgICAgaWYgKGp1bXBUeXBlID09IEp1bXBDb25kaXRpb24pIHsK
KyAgICAgICAgICAgIC8vIDItYnl0ZSBjb25kaXRpb25hbCBUMQorICAgICAgICAgICAgY29uc3Qg
dWludDE2X3QqIGp1bXBUMUxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZf
dCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUMV0pKTsKKyAgICAg
ICAgICAgIGlmIChjYW5CZUp1bXBUMShqdW1wVDFMb2NhdGlvbiwgdG8pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBMaW5rSnVtcFQxOworICAgICAgICAgICAgLy8gNC1ieXRlIGNvbmRpdGlvbmFs
IFQzCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQzTG9jYXRpb24gPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAtIChwYWRkaW5nU2l6ZSAtIEp1bXBTaXpl
c1tMaW5rSnVtcFQzXSkpOworICAgICAgICAgICAgaWYgKGNhbkJlSnVtcFQzKGp1bXBUM0xvY2F0
aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0YSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1heVRy
aWdnZXJFcnJhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcFQzOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gNC1ieXRlIGNvbmRpdGlvbmFsIFQ0IHdpdGggSVQK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBjb25kaXRpb25hbEp1bXBUNExvY2F0aW9uID0g
CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAtIChw
YWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rQ29uZGl0aW9uYWxKdW1wVDRdKSk7CisgICAgICAg
ICAgICBpZiAoY2FuQmVKdW1wVDQoY29uZGl0aW9uYWxKdW1wVDRMb2NhdGlvbiwgdG8sIG1heVRy
aWdnZXJFcnJhdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXlUcmlnZ2VyRXJyYXRhKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsSnVtcFQ0OworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gMi1ieXRlIHVuY29uZGl0
aW9uYWwgVDIKKyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDJMb2NhdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0gSnVt
cFNpemVzW0xpbmtKdW1wVDJdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVKdW1wVDIoanVtcFQy
TG9jYXRpb24sIHRvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUMjsKKyAgICAg
ICAgICAgIC8vIDQtYnl0ZSB1bmNvbmRpdGlvbmFsIFQ0CisgICAgICAgICAgICBjb25zdCB1aW50
MTZfdCoganVtcFQ0TG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4o
ZnJvbSAtIChwYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rSnVtcFQ0XSkpOworICAgICAgICAg
ICAgaWYgKGNhbkJlSnVtcFQ0KGp1bXBUNExvY2F0aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0YSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1heVRyaWdnZXJFcnJhdGEpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBMaW5rSnVtcFQ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyB1c2UgbG9uZyBqdW1wIHNlcXVlbmNlCiAgICAgICAgICAgICByZXR1cm4g
TGlua0JYOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZWNvcmQudHlwZSgpID09IEp1bXBDb25k
aXRpb24pIHsKLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rQ29uZGl0aW9uYWxK
dW1wVDQpOwotICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEp1bXBUNDsKLSAgICAg
ICAgfQotICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0p1bXBUNCk7Ci0gICAgICAgIHJl
dHVybiBMaW5rSnVtcFQ0OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGp1bXBUeXBlID09IEp1
bXBDb25kaXRpb24pOworICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsQlg7CiAgICAgfQot
CisgICAgCisgICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShMaW5rUmVjb3JkJiByZWNv
cmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQorICAgIHsKKyAgICAg
ICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gY29tcHV0ZUp1bXBUeXBlKHJlY29yZC50eXBlKCks
IGZyb20sIHRvKTsKKyAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKGxpbmtUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIGxpbmtUeXBlOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlY29yZExpbmtPZmZz
ZXRzKGludDMyX3QgcmVnaW9uU3RhcnQsIGludDMyX3QgcmVnaW9uRW5kLCBpbnQzMl90IG9mZnNl
dCkKICAgICB7CiAgICAgICAgIGludDMyX3QgcHRyID0gcmVnaW9uU3RhcnQgLyBzaXplb2YoaW50
MzJfdCk7CkBAIC0xNzI4LDIxICsxNzU2LDI1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGluayhM
aW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKQogICAgIHsKLSAg
ICAgICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gcmVjb3JkLmxpbmtUeXBlKCk7Ci0gICAgICAg
IEFTU0VSVChsaW5rVHlwZSAhPSBMaW5rSW52YWxpZCk7Ci0gICAgICAgIGlmICgobGlua1R5cGUg
PT0gTGlua0NvbmRpdGlvbmFsSnVtcFQyKSB8fCAobGlua1R5cGUgPT0gTGlua0NvbmRpdGlvbmFs
SnVtcFQ0KSkgewotICAgICAgICAgICAgdWludDE2X3QqIGl0dHRMb2NhdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tIC0gSnVtcFNpemVzW2xpbmtUeXBlXSAtIDIpOwotICAg
ICAgICAgICAgaXR0dExvY2F0aW9uWzBdID0gaWZUaGVuRWxzZShyZWNvcmQuY29uZGl0aW9uKCkp
IHwgT1BfSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChsaW5rVHlwZSkgeworICAgICAg
ICBzd2l0Y2ggKHJlY29yZC5saW5rVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGlua0p1bXBUMToK
KyAgICAgICAgICAgIGxpbmtKdW1wVDEocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9j
YXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExpbmtKdW1wVDI6Ci0gICAgICAgIGNhc2UgTGlua0NvbmRpdGlvbmFsSnVtcFQyOgogICAg
ICAgICAgICAgbGlua0p1bXBUMihyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRv
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtKdW1wVDM6CisgICAgICAg
ICAgICBsaW5rSnVtcFQzKHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaW5r
SnVtcFQ0OgotICAgICAgICBjYXNlIExpbmtDb25kaXRpb25hbEp1bXBUNDoKICAgICAgICAgICAg
IGxpbmtKdW1wVDQocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxKdW1wVDQ6CisgICAg
ICAgICAgICBsaW5rQ29uZGl0aW9uYWxKdW1wVDQocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVy
cHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExpbmtDb25kaXRpb25hbEJYOgorICAgICAgICAgICAgbGlua0NvbmRpdGlvbmFs
QlgocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSks
IHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtCWDoKICAgICAgICAg
ICAgIGxpbmtCWChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTk2OSw2ICsyMDAxLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiAoaW5zdHJ1Y3Rpb25bMF0gPT0gT1BfTk9QX1QyYSkgJiYgKGluc3RydWN0aW9uWzFdID09
IE9QX05PUF9UMmIpOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbkJlSnVtcFQxKGNvbnN0
IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkp
OworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYg
MSkpOworICAgICAgICAKKyAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Pih0YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry
dWN0aW9uKSk7CisgICAgICAgIC8vIEl0IGRvZXMgbm90IGFwcGVhciB0byBiZSBkb2N1bWVudGVk
IGluIHRoZSBBUk0gQVJNIChiaWcgc3VycHJpc2UpLCBidXQKKyAgICAgICAgLy8gZm9yIE9QX0Jf
VDEgdGhlIGJyYW5jaCBkaXNwbGFjZW1lbnQgZW5jb2RlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gaXMg
MiAKKyAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBhY3R1YWwgZGlzcGxhY2VtZW50LgorICAgICAg
ICByZWxhdGl2ZSAtPSAyOworICAgICAgICByZXR1cm4gKChyZWxhdGl2ZSA8PCAyMykgPj4gMjMp
ID09IHJlbGF0aXZlOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgYm9vbCBjYW5CZUp1bXBUMihj
b25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZvaWQqIHRhcmdldCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAm
IDEpKTsKQEAgLTE5ODIsNyArMjAyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAoKHJl
bGF0aXZlIDw8IDIwKSA+PiAyMCkgPT0gcmVsYXRpdmU7CiAgICAgfQogICAgIAotICAgIHN0YXRp
YyBib29sIGNhbkJlSnVtcFQ0KGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9p
ZCogdGFyZ2V0LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQorICAgIHN0YXRpYyBib29sIGNhbkJl
SnVtcFQzKGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0LCBi
b29sJiBtYXlUcmlnZ2VyRXJyYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOwpAQCAtMjAwMCwzNCArMjA0
NSw0OCBAQCBwcml2YXRlOgogICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGluIHRoZSBmaXJzdCBw
YWdlIGlmIHRoZSBqdW1wIGJyYW5jaCBiYWNrIGJ5IFszLi4weDEwMDJdIGJ5dGVzCiAgICAgICAg
IGJvb2wgdGFyZ2V0SW5GaXJzdFBhZ2UgPSAocmVsYXRpdmUgPj0gLTB4MTAwMikgJiYgKHJlbGF0
aXZlIDwgLTIpOwogICAgICAgICBib29sIHdvdWxkVHJpZ2dlckE4RXJyYXRhID0gc3BhbnNUd280
SyAmJiB0YXJnZXRJbkZpcnN0UGFnZTsKLSAgICAgICAgcmV0dXJuICgocmVsYXRpdmUgPDwgNykg
Pj4gNykgPT0gcmVsYXRpdmUgJiYgIXdvdWxkVHJpZ2dlckE4RXJyYXRhOworICAgICAgICByZXR1
cm4gKChyZWxhdGl2ZSA8PCAxMSkgPj4gMTEpID09IHJlbGF0aXZlICYmICF3b3VsZFRyaWdnZXJB
OEVycmF0YTsKICAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBsaW5rQlgodWludDE2X3QqIGluc3Ry
dWN0aW9uLCB2b2lkKiB0YXJnZXQpCisgICAgCisgICAgc3RhdGljIGJvb2wgY2FuQmVKdW1wVDQo
Y29uc3QgdWludDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJnZXQsIGJvb2wmIG1h
eVRyaWdnZXJFcnJhdGEpCiAgICAgewotICAgICAgICBsaW5rSnVtcEFic29sdXRlKGluc3RydWN0
aW9uLCB0YXJnZXQpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCByZWxh
dGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gRnJvbSBDb3J0ZXgtQTgg
ZXJyYXRhOgorICAgICAgICAvLyBJZiB0aGUgMzItYml0IFRodW1iLTIgYnJhbmNoIGluc3RydWN0
aW9uIHNwYW5zIHR3byA0S2lCIHJlZ2lvbnMgYW5kCisgICAgICAgIC8vIHRoZSB0YXJnZXQgb2Yg
dGhlIGJyYW5jaCBmYWxscyB3aXRoaW4gdGhlIGZpcnN0IHJlZ2lvbiBpdCBpcworICAgICAgICAv
LyBwb3NzaWJsZSBmb3IgdGhlIHByb2Nlc3NvciB0byBpbmNvcnJlY3RseSBkZXRlcm1pbmUgdGhl
IGJyYW5jaAorICAgICAgICAvLyBpbnN0cnVjdGlvbiwgYW5kIGl0IGlzIGFsc28gcG9zc2libGUg
aW4gc29tZSBjYXNlcyBmb3IgdGhlIHByb2Nlc3NvcgorICAgICAgICAvLyB0byBlbnRlciBhIGRl
YWRsb2NrIHN0YXRlLgorICAgICAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gaXMgc3Bhbm5pbmcgdHdv
IHBhZ2VzIGlmIGl0IGVuZHMgYXQgYW4gYWRkcmVzcyBlbmRpbmcgMHgwMDIKKyAgICAgICAgYm9v
bCBzcGFuc1R3bzRLID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikg
JiAweGZmZikgPT0gMHgwMDIpOworICAgICAgICBtYXlUcmlnZ2VyRXJyYXRhID0gc3BhbnNUd280
SzsKKyAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBpZiB0aGUganVt
cCBicmFuY2ggYmFjayBieSBbMy4uMHgxMDAyXSBieXRlcworICAgICAgICBib29sIHRhcmdldElu
Rmlyc3RQYWdlID0gKHJlbGF0aXZlID49IC0weDEwMDIpICYmIChyZWxhdGl2ZSA8IC0yKTsKKyAg
ICAgICAgYm9vbCB3b3VsZFRyaWdnZXJBOEVycmF0YSA9IHNwYW5zVHdvNEsgJiYgdGFyZ2V0SW5G
aXJzdFBhZ2U7CisgICAgICAgIHJldHVybiAoKHJlbGF0aXZlIDw8IDcpID4+IDcpID09IHJlbGF0
aXZlICYmICF3b3VsZFRyaWdnZXJBOEVycmF0YTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZv
aWQgbGlua0p1bXBUNCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB2
b2lkIGxpbmtKdW1wVDEoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9p
ZCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGlu
IHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKICAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAg
ICBBU1NFUlQoY2FuQmVKdW1wVDEoaW5zdHJ1Y3Rpb24sIHRhcmdldCkpOwogICAgICAgICAKICAg
ICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJn
ZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7Ci0gICAgICAg
IGJvb2wgc2NyYXRjaDsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgICAgICBB
U1NFUlQoY2FuQmVKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCwgc2NyYXRjaCkpOwotICAgICAg
ICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhlIHNpZ24gYml0
IGlzICdwZWN1bGlhcicuCi0gICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQotICAgICAgICAgICAg
cmVsYXRpdmUgXj0gMHhDMDAwMDA7Ci0KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgYXBwZWFyIHRv
IGJlIGRvY3VtZW50ZWQgaW4gdGhlIEFSTSBBUk0gKGJpZyBzdXJwcmlzZSksIGJ1dAorICAgICAg
ICAvLyBmb3IgT1BfQl9UMSB0aGUgYnJhbmNoIGRpc3BsYWNlbWVudCBlbmNvZGVkIGluIHRoZSBp
bnN0cnVjdGlvbiBpcyAyIAorICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIGFjdHVhbCBkaXNwbGFj
ZW1lbnQuCisgICAgICAgIHJlbGF0aXZlIC09IDI7CisgICAgICAgIAogICAgICAgICAvLyBBbGwg
YnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCiAgICAgICAgIEFTU0VS
VCghKHJlbGF0aXZlICYgMSkpOwotICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8
ICgocmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkg
Pj4gMTIpOwotICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUg
JiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJl
bGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Qx
IHwgKChjb25kICYgMHhmKSA8PCA4KSB8ICgocmVsYXRpdmUgJiAweDFmZSkgPj4gMSk7CiAgICAg
fQotCisgICAgCiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXBUMih1aW50MTZfdCogaW5zdHJ1Y3Rp
b24sIHZvaWQqIHRhcmdldCkKICAgICB7CiAgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBi
ZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCkBAIC0yMDQ2LDI0
ICsyMTA1LDkwIEBAIHByaXZhdGU6CiAgICAgICAgIGluc3RydWN0aW9uWy0xXSA9IE9QX0JfVDIg
fCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxpbmtK
dW1wVDMoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0
KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBNYWNy
b0Fzc2VtYmxlciBsYXllci4gOi0oCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgYm9vbCBzY3JhdGNoOwor
ICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVChjYW5CZUp1bXBU
MyhpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3JhdGNoKSk7CisgICAgICAgIAorICAgICAgICBpbnRw
dHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEFsbCBicmFuY2ggb2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5jZS4KKyAgICAg
ICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CisgICAgICAgIGluc3RydWN0aW9uWy0yXSA9IE9Q
X0JfVDNhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwKSA+PiAxMCkgfCAoKGNvbmQgJiAweGYpIDw8
IDYpIHwgKChyZWxhdGl2ZSAmIDB4M2YwMDApID4+IDEyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25b
LTFdID0gT1BfQl9UM2IgfCAoKHJlbGF0aXZlICYgMHg4MDAwMCkgPj4gOCkgfCAoKHJlbGF0aXZl
ICYgMHg0MDAwMCkgPj4gNSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcFQ0KHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9p
ZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGlu
IHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAg
ICBib29sIHNjcmF0Y2g7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICAgICAg
QVNTRVJUKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0Y2gpKTsKKyAgICAg
ICAgCisgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikpOwor
ICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhlIHNp
Z24gYml0IGlzICdwZWN1bGlhcicuCisgICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQorICAgICAg
ICAgICAgcmVsYXRpdmUgXj0gMHhDMDAwMDA7CisgICAgICAgIAorICAgICAgICAvLyBBbGwgYnJh
bmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVCgh
KHJlbGF0aXZlICYgMSkpOworICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8ICgo
cmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkgPj4g
MTIpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAw
eDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0
aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtDb25kaXRpb25h
bEp1bXBUNChDb25kaXRpb24gY29uZCwgdWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJn
ZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1h
Y3JvQXNzZW1ibGVyIGxheWVyLiA6LSggICAgICAgIAorICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCgh
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAg
ICAgICBpbnN0cnVjdGlvblstM10gPSBpZlRoZW5FbHNlKGNvbmQpIHwgT1BfSVQ7CisgICAgICAg
IGxpbmtKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIGxpbmtCWCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7
CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJs
ZXIgbGF5ZXIuIDotKAorICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50MTZf
dCBKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiA9IEFSTVJlZ2lzdGVyczo6aXA7CisgICAgICAgIEFS
TVRodW1iSW1tZWRpYXRlIGxvMTYgPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0
aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSArIDEp
KTsKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRpYXRlOjpt
YWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pih0YXJnZXQpID4+IDE2KSk7CisgICAgICAgIGluc3RydWN0aW9uWy01XSA9IHR3b1dvcmRPcDVp
NkltbTRSZWc0RW5jb2RlZEltbUZpcnN0KE9QX01PVl9pbW1fVDMsIGxvMTYpOworICAgICAgICBp
bnN0cnVjdGlvblstNF0gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1TZWNvbmQoSlVN
UF9URU1QT1JBUllfUkVHSVNURVIsIGxvMTYpOworICAgICAgICBpbnN0cnVjdGlvblstM10gPSB0
d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZULCBoaTE2KTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25bLTJdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tU2Vjb25k
KEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSLCBoaTE2KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTFd
ID0gT1BfQlggfCAoSlVNUF9URU1QT1JBUllfUkVHSVNURVIgPDwgMyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbGlua0NvbmRpdGlvbmFsQlgoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0
cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hv
dWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkp
OworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYg
MSkpOworICAgICAgICAKKyAgICAgICAgbGlua0JYKGluc3RydWN0aW9uLCB0YXJnZXQpOworICAg
ICAgICBpbnN0cnVjdGlvblstNl0gPSBpZlRoZW5FbHNlKGNvbmQsIHRydWUsIHRydWUpIHwgT1Bf
SVQ7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wQWJzb2x1dGUodWludDE2
X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCiAgICAgewogICAgICAgICAvLyBGSU1YRTog
dGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSgKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkp
OwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYg
MSkpOwotCisgICAgICAgIAogICAgICAgICBBU1NFUlQoKGlzTU9WX2ltbV9UMyhpbnN0cnVjdGlv
biAtIDUpICYmIGlzTU9WVChpbnN0cnVjdGlvbiAtIDMpICYmIGlzQlgoaW5zdHJ1Y3Rpb24gLSAx
KSkKLSAgICAgICAgICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9QX1Qy
KGluc3RydWN0aW9uIC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKLQotICAgICAgICBp
bnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgICAgICAg
IHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9QX1QyKGluc3RydWN0aW9uIC0g
NCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgc2Ny
YXRjaDsKICAgICAgICAgaWYgKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0
Y2gpKSB7Ci0gICAgICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMg
YmVsb3cgdGhlIHNpZ24gYml0IGlzICdwZWN1bGlhcicuCi0gICAgICAgICAgICBpZiAocmVsYXRp
dmUgPj0gMCkKLSAgICAgICAgICAgICAgICByZWxhdGl2ZSBePSAweEMwMDAwMDsKLQotICAgICAg
ICAgICAgLy8gQWxsIGJyYW5jaCBvZmZzZXRzIHNob3VsZCBiZSBhbiBldmVuIGRpc3RhbmNlLgot
ICAgICAgICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CiAgICAgICAgICAgICAvLyBUaGVy
ZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLCBidXQgcmlnaHQgbm93IHB1dCB0aGUg
Tk9QcyBmaXJzdCwgc2luY2UgaW4gdGhlCiAgICAgICAgICAgICAvLyBjYXNlIG9mIGFuIGNvbmRp
dGlvbmFsIGJyYW5jaCB0aGlzIHdpbGwgYmUgY29taW5nIGFmdGVyIGFuIElUVFQgcHJlZGljYXRp
bmcgKnRocmVlKgogICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb25zISAgTG9va2luZyBiYWNrd2Fy
ZHMgdG8gbW9kaWZ5IHRoZSBJVFRUIHRvIGFuIElUIGlzIG5vdCBlYXN5LCBkdWUgdG8KQEAgLTIw
NzIsOCArMjE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNV0gPSBP
UF9OT1BfVDE7CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNF0gPSBPUF9OT1BfVDJhOwogICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25bLTNdID0gT1BfTk9QX1QyYjsKLSAgICAgICAgICAgIGluc3Ry
dWN0aW9uWy0yXSA9IE9QX0JfVDRhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwMCkgPj4gMTQpIHwg
KChyZWxhdGl2ZSAmIDB4M2ZmMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvblst
MV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2
ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgICAg
ICAgICAgbGlua0p1bXBUNChpbnN0cnVjdGlvbiwgdGFyZ2V0KTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90IEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSID0gQVJN
UmVnaXN0ZXJzOjppcDsKICAgICAgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGxvMTYgPSBBUk1U
aHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSArIDEpKTsKQEAgLTIwODUsNyArMjIwOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CWCB8IChKVU1QX1RFTVBP
UkFSWV9SRUdJU1RFUiA8PCAzKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHN0YXRp
YyB1aW50MTZfdCB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdCh1aW50MTZfdCBv
cCwgQVJNVGh1bWJJbW1lZGlhdGUgaW1tKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wIHwgKGlt
bS5tX3ZhbHVlLmkgPDwgMTApIHwgaW1tLm1fdmFsdWUuaW1tNDsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzUsMTIgKzIzNSwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHRhcmdldCA9IGxpbmtCYXNlICsganVtcHNUb0xp
bmtbaV0udG8oKSAtIG1fYXNzZW1ibGVyLT5leGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBzVG9MaW5r
W2ldLnRvKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKdW1wTGlua1R5cGUganVtcExp
bmtUeXBlID0gbV9hc3NlbWJsZXItPmNvbXB1dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwgbGlu
a0Jhc2UgKyB3cml0ZVB0ciwgdGFyZ2V0KTsKLQotICAgICAgICAgICAgLy8gU3RlcCBiYWNrIGlu
IHRoZSB3cml0ZSBzdHJlYW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBtX2Fzc2VtYmxl
ci0+anVtcFNpemVEZWx0YShqdW1wTGlua1R5cGUpOwotICAgICAgICAgICAgaWYgKGRlbHRhKSB7
Ci0gICAgICAgICAgICAgICAgd3JpdGVQdHIgLT0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXItPnJlY29yZExpbmtPZmZzZXRzKGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRlbHRh
LCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQdHIpOworICAgICAgICAgICAgQVNTRVJUKGp1bXBM
aW5rVHlwZSAhPSBBUk12N0Fzc2VtYmxlcjo6TGlua0ludmFsaWQpOworICAgICAgICAgICAgaWYg
KGp1bXBMaW5rVHlwZSAhPSBBUk12N0Fzc2VtYmxlcjo6TGlua0ludmFsaWQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBTdGVwIGJhY2sgaW4gdGhlIHdyaXRlIHN0cmVhbQorICAgICAgICAgICAgICAg
IGludDMyX3QgZGVsdGEgPSBtX2Fzc2VtYmxlci0+anVtcFNpemVEZWx0YShqdW1wc1RvTGlua1tp
XS50eXBlKCksIGp1bXBMaW5rVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHdyaXRlUHRyIC09IGRlbHRhOworICAgICAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci0+cmVjb3JkTGlua09mZnNldHMoanVtcHNUb0xpbmtbaV0uZnJvbSgpIC0g
ZGVsdGEsIHJlYWRQdHIsIHJlYWRQdHIgLSB3cml0ZVB0cik7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAganVtcHNUb0xpbmtbaV0uc2V0RnJvbSh3cml0ZVB0
cik7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gNjkzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNdjcg
OiBwdWJsaWMgQWJzdHIKIAogcHVibGljOgogICAgIHR5cGVkZWYgQVJNdjdBc3NlbWJsZXI6Okxp
bmtSZWNvcmQgTGlua1JlY29yZDsKKyAgICB0eXBlZGVmIEFSTXY3QXNzZW1ibGVyOjpKdW1wVHlw
ZSBKdW1wVHlwZTsKICAgICB0eXBlZGVmIEFSTXY3QXNzZW1ibGVyOjpKdW1wTGlua1R5cGUgSnVt
cExpbmtUeXBlOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJBUk12NygpCkBAIC01Nyw5ICs1OCwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UoKSB7IG1faW5Vbmlu
dGVycnVwdGVkU2VxdWVuY2UgPSBmYWxzZTsgfQogICAgIFZlY3RvcjxMaW5rUmVjb3JkPiYganVt
cHNUb0xpbmsoKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wc1RvTGluaygpOyB9CiAgICAgdm9p
ZCogdW5saW5rZWRDb2RlKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIudW5saW5rZWRDb2RlKCk7IH0K
KyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1bXBUeXBlLCBjb25z
dCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4gbV9hc3NlbWJsZXIu
Y29tcHV0ZUp1bXBUeXBlKGp1bXBUeXBlLCBmcm9tLCB0byk7IH0KICAgICBKdW1wTGlua1R5cGUg
Y29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWludDhfdCogZnJvbSwg
Y29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmNvbXB1dGVKdW1wVHlwZShy
ZWNvcmQsIGZyb20sIHRvKTsgfQogICAgIHZvaWQgcmVjb3JkTGlua09mZnNldHMoaW50MzJfdCBy
ZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGludDMyX3Qgb2Zmc2V0KSB7cmV0dXJuIG1f
YXNzZW1ibGVyLnJlY29yZExpbmtPZmZzZXRzKHJlZ2lvblN0YXJ0LCByZWdpb25FbmQsIG9mZnNl
dCk7IH0KLSAgICBpbnQganVtcFNpemVEZWx0YShKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7
IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wU2l6ZURlbHRhKGp1bXBMaW5rVHlwZSk7IH0KKyAgICBp
bnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtUeXBlIGp1bXBMaW5r
VHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcFNpemVEZWx0YShqdW1wVHlwZSwganVtcExp
bmtUeXBlKTsgfQogICAgIHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3QqIGZy
b20sIHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5saW5rKHJlY29yZCwgZnJvbSwg
dG8pOyB9CiAKICAgICBzdHJ1Y3QgQXJtQWRkcmVzcyB7CkBAIC05ODYsMTQgKzk4OCwxNCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewotICAgICAg
ICBtX2Fzc2VtYmxlci5ieCh0YXJnZXQsIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12
N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlv
bik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1bXBG
aXhlZCk7CiAgICAgfQogCiAgICAgLy8gQWRkcmVzcyBpcyBhIG1lbW9yeSBsb2NhdGlvbiBjb250
YWluaW5nIHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8KICAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOwot
ICAgICAgICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVy
OjpKdW1wTm9Db25kaXRpb24pOworICAgICAgICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lz
dGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKTsKICAgICB9CiAKIApAQCAtMTA4MiwyOSAr
MTA4NCwyOSBAQCBwdWJsaWM6CiAgICAgQ2FsbCBuZWFyQ2FsbCgpCiAgICAgewogICAgICAgICBt
b3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNz
ZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6
Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQogCiAgICAgQ2FsbCBjYWxs
KCkKICAgICB7CiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRhdGFU
ZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRl
bXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSksIENhbGw6OkxpbmthYmxl
KTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIs
IEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAg
ICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENh
bGwobV9hc3NlbWJsZXIuYmx4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSks
IENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgodGFyZ2V0
LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6Tm9uZSk7CiAgICAgfQogCiAgICAg
Q2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIGxvYWQzMihhZGRyZXNz
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4
KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpO
b25lKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0
ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpOb25lKTsKICAgICB9CiAKICAg
ICB2b2lkIHJldCgpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5ieChsaW5rUmVnaXN0ZXIs
IEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpOworICAgICAgICBtX2Fzc2VtYmxlci5ieChs
aW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOwogICAgIH0KIAogICAgIHZv
aWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTIwNCw3ICsxMjA2LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgbGluay4KICAgICAgICAg
bW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNz
ZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgICAgIHJldHVybiBD
YWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1w
Rml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBtYWtlVGFpbFJlY3Vy
c2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQpAQCAtMTIyOCwxNCArMTIzMCwxNCBAQCBwcm90ZWN0ZWQ6
CiAgICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlSnVtcCgpCiAgICAgewogICAgICAgICBt
b3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAg
ICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIGluVW5pbnRlcnJ1cHRl
ZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJs
ZXI6Okp1bXBOb0NvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChkYXRh
VGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXBOb0NvbmRpdGlvbiA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRp
b24pOwogICAgIH0KIAogICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUJyYW5jaChBUk12
N0Fzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5p
dChjb25kLCB0cnVlLCB0cnVlKTsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0z
MigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChk
YXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJs
ZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBjb25kKTsK
KyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIGluVW5pbnRl
cnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcENvbmRpdGlv
biA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBjb25kKTsKICAgICB9CiAgICAgQVJN
djdBc3NlbWJsZXI6OkptcFNyYyBtYWtlQnJhbmNoKENvbmRpdGlvbiBjb25kKSB7IHJldHVybiBt
YWtlQnJhbmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQogICAgIEFSTXY3QXNzZW1ibGVyOjpK
bXBTcmMgbWFrZUJyYW5jaChEb3VibGVDb25kaXRpb24gY29uZCkgeyByZXR1cm4gbWFrZUJyYW5j
aChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70449</attachid>
            <date>2010-10-11 10:26:08 -0700</date>
            <delta_ts>2010-10-13 15:25:00 -0700</delta_ts>
            <desc>more descriptive ChangeLog (now without tabs, sigh)</desc>
            <filename>47384.txt</filename>
            <type>text/plain</type>
            <size>31390</size>
            <attacher name="David Goodwin">david_goodwin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MzUxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMTAtMDcgIERhdmlkIEdv
b2R3aW4gIDxkYXZpZF9nb29kd2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUk12NyBKSVQgc2hvdWxkIGdlbmVyYXRlZCBjb25k
aXRpb25hbCBicmFuY2hlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NAorCisgICAgICAgIFVzZSBkaWZmZXJlbnQganVt
cCBwYWRkaW5nIHNpemVzIGZvciBjb25kaXRpb25hbCBhbmQgdW5jb25kaXRpb25hbAorICAgICAg
ICBqdW1wcyAoMTIgYnl0ZXMgYW5kIDEwIGJ5dGVzIHJlc3BlY3RpdmVseSkuIFRoaXMgYWxsb3dz
IHRoZSBKSVQgdG8KKyAgICAgICAgaW5jbHVkZSB0aGUgSVQgaW5zdHJ1Y3Rpb24gYXMgcGFydCBv
ZiB0aGUgY29uZGl0aW9uYWwganVtcCBzZXF1ZW5jZQorICAgICAgICB3aGljaCBpbiB0dXJuIGFs
bG93cyBpdCB0byBvcHRpbWl6ZSBhd2F5IHRoZSBJVCB1c2luZyBhbiBBUk12NyAKKyAgICAgICAg
Y29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uLiBVc2UgMi1ieXRlIEIoVDEpIGFuZCA0LWJ5
dGUgQihUMykgZm9yCisgICAgICAgIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHdoZW4gZGlzcGxhY2Vt
ZW50IGlzIGluIHJhbmdlLiBBbHNvIHVzZSBJVC9CKFQ0KQorICAgICAgICBmb3IgY29uZGl0aW9u
YWwgYnJhbmNoIHdoZW4gZGlzcGxhY2VtZW50IGRvZXMgbm90IGZpdCBpbiBCKFQzKS4KKworICAg
ICAgICBGb3IgdW5jb25kaXRpb25hbCBqdW1wLCBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gb3B0aW9u
cyBhcmU6CisgICAgICAgIEIoVDIpLCBCKFQ0KSwgTU9WVy9NT1ZUL0JYLiBGb3IgY29uZGl0aW9u
YWwganVtcCwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uCisgICAgICAgIG9wdGlvbnMgYXJlOiBCKFQx
KSwgQihUMyksIElUL0IoVDQpLCBJVFRUL01PVlcvTU9WVC9CWC4KKworICAgICAgICAqIGFzc2Vt
Ymxlci9BUk12N0Fzc2VtYmxlci5jcHA6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpKbXBTcmM6OkptcFNyYyk6Cisg
ICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjppZlRoZW5FbHNlKToKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6Y29tcHV0ZUp1bXBUeXBlKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6Omxp
bmspOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6Y2FuQmVKdW1wVDEpOgorICAgICAg
ICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6Y2FuQmVKdW1wVDMpOgorICAgICAgICAoSlNDOjpBUk12
N0Fzc2VtYmxlcjo6Y2FuQmVKdW1wVDQpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6
bGlua0p1bXBUMSk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcFQzKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wVDQpOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6bGlua0NvbmRpdGlvbmFsSnVtcFQ0KToKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6OmxpbmtCWCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjps
aW5rQ29uZGl0aW9uYWxCWCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rSnVt
cEFic29sdXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpsaW5rQ29kZSk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y29tcHV0
ZUp1bXBUeXBlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6anVtcFNpemVE
ZWx0YSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Omp1bXApOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpuZWFyQ2FsbCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TXY3OjpyZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojp0YWlsUmVjdXJz
aXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om1ha2VKdW1wKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bWFrZUJyYW5jaCk6CisKIDIwMTAt
MTAtMDYgIENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdB
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12
N0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDY5MzMzKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTXY3QXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IGludCBBUk12N0Fzc2VtYmxlcjo6SnVtcFNpemVzW10g
PSB7IDB4ZmZmZmZmZmYsIHNpemVvZih1aW50MTZfdCksIHNpemVvZih1aW50MTZfdCksCi0gICAg
MiAqIHNpemVvZih1aW50MTZfdCksIDIgKiBzaXplb2YodWludDE2X3QpLCA1ICogc2l6ZW9mKHVp
bnQxNl90KSB9OworICAgIDIgKiBzaXplb2YodWludDE2X3QpLCAyICogc2l6ZW9mKHVpbnQxNl90
KSwgMyAqIHNpemVvZih1aW50MTZfdCksIDUgKiBzaXplb2YodWludDE2X3QpLCA2ICogc2l6ZW9m
KHVpbnQxNl90KSB9OworY29uc3QgaW50IEFSTXY3QXNzZW1ibGVyOjpKdW1wUGFkZGluZ1NpemVz
W10gPSB7IDAsIDUgKiBzaXplb2YodWludDE2X3QpLCA2ICogc2l6ZW9mKHVpbnQxNl90KSwKKyAg
ICA1ICogc2l6ZW9mKHVpbnQxNl90KSwgNiAqIHNpemVvZih1aW50MTZfdCkgfTsKIAogfQogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24g
NjkzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDc4LDExICs0NzgsMTEgQEAgcHVibGljOgogICAgICAgICBDb25kaXRp
b25JbnZhbGlkCiAgICAgfSBDb25kaXRpb247CiAKLSAgICBlbnVtIEp1bXBUeXBlIHsgSnVtcE5v
Q29uZGl0aW9uLCBKdW1wQ29uZGl0aW9uLCBKdW1wRnVsbFNpemUgfTsKLSAgICBlbnVtIEp1bXBM
aW5rVHlwZSB7IExpbmtJbnZhbGlkLCBMaW5rSnVtcFQyLCBMaW5rQ29uZGl0aW9uYWxKdW1wVDIs
IAotICAgICAgICBMaW5rSnVtcFQ0LCBMaW5rQ29uZGl0aW9uYWxKdW1wVDQsIExpbmtCWCwgSnVt
cFR5cGVDb3VudCB9OwotICAgIHN0YXRpYyBjb25zdCBpbnQgSnVtcFNpemVzW0p1bXBUeXBlQ291
bnRdOwotICAgIGVudW0geyBKdW1wUGFkZGluZ1NpemUgPSA1ICogc2l6ZW9mKHVpbnQxNl90KSB9
OworICAgIGVudW0gSnVtcFR5cGUgeyBKdW1wRml4ZWQsIEp1bXBOb0NvbmRpdGlvbiwgSnVtcENv
bmRpdGlvbiwgUGF0Y2hhYmxlSnVtcE5vQ29uZGl0aW9uLCBQYXRjaGFibGVKdW1wQ29uZGl0aW9u
LCBKdW1wVHlwZUNvdW50IH07CisgICAgZW51bSBKdW1wTGlua1R5cGUgeyBMaW5rSW52YWxpZCwg
TGlua0p1bXBUMSwgTGlua0p1bXBUMiwgTGlua0p1bXBUMywKKyAgICAgICAgTGlua0p1bXBUNCwg
TGlua0NvbmRpdGlvbmFsSnVtcFQ0LCBMaW5rQlgsIExpbmtDb25kaXRpb25hbEJYLCBKdW1wTGlu
a1R5cGVDb3VudCB9OworICAgIHN0YXRpYyBjb25zdCBpbnQgSnVtcFNpemVzW0p1bXBMaW5rVHlw
ZUNvdW50XTsKKyAgICBzdGF0aWMgY29uc3QgaW50IEp1bXBQYWRkaW5nU2l6ZXNbSnVtcFR5cGVD
b3VudF07CiAgICAgY2xhc3MgTGlua1JlY29yZCB7CiAgICAgcHVibGljOgogICAgICAgICBMaW5r
UmVjb3JkKGludHB0cl90IGZyb20sIGludHB0cl90IHRvLCBKdW1wVHlwZSB0eXBlLCBDb25kaXRp
b24gY29uZGl0aW9uKQpAQCAtNTAzLDggKzUwMyw4IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgog
ICAgICAgICBpbnRwdHJfdCBtX2Zyb20gOiAzMTsKICAgICAgICAgaW50cHRyX3QgbV90byA6IDMx
OwotICAgICAgICBKdW1wVHlwZSBtX3R5cGUgOiAyOwotICAgICAgICBKdW1wTGlua1R5cGUgbV9s
aW5rVHlwZSA6IDM7CisgICAgICAgIEp1bXBUeXBlIG1fdHlwZSA6IDM7CisgICAgICAgIEp1bXBM
aW5rVHlwZSBtX2xpbmtUeXBlIDogNDsKICAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uIDog
MTY7CiAgICAgfTsKICAgICAKQEAgLTUyNCw3ICs1MjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAsIG1fY29uZGl0aW9uKENvbmRpdGlvbkludmFsaWQpCiAgICAgICAgICAgICAsIG1fdHlwZSh0
eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IEp1bXBDb25kaXRp
b24pOworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBKdW1wRml4ZWQgfHwgbV90eXBlID09
IEp1bXBOb0NvbmRpdGlvbiB8fCBtX3R5cGUgPT0gUGF0Y2hhYmxlSnVtcE5vQ29uZGl0aW9uKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0LCBKdW1wVHlwZSB0eXBlLCBD
b25kaXRpb24gY29uZGl0aW9uKQpAQCAtNTMyLDcgKzUzMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQogICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkK
ICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBKdW1wQ29uZGl0aW9uIHx8
IG1fdHlwZSA9PSBKdW1wRnVsbFNpemUpOworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBK
dW1wRml4ZWQgfHwgbV90eXBlID09IEp1bXBDb25kaXRpb24gfHwgbV90eXBlID09IFBhdGNoYWJs
ZUp1bXBDb25kaXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgaW50IG1fb2Zmc2V0OwpAQCAt
NjI5LDYgKzYyOSw3IEBAIHByaXZhdGU6CiAgICAgfSBPcGNvZGVJRDsKIAogICAgIHR5cGVkZWYg
ZW51bSB7CisgICAgICAgIE9QX0JfVDEgICAgICAgICA9IDB4RDAwMCwKICAgICAgICAgT1BfQl9U
MiAgICAgICAgID0gMHhFMDAwLAogICAgICAgICBPUF9BTkRfcmVnX1QyICAgPSAweEVBMDAsCiAg
ICAgICAgIE9QX1RTVF9yZWdfVDIgICA9IDB4RUExMCwKQEAgLTY1Nyw2ICs2NTgsNyBAQCBwcml2
YXRlOgogICAgICAgICBPUF9WQ1ZUX0ZQSVZGUCAgPSAweEVFQjAsCiAgICAgICAgIE9QX1ZNT1Zf
SU1NX1QyICA9IDB4RUVCMCwKICAgICAgICAgT1BfVk1SUyAgICAgICAgID0gMHhFRUIwLAorICAg
ICAgICBPUF9CX1QzYSAgICAgICAgPSAweEYwMDAsCiAgICAgICAgIE9QX0JfVDRhICAgICAgICA9
IDB4RjAwMCwKICAgICAgICAgT1BfQU5EX2ltbV9UMSAgID0gMHhGMDAwLAogICAgICAgICBPUF9U
U1RfaW1tICAgICAgPSAweEYwMTAsCkBAIC03MDksNiArNzExLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgT1BfVkNWVF9GUElWRlBiID0gMHgwQTQwLAogICAgICAgICBPUF9WU1VCX1QyYiAgICAgPSAw
eDBBNDAsCiAgICAgICAgIE9QX05PUF9UMmIgICAgICA9IDB4ODAwMCwKKyAgICAgICAgT1BfQl9U
M2IgICAgICAgID0gMHg4MDAwLAogICAgICAgICBPUF9CX1Q0YiAgICAgICAgPSAweDkwMDAsCiAg
ICAgfSBPcGNvZGVJRDI7CiAKQEAgLTc0NSw3ICs3NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfCAoaWZUaGVuRWxzZUNvbmRpdGlvbkJpdChjb25kaXRpb24sIGluc3QzaWYpIDw8IDIpCiAg
ICAgICAgICAgICB8IChpZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDRpZikg
PDwgMSkKICAgICAgICAgICAgIHwgMTsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29u
ZGl0aW9uQUwpIHx8IChtYXNrICYgKG1hc2sgLSAxKSkpOworICAgICAgICBBU1NFUlQoKGNvbmRp
dGlvbiAhPSBDb25kaXRpb25BTCkgfHwgKChtYXNrICYgKG1hc2sgLSAxKSkgPT0gMCkpOwogICAg
ICAgICByZXR1cm4gKGNvbmRpdGlvbiA8PCA0KSB8IG1hc2s7CiAgICAgfQogICAgIHVpbnQ4X3Qg
aWZUaGVuRWxzZShDb25kaXRpb24gY29uZGl0aW9uLCBib29sIGluc3QyaWYsIGJvb2wgaW5zdDNp
ZikKQEAgLTc1MywyMSArNzU2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGludCBtYXNrID0gKGlm
VGhlbkVsc2VDb25kaXRpb25CaXQoY29uZGl0aW9uLCBpbnN0MmlmKSA8PCAzKQogICAgICAgICAg
ICAgfCAoaWZUaGVuRWxzZUNvbmRpdGlvbkJpdChjb25kaXRpb24sIGluc3QzaWYpIDw8IDIpCiAg
ICAgICAgICAgICB8IDI7Ci0gICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFM
KSB8fCAobWFzayAmIChtYXNrIC0gMSkpKTsKKyAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0g
Q29uZGl0aW9uQUwpIHx8ICgobWFzayAmIChtYXNrIC0gMSkpID09IDApKTsKICAgICAgICAgcmV0
dXJuIChjb25kaXRpb24gPDwgNCkgfCBtYXNrOwogICAgIH0KICAgICB1aW50OF90IGlmVGhlbkVs
c2UoQ29uZGl0aW9uIGNvbmRpdGlvbiwgYm9vbCBpbnN0MmlmKQogICAgIHsKICAgICAgICAgaW50
IG1hc2sgPSAoaWZUaGVuRWxzZUNvbmRpdGlvbkJpdChjb25kaXRpb24sIGluc3QyaWYpIDw8IDMp
CiAgICAgICAgICAgICB8IDQ7Ci0gICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlv
bkFMKSB8fCAobWFzayAmIChtYXNrIC0gMSkpKTsKKyAgICAgICAgQVNTRVJUKChjb25kaXRpb24g
IT0gQ29uZGl0aW9uQUwpIHx8ICgobWFzayAmIChtYXNrIC0gMSkpID09IDApKTsKICAgICAgICAg
cmV0dXJuIChjb25kaXRpb24gPDwgNCkgfCBtYXNrOwogICAgIH0KIAogICAgIHVpbnQ4X3QgaWZU
aGVuRWxzZShDb25kaXRpb24gY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgaW50IG1hc2sgPSA4
OwotICAgICAgICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkgfHwgKG1hc2sgJiAo
bWFzayAtIDEpKSk7CiAgICAgICAgIHJldHVybiAoY29uZGl0aW9uIDw8IDQpIHwgbWFzazsKICAg
ICB9CiAKQEAgLTE2NjQsNyArMTY2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3QqPihtX2Zvcm1hdHRlci5kYXRhKCkpW2xvY2F0aW9uIC8gc2l6ZW9mKGlu
dDMyX3QpIC0gMV07CiAgICAgfQogICAgIAotICAgIGludCBqdW1wU2l6ZURlbHRhKEp1bXBMaW5r
VHlwZSBqdW1wTGlua1R5cGUpIHsgcmV0dXJuIEp1bXBQYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tq
dW1wTGlua1R5cGVdOyB9CisgICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcFR5cGUganVtcFR5cGUs
IEp1bXBMaW5rVHlwZSBqdW1wTGlua1R5cGUpIHsgcmV0dXJuIEp1bXBQYWRkaW5nU2l6ZXNbanVt
cFR5cGVdIC0gSnVtcFNpemVzW2p1bXBMaW5rVHlwZV07IH0KICAgICAKICAgICAvLyBBc3NlbWJs
ZXIgYWRtaW4gbWV0aG9kczoKIApAQCAtMTY3OCwzOSArMTY4MCw2NSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhLmZyb20oKSA8IGIuZnJvbSgpOwogICAgIH0KIAotICAgIEp1bXBMaW5rVHlw
ZSBjb21wdXRlSnVtcFR5cGUoTGlua1JlY29yZCYgcmVjb3JkLCBjb25zdCB1aW50OF90KiBmcm9t
LCBjb25zdCB1aW50OF90KiB0bykKKyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1
bXBUeXBlIGp1bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykK
ICAgICB7Ci0gICAgICAgIGlmIChyZWNvcmQudHlwZSgpID49IEp1bXBGdWxsU2l6ZSkgewotICAg
ICAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtCWCk7CisgICAgICAgIGlmIChqdW1wVHlw
ZSA9PSBKdW1wRml4ZWQpCisgICAgICAgICAgICByZXR1cm4gTGlua0ludmFsaWQ7CisgICAgICAg
IAorICAgICAgICAvLyBmb3IgcGF0Y2hhYmxlIGp1bXAgd2UgbXVzdCBsZWF2ZSBzcGFjZSBmb3Ig
dGhlIGxvbmdlc3QgY29kZSBzZXF1ZW5jZQorICAgICAgICBpZiAoanVtcFR5cGUgPT0gUGF0Y2hh
YmxlSnVtcE5vQ29uZGl0aW9uKQogICAgICAgICAgICAgcmV0dXJuIExpbmtCWDsKLSAgICAgICAg
fQotICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQyTG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAgLSAoSnVtcFBhZGRpbmdTaXplIC0gSnVtcFNpemVz
W0xpbmtKdW1wVDJdKSk7Ci0gICAgICAgIGlmIChjYW5CZUp1bXBUMihqdW1wVDJMb2NhdGlvbiwg
dG8pKSB7Ci0gICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUoKSA9PSBKdW1wQ29uZGl0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtDb25kaXRpb25hbEp1bXBU
Mik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEp1bXBUMjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rSnVtcFQyKTsKLSAg
ICAgICAgICAgIHJldHVybiBMaW5rSnVtcFQyOwotICAgICAgICB9CisgICAgICAgIGlmIChqdW1w
VHlwZSA9PSBQYXRjaGFibGVKdW1wQ29uZGl0aW9uKQorICAgICAgICAgICAgcmV0dXJuIExpbmtD
b25kaXRpb25hbEJYOworICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHBhZGRpbmdTaXplID0g
SnVtcFBhZGRpbmdTaXplc1tqdW1wVHlwZV07CiAgICAgICAgIGJvb2wgbWF5VHJpZ2dlckVycmF0
YSA9IGZhbHNlOwotICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQ0TG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAgLSAoSnVtcFBhZGRpbmdTaXplIC0g
SnVtcFNpemVzW0xpbmtKdW1wVDRdKSk7Ci0gICAgICAgIGlmICghY2FuQmVKdW1wVDQoanVtcFQ0
TG9jYXRpb24sIHRvLCBtYXlUcmlnZ2VyRXJyYXRhKSkgewotICAgICAgICAgICAgcmVjb3JkLnNl
dExpbmtUeXBlKExpbmtCWCk7Ci0gICAgICAgICAgICByZXR1cm4gTGlua0JYOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtYXlUcmlnZ2VyRXJyYXRhKSB7Ci0gICAgICAgICAgICByZWNvcmQuc2V0
TGlua1R5cGUoTGlua0JYKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqdW1wVHlwZSA9PSBKdW1w
Q29uZGl0aW9uKSB7CisgICAgICAgICAgICAvLyAyLWJ5dGUgY29uZGl0aW9uYWwgVDEKKyAgICAg
ICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDFMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0gSnVtcFNpemVzW0xpbmtKdW1w
VDFdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVKdW1wVDEoanVtcFQxTG9jYXRpb24sIHRvKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUMTsKKyAgICAgICAgICAgIC8vIDQtYnl0
ZSBjb25kaXRpb25hbCBUMworICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGp1bXBUM0xvY2F0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGZyb20gLSAocGFkZGluZ1Np
emUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUM10pKTsKKyAgICAgICAgICAgIGlmIChjYW5CZUp1bXBU
MyhqdW1wVDNMb2NhdGlvbiwgdG8sIG1heVRyaWdnZXJFcnJhdGEpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtYXlUcmlnZ2VyRXJyYXRhKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlu
a0p1bXBUMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDQtYnl0ZSBjb25kaXRpb25h
bCBUNCB3aXRoIElUCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogY29uZGl0aW9uYWxKdW1w
VDRMb2NhdGlvbiA9IAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZf
dCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0NvbmRpdGlvbmFsSnVtcFQ0
XSkpOworICAgICAgICAgICAgaWYgKGNhbkJlSnVtcFQ0KGNvbmRpdGlvbmFsSnVtcFQ0TG9jYXRp
b24sIHRvLCBtYXlUcmlnZ2VyRXJyYXRhKSkgeworICAgICAgICAgICAgICAgIGlmICghbWF5VHJp
Z2dlckVycmF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEp1
bXBUNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDIt
Ynl0ZSB1bmNvbmRpdGlvbmFsIFQyCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQy
TG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAtIChwYWRk
aW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rSnVtcFQyXSkpOworICAgICAgICAgICAgaWYgKGNhbkJl
SnVtcFQyKGp1bXBUMkxvY2F0aW9uLCB0bykpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtK
dW1wVDI7CisgICAgICAgICAgICAvLyA0LWJ5dGUgdW5jb25kaXRpb25hbCBUNAorICAgICAgICAg
ICAgY29uc3QgdWludDE2X3QqIGp1bXBUNExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MTZfdCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUNF0p
KTsKKyAgICAgICAgICAgIGlmIChjYW5CZUp1bXBUNChqdW1wVDRMb2NhdGlvbiwgdG8sIG1heVRy
aWdnZXJFcnJhdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXlUcmlnZ2VyRXJyYXRhKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUNDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gdXNlIGxvbmcganVtcCBzZXF1ZW5jZQogICAgICAg
ICAgICAgcmV0dXJuIExpbmtCWDsKICAgICAgICAgfQotICAgICAgICBpZiAocmVjb3JkLnR5cGUo
KSA9PSBKdW1wQ29uZGl0aW9uKSB7Ci0gICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlu
a0NvbmRpdGlvbmFsSnVtcFQ0KTsKLSAgICAgICAgICAgIHJldHVybiBMaW5rQ29uZGl0aW9uYWxK
dW1wVDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKExpbmtKdW1wVDQp
OwotICAgICAgICByZXR1cm4gTGlua0p1bXBUNDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChq
dW1wVHlwZSA9PSBKdW1wQ29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25h
bEJYOwogICAgIH0KLQorICAgIAorICAgIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoTGlu
a1JlY29yZCYgcmVjb3JkLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykK
KyAgICB7CisgICAgICAgIEp1bXBMaW5rVHlwZSBsaW5rVHlwZSA9IGNvbXB1dGVKdW1wVHlwZShy
ZWNvcmQudHlwZSgpLCBmcm9tLCB0byk7CisgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShsaW5r
VHlwZSk7CisgICAgICAgIHJldHVybiBsaW5rVHlwZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBy
ZWNvcmRMaW5rT2Zmc2V0cyhpbnQzMl90IHJlZ2lvblN0YXJ0LCBpbnQzMl90IHJlZ2lvbkVuZCwg
aW50MzJfdCBvZmZzZXQpCiAgICAgewogICAgICAgICBpbnQzMl90IHB0ciA9IHJlZ2lvblN0YXJ0
IC8gc2l6ZW9mKGludDMyX3QpOwpAQCAtMTcyOCwyMSArMTc1NiwyNSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGxpbmsoTGlua1JlY29yZCYgcmVjb3JkLCB1aW50OF90KiBmcm9tLCB1aW50OF90KiB0
bykKICAgICB7Ci0gICAgICAgIEp1bXBMaW5rVHlwZSBsaW5rVHlwZSA9IHJlY29yZC5saW5rVHlw
ZSgpOwotICAgICAgICBBU1NFUlQobGlua1R5cGUgIT0gTGlua0ludmFsaWQpOwotICAgICAgICBp
ZiAoKGxpbmtUeXBlID09IExpbmtDb25kaXRpb25hbEp1bXBUMikgfHwgKGxpbmtUeXBlID09IExp
bmtDb25kaXRpb25hbEp1bXBUNCkpIHsKLSAgICAgICAgICAgIHVpbnQxNl90KiBpdHR0TG9jYXRp
b24gPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSAtIEp1bXBTaXplc1tsaW5rVHlw
ZV0gLSAyKTsKLSAgICAgICAgICAgIGl0dHRMb2NhdGlvblswXSA9IGlmVGhlbkVsc2UocmVjb3Jk
LmNvbmRpdGlvbigpKSB8IE9QX0lUOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobGlua1R5
cGUpIHsKKyAgICAgICAgc3dpdGNoIChyZWNvcmQubGlua1R5cGUoKSkgeworICAgICAgICBjYXNl
IExpbmtKdW1wVDE6CisgICAgICAgICAgICBsaW5rSnVtcFQxKHJlY29yZC5jb25kaXRpb24oKSwg
cmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBMaW5rSnVtcFQyOgotICAgICAgICBjYXNlIExpbmtDb25kaXRpb25h
bEp1bXBUMjoKICAgICAgICAgICAgIGxpbmtKdW1wVDIocmVpbnRlcnByZXRfY2FzdDx1aW50MTZf
dCo+KGZyb20pLCB0byk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rSnVt
cFQzOgorICAgICAgICAgICAgbGlua0p1bXBUMyhyZWNvcmQuY29uZGl0aW9uKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSwgdG8pOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTGlua0p1bXBUNDoKLSAgICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxKdW1wVDQ6
CiAgICAgICAgICAgICBsaW5rSnVtcFQ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9t
KSwgdG8pOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGlua0NvbmRpdGlvbmFs
SnVtcFQ0OgorICAgICAgICAgICAgbGlua0NvbmRpdGlvbmFsSnVtcFQ0KHJlY29yZC5jb25kaXRp
b24oKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxCWDoKKyAgICAgICAgICAgIGxp
bmtDb25kaXRpb25hbEJYKHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaW5r
Qlg6CiAgICAgICAgICAgICBsaW5rQlgocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20p
LCB0byk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NjksNiArMjAwMSwxOSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gKGluc3RydWN0aW9uWzBdID09IE9QX05PUF9UMmEpICYmIChpbnN0
cnVjdGlvblsxXSA9PSBPUF9OT1BfVDJiKTsKICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYW5C
ZUp1bXBUMShjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZvaWQqIHRhcmdldCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry
dWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgCisgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihpbnN0cnVjdGlvbikpOworICAgICAgICAvLyBJdCBkb2VzIG5vdCBhcHBlYXIgdG8g
YmUgZG9jdW1lbnRlZCBpbiB0aGUgQVJNIEFSTSAoYmlnIHN1cnByaXNlKSwgYnV0CisgICAgICAg
IC8vIGZvciBPUF9CX1QxIHRoZSBicmFuY2ggZGlzcGxhY2VtZW50IGVuY29kZWQgaW4gdGhlIGlu
c3RydWN0aW9uIGlzIDIgCisgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGRpc3BsYWNl
bWVudC4KKyAgICAgICAgcmVsYXRpdmUgLT0gMjsKKyAgICAgICAgcmV0dXJuICgocmVsYXRpdmUg
PDwgMjMpID4+IDIzKSA9PSByZWxhdGl2ZTsKKyAgICB9CisgICAgCiAgICAgc3RhdGljIGJvb2wg
Y2FuQmVKdW1wVDIoY29uc3QgdWludDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJn
ZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihp
bnN0cnVjdGlvbikgJiAxKSk7CkBAIC0xOTgyLDcgKzIwMjcsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gKChyZWxhdGl2ZSA8PCAyMCkgPj4gMjApID09IHJlbGF0aXZlOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgYm9vbCBjYW5CZUp1bXBUNChjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rp
b24sIGNvbnN0IHZvaWQqIHRhcmdldCwgYm9vbCYgbWF5VHJpZ2dlckVycmF0YSkKKyAgICBzdGF0
aWMgYm9vbCBjYW5CZUp1bXBUMyhjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZv
aWQqIHRhcmdldCwgYm9vbCYgbWF5VHJpZ2dlckVycmF0YSkKICAgICB7CiAgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKQEAg
LTIwMDAsMzQgKzIwNDUsNDggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBp
biB0aGUgZmlyc3QgcGFnZSBpZiB0aGUganVtcCBicmFuY2ggYmFjayBieSBbMy4uMHgxMDAyXSBi
eXRlcwogICAgICAgICBib29sIHRhcmdldEluRmlyc3RQYWdlID0gKHJlbGF0aXZlID49IC0weDEw
MDIpICYmIChyZWxhdGl2ZSA8IC0yKTsKICAgICAgICAgYm9vbCB3b3VsZFRyaWdnZXJBOEVycmF0
YSA9IHNwYW5zVHdvNEsgJiYgdGFyZ2V0SW5GaXJzdFBhZ2U7Ci0gICAgICAgIHJldHVybiAoKHJl
bGF0aXZlIDw8IDcpID4+IDcpID09IHJlbGF0aXZlICYmICF3b3VsZFRyaWdnZXJBOEVycmF0YTsK
KyAgICAgICAgcmV0dXJuICgocmVsYXRpdmUgPDwgMTEpID4+IDExKSA9PSByZWxhdGl2ZSAmJiAh
d291bGRUcmlnZ2VyQThFcnJhdGE7CiAgICAgfQotCi0gICAgc3RhdGljIHZvaWQgbGlua0JYKHVp
bnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIAorICAgIHN0YXRpYyBib29s
IGNhbkJlSnVtcFQ0KGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFy
Z2V0LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQogICAgIHsKLSAgICAgICAgbGlua0p1bXBBYnNv
bHV0ZShpbnN0cnVjdGlvbiwgdGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAgICAKKyAgICAgICAg
aW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpIC0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7CisgICAgICAgIC8vIEZy
b20gQ29ydGV4LUE4IGVycmF0YToKKyAgICAgICAgLy8gSWYgdGhlIDMyLWJpdCBUaHVtYi0yIGJy
YW5jaCBpbnN0cnVjdGlvbiBzcGFucyB0d28gNEtpQiByZWdpb25zIGFuZAorICAgICAgICAvLyB0
aGUgdGFyZ2V0IG9mIHRoZSBicmFuY2ggZmFsbHMgd2l0aGluIHRoZSBmaXJzdCByZWdpb24gaXQg
aXMKKyAgICAgICAgLy8gcG9zc2libGUgZm9yIHRoZSBwcm9jZXNzb3IgdG8gaW5jb3JyZWN0bHkg
ZGV0ZXJtaW5lIHRoZSBicmFuY2gKKyAgICAgICAgLy8gaW5zdHJ1Y3Rpb24sIGFuZCBpdCBpcyBh
bHNvIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgZm9yIHRoZSBwcm9jZXNzb3IKKyAgICAgICAgLy8g
dG8gZW50ZXIgYSBkZWFkbG9jayBzdGF0ZS4KKyAgICAgICAgLy8gVGhlIGluc3RydWN0aW9uIGlz
IHNwYW5uaW5nIHR3byBwYWdlcyBpZiBpdCBlbmRzIGF0IGFuIGFkZHJlc3MgZW5kaW5nIDB4MDAy
CisgICAgICAgIGJvb2wgc3BhbnNUd280SyA9ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
aW5zdHJ1Y3Rpb24pICYgMHhmZmYpID09IDB4MDAyKTsKKyAgICAgICAgbWF5VHJpZ2dlckVycmF0
YSA9IHNwYW5zVHdvNEs7CisgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgaW4gdGhlIGZpcnN0IHBh
Z2UgaWYgdGhlIGp1bXAgYnJhbmNoIGJhY2sgYnkgWzMuLjB4MTAwMl0gYnl0ZXMKKyAgICAgICAg
Ym9vbCB0YXJnZXRJbkZpcnN0UGFnZSA9IChyZWxhdGl2ZSA+PSAtMHgxMDAyKSAmJiAocmVsYXRp
dmUgPCAtMik7CisgICAgICAgIGJvb2wgd291bGRUcmlnZ2VyQThFcnJhdGEgPSBzcGFuc1R3bzRL
ICYmIHRhcmdldEluRmlyc3RQYWdlOworICAgICAgICByZXR1cm4gKChyZWxhdGl2ZSA8PCA3KSA+
PiA3KSA9PSByZWxhdGl2ZSAmJiAhd291bGRUcmlnZ2VyQThFcnJhdGE7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wVDQodWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0
YXJnZXQpCisgICAgdm9pZCBsaW5rSnVtcFQxKENvbmRpdGlvbiBjb25kLCB1aW50MTZfdCogaW5z
dHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKICAgICB7CiAgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNo
b3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCiAgICAg
ICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEp
KTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAm
IDEpKTsKKyAgICAgICAgQVNTRVJUKGNhbkJlSnVtcFQxKGluc3RydWN0aW9uLCB0YXJnZXQpKTsK
ICAgICAgICAgCiAgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlv
bikpOwotICAgICAgICBib29sIHNjcmF0Y2g7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsKLSAgICAgICAgQVNTRVJUKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0
Y2gpKTsKLSAgICAgICAgLy8gQVJNIGVuY29kaW5nIGZvciB0aGUgdG9wIHR3byBiaXRzIGJlbG93
IHRoZSBzaWduIGJpdCBpcyAncGVjdWxpYXInLgotICAgICAgICBpZiAocmVsYXRpdmUgPj0gMCkK
LSAgICAgICAgICAgIHJlbGF0aXZlIF49IDB4QzAwMDAwOwotCisgICAgICAgIC8vIEl0IGRvZXMg
bm90IGFwcGVhciB0byBiZSBkb2N1bWVudGVkIGluIHRoZSBBUk0gQVJNIChiaWcgc3VycHJpc2Up
LCBidXQKKyAgICAgICAgLy8gZm9yIE9QX0JfVDEgdGhlIGJyYW5jaCBkaXNwbGFjZW1lbnQgZW5j
b2RlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gaXMgMiAKKyAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBh
Y3R1YWwgZGlzcGxhY2VtZW50LgorICAgICAgICByZWxhdGl2ZSAtPSAyOworICAgICAgICAKICAg
ICAgICAgLy8gQWxsIGJyYW5jaCBvZmZzZXRzIHNob3VsZCBiZSBhbiBldmVuIGRpc3RhbmNlLgog
ICAgICAgICBBU1NFUlQoIShyZWxhdGl2ZSAmIDEpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25bLTJd
ID0gT1BfQl9UNGEgfCAoKHJlbGF0aXZlICYgMHgxMDAwMDAwKSA+PiAxNCkgfCAoKHJlbGF0aXZl
ICYgMHgzZmYwMDApID4+IDEyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25bLTFdID0gT1BfQl9UNGIg
fCAoKHJlbGF0aXZlICYgMHg4MDAwMDApID4+IDEwKSB8ICgocmVsYXRpdmUgJiAweDQwMDAwMCkg
Pj4gMTEpIHwgKChyZWxhdGl2ZSAmIDB4ZmZlKSA+PiAxKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25b
LTFdID0gT1BfQl9UMSB8ICgoY29uZCAmIDB4ZikgPDwgOCkgfCAoKHJlbGF0aXZlICYgMHgxZmUp
ID4+IDEpOwogICAgIH0KLQorICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wVDIodWludDE2
X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCiAgICAgewogICAgICAgICAvLyBGSU1YRTog
dGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSggICAgICAg
IApAQCAtMjA0NiwyNCArMjEwNSw5MCBAQCBwcml2YXRlOgogICAgICAgICBpbnN0cnVjdGlvblst
MV0gPSBPUF9CX1QyIHwgKChyZWxhdGl2ZSAmIDB4ZmZlKSA+PiAxKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBsaW5rSnVtcFQzKENvbmRpdGlvbiBjb25kLCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24s
IHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBiZSB1
cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKAorICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIGJv
b2wgc2NyYXRjaDsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworICAgICAgICBBU1NF
UlQoY2FuQmVKdW1wVDMoaW5zdHJ1Y3Rpb24sIHRhcmdldCwgc2NyYXRjaCkpOworICAgICAgICAK
KyAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBBbGwgYnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlz
dGFuY2UuCisgICAgICAgIEFTU0VSVCghKHJlbGF0aXZlICYgMSkpOworICAgICAgICBpbnN0cnVj
dGlvblstMl0gPSBPUF9CX1QzYSB8ICgocmVsYXRpdmUgJiAweDEwMDAwMCkgPj4gMTApIHwgKChj
b25kICYgMHhmKSA8PCA2KSB8ICgocmVsYXRpdmUgJiAweDNmMDAwKSA+PiAxMik7CisgICAgICAg
IGluc3RydWN0aW9uWy0xXSA9IE9QX0JfVDNiIHwgKChyZWxhdGl2ZSAmIDB4ODAwMDApID4+IDgp
IHwgKChyZWxhdGl2ZSAmIDB4NDAwMDApID4+IDUpIHwgKChyZWxhdGl2ZSAmIDB4ZmZlKSA+PiAx
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXBUNCh1aW50MTZfdCogaW5z
dHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNo
b3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCisgICAg
ICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEp
KTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAm
IDEpKTsKKyAgICAgICAgYm9vbCBzY3JhdGNoOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aCk7CisgICAgICAgIEFTU0VSVChjYW5CZUp1bXBUNChpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3Jh
dGNoKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5z
dHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gQVJNIGVuY29kaW5nIGZvciB0aGUgdG9wIHR3byBiaXRz
IGJlbG93IHRoZSBzaWduIGJpdCBpcyAncGVjdWxpYXInLgorICAgICAgICBpZiAocmVsYXRpdmUg
Pj0gMCkKKyAgICAgICAgICAgIHJlbGF0aXZlIF49IDB4QzAwMDAwOworICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIGJyYW5jaCBvZmZzZXRzIHNob3VsZCBiZSBhbiBldmVuIGRpc3RhbmNlLgorICAg
ICAgICBBU1NFUlQoIShyZWxhdGl2ZSAmIDEpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTJdID0g
T1BfQl9UNGEgfCAoKHJlbGF0aXZlICYgMHgxMDAwMDAwKSA+PiAxNCkgfCAoKHJlbGF0aXZlICYg
MHgzZmYwMDApID4+IDEyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTFdID0gT1BfQl9UNGIgfCAo
KHJlbGF0aXZlICYgMHg4MDAwMDApID4+IDEwKSB8ICgocmVsYXRpdmUgJiAweDQwMDAwMCkgPj4g
MTEpIHwgKChyZWxhdGl2ZSAmIDB4ZmZlKSA+PiAxKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
aW5rQ29uZGl0aW9uYWxKdW1wVDQoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlv
biwgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJl
IHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOwor
ICAgICAgICAKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTNdID0gaWZUaGVuRWxzZShjb25kKSB8IE9Q
X0lUOworICAgICAgICBsaW5rSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBsaW5rQlgodWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0
YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhl
IE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSgKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAgICAKKyAgICAgICAg
Y29uc3QgdWludDE2X3QgSlVNUF9URU1QT1JBUllfUkVHSVNURVIgPSBBUk1SZWdpc3RlcnM6Omlw
OworICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBsbzE2ID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1h
a2VVSW50MTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KHRhcmdldCkgKyAxKSk7CisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGhpMTYgPSBBUk1UaHVt
YkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4odGFyZ2V0KSA+PiAxNikpOworICAgICAgICBpbnN0cnVjdGlvblstNV0g
PSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZfaW1tX1QzLCBsbzE2
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTRdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVk
SW1tU2Vjb25kKEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSLCBsbzE2KTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25bLTNdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tRmlyc3QoT1BfTU9WVCwg
aGkxNik7CisgICAgICAgIGluc3RydWN0aW9uWy0yXSA9IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5j
b2RlZEltbVNlY29uZChKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiwgaGkxNik7CisgICAgICAgIGlu
c3RydWN0aW9uWy0xXSA9IE9QX0JYIHwgKEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSIDw8IDMpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtDb25kaXRpb25hbEJYKENvbmRpdGlvbiBjb25kLCB1
aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJ
TVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAg
ICAgICAgCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry
dWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtCWChpbnN0cnVjdGlvbiwg
dGFyZ2V0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTZdID0gaWZUaGVuRWxzZShjb25kLCB0cnVl
LCB0cnVlKSB8IE9QX0lUOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcEFi
c29sdXRlKHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQogICAgIHsKICAgICAg
ICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXll
ci4gOi0oCiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry
dWN0aW9uKSAmIDEpKTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGFyZ2V0KSAmIDEpKTsKLQorICAgICAgICAKICAgICAgICAgQVNTRVJUKChpc01PVl9pbW1f
VDMoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc01PVlQoaW5zdHJ1Y3Rpb24gLSAzKSAmJiBpc0JYKGlu
c3RydWN0aW9uIC0gMSkpCi0gICAgICAgICAgICB8fCAoaXNOT1BfVDEoaW5zdHJ1Y3Rpb24gLSA1
KSAmJiBpc05PUF9UMihpbnN0cnVjdGlvbiAtIDQpICYmIGlzQihpbnN0cnVjdGlvbiAtIDIpKSk7
Ci0KLSAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pih0YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7Cisg
ICAgICAgICAgICAgICB8fCAoaXNOT1BfVDEoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc05PUF9UMihp
bnN0cnVjdGlvbiAtIDQpICYmIGlzQihpbnN0cnVjdGlvbiAtIDIpKSk7CisgICAgICAgIAogICAg
ICAgICBib29sIHNjcmF0Y2g7CiAgICAgICAgIGlmIChjYW5CZUp1bXBUNChpbnN0cnVjdGlvbiwg
dGFyZ2V0LCBzY3JhdGNoKSkgewotICAgICAgICAgICAgLy8gQVJNIGVuY29kaW5nIGZvciB0aGUg
dG9wIHR3byBiaXRzIGJlbG93IHRoZSBzaWduIGJpdCBpcyAncGVjdWxpYXInLgotICAgICAgICAg
ICAgaWYgKHJlbGF0aXZlID49IDApCi0gICAgICAgICAgICAgICAgcmVsYXRpdmUgXj0gMHhDMDAw
MDA7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBicmFuY2ggb2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZl
biBkaXN0YW5jZS4KLSAgICAgICAgICAgIEFTU0VSVCghKHJlbGF0aXZlICYgMSkpOwogICAgICAg
ICAgICAgLy8gVGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheSB0byBmaXggdGhpcywgYnV0IHJpZ2h0
IG5vdyBwdXQgdGhlIE5PUHMgZmlyc3QsIHNpbmNlIGluIHRoZQogICAgICAgICAgICAgLy8gY2Fz
ZSBvZiBhbiBjb25kaXRpb25hbCBicmFuY2ggdGhpcyB3aWxsIGJlIGNvbWluZyBhZnRlciBhbiBJ
VFRUIHByZWRpY2F0aW5nICp0aHJlZSoKICAgICAgICAgICAgIC8vIGluc3RydWN0aW9ucyEgIExv
b2tpbmcgYmFja3dhcmRzIHRvIG1vZGlmeSB0aGUgSVRUVCB0byBhbiBJVCBpcyBub3QgZWFzeSwg
ZHVlIHRvCkBAIC0yMDcyLDggKzIxOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25bLTVdID0gT1BfTk9QX1QxOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bLTRdID0gT1Bf
Tk9QX1QyYTsKICAgICAgICAgICAgIGluc3RydWN0aW9uWy0zXSA9IE9QX05PUF9UMmI7Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8ICgocmVsYXRpdmUgJiAweDEwMDAw
MDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkgPj4gMTIpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25bLTFdID0gT1BfQl9UNGIgfCAoKHJlbGF0aXZlICYgMHg4MDAwMDApID4+IDEw
KSB8ICgocmVsYXRpdmUgJiAweDQwMDAwMCkgPj4gMTEpIHwgKChyZWxhdGl2ZSAmIDB4ZmZlKSA+
PiAxKTsKKyAgICAgICAgICAgIGxpbmtKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCBKVU1QX1RFTVBPUkFSWV9S
RUdJU1RFUiA9IEFSTVJlZ2lzdGVyczo6aXA7CiAgICAgICAgICAgICBBUk1UaHVtYkltbWVkaWF0
ZSBsbzE2ID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTYoc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRhcmdldCkgKyAxKSk7CkBAIC0yMDg1LDcg
KzIyMDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bLTFdID0gT1BfQlgg
fCAoSlVNUF9URU1QT1JBUllfUkVHSVNURVIgPDwgMyk7CiAgICAgICAgIH0KICAgICB9Ci0KKyAg
ICAKICAgICBzdGF0aWMgdWludDE2X3QgdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tRmly
c3QodWludDE2X3Qgb3AsIEFSTVRodW1iSW1tZWRpYXRlIGltbSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBvcCB8IChpbW0ubV92YWx1ZS5pIDw8IDEwKSB8IGltbS5tX3ZhbHVlLmltbTQ7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDY5MzMzKQorKysg
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjM1
LDEyICsyMzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0YXJnZXQgPSBsaW5rQmFz
ZSArIGp1bXBzVG9MaW5rW2ldLnRvKCkgLSBtX2Fzc2VtYmxlci0+ZXhlY3V0YWJsZU9mZnNldEZv
cihqdW1wc1RvTGlua1tpXS50bygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSnVtcExp
bmtUeXBlIGp1bXBMaW5rVHlwZSA9IG1fYXNzZW1ibGVyLT5jb21wdXRlSnVtcFR5cGUoanVtcHNU
b0xpbmtbaV0sIGxpbmtCYXNlICsgd3JpdGVQdHIsIHRhcmdldCk7Ci0KLSAgICAgICAgICAgIC8v
IFN0ZXAgYmFjayBpbiB0aGUgd3JpdGUgc3RyZWFtCi0gICAgICAgICAgICBpbnQzMl90IGRlbHRh
ID0gbV9hc3NlbWJsZXItPmp1bXBTaXplRGVsdGEoanVtcExpbmtUeXBlKTsKLSAgICAgICAgICAg
IGlmIChkZWx0YSkgewotICAgICAgICAgICAgICAgIHdyaXRlUHRyIC09IGRlbHRhOwotICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLT5yZWNvcmRMaW5rT2Zmc2V0cyhqdW1wc1RvTGlua1tpXS5m
cm9tKCkgLSBkZWx0YSwgcmVhZFB0ciwgcmVhZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgICAg
IEFTU0VSVChqdW1wTGlua1R5cGUgIT0gQVJNdjdBc3NlbWJsZXI6OkxpbmtJbnZhbGlkKTsKKyAg
ICAgICAgICAgIGlmIChqdW1wTGlua1R5cGUgIT0gQVJNdjdBc3NlbWJsZXI6OkxpbmtJbnZhbGlk
KSB7CisgICAgICAgICAgICAgICAgLy8gU3RlcCBiYWNrIGluIHRoZSB3cml0ZSBzdHJlYW0KKyAg
ICAgICAgICAgICAgICBpbnQzMl90IGRlbHRhID0gbV9hc3NlbWJsZXItPmp1bXBTaXplRGVsdGEo
anVtcHNUb0xpbmtbaV0udHlwZSgpLCBqdW1wTGlua1R5cGUpOworICAgICAgICAgICAgICAgIGlm
IChkZWx0YSkgeworICAgICAgICAgICAgICAgICAgICB3cml0ZVB0ciAtPSBkZWx0YTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXItPnJlY29yZExpbmtPZmZzZXRzKGp1bXBzVG9MaW5r
W2ldLmZyb20oKSAtIGRlbHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQdHIpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGp1bXBzVG9MaW5rW2ldLnNl
dEZyb20od3JpdGVQdHIpOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDY5MzMzKQorKysgSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBNYWNyb0Fz
c2VtYmxlckFSTXY3IDogcHVibGljIEFic3RyCiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEFSTXY3
QXNzZW1ibGVyOjpMaW5rUmVjb3JkIExpbmtSZWNvcmQ7CisgICAgdHlwZWRlZiBBUk12N0Fzc2Vt
Ymxlcjo6SnVtcFR5cGUgSnVtcFR5cGU7CiAgICAgdHlwZWRlZiBBUk12N0Fzc2VtYmxlcjo6SnVt
cExpbmtUeXBlIEp1bXBMaW5rVHlwZTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQVJNdjcoKQpAQCAt
NTcsOSArNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNl
KCkgeyBtX2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlID0gZmFsc2U7IH0KICAgICBWZWN0b3I8TGlu
a1JlY29yZD4mIGp1bXBzVG9MaW5rKCkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcHNUb0xpbmso
KTsgfQogICAgIHZvaWQqIHVubGlua2VkQ29kZSgpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLnVubGlu
a2VkQ29kZSgpOyB9CisgICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShKdW1wVHlwZSBq
dW1wVHlwZSwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJu
IG1fYXNzZW1ibGVyLmNvbXB1dGVKdW1wVHlwZShqdW1wVHlwZSwgZnJvbSwgdG8pOyB9CiAgICAg
SnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShMaW5rUmVjb3JkJiByZWNvcmQsIGNvbnN0IHVp
bnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5jb21w
dXRlSnVtcFR5cGUocmVjb3JkLCBmcm9tLCB0byk7IH0KICAgICB2b2lkIHJlY29yZExpbmtPZmZz
ZXRzKGludDMyX3QgcmVnaW9uU3RhcnQsIGludDMyX3QgcmVnaW9uRW5kLCBpbnQzMl90IG9mZnNl
dCkge3JldHVybiBtX2Fzc2VtYmxlci5yZWNvcmRMaW5rT2Zmc2V0cyhyZWdpb25TdGFydCwgcmVn
aW9uRW5kLCBvZmZzZXQpOyB9Ci0gICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcExpbmtUeXBlIGp1
bXBMaW5rVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcFNpemVEZWx0YShqdW1wTGlua1R5
cGUpOyB9CisgICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcFR5cGUganVtcFR5cGUsIEp1bXBMaW5r
VHlwZSBqdW1wTGlua1R5cGUpIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmp1bXBTaXplRGVsdGEoanVt
cFR5cGUsIGp1bXBMaW5rVHlwZSk7IH0KICAgICB2b2lkIGxpbmsoTGlua1JlY29yZCYgcmVjb3Jk
LCB1aW50OF90KiBmcm9tLCB1aW50OF90KiB0bykgeyByZXR1cm4gbV9hc3NlbWJsZXIubGluayhy
ZWNvcmQsIGZyb20sIHRvKTsgfQogCiAgICAgc3RydWN0IEFybUFkZHJlc3MgewpAQCAtOTg2LDE0
ICs5ODgsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQog
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuYngodGFyZ2V0LCBpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpK
dW1wTm9Db25kaXRpb24pOworICAgICAgICBtX2Fzc2VtYmxlci5ieCh0YXJnZXQsIEFSTXY3QXNz
ZW1ibGVyOjpKdW1wRml4ZWQpOwogICAgIH0KIAogICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1vcnkg
bG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCiAgICAgdm9pZCBqdW1w
KEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVt
cFJlZ2lzdGVyKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3RlciwgaW5V
bmludGVycnVwdGVkU2VxdWVuY2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUgOiBB
Uk12N0Fzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYngo
ZGF0YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGaXhlZCk7CiAgICAgfQogCiAK
QEAgLTEwODIsMjkgKzEwODQsMjkgQEAgcHVibGljOgogICAgIENhbGwgbmVhckNhbGwoKQogICAg
IHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdp
c3Rlcik7Ci0gICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseChkYXRhVGVtcFJlZ2lz
dGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFS
TXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOwogICAgIH0KIAog
ICAgIENhbGwgY2FsbCgpCiAgICAgewogICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKElt
bTMyKDApLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBD
YWxsOjpMaW5rYWJsZSk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseChkYXRh
VGVtcFJlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6TGlua2FibGUp
OwogICAgIH0KIAogICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseCh0YXJnZXQsIEFSTXY3QXNzZW1ibGVyOjpK
dW1wRnVsbFNpemUpLCBDYWxsOjpOb25lKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuYmx4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6Ok5vbmUpOwog
ICAgIH0KIAogICAgIENhbGwgY2FsbChBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBs
b2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBDYWxsKG1f
YXNzZW1ibGVyLmJseChkYXRhVGVtcFJlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxT
aXplKSwgQ2FsbDo6Tm9uZSk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseChk
YXRhVGVtcFJlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6Tm9uZSk7
CiAgICAgfQogCiAgICAgdm9pZCByZXQoKQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuYngo
bGlua1JlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYngobGlua1JlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKTsKICAg
ICB9CiAKICAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKQEAgLTEyMDQsNyArMTIwNiw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIC8vIExpa2UgYSBub3JtYWwgY2FsbCwgYnV0IGRvbid0IGxp
bmsuCiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRhdGFUZW1wUmVn
aXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lz
dGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplKSwgQ2FsbDo6TGlua2FibGUpOworICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBBUk12N0Fz
c2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6TGlua2FibGUpOwogICAgIH0KIAogICAgIENhbGwg
bWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1bXAgb2xkSnVtcCkKQEAgLTEyMjgsMTQgKzEyMzAsMTQg
QEAgcHJvdGVjdGVkOgogICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUp1bXAoKQogICAg
IHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdp
c3Rlcik7Ci0gICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBp
blVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6
IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb24pOworICAgICAgICByZXR1cm4gbV9hc3Nl
bWJsZXIuYngoZGF0YVRlbXBSZWdpc3RlciwgaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKSA/IEFS
TXY3QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wTm9Db25kaXRpb24gOiBBUk12N0Fzc2VtYmxlcjo6
SnVtcE5vQ29uZGl0aW9uKTsKICAgICB9CiAKICAgICBBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjIG1h
a2VCcmFuY2goQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kKQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuaXQoY29uZCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgIG1vdmVGaXhlZFdpZHRo
RW5jb2RpbmcoSW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gbV9h
c3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3RlciwgaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKSA/
IEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUgOiBBUk12N0Fzc2VtYmxlcjo6SnVtcENvbmRp
dGlvbiwgY29uZCk7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lz
dGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXBDb25kaXRpb24gOiBBUk12N0Fzc2VtYmxlcjo6SnVtcENvbmRpdGlvbiwgY29uZCk7CiAg
ICAgfQogICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUJyYW5jaChDb25kaXRpb24gY29u
ZCkgeyByZXR1cm4gbWFrZUJyYW5jaChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0KICAgICBBUk12
N0Fzc2VtYmxlcjo6Sm1wU3JjIG1ha2VCcmFuY2goRG91YmxlQ29uZGl0aW9uIGNvbmQpIHsgcmV0
dXJuIG1ha2VCcmFuY2goYXJtVjdDb25kaXRpb24oY29uZCkpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70672</attachid>
            <date>2010-10-13 15:25:03 -0700</date>
            <delta_ts>2010-10-13 23:45:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47384-20101013152502.patch</filename>
            <type>text/plain</type>
            <size>31959</size>
            <attacher name="David Goodwin">david_goodwin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NzAwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMTAtMTMgIERhdmlkIEdv
b2R3aW4gIDxkYXZpZF9nb29kd2luQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUk12NyBKSVQgc2hvdWxkIGdlbmVyYXRlZCBjb25k
aXRpb25hbCBicmFuY2hlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NAorCisgICAgICAgIFVzZSBkaWZmZXJlbnQganVt
cCBwYWRkaW5nIHNpemVzIGZvciBjb25kaXRpb25hbCBhbmQgdW5jb25kaXRpb25hbAorICAgICAg
ICBqdW1wcyAoMTIgYnl0ZXMgYW5kIDEwIGJ5dGVzIHJlc3BlY3RpdmVseSkuIFRoaXMgYWxsb3dz
IHRoZSBKSVQgdG8KKyAgICAgICAgaW5jbHVkZSB0aGUgSVQgaW5zdHJ1Y3Rpb24gYXMgcGFydCBv
ZiB0aGUgY29uZGl0aW9uYWwganVtcCBzZXF1ZW5jZQorICAgICAgICB3aGljaCBpbiB0dXJuIGFs
bG93cyBpdCB0byBvcHRpbWl6ZSBhd2F5IHRoZSBJVCB1c2luZyBhbiBBUk12NyAKKyAgICAgICAg
Y29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uLiBVc2UgMi1ieXRlIEIoVDEpIGFuZCA0LWJ5
dGUgQihUMykgZm9yCisgICAgICAgIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHdoZW4gZGlzcGxhY2Vt
ZW50IGlzIGluIHJhbmdlLiBBbHNvIHVzZSBJVC9CKFQ0KQorICAgICAgICBmb3IgY29uZGl0aW9u
YWwgYnJhbmNoIHdoZW4gZGlzcGxhY2VtZW50IGRvZXMgbm90IGZpdCBpbiBCKFQzKS4KKworICAg
ICAgICBGb3IgdW5jb25kaXRpb25hbCBqdW1wLCBpbnN0cnVjdGlvbiBzZWxlY3Rpb24gb3B0aW9u
cyBhcmU6CisgICAgICAgIEIoVDIpLCBCKFQ0KSwgTU9WVy9NT1ZUL0JYLiBGb3IgY29uZGl0aW9u
YWwganVtcCwgaW5zdHJ1Y3Rpb24gc2VsZWN0aW9uCisgICAgICAgIG9wdGlvbnMgYXJlOiBCKFQx
KSwgQihUMyksIElUL0IoVDQpLCBJVFRUL01PVlcvTU9WVC9CWC4KKworICAgICAgICAqIGFzc2Vt
Ymxlci9BUk12N0Fzc2VtYmxlci5jcHA6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpKbXBTcmM6OkptcFNyYyk6Cisg
ICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjppZlRoZW5FbHNlKToKKyAgICAgICAgKEpTQzo6
QVJNdjdBc3NlbWJsZXI6Omp1bXBTaXplRGVsdGEpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2Vt
Ymxlcjo6Y2FuQ29tcGFjdCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjb21wdXRl
SnVtcFR5cGUpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6bGluayk6CisgICAgICAg
IChKU0M6OkFSTXY3QXNzZW1ibGVyOjpjYW5CZUp1bXBUMSk6CisgICAgICAgIChKU0M6OkFSTXY3
QXNzZW1ibGVyOjpjYW5CZUp1bXBUMyk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpj
YW5CZUp1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpsaW5rSnVtcFQxKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wVDMpOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6bGlua0p1bXBUNCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1i
bGVyOjpsaW5rQ29uZGl0aW9uYWxKdW1wVDQpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6bGlua0JYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtDb25kaXRpb25h
bEJYKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtKdW1wQWJzb2x1dGUpOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpjYW5Db21wYWN0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y29tcHV0ZUp1bXBUeXBlKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6anVtcFNpemVEZWx0YSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Omp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTXY3OjpuZWFyQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmNh
bGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojp0YWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om1ha2VKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk12Nzo6bWFrZUJyYW5jaCk6CisKIDIwMTAtMTAtMTMgIEdhdmluIEJhcnJhY2xv
dWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4
LgpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuY3BwCShy
ZXZpc2lvbiA2OTY2NSkKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBpbnQgQVJNdjdBc3NlbWJsZXI6Okp1bXBTaXplc1tdID0geyAweGZmZmZmZmZmLCBz
aXplb2YodWludDE2X3QpLCBzaXplb2YodWludDE2X3QpLAotICAgIDIgKiBzaXplb2YodWludDE2
X3QpLCAyICogc2l6ZW9mKHVpbnQxNl90KSwgNSAqIHNpemVvZih1aW50MTZfdCkgfTsKKyAgICAy
ICogc2l6ZW9mKHVpbnQxNl90KSwgMiAqIHNpemVvZih1aW50MTZfdCksIDMgKiBzaXplb2YodWlu
dDE2X3QpLCA1ICogc2l6ZW9mKHVpbnQxNl90KSwgNiAqIHNpemVvZih1aW50MTZfdCkgfTsKK2Nv
bnN0IGludCBBUk12N0Fzc2VtYmxlcjo6SnVtcFBhZGRpbmdTaXplc1tdID0geyAwLCA1ICogc2l6
ZW9mKHVpbnQxNl90KSwgNiAqIHNpemVvZih1aW50MTZfdCksCisgICAgNSAqIHNpemVvZih1aW50
MTZfdCksIDYgKiBzaXplb2YodWludDE2X3QpIH07CiAKIH0KIApJbmRleDogSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJldmlzaW9uIDY5NjY1KQorKysgSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
OCwxMSArNDc4LDExIEBAIHB1YmxpYzoKICAgICAgICAgQ29uZGl0aW9uSW52YWxpZAogICAgIH0g
Q29uZGl0aW9uOwogCi0gICAgZW51bSBKdW1wVHlwZSB7IEp1bXBOb0NvbmRpdGlvbiwgSnVtcENv
bmRpdGlvbiwgSnVtcEZ1bGxTaXplIH07Ci0gICAgZW51bSBKdW1wTGlua1R5cGUgeyBMaW5rSW52
YWxpZCwgTGlua0p1bXBUMiwgTGlua0NvbmRpdGlvbmFsSnVtcFQyLCAKLSAgICAgICAgTGlua0p1
bXBUNCwgTGlua0NvbmRpdGlvbmFsSnVtcFQ0LCBMaW5rQlgsIEp1bXBUeXBlQ291bnQgfTsKLSAg
ICBzdGF0aWMgY29uc3QgaW50IEp1bXBTaXplc1tKdW1wVHlwZUNvdW50XTsKLSAgICBlbnVtIHsg
SnVtcFBhZGRpbmdTaXplID0gNSAqIHNpemVvZih1aW50MTZfdCkgfTsKKyAgICBlbnVtIEp1bXBU
eXBlIHsgSnVtcEZpeGVkLCBKdW1wTm9Db25kaXRpb24sIEp1bXBDb25kaXRpb24sIEp1bXBOb0Nv
bmRpdGlvbkZpeGVkU2l6ZSwgSnVtcENvbmRpdGlvbkZpeGVkU2l6ZSwgSnVtcFR5cGVDb3VudCB9
OworICAgIGVudW0gSnVtcExpbmtUeXBlIHsgTGlua0ludmFsaWQsIExpbmtKdW1wVDEsIExpbmtK
dW1wVDIsIExpbmtKdW1wVDMsCisgICAgICAgIExpbmtKdW1wVDQsIExpbmtDb25kaXRpb25hbEp1
bXBUNCwgTGlua0JYLCBMaW5rQ29uZGl0aW9uYWxCWCwgSnVtcExpbmtUeXBlQ291bnQgfTsKKyAg
ICBzdGF0aWMgY29uc3QgaW50IEp1bXBTaXplc1tKdW1wTGlua1R5cGVDb3VudF07CisgICAgc3Rh
dGljIGNvbnN0IGludCBKdW1wUGFkZGluZ1NpemVzW0p1bXBUeXBlQ291bnRdOwogICAgIGNsYXNz
IExpbmtSZWNvcmQgewogICAgIHB1YmxpYzoKICAgICAgICAgTGlua1JlY29yZChpbnRwdHJfdCBm
cm9tLCBpbnRwdHJfdCB0bywgSnVtcFR5cGUgdHlwZSwgQ29uZGl0aW9uIGNvbmRpdGlvbikKQEAg
LTUwMyw4ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50cHRyX3Qg
bV9mcm9tIDogMzE7CiAgICAgICAgIGludHB0cl90IG1fdG8gOiAzMTsKLSAgICAgICAgSnVtcFR5
cGUgbV90eXBlIDogMjsKLSAgICAgICAgSnVtcExpbmtUeXBlIG1fbGlua1R5cGUgOiAzOworICAg
ICAgICBKdW1wVHlwZSBtX3R5cGUgOiAzOworICAgICAgICBKdW1wTGlua1R5cGUgbV9saW5rVHlw
ZSA6IDQ7CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbiA6IDE2OwogICAgIH07CiAgICAg
CkBAIC01MjQsNyArNTI0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX2NvbmRpdGlvbihD
b25kaXRpb25JbnZhbGlkKQogICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBKdW1wQ29uZGl0aW9uKTsKKyAgICAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gSnVtcEZpeGVkIHx8IG1fdHlwZSA9PSBKdW1wTm9Db25kaXRpb24g
fHwgbV90eXBlID09IEp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBKbXBTcmMoaW50IG9mZnNldCwgSnVtcFR5cGUgdHlwZSwgQ29uZGl0aW9uIGNvbmRpdGlv
bikKQEAgLTUzMiw3ICs1MzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fY29uZGl0aW9u
KGNvbmRpdGlvbikKICAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSnVtcENvbmRpdGlvbiB8fCBtX3R5cGUgPT0gSnVtcEZ1
bGxTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSnVtcEZpeGVkIHx8IG1fdHlw
ZSA9PSBKdW1wQ29uZGl0aW9uIHx8IG1fdHlwZSA9PSBKdW1wQ29uZGl0aW9uRml4ZWRTaXplKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGludCBtX29mZnNldDsKQEAgLTYyOSw2ICs2MjksNyBAQCBw
cml2YXRlOgogICAgIH0gT3Bjb2RlSUQ7CiAKICAgICB0eXBlZGVmIGVudW0geworICAgICAgICBP
UF9CX1QxICAgICAgICAgPSAweEQwMDAsCiAgICAgICAgIE9QX0JfVDIgICAgICAgICA9IDB4RTAw
MCwKICAgICAgICAgT1BfQU5EX3JlZ19UMiAgID0gMHhFQTAwLAogICAgICAgICBPUF9UU1RfcmVn
X1QyICAgPSAweEVBMTAsCkBAIC02NTcsNiArNjU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1Bf
VkNWVF9GUElWRlAgID0gMHhFRUIwLAogICAgICAgICBPUF9WTU9WX0lNTV9UMiAgPSAweEVFQjAs
CiAgICAgICAgIE9QX1ZNUlMgICAgICAgICA9IDB4RUVCMCwKKyAgICAgICAgT1BfQl9UM2EgICAg
ICAgID0gMHhGMDAwLAogICAgICAgICBPUF9CX1Q0YSAgICAgICAgPSAweEYwMDAsCiAgICAgICAg
IE9QX0FORF9pbW1fVDEgICA9IDB4RjAwMCwKICAgICAgICAgT1BfVFNUX2ltbSAgICAgID0gMHhG
MDEwLApAQCAtNzA5LDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX1ZDVlRfRlBJVkZQ
YiA9IDB4MEE0MCwKICAgICAgICAgT1BfVlNVQl9UMmIgICAgID0gMHgwQTQwLAogICAgICAgICBP
UF9OT1BfVDJiICAgICAgPSAweDgwMDAsCisgICAgICAgIE9QX0JfVDNiICAgICAgICA9IDB4ODAw
MCwKICAgICAgICAgT1BfQl9UNGIgICAgICAgID0gMHg5MDAwLAogICAgIH0gT3Bjb2RlSUQyOwog
CkBAIC03NDUsNyArNzQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHwgKGlmVGhlbkVsc2VD
b25kaXRpb25CaXQoY29uZGl0aW9uLCBpbnN0M2lmKSA8PCAyKQogICAgICAgICAgICAgfCAoaWZU
aGVuRWxzZUNvbmRpdGlvbkJpdChjb25kaXRpb24sIGluc3Q0aWYpIDw8IDEpCiAgICAgICAgICAg
ICB8IDE7Ci0gICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFMKSB8fCAobWFz
ayAmIChtYXNrIC0gMSkpKTsKKyAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29uZGl0aW9u
QUwpIHx8ICEobWFzayAmIChtYXNrIC0gMSkpKTsKICAgICAgICAgcmV0dXJuIChjb25kaXRpb24g
PDwgNCkgfCBtYXNrOwogICAgIH0KICAgICB1aW50OF90IGlmVGhlbkVsc2UoQ29uZGl0aW9uIGNv
bmRpdGlvbiwgYm9vbCBpbnN0MmlmLCBib29sIGluc3QzaWYpCkBAIC03NTMsMjEgKzc1NiwyMCBA
QCBwcml2YXRlOgogICAgICAgICBpbnQgbWFzayA9IChpZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNv
bmRpdGlvbiwgaW5zdDJpZikgPDwgMykKICAgICAgICAgICAgIHwgKGlmVGhlbkVsc2VDb25kaXRp
b25CaXQoY29uZGl0aW9uLCBpbnN0M2lmKSA8PCAyKQogICAgICAgICAgICAgfCAyOwotICAgICAg
ICBBU1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkgfHwgKG1hc2sgJiAobWFzayAtIDEp
KSk7CisgICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFMKSB8fCAhKG1hc2sg
JiAobWFzayAtIDEpKSk7CiAgICAgICAgIHJldHVybiAoY29uZGl0aW9uIDw8IDQpIHwgbWFzazsK
ICAgICB9CiAgICAgdWludDhfdCBpZlRoZW5FbHNlKENvbmRpdGlvbiBjb25kaXRpb24sIGJvb2wg
aW5zdDJpZikKICAgICB7CiAgICAgICAgIGludCBtYXNrID0gKGlmVGhlbkVsc2VDb25kaXRpb25C
aXQoY29uZGl0aW9uLCBpbnN0MmlmKSA8PCAzKQogICAgICAgICAgICAgfCA0OwotICAgICAgICBB
U1NFUlQoKGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkgfHwgKG1hc2sgJiAobWFzayAtIDEpKSk7
CisgICAgICAgIEFTU0VSVCgoY29uZGl0aW9uICE9IENvbmRpdGlvbkFMKSB8fCAhKG1hc2sgJiAo
bWFzayAtIDEpKSk7CiAgICAgICAgIHJldHVybiAoY29uZGl0aW9uIDw8IDQpIHwgbWFzazsKICAg
ICB9CiAKICAgICB1aW50OF90IGlmVGhlbkVsc2UoQ29uZGl0aW9uIGNvbmRpdGlvbikKICAgICB7
CiAgICAgICAgIGludCBtYXNrID0gODsKLSAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0gQ29u
ZGl0aW9uQUwpIHx8IChtYXNrICYgKG1hc2sgLSAxKSkpOwogICAgICAgICByZXR1cm4gKGNvbmRp
dGlvbiA8PCA0KSB8IG1hc2s7CiAgICAgfQogCkBAIC0xNjY0LDcgKzE2NjYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Kj4obV9mb3JtYXR0ZXIuZGF0YSgp
KVtsb2NhdGlvbiAvIHNpemVvZihpbnQzMl90KSAtIDFdOwogICAgIH0KICAgICAKLSAgICBpbnQg
anVtcFNpemVEZWx0YShKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7IHJldHVybiBKdW1wUGFk
ZGluZ1NpemUgLSBKdW1wU2l6ZXNbanVtcExpbmtUeXBlXTsgfQorICAgIGludCBqdW1wU2l6ZURl
bHRhKEp1bXBUeXBlIGp1bXBUeXBlLCBKdW1wTGlua1R5cGUganVtcExpbmtUeXBlKSB7IHJldHVy
biBKdW1wUGFkZGluZ1NpemVzW2p1bXBUeXBlXSAtIEp1bXBTaXplc1tqdW1wTGlua1R5cGVdOyB9
CiAgICAgCiAgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhvZHM6CiAKQEAgLTE2NzgsMzkgKzE2
ODAsNzMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYS5mcm9tKCkgPCBiLmZyb20oKTsKICAg
ICB9CiAKLSAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29y
ZCwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pCisgICAgYm9vbCBjYW5D
b21wYWN0KEp1bXBUeXBlIGp1bXBUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKHJlY29yZC50eXBl
KCkgPj0gSnVtcEZ1bGxTaXplKSB7Ci0gICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlu
a0JYKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjYW5ub3QgYmUgY29tcGFjdGVkOgorICAg
ICAgICAvLyAgIEp1bXBGaXhlZDogcmVwcmVzZW50cyBjdXN0b20ganVtcCBzZXF1ZW5jZQorICAg
ICAgICAvLyAgIEp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZTogcmVwcmVzZW50cyB1bmNvbmRpdGlv
bmFsIGp1bXAgdGhhdCBtdXN0IHJlbWFpbiBhIGZpeGVkIHNpemUKKyAgICAgICAgLy8gICBKdW1w
Q29uZGl0aW9uRml4ZWRTaXplOiByZXByZXNlbnRzIGNvbmRpdGlvbmFsIGp1bXAgdGhhdCBtdXN0
IHJlbWFpbiBhIGZpeGVkIHNpemUKKyAgICAgICAgcmV0dXJuIChqdW1wVHlwZSA9PSBKdW1wTm9D
b25kaXRpb24pIHx8IChqdW1wVHlwZSA9PSBKdW1wQ29uZGl0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShKdW1wVHlwZSBqdW1wVHlwZSwgY29uc3Qg
dWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pCisgICAgeworICAgICAgICBpZiAoanVt
cFR5cGUgPT0gSnVtcEZpeGVkKQorICAgICAgICAgICAgcmV0dXJuIExpbmtJbnZhbGlkOworICAg
ICAgICAKKyAgICAgICAgLy8gZm9yIHBhdGNoYWJsZSBqdW1wIHdlIG11c3QgbGVhdmUgc3BhY2Ug
Zm9yIHRoZSBsb25nZXN0IGNvZGUgc2VxdWVuY2UKKyAgICAgICAgaWYgKGp1bXBUeXBlID09IEp1
bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBMaW5rQlg7Ci0gICAg
ICAgIH0KLSAgICAgICAgY29uc3QgdWludDE2X3QqIGp1bXBUMkxvY2F0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGZyb20gIC0gKEp1bXBQYWRkaW5nU2l6ZSAtIEp1bXBT
aXplc1tMaW5rSnVtcFQyXSkpOwotICAgICAgICBpZiAoY2FuQmVKdW1wVDIoanVtcFQyTG9jYXRp
b24sIHRvKSkgewotICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlKCkgPT0gSnVtcENvbmRpdGlv
bikgewotICAgICAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rQ29uZGl0aW9uYWxK
dW1wVDIpOwotICAgICAgICAgICAgICAgIHJldHVybiBMaW5rQ29uZGl0aW9uYWxKdW1wVDI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0p1bXBUMik7
Ci0gICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUMjsKLSAgICAgICAgfQorICAgICAgICBpZiAo
anVtcFR5cGUgPT0gSnVtcENvbmRpdGlvbkZpeGVkU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBM
aW5rQ29uZGl0aW9uYWxCWDsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBwYWRkaW5nU2l6
ZSA9IEp1bXBQYWRkaW5nU2l6ZXNbanVtcFR5cGVdOwogICAgICAgICBib29sIG1heVRyaWdnZXJF
cnJhdGEgPSBmYWxzZTsKLSAgICAgICAgY29uc3QgdWludDE2X3QqIGp1bXBUNExvY2F0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGZyb20gIC0gKEp1bXBQYWRkaW5nU2l6
ZSAtIEp1bXBTaXplc1tMaW5rSnVtcFQ0XSkpOwotICAgICAgICBpZiAoIWNhbkJlSnVtcFQ0KGp1
bXBUNExvY2F0aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0YSkpIHsKLSAgICAgICAgICAgIHJlY29y
ZC5zZXRMaW5rVHlwZShMaW5rQlgpOwotICAgICAgICAgICAgcmV0dXJuIExpbmtCWDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobWF5VHJpZ2dlckVycmF0YSkgewotICAgICAgICAgICAgcmVjb3Jk
LnNldExpbmtUeXBlKExpbmtCWCk7CisgICAgICAgIAorICAgICAgICBpZiAoanVtcFR5cGUgPT0g
SnVtcENvbmRpdGlvbikgeworICAgICAgICAgICAgLy8gMi1ieXRlIGNvbmRpdGlvbmFsIFQxCisg
ICAgICAgICAgICBjb25zdCB1aW50MTZfdCoganVtcFQxTG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAtIChwYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5r
SnVtcFQxXSkpOworICAgICAgICAgICAgaWYgKGNhbkJlSnVtcFQxKGp1bXBUMUxvY2F0aW9uLCB0
bykpCisgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1wVDE7CisgICAgICAgICAgICAvLyA0
LWJ5dGUgY29uZGl0aW9uYWwgVDMKKyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDNM
b2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRp
bmdTaXplIC0gSnVtcFNpemVzW0xpbmtKdW1wVDNdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVK
dW1wVDMoanVtcFQzTG9jYXRpb24sIHRvLCBtYXlUcmlnZ2VyRXJyYXRhKSkgeworICAgICAgICAg
ICAgICAgIGlmICghbWF5VHJpZ2dlckVycmF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IExpbmtKdW1wVDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyA0LWJ5dGUgY29uZGl0
aW9uYWwgVDQgd2l0aCBJVAorICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGNvbmRpdGlvbmFs
SnVtcFQ0TG9jYXRpb24gPSAKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0gSnVtcFNpemVzW0xpbmtDb25kaXRpb25hbEp1
bXBUNF0pKTsKKyAgICAgICAgICAgIGlmIChjYW5CZUp1bXBUNChjb25kaXRpb25hbEp1bXBUNExv
Y2F0aW9uLCB0bywgbWF5VHJpZ2dlckVycmF0YSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1h
eVRyaWdnZXJFcnJhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5rQ29uZGl0aW9u
YWxKdW1wVDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyAyLWJ5dGUgdW5jb25kaXRpb25hbCBUMgorICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGp1
bXBUMkxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGZyb20gLSAo
cGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUMl0pKTsKKyAgICAgICAgICAgIGlmIChj
YW5CZUp1bXBUMihqdW1wVDJMb2NhdGlvbiwgdG8pKQorICAgICAgICAgICAgICAgIHJldHVybiBM
aW5rSnVtcFQyOworICAgICAgICAgICAgLy8gNC1ieXRlIHVuY29uZGl0aW9uYWwgVDQKKyAgICAg
ICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDRMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0gSnVtcFNpemVzW0xpbmtKdW1w
VDRdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVKdW1wVDQoanVtcFQ0TG9jYXRpb24sIHRvLCBt
YXlUcmlnZ2VyRXJyYXRhKSkgeworICAgICAgICAgICAgICAgIGlmICghbWF5VHJpZ2dlckVycmF0
YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1wVDQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyB1c2UgbG9uZyBqdW1wIHNlcXVlbmNlCiAgICAgICAgICAgICByZXR1
cm4gTGlua0JYOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyZWNvcmQudHlwZSgpID09IEp1bXBD
b25kaXRpb24pIHsKLSAgICAgICAgICAgIHJlY29yZC5zZXRMaW5rVHlwZShMaW5rQ29uZGl0aW9u
YWxKdW1wVDQpOwotICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEp1bXBUNDsKLSAg
ICAgICAgfQotICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUoTGlua0p1bXBUNCk7Ci0gICAgICAg
IHJldHVybiBMaW5rSnVtcFQ0OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGp1bXBUeXBlID09
IEp1bXBDb25kaXRpb24pOworICAgICAgICByZXR1cm4gTGlua0NvbmRpdGlvbmFsQlg7CiAgICAg
fQotCisgICAgCisgICAgSnVtcExpbmtUeXBlIGNvbXB1dGVKdW1wVHlwZShMaW5rUmVjb3JkJiBy
ZWNvcmQsIGNvbnN0IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQorICAgIHsKKyAg
ICAgICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gY29tcHV0ZUp1bXBUeXBlKHJlY29yZC50eXBl
KCksIGZyb20sIHRvKTsKKyAgICAgICAgcmVjb3JkLnNldExpbmtUeXBlKGxpbmtUeXBlKTsKKyAg
ICAgICAgcmV0dXJuIGxpbmtUeXBlOworICAgIH0KKyAgICAKICAgICB2b2lkIHJlY29yZExpbmtP
ZmZzZXRzKGludDMyX3QgcmVnaW9uU3RhcnQsIGludDMyX3QgcmVnaW9uRW5kLCBpbnQzMl90IG9m
ZnNldCkKICAgICB7CiAgICAgICAgIGludDMyX3QgcHRyID0gcmVnaW9uU3RhcnQgLyBzaXplb2Yo
aW50MzJfdCk7CkBAIC0xNzI4LDIxICsxNzY0LDI1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGlu
ayhMaW5rUmVjb3JkJiByZWNvcmQsIHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKQogICAgIHsK
LSAgICAgICAgSnVtcExpbmtUeXBlIGxpbmtUeXBlID0gcmVjb3JkLmxpbmtUeXBlKCk7Ci0gICAg
ICAgIEFTU0VSVChsaW5rVHlwZSAhPSBMaW5rSW52YWxpZCk7Ci0gICAgICAgIGlmICgobGlua1R5
cGUgPT0gTGlua0NvbmRpdGlvbmFsSnVtcFQyKSB8fCAobGlua1R5cGUgPT0gTGlua0NvbmRpdGlv
bmFsSnVtcFQ0KSkgewotICAgICAgICAgICAgdWludDE2X3QqIGl0dHRMb2NhdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tIC0gSnVtcFNpemVzW2xpbmtUeXBlXSAtIDIpOwot
ICAgICAgICAgICAgaXR0dExvY2F0aW9uWzBdID0gaWZUaGVuRWxzZShyZWNvcmQuY29uZGl0aW9u
KCkpIHwgT1BfSVQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChsaW5rVHlwZSkgeworICAg
ICAgICBzd2l0Y2ggKHJlY29yZC5saW5rVHlwZSgpKSB7CisgICAgICAgIGNhc2UgTGlua0p1bXBU
MToKKyAgICAgICAgICAgIGxpbmtKdW1wVDEocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJl
dF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIExpbmtKdW1wVDI6Ci0gICAgICAgIGNhc2UgTGlua0NvbmRpdGlvbmFsSnVtcFQyOgog
ICAgICAgICAgICAgbGlua0p1bXBUMihyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSks
IHRvKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtKdW1wVDM6CisgICAg
ICAgICAgICBsaW5rSnVtcFQzKHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDx1
aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBM
aW5rSnVtcFQ0OgotICAgICAgICBjYXNlIExpbmtDb25kaXRpb25hbEp1bXBUNDoKICAgICAgICAg
ICAgIGxpbmtKdW1wVDQocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxKdW1wVDQ6Cisg
ICAgICAgICAgICBsaW5rQ29uZGl0aW9uYWxKdW1wVDQocmVjb3JkLmNvbmRpdGlvbigpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExpbmtDb25kaXRpb25hbEJYOgorICAgICAgICAgICAgbGlua0NvbmRpdGlv
bmFsQlgocmVjb3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJv
bSksIHRvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpbmtCWDoKICAgICAg
ICAgICAgIGxpbmtCWChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTk2OSw2ICsyMDA5LDE5IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiAoaW5zdHJ1Y3Rpb25bMF0gPT0gT1BfTk9QX1QyYSkgJiYgKGluc3RydWN0aW9uWzFd
ID09IE9QX05PUF9UMmIpOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNhbkJlSnVtcFQxKGNv
bnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOworICAgICAgICAKKyAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu
c3RydWN0aW9uKSk7CisgICAgICAgIC8vIEl0IGRvZXMgbm90IGFwcGVhciB0byBiZSBkb2N1bWVu
dGVkIGluIHRoZSBBUk0gQVJNIChiaWcgc3VycHJpc2UpLCBidXQKKyAgICAgICAgLy8gZm9yIE9Q
X0JfVDEgdGhlIGJyYW5jaCBkaXNwbGFjZW1lbnQgZW5jb2RlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24g
aXMgMiAKKyAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBhY3R1YWwgZGlzcGxhY2VtZW50LgorICAg
ICAgICByZWxhdGl2ZSAtPSAyOworICAgICAgICByZXR1cm4gKChyZWxhdGl2ZSA8PCAyMykgPj4g
MjMpID09IHJlbGF0aXZlOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgYm9vbCBjYW5CZUp1bXBU
Mihjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZvaWQqIHRhcmdldCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9u
KSAmIDEpKTsKQEAgLTE5ODIsNyArMjAzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAo
KHJlbGF0aXZlIDw8IDIwKSA+PiAyMCkgPT0gcmVsYXRpdmU7CiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBib29sIGNhbkJlSnVtcFQ0KGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qg
dm9pZCogdGFyZ2V0LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQorICAgIHN0YXRpYyBib29sIGNh
bkJlSnVtcFQzKGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qgdm9pZCogdGFyZ2V0
LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOwpAQCAtMjAwMCwzNCAr
MjA1Myw0OCBAQCBwcml2YXRlOgogICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGluIHRoZSBmaXJz
dCBwYWdlIGlmIHRoZSBqdW1wIGJyYW5jaCBiYWNrIGJ5IFszLi4weDEwMDJdIGJ5dGVzCiAgICAg
ICAgIGJvb2wgdGFyZ2V0SW5GaXJzdFBhZ2UgPSAocmVsYXRpdmUgPj0gLTB4MTAwMikgJiYgKHJl
bGF0aXZlIDwgLTIpOwogICAgICAgICBib29sIHdvdWxkVHJpZ2dlckE4RXJyYXRhID0gc3BhbnNU
d280SyAmJiB0YXJnZXRJbkZpcnN0UGFnZTsKLSAgICAgICAgcmV0dXJuICgocmVsYXRpdmUgPDwg
NykgPj4gNykgPT0gcmVsYXRpdmUgJiYgIXdvdWxkVHJpZ2dlckE4RXJyYXRhOworICAgICAgICBy
ZXR1cm4gKChyZWxhdGl2ZSA8PCAxMSkgPj4gMTEpID09IHJlbGF0aXZlICYmICF3b3VsZFRyaWdn
ZXJBOEVycmF0YTsKICAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBsaW5rQlgodWludDE2X3QqIGlu
c3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCisgICAgCisgICAgc3RhdGljIGJvb2wgY2FuQmVKdW1w
VDQoY29uc3QgdWludDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJnZXQsIGJvb2wm
IG1heVRyaWdnZXJFcnJhdGEpCiAgICAgewotICAgICAgICBsaW5rSnVtcEFic29sdXRlKGluc3Ry
dWN0aW9uLCB0YXJnZXQpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCBy
ZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gRnJvbSBDb3J0ZXgt
QTggZXJyYXRhOgorICAgICAgICAvLyBJZiB0aGUgMzItYml0IFRodW1iLTIgYnJhbmNoIGluc3Ry
dWN0aW9uIHNwYW5zIHR3byA0S2lCIHJlZ2lvbnMgYW5kCisgICAgICAgIC8vIHRoZSB0YXJnZXQg
b2YgdGhlIGJyYW5jaCBmYWxscyB3aXRoaW4gdGhlIGZpcnN0IHJlZ2lvbiBpdCBpcworICAgICAg
ICAvLyBwb3NzaWJsZSBmb3IgdGhlIHByb2Nlc3NvciB0byBpbmNvcnJlY3RseSBkZXRlcm1pbmUg
dGhlIGJyYW5jaAorICAgICAgICAvLyBpbnN0cnVjdGlvbiwgYW5kIGl0IGlzIGFsc28gcG9zc2li
bGUgaW4gc29tZSBjYXNlcyBmb3IgdGhlIHByb2Nlc3NvcgorICAgICAgICAvLyB0byBlbnRlciBh
IGRlYWRsb2NrIHN0YXRlLgorICAgICAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gaXMgc3Bhbm5pbmcg
dHdvIHBhZ2VzIGlmIGl0IGVuZHMgYXQgYW4gYWRkcmVzcyBlbmRpbmcgMHgwMDIKKyAgICAgICAg
Ym9vbCBzcGFuc1R3bzRLID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlv
bikgJiAweGZmZikgPT0gMHgwMDIpOworICAgICAgICBtYXlUcmlnZ2VyRXJyYXRhID0gc3BhbnNU
d280SzsKKyAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBpZiB0aGUg
anVtcCBicmFuY2ggYmFjayBieSBbMy4uMHgxMDAyXSBieXRlcworICAgICAgICBib29sIHRhcmdl
dEluRmlyc3RQYWdlID0gKHJlbGF0aXZlID49IC0weDEwMDIpICYmIChyZWxhdGl2ZSA8IC0yKTsK
KyAgICAgICAgYm9vbCB3b3VsZFRyaWdnZXJBOEVycmF0YSA9IHNwYW5zVHdvNEsgJiYgdGFyZ2V0
SW5GaXJzdFBhZ2U7CisgICAgICAgIHJldHVybiAoKHJlbGF0aXZlIDw8IDcpID4+IDcpID09IHJl
bGF0aXZlICYmICF3b3VsZFRyaWdnZXJBOEVycmF0YTsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IHZvaWQgbGlua0p1bXBUNCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAg
ICB2b2lkIGxpbmtKdW1wVDEoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwg
dm9pZCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVw
IGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKICAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOwogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAg
ICAgICBBU1NFUlQoY2FuQmVKdW1wVDEoaW5zdHJ1Y3Rpb24sIHRhcmdldCkpOwogICAgICAgICAK
ICAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSk7Ci0gICAg
ICAgIGJvb2wgc2NyYXRjaDsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgICAg
ICBBU1NFUlQoY2FuQmVKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCwgc2NyYXRjaCkpOwotICAg
ICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhlIHNpZ24g
Yml0IGlzICdwZWN1bGlhcicuCi0gICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQotICAgICAgICAg
ICAgcmVsYXRpdmUgXj0gMHhDMDAwMDA7Ci0KKyAgICAgICAgLy8gSXQgZG9lcyBub3QgYXBwZWFy
IHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIEFSTSBBUk0gKGJpZyBzdXJwcmlzZSksIGJ1dAorICAg
ICAgICAvLyBmb3IgT1BfQl9UMSB0aGUgYnJhbmNoIGRpc3BsYWNlbWVudCBlbmNvZGVkIGluIHRo
ZSBpbnN0cnVjdGlvbiBpcyAyIAorICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIGFjdHVhbCBkaXNw
bGFjZW1lbnQuCisgICAgICAgIHJlbGF0aXZlIC09IDI7CisgICAgICAgIAogICAgICAgICAvLyBB
bGwgYnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCiAgICAgICAgIEFT
U0VSVCghKHJlbGF0aXZlICYgMSkpOwotICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0
YSB8ICgocmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAw
MCkgPj4gMTIpOwotICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRp
dmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAo
KHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9C
X1QxIHwgKChjb25kICYgMHhmKSA8PCA4KSB8ICgocmVsYXRpdmUgJiAweDFmZSkgPj4gMSk7CiAg
ICAgfQotCisgICAgCiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXBUMih1aW50MTZfdCogaW5zdHJ1
Y3Rpb24sIHZvaWQqIHRhcmdldCkKICAgICB7CiAgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3Vs
ZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCkBAIC0yMDQ2
LDI0ICsyMTEzLDkwIEBAIHByaXZhdGU6CiAgICAgICAgIGluc3RydWN0aW9uWy0xXSA9IE9QX0Jf
VDIgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxp
bmtKdW1wVDMoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFy
Z2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBN
YWNyb0Fzc2VtYmxlciBsYXllci4gOi0oCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgYm9vbCBzY3JhdGNo
OworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVChjYW5CZUp1
bXBUMyhpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3JhdGNoKSk7CisgICAgICAgIAorICAgICAgICBp
bnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEFsbCBicmFuY2ggb2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5jZS4KKyAg
ICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CisgICAgICAgIGluc3RydWN0aW9uWy0yXSA9
IE9QX0JfVDNhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwKSA+PiAxMCkgfCAoKGNvbmQgJiAweGYp
IDw8IDYpIHwgKChyZWxhdGl2ZSAmIDB4M2YwMDApID4+IDEyKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25bLTFdID0gT1BfQl9UM2IgfCAoKHJlbGF0aXZlICYgMHg4MDAwMCkgPj4gOCkgfCAoKHJlbGF0
aXZlICYgMHg0MDAwMCkgPj4gNSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcFQ0KHVpbnQxNl90KiBpbnN0cnVjdGlvbiwg
dm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVw
IGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAg
ICAgICBib29sIHNjcmF0Y2g7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICAg
ICAgQVNTRVJUKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0Y2gpKTsKKyAg
ICAgICAgCisgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikp
OworICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhl
IHNpZ24gYml0IGlzICdwZWN1bGlhcicuCisgICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQorICAg
ICAgICAgICAgcmVsYXRpdmUgXj0gMHhDMDAwMDA7CisgICAgICAgIAorICAgICAgICAvLyBBbGwg
YnJhbmNoIG9mZnNldHMgc2hvdWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCisgICAgICAgIEFTU0VS
VCghKHJlbGF0aXZlICYgMSkpOworICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8
ICgocmVsYXRpdmUgJiAweDEwMDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkg
Pj4gMTIpOworICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUg
JiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJl
bGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtDb25kaXRp
b25hbEp1bXBUNChDb25kaXRpb24gY29uZCwgdWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0
YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhl
IE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSggICAgICAgIAorICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAor
ICAgICAgICBpbnN0cnVjdGlvblstM10gPSBpZlRoZW5FbHNlKGNvbmQpIHwgT1BfSVQ7CisgICAg
ICAgIGxpbmtKdW1wVDQoaW5zdHJ1Y3Rpb24sIHRhcmdldCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIGxpbmtCWCh1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAg
ICB7CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3Nl
bWJsZXIgbGF5ZXIuIDotKAorICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50
MTZfdCBKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiA9IEFSTVJlZ2lzdGVyczo6aXA7CisgICAgICAg
IEFSTVRodW1iSW1tZWRpYXRlIGxvMTYgPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihz
dGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSAr
IDEpKTsKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRpYXRl
OjptYWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Pih0YXJnZXQpID4+IDE2KSk7CisgICAgICAgIGluc3RydWN0aW9uWy01XSA9IHR3b1dvcmRP
cDVpNkltbTRSZWc0RW5jb2RlZEltbUZpcnN0KE9QX01PVl9pbW1fVDMsIGxvMTYpOworICAgICAg
ICBpbnN0cnVjdGlvblstNF0gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1TZWNvbmQo
SlVNUF9URU1QT1JBUllfUkVHSVNURVIsIGxvMTYpOworICAgICAgICBpbnN0cnVjdGlvblstM10g
PSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZULCBoaTE2KTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25bLTJdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tU2Vj
b25kKEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSLCBoaTE2KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25b
LTFdID0gT1BfQlggfCAoSlVNUF9URU1QT1JBUllfUkVHSVNURVIgPDwgMyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgbGlua0NvbmRpdGlvbmFsQlgoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBp
bnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMg
c2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOworICAgICAgICAKKyAgICAgICAgbGlua0JYKGluc3RydWN0aW9uLCB0YXJnZXQpOwor
ICAgICAgICBpbnN0cnVjdGlvblstNl0gPSBpZlRoZW5FbHNlKGNvbmQsIHRydWUsIHRydWUpIHwg
T1BfSVQ7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wQWJzb2x1dGUodWlu
dDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCiAgICAgewogICAgICAgICAvLyBGSU1Y
RTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSgKICAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYg
MSkpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQp
ICYgMSkpOwotCisgICAgICAgIAogICAgICAgICBBU1NFUlQoKGlzTU9WX2ltbV9UMyhpbnN0cnVj
dGlvbiAtIDUpICYmIGlzTU9WVChpbnN0cnVjdGlvbiAtIDMpICYmIGlzQlgoaW5zdHJ1Y3Rpb24g
LSAxKSkKLSAgICAgICAgICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9Q
X1QyKGluc3RydWN0aW9uIC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKLQotICAgICAg
ICBpbnRwdHJfdCByZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkg
LSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgICAg
ICAgIHx8IChpc05PUF9UMShpbnN0cnVjdGlvbiAtIDUpICYmIGlzTk9QX1QyKGluc3RydWN0aW9u
IC0gNCkgJiYgaXNCKGluc3RydWN0aW9uIC0gMikpKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wg
c2NyYXRjaDsKICAgICAgICAgaWYgKGNhbkJlSnVtcFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNj
cmF0Y2gpKSB7Ci0gICAgICAgICAgICAvLyBBUk0gZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJp
dHMgYmVsb3cgdGhlIHNpZ24gYml0IGlzICdwZWN1bGlhcicuCi0gICAgICAgICAgICBpZiAocmVs
YXRpdmUgPj0gMCkKLSAgICAgICAgICAgICAgICByZWxhdGl2ZSBePSAweEMwMDAwMDsKLQotICAg
ICAgICAgICAgLy8gQWxsIGJyYW5jaCBvZmZzZXRzIHNob3VsZCBiZSBhbiBldmVuIGRpc3RhbmNl
LgotICAgICAgICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CiAgICAgICAgICAgICAvLyBU
aGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLCBidXQgcmlnaHQgbm93IHB1dCB0
aGUgTk9QcyBmaXJzdCwgc2luY2UgaW4gdGhlCiAgICAgICAgICAgICAvLyBjYXNlIG9mIGFuIGNv
bmRpdGlvbmFsIGJyYW5jaCB0aGlzIHdpbGwgYmUgY29taW5nIGFmdGVyIGFuIElUVFQgcHJlZGlj
YXRpbmcgKnRocmVlKgogICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb25zISAgTG9va2luZyBiYWNr
d2FyZHMgdG8gbW9kaWZ5IHRoZSBJVFRUIHRvIGFuIElUIGlzIG5vdCBlYXN5LCBkdWUgdG8KQEAg
LTIwNzIsOCArMjIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNV0g
PSBPUF9OT1BfVDE7CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstNF0gPSBPUF9OT1BfVDJhOwog
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bLTNdID0gT1BfTk9QX1QyYjsKLSAgICAgICAgICAgIGlu
c3RydWN0aW9uWy0yXSA9IE9QX0JfVDRhIHwgKChyZWxhdGl2ZSAmIDB4MTAwMDAwMCkgPj4gMTQp
IHwgKChyZWxhdGl2ZSAmIDB4M2ZmMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBpbnN0cnVjdGlv
blstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4gMTApIHwgKChyZWxh
dGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAg
ICAgICAgICAgbGlua0p1bXBUNChpbnN0cnVjdGlvbiwgdGFyZ2V0KTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90IEpVTVBfVEVNUE9SQVJZX1JFR0lTVEVSID0g
QVJNUmVnaXN0ZXJzOjppcDsKICAgICAgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGxvMTYgPSBB
Uk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4ocmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSArIDEpKTsKQEAgLTIwODUsNyArMjIxNyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CWCB8IChKVU1QX1RF
TVBPUkFSWV9SRUdJU1RFUiA8PCAzKTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAogICAgIHN0
YXRpYyB1aW50MTZfdCB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdCh1aW50MTZf
dCBvcCwgQVJNVGh1bWJJbW1lZGlhdGUgaW1tKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wIHwg
KGltbS5tX3ZhbHVlLmkgPDwgMTApIHwgaW1tLm1fdmFsdWUuaW1tNDsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gNjk2NjUpCisrKyBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzUsMTIgKzIzNSwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHRhcmdldCA9IGxpbmtCYXNlICsganVtcHNU
b0xpbmtbaV0udG8oKSAtIG1fYXNzZW1ibGVyLT5leGVjdXRhYmxlT2Zmc2V0Rm9yKGp1bXBzVG9M
aW5rW2ldLnRvKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKdW1wTGlua1R5cGUganVt
cExpbmtUeXBlID0gbV9hc3NlbWJsZXItPmNvbXB1dGVKdW1wVHlwZShqdW1wc1RvTGlua1tpXSwg
bGlua0Jhc2UgKyB3cml0ZVB0ciwgdGFyZ2V0KTsKLQotICAgICAgICAgICAgLy8gU3RlcCBiYWNr
IGluIHRoZSB3cml0ZSBzdHJlYW0KLSAgICAgICAgICAgIGludDMyX3QgZGVsdGEgPSBtX2Fzc2Vt
Ymxlci0+anVtcFNpemVEZWx0YShqdW1wTGlua1R5cGUpOwotICAgICAgICAgICAgaWYgKGRlbHRh
KSB7Ci0gICAgICAgICAgICAgICAgd3JpdGVQdHIgLT0gZGVsdGE7Ci0gICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXItPnJlY29yZExpbmtPZmZzZXRzKGp1bXBzVG9MaW5rW2ldLmZyb20oKSAtIGRl
bHRhLCByZWFkUHRyLCByZWFkUHRyIC0gd3JpdGVQdHIpOworICAgICAgICAgICAgLy8gQ29tcGFj
dCBicmFuY2ggaWYgd2UgY2FuLi4uCisgICAgICAgICAgICBpZiAobV9hc3NlbWJsZXItPmNhbkNv
bXBhY3QoanVtcHNUb0xpbmtbaV0udHlwZSgpKSkgeworICAgICAgICAgICAgICAgIC8vIFN0ZXAg
YmFjayBpbiB0aGUgd3JpdGUgc3RyZWFtCisgICAgICAgICAgICAgICAgaW50MzJfdCBkZWx0YSA9
IG1fYXNzZW1ibGVyLT5qdW1wU2l6ZURlbHRhKGp1bXBzVG9MaW5rW2ldLnR5cGUoKSwganVtcExp
bmtUeXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgd3JpdGVQdHIgLT0gZGVsdGE7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLT5y
ZWNvcmRMaW5rT2Zmc2V0cyhqdW1wc1RvTGlua1tpXS5mcm9tKCkgLSBkZWx0YSwgcmVhZFB0ciwg
cmVhZFB0ciAtIHdyaXRlUHRyKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBqdW1wc1RvTGlua1tpXS5zZXRGcm9tKHdyaXRlUHRyKTsKICAgICAgICAgfQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
CShyZXZpc2lvbiA2OTY2NSkKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQ2LDYgKzQ2LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk12NyA6IHB1YmxpYyBBYnN0cgog
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBBUk12N0Fzc2VtYmxlcjo6TGlua1JlY29yZCBMaW5rUmVj
b3JkOworICAgIHR5cGVkZWYgQVJNdjdBc3NlbWJsZXI6Okp1bXBUeXBlIEp1bXBUeXBlOwogICAg
IHR5cGVkZWYgQVJNdjdBc3NlbWJsZXI6Okp1bXBMaW5rVHlwZSBKdW1wTGlua1R5cGU7CiAKICAg
ICBNYWNyb0Fzc2VtYmxlckFSTXY3KCkKQEAgLTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpIHsgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5j
ZSA9IGZhbHNlOyB9CiAgICAgVmVjdG9yPExpbmtSZWNvcmQ+JiBqdW1wc1RvTGluaygpIHsgcmV0
dXJuIG1fYXNzZW1ibGVyLmp1bXBzVG9MaW5rKCk7IH0KICAgICB2b2lkKiB1bmxpbmtlZENvZGUo
KSB7IHJldHVybiBtX2Fzc2VtYmxlci51bmxpbmtlZENvZGUoKTsgfQorICAgIGJvb2wgY2FuQ29t
cGFjdChKdW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuY2FuQ29tcGFjdChq
dW1wVHlwZSk7IH0KKyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1
bXBUeXBlLCBjb25zdCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4g
bV9hc3NlbWJsZXIuY29tcHV0ZUp1bXBUeXBlKGp1bXBUeXBlLCBmcm9tLCB0byk7IH0KICAgICBK
dW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWlu
dDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmNvbXB1
dGVKdW1wVHlwZShyZWNvcmQsIGZyb20sIHRvKTsgfQogICAgIHZvaWQgcmVjb3JkTGlua09mZnNl
dHMoaW50MzJfdCByZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGludDMyX3Qgb2Zmc2V0
KSB7cmV0dXJuIG1fYXNzZW1ibGVyLnJlY29yZExpbmtPZmZzZXRzKHJlZ2lvblN0YXJ0LCByZWdp
b25FbmQsIG9mZnNldCk7IH0KLSAgICBpbnQganVtcFNpemVEZWx0YShKdW1wTGlua1R5cGUganVt
cExpbmtUeXBlKSB7IHJldHVybiBtX2Fzc2VtYmxlci5qdW1wU2l6ZURlbHRhKGp1bXBMaW5rVHlw
ZSk7IH0KKyAgICBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtU
eXBlIGp1bXBMaW5rVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcFNpemVEZWx0YShqdW1w
VHlwZSwganVtcExpbmtUeXBlKTsgfQogICAgIHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQs
IHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5saW5rKHJl
Y29yZCwgZnJvbSwgdG8pOyB9CiAKICAgICBzdHJ1Y3QgQXJtQWRkcmVzcyB7CkBAIC05ODYsMTQg
Kzk4OSwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCiAg
ICAgewotICAgICAgICBtX2Fzc2VtYmxlci5ieCh0YXJnZXQsIGluVW5pbnRlcnJ1cHRlZFNlcXVl
bmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1
bXBOb0NvbmRpdGlvbik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCwgQVJNdjdBc3Nl
bWJsZXI6Okp1bXBGaXhlZCk7CiAgICAgfQogCiAgICAgLy8gQWRkcmVzcyBpcyBhIG1lbW9yeSBs
b2NhdGlvbiBjb250YWluaW5nIHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8KICAgICB2b2lkIGp1bXAo
QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1w
UmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVu
aW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFS
TXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb24pOworICAgICAgICBtX2Fzc2VtYmxlci5ieChk
YXRhVGVtcFJlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKTsKICAgICB9CiAKIApA
QCAtMTA4MiwyOSArMTA4NSwyOSBAQCBwdWJsaWM6CiAgICAgQ2FsbCBuZWFyQ2FsbCgpCiAgICAg
ewogICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0
ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOwor
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJN
djdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxlTmVhcik7CiAgICAgfQogCiAg
ICAgQ2FsbCBjYWxsKCkKICAgICB7CiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1t
MzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxl
ci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSksIENh
bGw6OkxpbmthYmxlKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFU
ZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7
CiAgICAgfQogCiAgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KHRhcmdldCwgQVJNdjdBc3NlbWJsZXI6Okp1
bXBGdWxsU2l6ZSksIENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxl
ci5ibHgodGFyZ2V0LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6Tm9uZSk7CiAg
ICAgfQogCiAgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIGxv
YWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9h
c3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNp
emUpLCBDYWxsOjpOb25lKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRh
dGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpOb25lKTsK
ICAgICB9CiAKICAgICB2b2lkIHJldCgpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5ieChs
aW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpOworICAgICAgICBtX2Fz
c2VtYmxlci5ieChsaW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMTIwNCw3ICsxMjA3LDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9uJ3QgbGlu
ay4KICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdp
c3Rlcik7Ci0gICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0
ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRnVsbFNpemUpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNz
ZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBt
YWtlVGFpbFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQpAQCAtMTIyOCwxNCArMTIzMSwxNCBA
QCBwcm90ZWN0ZWQ6CiAgICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlSnVtcCgpCiAgICAg
ewogICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKDApLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKLSAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIGlu
VW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcEZ1bGxTaXplIDog
QVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBtX2Fzc2Vt
Ymxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8gQVJN
djdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpK
dW1wTm9Db25kaXRpb24pOwogICAgIH0KIAogICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMgbWFr
ZUJyYW5jaChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5pdChjb25kLCB0cnVlLCB0cnVlKTsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhF
bmNvZGluZyhJbW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBtX2Fz
c2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpID8g
QVJNdjdBc3NlbWJsZXI6Okp1bXBGdWxsU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0
aW9uLCBjb25kKTsKKyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0
ZXIsIGluVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCkgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcENvbmRp
dGlvbkZpeGVkU2l6ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uLCBjb25kKTsKICAg
ICB9CiAgICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlQnJhbmNoKENvbmRpdGlvbiBjb25k
KSB7IHJldHVybiBtYWtlQnJhbmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQogICAgIEFSTXY3
QXNzZW1ibGVyOjpKbXBTcmMgbWFrZUJyYW5jaChEb3VibGVDb25kaXRpb24gY29uZCkgeyByZXR1
cm4gbWFrZUJyYW5jaChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>