<?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>163925</bug_id>
          
          <creation_ts>2016-10-24 17:02:52 -0700</creation_ts>
          <short_desc>We should be able to eliminate rest parameter allocations</short_desc>
          <delta_ts>2016-11-01 13:06:46 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>164239</dependson>
    
    <dependson>164276</dependson>
          <blocked>163865</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243968</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-24 17:02:52 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244058</commentid>
    <comment_count>1</comment_count>
      <attachid>292704</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-24 19:59:04 -0700</bug_when>
    <thetext>Created attachment 292704
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244957</commentid>
    <comment_count>2</comment_count>
      <attachid>292974</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-26 16:43:32 -0700</bug_when>
    <thetext>Created attachment 292974
WIP

This might mostly work, I just need to prove it to myself and write some interesting tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245478</commentid>
    <comment_count>3</comment_count>
      <attachid>293123</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-28 00:34:57 -0700</bug_when>
    <thetext>Created attachment 293123
WIP

I think this works now. I&apos;m still in the process of writing many tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246547</commentid>
    <comment_count>4</comment_count>
      <attachid>293454</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 12:53:19 -0700</bug_when>
    <thetext>Created attachment 293454
WIP

I think this might be done, just want to read over the entire patch and write a change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246549</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-31 12:54:57 -0700</bug_when>
    <thetext>Attachment 293454 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:650:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 27 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>1246608</commentid>
    <comment_count>6</comment_count>
      <attachid>293469</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 14:58:04 -0700</bug_when>
    <thetext>Created attachment 293469
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246610</commentid>
    <comment_count>7</comment_count>
      <attachid>293470</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 15:00:09 -0700</bug_when>
    <thetext>Created attachment 293470
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246612</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-31 15:02:18 -0700</bug_when>
    <thetext>Attachment 293470 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:21:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:22:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:23:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:24:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:55:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:56:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:57:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:58:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:650:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 9 in 29 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>1246630</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 15:21:58 -0700</bug_when>
    <thetext>Will fix tabs in ChangeLog. Not sure why vim added those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246649</commentid>
    <comment_count>10</comment_count>
      <attachid>293470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-31 15:57:35 -0700</bug_when>
    <thetext>Comment on attachment 293470
patch

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

Gnarly!  r=me.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2346
&gt; +#if !ASSERT_DISABLED

Is it necessary to have this guard?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2349
&gt; +            ASSERT(numberOfArgumentsToSkip &gt;= 0);

Maybe this should just be ASSERT_UNUSED(numberOfArgumentsToSkip, numberOfArgumentsToSkip &gt;= 0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246701</commentid>
    <comment_count>11</comment_count>
      <attachid>293470</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 16:42:39 -0700</bug_when>
    <thetext>Comment on attachment 293470
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2346
&gt;&gt; +#if !ASSERT_DISABLED
&gt; 
&gt; Is it necessary to have this guard?

Probably not. I&apos;ll go with your suggestion below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246710</commentid>
    <comment_count>12</comment_count>
      <attachid>293496</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 16:55:40 -0700</bug_when>
    <thetext>Created attachment 293496
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246792</commentid>
    <comment_count>13</comment_count>
      <attachid>293496</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-31 19:59:26 -0700</bug_when>
    <thetext>Comment on attachment 293496
patch for landing

Clearing flags on attachment: 293496

Committed r208208: &lt;http://trac.webkit.org/changeset/208208&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246793</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-31 19:59:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246801</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-31 20:27:37 -0700</bug_when>
    <thetext>Build fix in https://trac.webkit.org/r208210.

I don&apos;t get the if (!ASSERT_DISABLED) {...}

Why not #ifdef the whole loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246831</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-31 23:23:48 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Build fix in https://trac.webkit.org/r208210.
&gt; 
&gt; I don&apos;t get the if (!ASSERT_DISABLED) {...}
&gt; 
&gt; Why not #ifdef the whole loop?

I&apos;m following what we do in other places (I&apos;m not sure what the motivation is to use if instead of #if inside JSC for some situations). Maybe this is a place where it should be #if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246920</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-01 10:20:34 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 164276</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246928</commentid>
    <comment_count>18</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-11-01 10:35:10 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Re-opened since this is blocked by bug 164276

Details in:
https://bugs.webkit.org/show_bug.cgi?id=164274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246979</commentid>
    <comment_count>19</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-01 12:42:17 -0700</bug_when>
    <thetext>Oops, I forgot to update that a particular assert to work with PhantomCreateRest.
Working on an updated patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246999</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-01 13:06:46 -0700</bug_when>
    <thetext>relanded in:
https://trac.webkit.org/changeset/208235</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292704</attachid>
            <date>2016-10-24 19:59:04 -0700</date>
            <delta_ts>2016-10-26 16:43:32 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>21659</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBKU1ZhbHVlIGluZGV4ID0gZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV92YWx1ZTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKIAotICAgICAg
ICBpZiAoaW5kZXggJiYgaW5kZXguaXNJbnQzMigpKSB7CisgICAgICAgIGlmIChpbmRleCAmJiBp
bmRleC5pc0ludDMyKCkgJiYgIW5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgLypGSVhN
RSovKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHByZXRlbmRzIHRvIHJldHVybiBUT1AgZm9yIGFj
Y2Vzc2VzIHRoYXQgYXJlIGFjdHVhbGx5IHByb3ZlbiBvdXQtb2YtYm91bmRzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHRoYXQncyB0aGUgY29uc2VydmF0aXZlIHRoaW5nIHRvIGRvLiBPdGhlcndp
c2Ugd2UnZCBuZWVkIHRvIHdyaXRlIG1vcmUgY29kZSB0byBtYXJrIHN1Y2gKICAgICAgICAgICAg
IC8vIHBhdGhzIGFzIHVucmVhY2hhYmxlLCBvciB0byByZXR1cm4gdW5kZWZpbmVkLiBXZSBjb3Vs
ZCBpbXBsZW1lbnQgdGhhdCBldmVudHVhbGx5LgpAQCAtMTk1MCw2ICsxOTUwLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAg
IGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsg
Ly8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byBy
ZXR1cm4gYm90dG9tLgpAQCAtMjg1Nyw5ICsyODU4LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENyZWF0ZVJl
c3Q6Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBv
aW50KG5vZGUpKSAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUu
CisgICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KG5vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5n
IGEgYmFkIHRpbWUuCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0FycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBo
LCBTcGVjQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoCisgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKICAgICAg
ICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBj
YXNlIENyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTEzNCw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzICYmIGVkZ2Ut
Pm9wKCkgIT0gQ3JlYXRlUmVzdCkgewogICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZSwg
c291cmNlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
QEAgLTQxMSw2ICs0MTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21EaXJlY3RB
cmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRlUmVz
dCA9PiBQaGFudG9tQ3JlYXRlUmVzdFxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Ik51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHNraXA6ICIsIG5vZGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpIC0gMTogIiwgY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSAt
IDEsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDc0LDE4
ICs0ODMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2Fu
ZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IENyZWF0
ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IG5vZGUtPmNoaWxkMigpLT5hc1VJbnQzMigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5k
aWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgPSBpbmRleCA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkgLSAxICYmIGNhbmRpZGF0ZS0+b3AoKSAhPSBDcmVhdGVSZXN0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVUb0dldFN0
YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
OwpAQCAtNTEyLDEwICs1MjYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBu
b2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4s
IE9wSW5mbyhudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBOZWVk
IHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBhIGRhdGEgZm9ybWF0IGNvbnZlcnNpb24g
aGVyZS4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1
bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIw
Nzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTQgKzY0LDE4IEBAIE5vZGUqIGVtaXRDb2RlVG9H
ZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICBERkdfQVNTRVJUKAogICAgICAgICBncmFwaCwg
YXJndW1lbnRzLAogICAgICAgICBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlRGlyZWN0QXJndW1l
bnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVTY29wZWRBcmd1bWVudHMKLSAgICAgICAg
fHwgYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cwotICAgICAgICB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3Ao
KSA9PSBDcmVhdGVDbG9uZWRBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVJl
c3QKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMg
fHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgYXJndW1lbnRz
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICBp
ZiAoYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBo
YW50b21DcmVhdGVSZXN0KQorICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3Vt
ZW50cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgIHJldHVy
biBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9y
aWdpbiwganNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwor
ICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOwogICAgIH0K
ICAgICAKICAgICBOb2RlKiBhcmd1bWVudENvdW50OwpAQCAtODksNyArOTMsNyBAQCBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG5vZGVJbmRleCwgU3Bl
Y0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLAog
ICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKDEpLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDYgKzQ3Niwx
MiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHdy
aXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZVJlc3Q6CisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhhbnRvbSwgaXQgc3Rp
bGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNlZCB3aXRoIGFub3Ro
ZXIuCisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9i
amVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBDYWxsT2JqZWN0Q29uc3Ry
dWN0b3I6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczogewogICAgICAgICAgICAg
ICAgIEpTVmFsdWUgaW5kZXggPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5kZXguaXNJbnQzMigpKQorICAg
ICAgICAgICAgICAgIGlmICghaW5kZXggfHwgIWluZGV4LmlzSW50MzIoKSB8fCBub2RlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
CShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rp
b246CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5OCw2ICsxMzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2Vu
ZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAg
ICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAg
ICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBNaW5pZmllZE5vZGUgTWluaWZpZWROb2RlOjpmcm9tTm9kZShOb2RlCiAgICAgaWYgKGhhc0Nv
bnN0YW50KG5vZGUtPm9wKCkpKQogICAgICAgICByZXN1bHQubV9pbmZvID0gSlNWYWx1ZTo6ZW5j
b2RlKG5vZGUtPmFzSlNWYWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBub2RlLT5vcCgpID09IFBoYW50b21D
bG9uZWRBcmd1bWVudHMpOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzIHx8IG5vZGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCBu
b2RlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgcmVzdWx0Lm1faW5mbyA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw3IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgoTm9kZVQK
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50
czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtODYsNyArODcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBi
b29sIGhhc0lubGluZUNhbGxGcmFtZShOb2RlVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHR5cGUgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCB0eXBlID09IFBoYW50b21DbG9u
ZWRBcmd1bWVudHM7CisgICAgICAgIHJldHVybiB0eXBlID09IFBoYW50b21EaXJlY3RBcmd1bWVu
dHMgfHwgdHlwZSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IHR5cGUgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3Q7CiAgICAgfQogICAgIAogICAgIE1pbmlmaWVkSUQgbV9pZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUg
dGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tl
bmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkg
dG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ2NCw3ICs0NjUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgeworICAg
ICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRv
bUNsb25lZEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DcmVhdGVSZXN0KSB7CiAgICAgICAg
ICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3Ig
dGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3Ro
ZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0
ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRv
bigpOwpAQCAtMTczNiw2ICsxNzM3LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVu
Y3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgpAQCAtMjM3
OSw3ICsyMzgxLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBvcCgp
ID09IEdldFJlc3RMZW5ndGgpOworICAgICAgICBBU1NFUlQob3AoKSA9PSBDcmVhdGVSZXN0IHx8
IG9wKCkgPT0gR2V0UmVzdExlbmd0aCB8fCBvcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBH
ZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcyk7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5h
czx1bnNpZ25lZD4oKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDYgKzM0MSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAgICAgbWFjcm8oQ3JlYXRlRGlyZWN0
QXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFudG9tRGlyZWN0QXJndW1l
bnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRv
bUNyZWF0ZVJlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhDcmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENyZWF0
ZUNsb25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNsb25l
ZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUsNiArMTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czogewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CkBA
IC0xNzMsNiArMTc0LDEwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpl
eGUKICAgICAgICAgICAgIC8vIGdpdmVuIHRoYXQgd2UgY2FuIHJlYWQgdGhlbSBmcm9tIHRoZSBz
dGFjay4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
bm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93
IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgpAQCAtMTg4LDcg
KzE5Myw3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAg
ICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJn
dW1lbnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAx
OyArK2kpIHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudCA9IG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpOwogICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMDMsNiArMTAwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVB
Y3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50czoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
Myw2ICszNTMsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRl
QWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRP
ZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1OCw2
ICsyMTU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAg
ICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJl
c3Q6CiAgICAgICAgIGluaXRDb25zdGFudEluZm8obm9kZSk7CiAgICAgICAgIGJyZWFrOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3MCw2ICs2NzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICAgICAg
ICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAg
ICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJl
Y3RBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tTmV3
R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAg
ICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CkBAIC0zNDI5LDYg
KzM0MzAsOCBAQCBwcml2YXRlOgogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSkKKyAg
ICAgICAgICAgIGluZGV4ID0gbV9vdXQuYWRkKGluZGV4LCBtX291dC5jb25zdEludDMyKG1fbm9k
ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSkpOwogICAgICAgICAKICAgICAgICAgTFZhbHVl
IGxpbWl0OwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIGV4dGVy
biAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblAKICAgICBjYXNlIFBoYW50b21OZXdH
ZW5lcmF0b3JGdW5jdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAg
Y2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6
CiAgICAgICAgIC8vIFRob3NlIGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0
ZXJpYWxpemVPYmplY3RJbk9TUgogICAgICAgICBicmVhazsKIApAQCAtMjM0LDYgKzIzNSw3IEBA
IGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2Ug
UGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
IHsKICAgICAgICAgaWYgKCFtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGluZUNhbGxGcmFt
ZSkgewpAQCAtMjQyLDEyICsyNDQsMjYgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aQogICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZUJ5Q29weWluZyhleGVjKTsKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50
czoKICAgICAgICAgICAgICAgICByZXR1cm4gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFj
aGluZUZyYW1lKGV4ZWMsIGV4ZWMsIEFyZ3VtZW50c01vZGU6OkNsb25lZCk7CisgICAgICAgICAg
ICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OiB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVjLT5j
b2RlQmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCBmZWVscyBoYWNreSEKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMTsKKyAg
ICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSogYXJndW1l
bnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID8gZXhlYy0+
YXJndW1lbnRDb3VudCgpIC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgOiAwOworICAgICAgICAg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1Rv
Q29weVJlZ2lvbiwgYXJyYXlTaXplKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpICE9IFBoYW50b21D
cmVhdGVSZXN0KTsKKwogICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHRoZSBhcmd1bWVudCBj
b3VudC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZW4gd2UgcmVwcmVzZW50IHRoZSBtYWNoaW5lIGZy
YW1lLgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgaWYgKG1h
dGVyaWFsaXphdGlvbi0+b3JpZ2luKCkuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292974</attachid>
            <date>2016-10-26 16:43:32 -0700</date>
            <delta_ts>2016-10-28 00:34:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>31894</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY2MCw3ICsxNjYwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBKU1ZhbHVlIGluZGV4ID0gZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV92YWx1ZTsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBu
b2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKIAotICAgICAg
ICBpZiAoaW5kZXggJiYgaW5kZXguaXNJbnQzMigpKSB7CisgICAgICAgIGlmIChpbmRleCAmJiBp
bmRleC5pc0ludDMyKCkgJiYgIW5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgLypGSVhN
RSovKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHByZXRlbmRzIHRvIHJldHVybiBUT1AgZm9yIGFj
Y2Vzc2VzIHRoYXQgYXJlIGFjdHVhbGx5IHByb3ZlbiBvdXQtb2YtYm91bmRzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHRoYXQncyB0aGUgY29uc2VydmF0aXZlIHRoaW5nIHRvIGRvLiBPdGhlcndp
c2Ugd2UnZCBuZWVkIHRvIHdyaXRlIG1vcmUgY29kZSB0byBtYXJrIHN1Y2gKICAgICAgICAgICAg
IC8vIHBhdGhzIGFzIHVucmVhY2hhYmxlLCBvciB0byByZXR1cm4gdW5kZWZpbmVkLiBXZSBjb3Vs
ZCBpbXBsZW1lbnQgdGhhdCBldmVudHVhbGx5LgpAQCAtMTk1MCw2ICsxOTUwLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAg
IGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsg
Ly8gUHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byBy
ZXR1cm4gYm90dG9tLgpAQCAtMjg1Nyw5ICsyODU4LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENyZWF0ZVJl
c3Q6Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBv
aW50KG5vZGUpKSAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUu
CisgICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KG5vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5n
IGEgYmFkIHRpbWUuCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0FycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBo
LCBTcGVjQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoCisgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKICAgICAg
ICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBj
YXNlIENyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTEzNCw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzICYmIGVkZ2Ut
Pm9wKCkgIT0gQ3JlYXRlUmVzdCkgewogICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZSwg
c291cmNlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0K
QEAgLTQxMSw2ICs0MTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21EaXJlY3RB
cmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRlUmVz
dCA9PiBQaGFudG9tQ3JlYXRlUmVzdFxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Ik51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIHNraXA6ICIsIG5vZGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpIC0gMTogIiwgY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSAt
IDEsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDc0LDE4
ICs0ODMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2Fu
ZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IENyZWF0
ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IG5vZGUtPmNoaWxkMigpLT5hc1VJbnQzMigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5k
aWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgPSBpbmRleCA8IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkgLSAxICYmIGNhbmRpZGF0ZS0+b3AoKSAhPSBDcmVhdGVSZXN0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVUb0dldFN0
YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
OwpAQCAtNTEyLDEwICs1MjYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBu
b2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4s
IE9wSW5mbyhudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBOZWVk
IHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBhIGRhdGEgZm9ybWF0IGNvbnZlcnNpb24g
aGVyZS4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1
bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUyOCwyNCArNTQyLDMyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAg
ICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gdmFyYXJnc0RhdGEtPm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQg
PSBhcmd1bWVudENvdW50IC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgJiYg
IWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYm
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIHZhcmFyZ3NEYXRhLT5vZmZzZXQg
PD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1
bWVudENvdW50IDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwgc28g
aXQgYmV0dGVyIGJlIGV4aXRPSy4KICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50ID0gaW5zZXJ0aW9uU2V0Lmlu
c2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3Vu
dE5vZGUgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSB2YXJhcmdzRGF0YS0+b2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNOdW1iZXIoYXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQo
Y2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRh
LT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFy
Z3VtZW50Q291bnROb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWRnZShhcmd1bWVudENvdW50Tm9kZSwgS25vd25JbnQzMlVzZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0Rh
dGEtPm1hbmRhdG9yeU1pbmltdW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5l
IG91ciBsaW1pdCB0byBub3QgaW5jbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNp
ZXIgdG8gcmVhc29uIGFib3V0LgpAQCAtNTU1LDEzICs1NzcsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBl
bGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHBvc3NpYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2
YXJhcmdzRGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0YS0+b2Zmc2V0ICsgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChsb2FkSW5kZXggKyAxKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKQEAgLTU3OCw3ICs1OTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTYwMiw2ICs2MjIsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+bnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE0LDcgKzYz
NiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5j
b250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9w
KCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsK
KwogICAgICAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9k
ZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5m
aXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gYXJndW1lbnRzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxNCArNjQsMTggQEAgTm9kZSog
ZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgIERGR19BU1NFUlQoCiAgICAg
ICAgIGdyYXBoLCBhcmd1bWVudHMsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVE
aXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVNjb3BlZEFyZ3VtZW50
cwotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzCi0gICAgICAgIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKKyAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IENyZWF0ZUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gQ3JlYXRlUmVzdAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVj
dEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8
fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgIAogICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSAwOworICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gYXJndW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAg
ICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5v
ZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KSk7CiAgICAgfQogICAgIAogICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7CkBAIC04OSw3ICs5Myw3
IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgbm9k
ZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJpdGg6OlVu
Y2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAogICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoMSksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJV
c2UpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNzc4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODI1LDYgKzE4MjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZygKICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1l
bnRzT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3Vt
ZW50czsKICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRh
dG9yeU1pbmltdW07CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gMDsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndh
cmRWYXJhcmdzLCBPcEluZm8oZGF0YSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsNiArNDc2LDEy
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3Jp
dGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKKyAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQncyBwaGFudG9tLCBpdCBzdGls
bCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhl
ci4KKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2Jq
ZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIENhbGxPYmplY3RDb25zdHJ1
Y3RvcjoKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBpbmRleCA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4IHx8ICFpbmRleC5pc0ludDMyKCkpCisgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5kZXguaXNJbnQzMigpIHx8IG5vZGUtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlv
bjoKICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURp
cmVjdEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhh
bnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzk4LDYgKzEzOTgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5l
cmF0b3JGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWlu
aWZpZWROb2RlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBA
IE1pbmlmaWVkTm9kZSBNaW5pZmllZE5vZGU6OmZyb21Ob2RlKE5vZGUKICAgICBpZiAoaGFzQ29u
c3RhbnQobm9kZS0+b3AoKSkpCiAgICAgICAgIHJlc3VsdC5tX2luZm8gPSBKU1ZhbHVlOjplbmNv
ZGUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG5vZGUtPm9wKCkgPT0gUGhhbnRvbUNs
b25lZEFyZ3VtZW50cyk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b21EaXJl
Y3RBcmd1bWVudHMgfHwgbm9kZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IG5v
ZGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICByZXN1bHQubV9pbmZvID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAgaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAog
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVh
dGVSZXN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04Niw3ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJv
b2wgaGFzSW5saW5lQ2FsbEZyYW1lKE5vZGVUeXBlIHR5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gdHlwZSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IHR5cGUgPT0gUGhhbnRvbUNsb25l
ZEFyZ3VtZW50czsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50
cyB8fCB0eXBlID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgdHlwZSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdDsKICAgICB9CiAgICAgCiAgICAgTWluaWZpZWRJRCBtX2lkOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDcg
QEAgc3RydWN0IFN3aXRjaERhdGEgewogCiBzdHJ1Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKICAgICBp
bnQgZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgaW50IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwog
fTsKIAogc3RydWN0IExvYWRWYXJhcmdzRGF0YSB7CkBAIC0yMTAsNiArMjExLDcgQEAgc3RydWN0
IExvYWRWYXJhcmdzRGF0YSB7CiAgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBl
bGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgogICAgIHVuc2lnbmVkIG1h
bmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRo
YXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRo
ZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4gRG9lcyBub3QgaW5jbHVkZSAi
dGhpcyIuCiAgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IHRvIGxvYWQuIEluY2x1ZGVzICJ0aGlzIi4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCB7IDAgfTsgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcCB3aGVuIGZv
cndhcmRpbmcgKG5vdCBpbmNsdWRpbmcgdGhpcykuIFVzZSBmb3IgcmVzdCBwYXJhbWV0ZXIuIGku
ZSwgZnVuY3Rpb24gZm9vKGEsIGIsIC4uLmFyZ3MpIHsgfSB3aWxsIHNraXAgMiBhcmd1bWVudHMg
d2hlbiBmb3J3YXJkaW5nLgogfTsKIAogc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CkBAIC00NTEs
NiArNDUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhhbnRvbURp
cmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAg
ICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAgICAgLy8gVGhlc2UgcHJldGVu
ZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBE
RkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3VsZG4ndCB0YWtl
IGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4KICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDY0LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIEFTU0VSVChoYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChvcCgpID09
IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
KSB7CisgICAgICAgIGlmIChvcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9
PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpIHsK
ICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0
YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAg
ICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24n
dCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5
U2luZ2xldG9uKCk7CkBAIC0xNzM2LDYgKzE3MzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewogICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoK
ICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50
b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246
CkBAIC0yMzc5LDcgKzIzODMsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCgpCiAgICAgewotICAgICAgICBBU1NFUlQob3AoKSA9PSBDcmVhdGVSZXN0
IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0aCk7CisgICAgICAgIEFTU0VSVChvcCgpID09IENyZWF0
ZVJlc3QgfHwgb3AoKSA9PSBHZXRSZXN0TGVuZ3RoIHx8IG9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5
VmFsIHx8IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKTsKICAgICAgICAgcmV0dXJuIG1f
b3BJbmZvLmFzPHVuc2lnbmVkPigpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICBtYWNybyhDcmVh
dGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21EaXJl
Y3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CiAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKQEAgLTE3Myw2ICsxNzQsMTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICAgICAgLy8gZ2l2ZW4gdGhhdCB3ZSBjYW4gcmVhZCB0aGVtIGZy
b20gdGhlIHN0YWNrLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJl
Y29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCkBA
IC0xODgsNyArMTkzLDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4
ZQogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDE7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CiAgICAg
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMyw2ICsxMDAzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUzLDYgKzM1Myw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxp
emVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAg
ICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50
czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTU4LDYgKzIxNTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJl
YWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcwLDYgKzY3MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAg
ICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhh
bnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA3Nzg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcxLDYgKzEwNzEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBo
YW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0
aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICBj
YXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAg
LTM0MjksNiArMzQzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBpZiAobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpKQorICAgICAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmNvbnN0SW50
MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CiAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgbGltaXQ7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC02MjgyLDYgKzYyODUsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBnZXRBcmd1bWVu
dHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKS52YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBkYXRhLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAg
ICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
d2UgbmVlZCB0byBlbWl0IGEgYnJhbmNoIGhlcmUhCisgICAgICAgICAgICBsZW5ndGggPSBtX291
dC5zdWIobGVuZ3RoLCBtX291dC5jb25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSk7
CisgICAgICAgIH0KICAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5h
ZGQobGVuZ3RoLCBtX291dC5jb25zdEludDMyKDEgLSBkYXRhLT5vZmZzZXQpKTsKICAgICAgICAg
CiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTYyOTAsNyArNjI5OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRG
b3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgc291cmNl
U3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBMVmFs
dWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sg
dW5kZWZpbmVkTG9vcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC04MzcxLDkgKzgzNzksOSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3Rh
cnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgTFZhbHVlIGdldEFyZ3Vt
ZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZz
ZXQgPSAwKQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlI
ZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhcnQgPSBBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KGlubGluZUNh
bGxGcmFtZSkgKyBvZmZzZXQ7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHN0YXJ0KS52YWx1
ZSgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBl
eHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QCiAgICAgY2FzZSBQaGFudG9t
TmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgog
ICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgogICAgICAgICAvLyBUaG9zZSBhcmUgY29tcGxldGVseSBoYW5kbGVkIGJ5IG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IKICAgICAgICAgYnJlYWs7CiAKQEAgLTIzNCw2ICsyMzUs
NyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBj
YXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzOiB7CiAgICAgICAgIGlmICghbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKS5pbmxpbmVDYWxs
RnJhbWUpIHsKQEAgLTI0Miw2ICsyNDQsMTggQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZUJ5Q29weWluZyhleGVjKTsKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50czoKICAgICAgICAgICAgICAgICByZXR1cm4gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVXaXRo
TWFjaGluZUZyYW1lKGV4ZWMsIGV4ZWMsIEFyZ3VtZW50c01vZGU6OkNsb25lZCk7CisgICAgICAg
ICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OiB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVj
LT5jb2RlQmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCBmZWVscyBoYWNreSEKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMTsK
KyAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSogYXJn
dW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5U2l6
ZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID8gZXhl
Yy0+YXJndW1lbnRDb3VudCgpIC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgOiAwOworICAgICAg
ICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50
c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI1MSw2ICsyNjUsNyBAQCBleHRlcm4g
IkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgIC8vIEZpcnN0IGZpZ3Vy
ZSBvdXQgdGhlIGFyZ3VtZW50IGNvdW50LiBJZiB0aGVyZSBpc24ndCBvbmUgdGhlbiB3ZSByZXBy
ZXNlbnQgdGhlIG1hY2hpbmUgZnJhbWUuCiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQg
PSAwOwogICAgICAgICBpZiAobWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKS5pbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtYXRlcmlhbGl6
YXRpb24tPnR5cGUoKSAhPSBQaGFudG9tQ3JlYXRlUmVzdCk7IC8vIEZJWE1FOgogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3Bl
cnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CiAgICAgICAgICAgICAgICAg
aWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoQXJn
dW1lbnRDb3VudFBMb2MpKQpAQCAtMzMwLDYgKzM0NSwzMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDogeworICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBhcnJheVNpemUgPSAoYXJndW1lbnRDb3VudCAtIDEpID4gbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPyBhcmd1bWVudENvdW50IC0gMSAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIDogMDsKKyAg
ICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUpOworICAgICAgICAgICAgLy8gRklYTUU6IGNhbiB3
ZSB0aHJvdyBPT00gaGVyZT8KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFs
dWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9IEFyZ3VtZW50UExvYykK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnSW5kZXggPSBwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKTsK
KyAgICAgICAgICAgICAgICBpZiAoYXJnSW5kZXggPCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkg
Ly8gRklYTUU6IHdvdWxkIHRoaXMgZXZlciBiZSB0cnVlPworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUluZGV4ID0gYXJnSW5kZXgg
LSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlJbmRl
eCA+PSBhcnJheVNpemUpIC8vIEZJWE1FOiBXaHkgd291bGQgdGhpcyBiZSB0cnVlPworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4KHZtLCBhcnJheUluZGV4LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBhZGQgYW4gYXNzZXJ0aW9uIHRo
YXQgcHJvdmVzIHdlIHNldCBldmVyeSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIGFycmF5U2l6ZSkK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293123</attachid>
            <date>2016-10-28 00:34:57 -0700</date>
            <delta_ts>2016-10-31 12:53:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>58115</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWVsaW1pbmF0aW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWVsaW1pbmF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItZWxpbWluYXRpb24u
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjYgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBt
ID0gIiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2Vy
dGlvbjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7
CisgICAgZnVuY3Rpb24gYmFyKGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3Mu
bGVuZ3RoOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgNDAwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDAsIGJhcigpKTsKKyAg
ICAgICAgYXNzZXJ0KGJhcihpKSA9PT0gMCk7CisgICAgICAgIGFzc2VydChiYXIoaSwgaSkgPT09
IDApOworICAgICAgICBhc3NlcnQoYmFyKGksIGksIGkpID09PSAxKTsKKyAgICAgICAgYXNzZXJ0
KGJhcihpLCBpLCBpLCBpLCBpKSA9PT0gMyk7CisgICAgfQorfQorCitmdW5jdGlvbiBzaGFsbG93
RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citub0lubGluZShzaGFsbG93RXEpOworCitmdW5j
dGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykgeworICAgICAg
ICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJnc1tpXSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZ1bmN0aW9uIGphejIoLi4uYXJncykgeworICAgICAgICBmdW5jdGlvbiBrYXooYSwgYiwgLi4u
YXJncykgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBrYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAg
fQorICAgIG5vSW5saW5lKGphejIpOworCisgICAgZm9yIChsZXQgZiBvZiBbamF6LCBqYXoyXSkg
eworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgICAg
IGxldCByID0gZigpOworICAgICAgICAgICAgYXNzZXJ0KCFyLmxlbmd0aCk7CisKKyAgICAgICAg
ICAgIHIgPSBmKGkpOworICAgICAgICAgICAgYXNzZXJ0KCFyLmxlbmd0aCk7CisKKyAgICAgICAg
ICAgIHIgPSBmKGksIGkpCisgICAgICAgICAgICBhc3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAg
ICAgICAgciA9IGYoaSwgaSwgaSkKKyAgICAgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpXSkpOworCisgICAgICAgICAgICBy
ID0gZihpLCBpLCBpKQorICAgICAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAg
ICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgICAgIHIgPSBmKGks
IGksIGksIGkqMiwgaSo0KQorICAgICAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMiwgaSo0XSkpOworICAgICAgICB9
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBmb28oLi4uYXJn
cykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gYmF6KGEsIGIs
IGMsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGZvby5hcHBseShudWxsLCBhcmdzKTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJu
IGJheihhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGpheigp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSkpOworCisgICAgICAgIHIg
PSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFz
c2VydChzaGFsbG93RXEociwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisK
KyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAz
KTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVu
ZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkpOworICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGksIGksIGkp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFtpLCBpLCBpXSkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAg
ZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAg
IGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXouYXBwbHko
bnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAg
YXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGkpOworICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwgaSk7CisgICAgICAg
IGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEw
XSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIgPSBqYXooaSwgaSwgaSwgaSox
MCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChz
aGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgp
IHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAg
ICB9CisgICAgbm9JbmxpbmUoYmF6KTsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykg
eworICAgICAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBub0lu
bGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAg
ICAgIGxldCByID0gamF6KCk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAg
ICAgICAgciA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAg
ICAgICByID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisg
ICAgICAgIHIgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgciA9IGpheihp
LCBpLCBpLCBpKjEwKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyKTsKKyAgICAgICAg
YXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgaSoxMF0pKTsKKworICAgICAgICBsZXQgbyA9IHt9Owor
ICAgICAgICByID0gamF6KGksIGksIGksIGkqMTAsIG8pOworICAgICAgICBhc3NlcnQoci5sZW5n
dGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwLCBvXSkpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBu
b0lubGluZShiYXopOworICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7
CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIg
PSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0g
amF6KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBq
YXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9
IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAg
YXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkq
MTApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hh
bGxvd0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIg
PSBqYXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7
CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBsZXQgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIGlmIChzaG91bGRFeGl0KSB7CisgICAgICAg
ICAgICBPU1JFeGl0KCk7CisgICAgICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBd
LCBhcmdzWzFdLCBhcmdzWzJdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2FyZ3MubGVu
Z3RoLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdXTsKKyAgICB9CisgICAgZnVuY3Rpb24gamF6
KGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhei5hcHBseShudWxsLCBhcmdzKTsK
KyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZ1bmN0aW9uIGNoZWNrKGkpIHsKKyAg
ICAgICAgbGV0IFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KCk7CisgICAgICAgIGFzc2VydChsZW5n
dGggPT09IDApOworICAgICAgICBhc3NlcnQoYSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOwor
CisgICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGkpOworICAgICAgICBhc3NlcnQobGVu
Z3RoID09PSAwKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFz
c2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5kZWZpbmVkKTsK
KworICAgICAgICBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheihpLCBpKTsKKyAgICAgICAgYXNzZXJ0
KGxlbmd0aCA9PT0gMCk7CisgICAgICAgIGFzc2VydChhID09PSB1bmRlZmluZWQpOworICAgICAg
ICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IHVuZGVmaW5l
ZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXooaSwgaSwgaSk7CisgICAgICAg
IGFzc2VydChsZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSwgSlNPTi5zdHJp
bmdpZnkoYSkpOworICAgICAgICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNz
ZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXoo
aSwgaSwgaSwgaSoxMCk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBh
c3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSBpKjEwKTsKKyAgICAgICAgYXNz
ZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgbGV0IG8gPSB7b29vbzoyMH07CisgICAg
ICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGksIGkqMTAsIG8pOworICAgICAgICBh
c3NlcnQobGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGkpOworICAgICAgICBh
c3NlcnQoYiA9PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChjID09PSBvKTsKKyAgICB9CisKKyAg
ICBzaG91bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7
CisgICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7Cisg
ICAgfQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVu
Y3Rpb24gdGVzdDgoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlv
biBiYXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAg
T1NSRXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5l
KGpheik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBhcmdzID0gamF6
KCk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgYXJncyA9
IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAwKTsKKworICAgICAgICBh
cmdzID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDApOworCisg
ICAgICAgIGFyZ3MgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9
PT0gMSk7CisgICAgICAgIGFzc2VydChhcmdzWzBdID09PSBpKTsKKworICAgICAgICBhcmdzID0g
amF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDIpOwor
ICAgICAgICBhc3NlcnQoYXJnc1swXSA9PT0gaSk7CisgICAgICAgIGFzc2VydChhcmdzWzFdID09
PSBpKjEwKTsKKworICAgICAgICBsZXQgbyA9IHtvb29vOjIwfTsKKyAgICAgICAgYXJncyA9IGph
eihpLCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAzKTsK
KyAgICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09IGkpOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9
PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChhcmdzWzJdID09PSBvKTsKKyAgICB9CisKKyAgICBz
aG91bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7Cisg
ICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAg
fQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rp
b24gdGVzdDkoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooYSwgLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAg
T1NSRXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwgYXJn
c1sxXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwg
YXJnc1sxXV07CisgICAgfQorICAgIGZ1bmN0aW9uIGpheiguLi5hcmdzKSB7CisgICAgICAgIHJl
dHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7CisK
KyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBbbGVuZ3RoLCBhLCBiXSA9IGph
eigpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsKKworICAgICAgICBbbGVuZ3RoLCBh
LCBiXSA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0gMCk7CisgICAgICAgIGFz
c2VydChhID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsK
KworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihpLCBpICsgMSk7CisgICAgICAgIGFzc2Vy
dChsZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYl0gPSBqYXooaSwg
aSsxLCBpKzIpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0
KGEgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChiID09PSBpKzIpOworCisgICAgICAgIGxldCBv
ID0ge29vb286MjB9OworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihpLCBpKzEsIG8pOwor
ICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGkrMSk7
CisgICAgICAgIGFzc2VydChiID09PSBvKTsKKyAgICB9CisKKyAgICBzaG91bGRFeGl0ID0gdHJ1
ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAgICAgIGNoZWNrKGkp
OworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAgfQorCisgICAgc2hvdWxk
RXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rpb24gdGVzdDEwKCkgewor
ICAgIGZ1bmN0aW9uIGJheihhLCBiLCBjLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBbYXJn
cy5sZW5ndGgsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM11dOworICAgIH0KKyAg
ICBmdW5jdGlvbiBqYXooYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4gYmF6KGEs
IGIsIGMsIGQsIGUsIGYpOworICAgIH0KKyAgICBub0lubGluZShqYXopOworCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBbbGVuZ3RoLCBhLCBiLCBj
LCBkXSA9IGpheigxLCAyLCAzLCA0LCA1LCA2KTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0g
Myk7CisgICAgICAgIGFzc2VydChhID09PSA0KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IDUpOwor
ICAgICAgICBhc3NlcnQoYyA9PT0gNik7CisgICAgICAgIGFzc2VydChkID09PSB1bmRlZmluZWQp
OworICAgIH0KK30KKworLy90ZXN0MSgpOworLy90ZXN0MigpOworLy90ZXN0MygpOworLy90ZXN0
NCgpOworLy90ZXN0NSgpOworLy90ZXN0NigpOworLy90ZXN0NygpOworLy90ZXN0OCgpOworLy90
ZXN0OSgpOwordGVzdDEwKCk7CisKK3ByaW50KCJTdWNjZXNzIikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2MCw3ICsx
NjYwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBKU1ZhbHVlIGluZGV4ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV92YWx1ZTsKICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKIAotICAgICAgICBpZiAoaW5kZXggJiYgaW5k
ZXguaXNJbnQzMigpKSB7CisgICAgICAgIGlmIChpbmRleCAmJiBpbmRleC5pc0ludDMyKCkgJiYg
IW5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgLypGSVhNRSovKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIHByZXRlbmRzIHRvIHJldHVybiBUT1AgZm9yIGFjY2Vzc2VzIHRoYXQgYXJlIGFj
dHVhbGx5IHByb3ZlbiBvdXQtb2YtYm91bmRzIGJlY2F1c2UKICAgICAgICAgICAgIC8vIHRoYXQn
cyB0aGUgY29uc2VydmF0aXZlIHRoaW5nIHRvIGRvLiBPdGhlcndpc2Ugd2UnZCBuZWVkIHRvIHdy
aXRlIG1vcmUgY29kZSB0byBtYXJrIHN1Y2gKICAgICAgICAgICAgIC8vIHBhdGhzIGFzIHVucmVh
Y2hhYmxlLCBvciB0byByZXR1cm4gdW5kZWZpbmVkLiBXZSBjb3VsZCBpbXBsZW1lbnQgdGhhdCBl
dmVudHVhbGx5LgpAQCAtMTk1MCw2ICsxOTUwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAg
Y2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgQm90dG9tVmFsdWU6
CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldmVudCBjb25zdGFu
dCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byByZXR1cm4gYm90dG9tLgpAQCAt
Mjg1Nyw5ICsyODU4LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENyZWF0ZVJlc3Q6Ci0gICAgICAgIGlmICgh
bV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSAvLyBUaGlz
IG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgIGlmICghbV9n
cmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAg
ICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCiAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0FycmF5KTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCisg
ICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKICAgICAgICAg
ICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBjYXNl
IENyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRlcy5hZGQobm9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTEz
NCw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzICYmIGVkZ2UtPm9w
KCkgIT0gQ3JlYXRlUmVzdCkgewogICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRnZSwgc291
cmNlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAg
LTQxMSw2ICs0MTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21EaXJlY3RBcmd1
bWVudHMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29u
dGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQ3JlYXRlUmVzdCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9j
YW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDc0LDE4ICs0ODMsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5k
aWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IENyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQg
PSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50
MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IG5vZGUtPmNoaWxkMigpLT5hc1VJbnQzMigpOwogICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fm
ZVRvR2V0U3RhY2sgPSBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzYWZlVG9HZXRTdGFjayA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkgLSAxICYmIGNhbmRp
ZGF0ZS0+b3AoKSAhPSBDcmVhdGVSZXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmVUb0dldFN0YWNrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhOwpAQCAtNTEyLDEwICs1MjYsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcCA9IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5wcmVkaWN0aW9uKCksIG9w
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBu
b2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3
ZSBtYXkgaGF2ZSBhIGRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaGVyZS4KICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTUyNyw3OSArNTQxLDkxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21D
cmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICAg
ICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisK
ICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBj
YW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgJiYg
IWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICYm
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIHZhcmFyZ3NEYXRhLT5vZmZzZXQg
PD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIg
YmUgZXhpdE9LLgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuRXhpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3Rh
bnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJl
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSB2YXJhcmdzRGF0YS0+b2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVu
dENvdW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRT
dGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmFyZ3NE
YXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIG5vdCBpbmNs
dWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1p
dCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsg
c3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBs
b2FkLCBhbmQgbG9hZCBpdCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc3Np
YmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJhcmdzRGF0YS0+b2Zm
c2V0OworICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiB2YXJh
cmdzRGF0YS0+b2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwg
c28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhp
dE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhp
dChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFy
Z3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNO
b2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlLCBLbm93bklu
dDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChsb2FkSW5kZXggKyAxKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11
bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBl
eGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0
YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5l
ZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBz
dG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUg
YW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gc3RvcmUgYW55dGhpbmcg
aWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJh
cmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28g
aWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBkZWdlbmVyYXRlIElSOiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBz
b21ldGhpbmcgdGhhdCBkaWRuJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSBQdXRTdGFja3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9hZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFy
Z3NEYXRhLT5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXgg
KyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2Fu
RXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRh
dGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0
byBzdG9yZSBhbnl0aGluZyBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdp
bGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgR2V0
U3RhY2tzIGluIHRoYXQgcmFuZ2UuIFNvIGlmIHdlIGRvbid0IGRvIHRoZSBzdG9yZXMsIHdlJ2xs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGRlZ2VuZXJhdGUg
SVI6IHdlJ2xsIGhhdmUgR2V0U3RhY2tzIG9mIHNvbWV0aGluZyB0aGF0IGRpZG4ndAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3NDM0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZpbmVkKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkID0gaW5z
ZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCks
IGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IGEgdmFsdWUsIHN0b3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFy
Z3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3Jp
Z2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0Lgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRk
KHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBu
b2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUt
Pm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5v
cmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJk
VmFyYXJncyk7CkBAIC02MTQsNyArNjQwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0Rh
dGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFyZ09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsKKwogICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBh
cmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDE0ICs2NCwyMyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
CiAgICAgREZHX0FTU0VSVCgKICAgICAgICAgZ3JhcGgsIGFyZ3VtZW50cywKICAgICAgICAgYXJn
dW1lbnRzLT5vcCgpID09IENyZWF0ZURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gQ3JlYXRlU2NvcGVkQXJndW1lbnRzCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBD
cmVhdGVDbG9uZWRBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RB
cmd1bWVudHMKLSAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMpOworICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlQ2xvbmVkQXJndW1l
bnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVSZXN0CisgICAgICAgIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCk7CiAgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1
bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBD
cmVhdGVSZXN0IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAg
ICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CiAgICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50
c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICBhcmd1bWVudHNT
aXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhcmd1bWVudHNTaXplID0gMDsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRD
b25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAgICBub2RlSW5kZXgs
IG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzU2l6ZSkpOwogICAgIH0KICAgICAKICAgICBOb2Rl
KiBhcmd1bWVudENvdW50OwpAQCAtODQsMTIgKzkzLDIzIEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRB
cmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25s
eSwgR2V0U3RhY2ssIG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQoYXJndW1lbnRDb3VudFJlZ2lzdGVyLCBGbHVzaGVkSW50MzIpKSk7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKworICAgIE5vZGUq
IHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICBub2RlSW5kZXgsIFNw
ZWNJbnQzMk9ubHksIEFyaXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwK
ICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcigxKSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2lu
LCBqc051bWJlcigxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworCisg
ICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgIC8vIFRoZSBhYm92ZSBz
dWJ0cmFjdGlvbiBtYXkgcHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGlzIG51bWJlciBp
cyBub24temVyby4gV2UgY29ycmVjdCB0aGF0IGhlcmUuCisgICAgICAgIHJlc3VsdCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5
LCBBcml0aE1heCwgb3JpZ2luLCAKKyAgICAgICAgICAgIEVkZ2UocmVzdWx0LCBJbnQzMlVzZSks
IAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRl
eCwgb3JpZ2luLCBqc051bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRS
ZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MjUsNiArMTgyNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7
CiAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOwogICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11
bTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAw
OwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3Ms
IE9wSW5mbyhkYXRhKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw2ICs0NzYsMTIgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShIZWFwT2Jq
ZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0
OgorICAgICAgICAvLyBFdmVuIHRob3VnaCBpdCdzIHBoYW50b20sIGl0IHN0aWxsIGhhcyB0aGUg
cHJvcGVydHkgdGhhdCBvbmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyLgorICAgICAg
ICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7
CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgQ2FsbE9iamVjdENvbnN0cnVjdG9yOgogICAg
IGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IGluZGV4ID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGlmICghaW5kZXggfHwgIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4IHx8ICFpbmRleC5pc0ludDMyKCkgfHwgbm9kZS0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24g
MjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVk
QXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTgsNiAr
MTM5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0
aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3Vu
ZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUu
Y3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgTWluaWZpZWRO
b2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUoTm9kZQogICAgIGlmIChoYXNDb25zdGFudChub2Rl
LT5vcCgpKSkKICAgICAgICAgcmVzdWx0Lm1faW5mbyA9IEpTVmFsdWU6OmVuY29kZShub2RlLT5h
c0pTVmFsdWUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBo
YW50b21EaXJlY3RBcmd1bWVudHMgfHwgbm9kZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50
cyB8fCBub2RlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgbm9kZS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgIHJlc3VsdC5tX2luZm8gPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgY2FzZSBE
b3VibGVDb25zdGFudDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2Fz
ZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTg2LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgYm9vbCBoYXNJbmxp
bmVDYWxsRnJhbWUoTm9kZVR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09
IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgdHlwZSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
OworICAgICAgICByZXR1cm4gdHlwZSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IHR5cGUg
PT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCB0eXBlID09IFBoYW50b21DcmVhdGVSZXN0Owog
ICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBzdHJ1Y3Qg
U3dpdGNoRGF0YSB7CiAKIHN0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewogICAgIGludCBmaXJzdFZh
ckFyZ09mZnNldDsKKyAgICBpbnQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiB9OwogCiBzdHJ1
Y3QgTG9hZFZhcmFyZ3NEYXRhIHsKQEAgLTIxMCw2ICsyMTEsNyBAQCBzdHJ1Y3QgTG9hZFZhcmFy
Z3NEYXRhIHsKICAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFycmF5IGVsZW1lbnQgdG8g
c3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCiAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWlu
aW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3RhY2sgdGhhdCBtdXN0IGJl
IGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRoZW4gdGhlIG1pc3Npbmcg
ZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLiBEb2VzIG5vdCBpbmNsdWRlICJ0aGlzIi4KICAg
ICB1bnNpZ25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4g
SW5jbHVkZXMgInRoaXMiLgorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIHsg
MCB9OyAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwIHdoZW4gZm9yd2FyZGluZyAo
bm90IGluY2x1ZGluZyB0aGlzKS4gVXNlIGZvciByZXN0IHBhcmFtZXRlci4gaS5lLCBmdW5jdGlv
biBmb28oYSwgYiwgLi4uYXJncykgeyB9IHdpbGwgc2tpcCAyIGFyZ3VtZW50cyB3aGVuIGZvcndh
cmRpbmcuCiB9OwogCiBzdHJ1Y3QgU3RhY2tBY2Nlc3NEYXRhIHsKQEAgLTQ1MSw2ICs0NTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRo
ZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5k
LCB3aGljaAogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRv
IGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC00NjQsNyArNDY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KGhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURp
cmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpIHsKKyAgICAg
ICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21D
bG9uZWRBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkgewogICAgICAgICAg
ICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRo
ZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUg
YSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24o
KTsKQEAgLTE3MzYsNiArMTczOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7
CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgY2FzZSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0
aW9uOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKQEAgLTIzNzks
NyArMjM4Myw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IENyZWF0ZVJlc3QgfHwgb3AoKSA9
PSBHZXRSZXN0TGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBv
cCgpID09IEdldFJlc3RMZW5ndGggfHwgb3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWwgfHwgR2V0
TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8
dW5zaWduZWQ+KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MSw2ICszNDEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgXAogICAgIG1hY3JvKENyZWF0ZURpcmVjdEFy
Z3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbURpcmVjdEFyZ3VtZW50
cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21D
cmVhdGVSZXN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
Q3JlYXRlU2NvcGVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhDcmVhdGVD
bG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21DbG9uZWRB
cmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDYgKzE2NSw3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFBoYW50
b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNl
IFBoYW50b21DbG9uZWRBcmd1bWVudHM6IHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwpAQCAt
MTczLDYgKzE3NCwxMCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhl
CiAgICAgICAgICAgICAvLyBnaXZlbiB0aGF0IHdlIGNhbiByZWFkIHRoZW0gZnJvbSB0aGUgc3Rh
Y2suCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG5v
ZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgLy8gUmVjb3JkIGhvdyB0
byByZWFkIGVhY2ggYXJndW1lbnQgYW5kIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTE4OCw3ICsx
OTMsNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3Vt
ZW50c0NhbGxlZVBMb2MsIG5vZGUpLCBjYWxsZWUpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsg
KytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKAogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKICAgICAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU4LDcgKzEzNTgsNyBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQ29udGlndW91cyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihS
ZWdpc3RlcikgPT0gc2l6ZW9mKEpTVmFsdWUpLCAiVGhpcyBpcyBhIHN0cm9uZyBhc3N1bXB0aW9u
IGhlcmUuIik7CiAgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gYml0d2lzZV9j
YXN0PEpTVmFsdWUqPihhcmd1bWVudFN0YXJ0KSArIG51bWJlck9mUGFyYW1zVG9Ta2lwOwogICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJl
Z2lvbiwgYXJyYXlTaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAy
MDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMyw2ICsxMDAzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFy
Z3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2Ug
TWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbUNsb25l
ZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTU4LDYgKzIxNTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbURp
cmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3JpZ2lu
YWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlUmVzdDogeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRl
clN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJTdHJ1Y3R1cmUobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KS0+dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50eXBlZEFycmF5VHlwZSgp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MCw2ICs2NzAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJl
c3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAg
ICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBjYXNlIFVwc2lsb246Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVj
dDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50
b21EaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNl
IFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNzc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2
YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
OgogICAgICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CkBAIC0z
NDI5LDYgKzM0MzAsOCBAQCBwcml2YXRlOgogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KSkKKyAgICAgICAgICAgIGluZGV4ID0gbV9vdXQuYWRkKGluZGV4LCBtX291dC5jb25zdEludDMy
KG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSkpOwogICAgICAgICAKICAgICAgICAg
TFZhbHVlIGxpbWl0OwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNjI4MCwxNyArNjI4Myw1MCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxs
RnJhbWUpLnZhbHVlOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSAtIGRhdGEtPm9mZnNldCkpOwotICAgICAg
ICAKKworICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCisgICAgICAgIExWYWx1ZSBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFy
Z3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGtub3duTGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOworICAgICAgICAgICAgaWYgKGtu
b3duTGVuZ3RoID49IGRhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9
IGtub3duTGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0
SW50MzIoa25vd25MZW5ndGgpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1f
b3V0LmNvbnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coImNvbXBpbGluZyBGb3J3YXJkVmFyYXJncyBub2RlOiAiLCBSYXdQb2lu
dGVyKG1fbm9kZSksICJcbiIpOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgc2Ft
ZSBhcyB0aGUgY29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZ2VuZXJhdGVkIGNvZGUuCisgICAgICAg
ICAgICBpZiAoIWRhdGEtPm9mZnNldCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIoYSkgQ29tcGlsaW5n
IGZvcndhcmQgdmFyYXJncyB3aXRoIG9mZnNldDogIiwgZGF0YS0+b2Zmc2V0LCAiXG4iKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiKGIpIENvbXBpbGlu
ZyBmb3J3YXJkIHZhcmFyZ3Mgd2l0aCBvZmZzZXQ6ICIsIGRhdGEtPm9mZnNldCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0
aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3Vt
ZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJl
KGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50
MzIoZGF0YS0+b2Zmc2V0KSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxl
ck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9v
dXQuY29uc3RJbnQzMigxKSk7CisgICAgICAgIH0KKwogICAgICAgICBzcGVjdWxhdGUoCiAgICAg
ICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAg
IG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
bGltaXQpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAg
ICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNl
dDsKKyAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5l
Q2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJn
ZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCiAgICAg
ICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZExvb3AgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNjMy
Myw5ICs2MzU5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBo
aShwb2ludGVyVHlwZSgpLCBsb29wQm91bmQpOwogICAgICAgICBjdXJyZW50SW5kZXggPSBtX291
dC5zdWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRyT25lKTsKICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgIG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwKLSAgICAgICAgICAgICAg
ICBtX291dC5hZGQoY3VycmVudEluZGV4LCBtX291dC5jb25zdEludFB0cihkYXRhLT5vZmZzZXQp
KSkpOworICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBzb3Vy
Y2VTdGFydCwgY3VycmVudEluZGV4KSk7CiAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1f
b3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRl
eCkpOwogICAgICAgICBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKICAg
ICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwpA
QCAtODM3MSw5ICs4NDA1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICB9CiAgICAgCi0gICAg
TFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQorICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBzdGFydCA9IEFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjph
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpICsgb2Zmc2V0OwogICAgICAgICByZXR1cm4g
YWRkcmVzc0ZvcihzdGFydCkudmFsdWUoKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDYgKzgzLDcgQEAgZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUAogICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgIGNhc2UgUGhh
bnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Cisg
ICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgLy8gVGhvc2UgYXJlIGNvbXBsZXRl
bHkgaGFuZGxlZCBieSBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSCiAgICAgICAgIGJy
ZWFrOwogCkBAIC0yMzQsNiArMjM1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czogewogICAgICAgICBpZiAoIW1hdGVyaWFsaXphdGlv
bi0+b3JpZ2luKCkuaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC0yNDIsNiArMjQ0LDE4IEBAIGV4dGVy
biAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgICAgICByZXR1
cm4gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcoZXhlYyk7CiAgICAgICAgICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIENsb25l
ZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShleGVjLCBleGVjLCBBcmd1bWVudHNN
b2RlOjpDbG9uZWQpOworICAgICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDogeworICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxp
emF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHRoaXMgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgZmVlbHMgaGFja3khCisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWUqIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiA9IGV4ZWMtPmFkZHJlc3NP
ZkFyZ3VtZW50c1N0YXJ0KCkgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPiBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA/IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwIDogMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhl
Yywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
NTUsMTQgKzI2OSwxMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
CiAgICAgICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0
ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CiAgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoQXJndW1lbnRDb3Vu
dFBMb2MpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tp
XSkuYXNVSW50MzIoKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENv
dW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnQgPSBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRD
b3VudCk7CiAgICAgICAgIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBudWxscHRyOwog
ICAgICAgICBpZiAobWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKS5pbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwpIHsKQEAgLTMzMCw2ICszNDIsMzIgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6IHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkgLSAxOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOworICAgICAg
ICAgICAgdW5zaWduZWQgYXJyYXlTaXplID0gKGFyZ3VtZW50Q291bnQgLSAxKSA+IG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID8gYXJndW1lbnRDb3VudCAtIDEgLSBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA6IDA7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgYXJyYXlTaXplKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBjYW4gd2UgdGhyb3cgT09NIGhlcmU/CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcnJheSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGNvbnN0IEV4
aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygp
W2ldOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBB
cmd1bWVudFBMb2MpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYXJnSW5kZXggPSBwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKTsKKyAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPiBhcmdJbmRleCkgLy8g
RklYTUU6IHdvdWxkIHRoaXMgZXZlciBiZSB0cnVlPworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUluZGV4ID0gYXJnSW5kZXggLSBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlJbmRleCA+
PSBhcnJheVNpemUpIC8vIEZJWE1FOiBXaHkgd291bGQgdGhpcyBiZSB0cnVlPworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBhcnJheUluZGV4LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBhZGQgYW4gYXNzZXJ0aW9uIHRoYXQg
cHJvdmVzIHdlIHNldCBldmVyeSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIGFycmF5U2l6ZSkKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1MSw3ICs4NTEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3Jl
YXRlX3Jlc3QpCiAgICAgQkVHSU4oKTsKICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBPUF9DKDIp
LmpzVmFsdWUoKS5hc1VJbnQzMigpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGds
b2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwogICAgIHVuc2lnbmVkIG51bVBh
cmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKICAgICBKU1ZhbHVlKiBhcmd1bWVu
dHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpICsgbnVtUGFy
YW1zVG9Ta2lwOwogICAgIFJFVFVSTihjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFy
Z3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDc3ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyMyw2ICs1MjMsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0
KFZNJiB2bSkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJbmRleGluZ1No
YXBlczsgKytpKQogICAgICAgICBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmlu
Z0FsbG9jYXRpb25baV0gPSBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBl
W2ldOwogCisgICAgbV9yZXN0UGFyYW1ldGVyU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhDb250aWd1b3VzKSk7CisKICAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQodm0sIHRoaXMs
IFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9y
ZWdFeHBTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX3JlZ0V4cE1hdGNo
ZXNBcnJheVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZSh2bSwgdGhpcykpOwpAQCAtMTAxMSw2ICsxMDEzLDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6aGF2ZUFCYWRUaW1lKFZNJiB2bQogCiAgICAgLy8gU2FtZSBmb3IgYW55IHNwZWNpYWwg
YXJyYXkgc3RydWN0dXJlcy4KICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQo
dm0sIHRoaXMsIG1fcmVnRXhwTWF0Y2hlc0FycmF5U2xvd1B1dFN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgbV9yZXN0UGFyYW1ldGVyU3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3JpZ2luYWxBcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CiAg
ICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQg
c3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFn
ZS4KQEAgLTExNTUsNiArMTE1OCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYWJsZVByb3h5
T2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm94
eVJldm9rZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9k
dWxlTG9hZGVyU3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9y
ZXN0UGFyYW1ldGVyU3RydWN0dXJlKTsKIAogI2RlZmluZSBWSVNJVF9TSU1QTEVfVFlQRShDYXBp
dGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJv
dG90eXBlQmFzZSkgXAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tXyAjIyBsb3dl
ck5hbWUgIyMgUHJvdG90eXBlKTsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTcsNiArMzE3LDcgQEAgcHVibGljOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2Fs
bGFibGVQcm94eU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3Byb3h5UmV2b2tlU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbW9k
dWxlTG9hZGVyU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVzdFBh
cmFtZXRlclN0cnVjdHVyZTsKIAogI2RlZmluZSBERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZ
UEUoY2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05h
bWUsIHByb3RvdHlwZUJhc2UpIFwKICAgICBXcml0ZUJhcnJpZXI8Y2FwaXRhbE5hbWUgIyMgUHJv
dG90eXBlPiBtXyAjIyBsb3dlck5hbWUgIyMgUHJvdG90eXBlOyBcCkBAIC01OTYsNiArNTk3LDcg
QEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQog
ICAgIFN0cnVjdHVyZSogcHJveHlSZXZva2VTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3By
b3h5UmV2b2tlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBtb2R1bGVMb2FkZXJT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKTsg
fQorICAgIFN0cnVjdHVyZSogcmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdFBhcmFtZXRlclN0cnVjdHVyZS5nZXQoKTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgcmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3Bw
CShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAKKyNpbmNs
dWRlICJBcnJheVByb3RvdHlwZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogSlNBcnJheSogY3Jl
YXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCkKQEAgLTY2LDcgKzY4LDggQEAgSlNBcnJh
eSogY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSgogCiBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmVJbXBsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKGluZGV4aW5nVHlwZSk7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5
cGUoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLCBpbmRl
eGluZ1R5cGUpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5pbmRleCwgMCwgb2Zmc2V0KTsKICAgICBBU1NFUlQob2Zmc2V0ID09IFJlZ0V4cE1h
dGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293454</attachid>
            <date>2016-10-31 12:53:19 -0700</date>
            <delta_ts>2016-10-31 14:58:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>71707</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWVsaW1pbmF0aW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWVsaW1pbmF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItZWxpbWluYXRpb24u
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDYgQEAKK2Z1bmN0aW9uIGFzc2VydChiLCBt
ID0gIiIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2Vy
dGlvbjogIiArIG0pOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7
CisgICAgZnVuY3Rpb24gYmFyKGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3Mu
bGVuZ3RoOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgNDAwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQoYmFyKCkgPT09IDAsIGJhcigpKTsKKyAg
ICAgICAgYXNzZXJ0KGJhcihpKSA9PT0gMCk7CisgICAgICAgIGFzc2VydChiYXIoaSwgaSkgPT09
IDApOworICAgICAgICBhc3NlcnQoYmFyKGksIGksIGkpID09PSAxKTsKKyAgICAgICAgYXNzZXJ0
KGJhcihpLCBpLCBpLCBpLCBpKSA9PT0gMyk7CisgICAgfQorfQorCitmdW5jdGlvbiBzaGFsbG93
RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citub0lubGluZShzaGFsbG93RXEpOworCitmdW5j
dGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykgeworICAgICAg
ICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJnc1tpXSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZ1bmN0aW9uIGphejIoLi4uYXJncykgeworICAgICAgICBmdW5jdGlvbiBrYXooYSwgYiwgLi4u
YXJncykgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBrYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAg
fQorICAgIG5vSW5saW5lKGphejIpOworCisgICAgZm9yIChsZXQgZiBvZiBbamF6LCBqYXoyXSkg
eworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgICAg
IGxldCByID0gZigpOworICAgICAgICAgICAgYXNzZXJ0KCFyLmxlbmd0aCk7CisKKyAgICAgICAg
ICAgIHIgPSBmKGkpOworICAgICAgICAgICAgYXNzZXJ0KCFyLmxlbmd0aCk7CisKKyAgICAgICAg
ICAgIHIgPSBmKGksIGkpCisgICAgICAgICAgICBhc3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAg
ICAgICAgciA9IGYoaSwgaSwgaSkKKyAgICAgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpXSkpOworCisgICAgICAgICAgICBy
ID0gZihpLCBpLCBpKQorICAgICAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAg
ICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgICAgIHIgPSBmKGks
IGksIGksIGkqMiwgaSo0KQorICAgICAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMiwgaSo0XSkpOworICAgICAgICB9
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBmb28oLi4uYXJn
cykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgZnVuY3Rpb24gYmF6KGEsIGIs
IGMsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGZvby5hcHBseShudWxsLCBhcmdzKTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJu
IGJheihhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworICAgICAgICBsZXQgciA9IGpheigp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSkpOworCisgICAgICAgIHIg
PSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFz
c2VydChzaGFsbG93RXEociwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisK
KyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAz
KTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVu
ZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkpOworICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGksIGksIGkp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFtpLCBpLCBpXSkpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAg
ZnVuY3Rpb24gYmF6KC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAg
IGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXouYXBwbHko
bnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAg
YXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGkpOworICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwgaSk7CisgICAgICAg
IGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEw
XSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIgPSBqYXooaSwgaSwgaSwgaSox
MCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChz
aGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgp
IHsKKyAgICBmdW5jdGlvbiBiYXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAg
ICB9CisgICAgbm9JbmxpbmUoYmF6KTsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykg
eworICAgICAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBub0lu
bGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAg
ICAgIGxldCByID0gamF6KCk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAg
ICAgICAgciA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAg
ICAgICByID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisg
ICAgICAgIHIgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgciA9IGpheihp
LCBpLCBpLCBpKjEwKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyKTsKKyAgICAgICAg
YXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgaSoxMF0pKTsKKworICAgICAgICBsZXQgbyA9IHt9Owor
ICAgICAgICByID0gamF6KGksIGksIGksIGkqMTAsIG8pOworICAgICAgICBhc3NlcnQoci5sZW5n
dGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwLCBvXSkpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBu
b0lubGluZShiYXopOworICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7
CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IHIg
PSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0g
amF6KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBq
YXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9
IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAg
YXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkq
MTApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hh
bGxvd0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIg
PSBqYXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7
CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBsZXQgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZ1
bmN0aW9uIGJheiguLi5hcmdzKSB7CisgICAgICAgIGlmIChzaG91bGRFeGl0KSB7CisgICAgICAg
ICAgICBPU1JFeGl0KCk7CisgICAgICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBd
LCBhcmdzWzFdLCBhcmdzWzJdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2FyZ3MubGVu
Z3RoLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdXTsKKyAgICB9CisgICAgZnVuY3Rpb24gamF6
KGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhei5hcHBseShudWxsLCBhcmdzKTsK
KyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZ1bmN0aW9uIGNoZWNrKGkpIHsKKyAg
ICAgICAgbGV0IFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KCk7CisgICAgICAgIGFzc2VydChsZW5n
dGggPT09IDApOworICAgICAgICBhc3NlcnQoYSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOwor
CisgICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGkpOworICAgICAgICBhc3NlcnQobGVu
Z3RoID09PSAwKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFz
c2VydChiID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5kZWZpbmVkKTsK
KworICAgICAgICBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheihpLCBpKTsKKyAgICAgICAgYXNzZXJ0
KGxlbmd0aCA9PT0gMCk7CisgICAgICAgIGFzc2VydChhID09PSB1bmRlZmluZWQpOworICAgICAg
ICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IHVuZGVmaW5l
ZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXooaSwgaSwgaSk7CisgICAgICAg
IGFzc2VydChsZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSwgSlNPTi5zdHJp
bmdpZnkoYSkpOworICAgICAgICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNz
ZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXoo
aSwgaSwgaSwgaSoxMCk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBh
c3NlcnQoYSA9PT0gaSk7CisgICAgICAgIGFzc2VydChiID09PSBpKjEwKTsKKyAgICAgICAgYXNz
ZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgbGV0IG8gPSB7b29vbzoyMH07CisgICAg
ICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGksIGkqMTAsIG8pOworICAgICAgICBh
c3NlcnQobGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGkpOworICAgICAgICBh
c3NlcnQoYiA9PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChjID09PSBvKTsKKyAgICB9CisKKyAg
ICBzaG91bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7
CisgICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7Cisg
ICAgfQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVu
Y3Rpb24gdGVzdDgoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlv
biBiYXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAg
T1NSRXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5l
KGpheik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBhcmdzID0gamF6
KCk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgYXJncyA9
IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAwKTsKKworICAgICAgICBh
cmdzID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDApOworCisg
ICAgICAgIGFyZ3MgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9
PT0gMSk7CisgICAgICAgIGFzc2VydChhcmdzWzBdID09PSBpKTsKKworICAgICAgICBhcmdzID0g
amF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDIpOwor
ICAgICAgICBhc3NlcnQoYXJnc1swXSA9PT0gaSk7CisgICAgICAgIGFzc2VydChhcmdzWzFdID09
PSBpKjEwKTsKKworICAgICAgICBsZXQgbyA9IHtvb29vOjIwfTsKKyAgICAgICAgYXJncyA9IGph
eihpLCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAzKTsK
KyAgICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09IGkpOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9
PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChhcmdzWzJdID09PSBvKTsKKyAgICB9CisKKyAgICBz
aG91bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7Cisg
ICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAg
fQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rp
b24gdGVzdDkoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooYSwgLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAg
T1NSRXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwgYXJn
c1sxXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwg
YXJnc1sxXV07CisgICAgfQorICAgIGZ1bmN0aW9uIGpheiguLi5hcmdzKSB7CisgICAgICAgIHJl
dHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7CisK
KyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBbbGVuZ3RoLCBhLCBiXSA9IGph
eigpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsKKworICAgICAgICBbbGVuZ3RoLCBh
LCBiXSA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0gMCk7CisgICAgICAgIGFz
c2VydChhID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsK
KworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihpLCBpICsgMSk7CisgICAgICAgIGFzc2Vy
dChsZW5ndGggPT09IDEpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNz
ZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAgW2xlbmd0aCwgYSwgYl0gPSBqYXooaSwg
aSsxLCBpKzIpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0
KGEgPT09IGkrMSk7CisgICAgICAgIGFzc2VydChiID09PSBpKzIpOworCisgICAgICAgIGxldCBv
ID0ge29vb286MjB9OworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihpLCBpKzEsIG8pOwor
ICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGkrMSk7
CisgICAgICAgIGFzc2VydChiID09PSBvKTsKKyAgICB9CisKKyAgICBzaG91bGRFeGl0ID0gdHJ1
ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAgICAgIGNoZWNrKGkp
OworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAgfQorCisgICAgc2hvdWxk
RXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rpb24gdGVzdDEwKCkgewor
ICAgIGZ1bmN0aW9uIGJheihhLCBiLCBjLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBbYXJn
cy5sZW5ndGgsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM11dOworICAgIH0KKyAg
ICBmdW5jdGlvbiBqYXooYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4gYmF6KGEs
IGIsIGMsIGQsIGUsIGYpOworICAgIH0KKyAgICBub0lubGluZShqYXopOworCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBbbGVuZ3RoLCBhLCBiLCBj
LCBkXSA9IGpheigxLCAyLCAzLCA0LCA1LCA2KTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0g
Myk7CisgICAgICAgIGFzc2VydChhID09PSA0KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IDUpOwor
ICAgICAgICBhc3NlcnQoYyA9PT0gNik7CisgICAgICAgIGFzc2VydChkID09PSB1bmRlZmluZWQp
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGZ1bmN0aW9uIGJhciguLi5h
cmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOwor
CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJu
IGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9vKTsKKworICAg
IGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1cm4gWzEsMiwzLDQs
IC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsK
KyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsgYXNzZXJ0KHNoYWxsb3dFcShhLCBmb28uYXBwbHko
bnVsbCwgbWFrZUFyZ3VtZW50cyhhKSkpKTsgfQorICAgICAgICBsZXQgYSA9IFt7fSwgMjUsIDUw
XTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbXTsKKyAgICAgICAgdGVzdCgpOwor
CisgICAgICAgIGEgPSBbe2ZvbzogMjB9XTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEg
PSBbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAgICAgICAgdGVzdCgpOworICAg
IH0KK30KKworZnVuY3Rpb24gdGVzdDEyKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBsZXQg
dGhpc1ZhbHVlID0ge307CisgICAgZnVuY3Rpb24gZ2V0VGhpc1ZhbHVlKCkgeyByZXR1cm4gdGhp
c1ZhbHVlOyB9CisgICAgbm9JbmxpbmUoZ2V0VGhpc1ZhbHVlKTsKKworICAgIGZ1bmN0aW9uIGJh
ciguLi5hcmdzKSB7CisgICAgICAgIGFzc2VydCh0aGlzID09PSB0aGlzVmFsdWUpOworICAgICAg
ICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKworICAgIGZ1bmN0aW9u
IGZvbyhhLCBiLCBjLCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIuYXBwbHkoZ2V0
VGhpc1ZhbHVlKCksIGFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZnVu
Y3Rpb24gbWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIHJldHVybiBbMSwyLDMsNCwgLi4u
YXJnc107CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxvd0VxKGEsIGZvby5hcHBseShudWxs
LCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxldCBhID0gW3t9LCAyNSwgNTBdOwor
ICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAgICAgICB0ZXN0KCk7CisKKyAg
ICAgICAgYSA9IFt7Zm9vOiAyMH1dOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsx
MCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0MTMoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9u
IGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGlu
ZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9wKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAg
ICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9v
KC4uLmFyZ3MpIHsKKyAgICAgICAgbGV0IHIgPSB0b3AuYXBwbHkobnVsbCwgYXJncyk7CisgICAg
ICAgIHJldHVybiByOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24g
bWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIHJldHVybiBbMSwyLDMsNCwgLi4uYXJnc107
CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworICAgICAgICBm
dW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxvd0VxKGEsIGZvby5hcHBseShudWxsLCBtYWtl
QXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxldCBhID0gW3t9LCAyNSwgNTBdOworICAgICAg
ICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAg
YSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBdOworICAgICAgICB0ZXN0KCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTQoKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1
bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBu
b0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9wKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsK
KyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgZnVuY3Rp
b24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIs
IGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7CisgICAgICAgIHJldHVybiB0b3AoYTEsIGEyLCBh
MywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwg
YTE2LCBhMTcpOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAgZnVuY3Rpb24gbWFr
ZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIGxldCByID0gWzEsMiwzLDQsIC4uLmFyZ3NdOwor
ICAgICAgICB3aGlsZSAoci5sZW5ndGggPCBmb28ubGVuZ3RoKQorICAgICAgICAgICAgci5wdXNo
KHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxldCBhcmdzID0gbWFrZUFyZ3VtZW50cyhhKTsKKyAgICAgICAgICAgIGFz
c2VydChzaGFsbG93RXEoYXJncy5zbGljZSg0KSwgZm9vLmFwcGx5KG51bGwsIGFyZ3MpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBsZXQgYSA9IFt7fSwgMjUsIDUwXTsKKyAgICAgICAgdGVzdCgp
OworCisgICAgICAgIGEgPSBbXTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbMTAs
IDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAgICAgICAgdGVzdCgpOworICAgIH0KK30K
KworZnVuY3Rpb24gdGVzdDE1KCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBmdW5jdGlvbiBi
YXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgbm9JbmxpbmUo
YmFyKTsKKworICAgIGZ1bmN0aW9uIHRvcChhLCBiLCBjLCBkLCAuLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBiYXIuYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGZvbyhh
MSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGEx
NCwgYTE1LCBhMTYsIGExNykgeworICAgICAgICBsZXQgciA9IHRvcChhMSwgYTIsIGEzLCBhNCwg
YTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGEx
Nyk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKyAgICBub0lubGluZShmb28pOworCisgICAg
ZnVuY3Rpb24gbWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIGxldCByID0gWzEsMiwzLDQs
IC4uLmFyZ3NdOworICAgICAgICB3aGlsZSAoci5sZW5ndGggPCBmb28ubGVuZ3RoKQorICAgICAg
ICAgICAgci5wdXNoKHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxldCBhcmdzID0gbWFrZUFyZ3VtZW50cyhhKTsKKyAg
ICAgICAgICAgIGFzc2VydChzaGFsbG93RXEoYXJncy5zbGljZSg0KSwgZm9vLmFwcGx5KG51bGws
IGFyZ3MpKSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgYSA9IFt7fSwgMjUsIDUwXTsKKyAg
ICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbXTsKKyAgICAgICAgdGVzdCgpOworCisgICAg
ICAgIGEgPSBbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAgICAgICAgdGVzdCgp
OworICAgIH0KK30KKwordGVzdDEoKTsKK3Rlc3QyKCk7Cit0ZXN0MygpOwordGVzdDQoKTsKK3Rl
c3Q1KCk7Cit0ZXN0NigpOwordGVzdDcoKTsKK3Rlc3Q4KCk7Cit0ZXN0OSgpOwordGVzdDEwKCk7
Cit0ZXN0MTEoKTsKK3Rlc3QxMigpOwordGVzdDEzKCk7Cit0ZXN0MTQoKTsKK3Rlc3QxNSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQzLDYgKzIzNDMsMTQgQEAgdm9pZCBDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDog
eworICAgICAgICAgICAgaW50IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25z
W2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPj0gMCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID09IG51bVBhcmFtZXRlcnMoKSAtIDEsICJXZSBhc3N1bWUgdGhhdCB0aGlz
IGlzIHRydWUgd2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3QgcGFyYW1ldGVyIGR1cmluZyBP
U1IgZXhpdCBpbiB0aGUgRlRMIEpJVC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NjUsMTYgKzE2NjUsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBjb25zZXJ2YXRpdmUgdGhp
bmcgdG8gZG8uIE90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gd3JpdGUgbW9yZSBjb2RlIHRvIG1hcmsg
c3VjaAogICAgICAgICAgICAgLy8gcGF0aHMgYXMgdW5yZWFjaGFibGUsIG9yIHRvIHJldHVybiB1
bmRlZmluZWQuIFdlIGNvdWxkIGltcGxlbWVudCB0aGF0IGV2ZW50dWFsbHkuCiAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBpbmRleC5hc1VJbnQzMigp
ICsgbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRJbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVz
KCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGluZGV4LmFzSW50MzIoKSArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IG1fc3RhdGUudmFyaWFi
bGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaW5kZXguYXNJbnQzMigp
ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLnZhcmlh
YmxlcygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXgg
KyAxKTsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY4
NSw3ICsxNjg2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGJvdW5kIG9uIHRoZSB0eXBlcyBldmVuIHRob3VnaCBp
dCdzIHJhbmRvbSBhY2Nlc3MuIFRha2UgYWR2YW50YWdlIG9mIHRoaXMuCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CkBA
IC0xOTUwLDYgKzE5NTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9z
dGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAg
ICAgICAgIC8vIFRoaXMgY2xhaW1zIHRvIHJldHVybiBib3R0b20uCkBAIC0yODU3LDkgKzI4NTks
MTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgQ3JlYXRlUmVzdDoKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0
Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIC8vIFRoaXMgbWVhbnMgd2UncmUg
YWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hp
bmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgd2UncmUgYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNBcnJheSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAgICAgICAgIG1f
Z3JhcGgsCisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2s6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAg
ICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9p
bnQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdhdGNoaW5n
IHRoZSBIYXZpbmdBQmFkVGltZSB3YXRjaHBvaW50IGl0IG1lYW5zIHRoYXQgd2Ugd2lsbCBiZSBp
bnZhbGlkYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBmaXJlcyAoaXQg
bWF5IG9yIG1heSBub3QgaGF2ZSBhY3R1YWxseSBmaXJlZCB5ZXQpLiBXZSBkb24ndCB0cnkgdG8g
ZWxpbWluYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFsbG9jYXRpb24gd2hl
biB3ZSdyZSBub3Qgd2F0Y2hpbmcgdGhlIHdhdGNocG9pbnQgYmVjYXVzZSBpdCBjb3VsZCBlbnRh
aWwgY2FsbGluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXhlZCBhY2Nlc3NvcnMg
KGFuZCBwcm9iYWJseSBtb3JlIGNyYXp5IHRoaW5ncykgb24gb3V0IG9mIGJvdW5kIGFjY2Vzc2Vz
IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdCBwYXJhbWV0ZXIuIEl0J3Mg
YWxzbyBtdWNoIGVhc2llciB0byByZWFzb24gYWJvdXQgdGhpcyB3YXkuCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2NhbmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhlIGZh
Y3QgdGhhdCBzY29wZWQgYXJndW1lbnRzIGFyZQpAQCAtMTM0LDcgKzE0NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBD
cmVhdGVDbG9uZWRBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAh
PSBDcmVhdGVDbG9uZWRBcmd1bWVudHMgJiYgZWRnZS0+b3AoKSAhPSBDcmVhdGVSZXN0KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGVzY2FwZShlZGdlLCBzb3VyY2UpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjIyLDYgKzIzMywzMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5vZGUtPmFy
cmF5TW9kZSgpLCBub2RlLT5jaGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLm5vZGUoKS0+b3AoKSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBD
cmVhdGVDbG9uZWRBcmd1bWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlUmVzdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdB
QmFkVGltZVdhdGNocG9pbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhz
dHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgp
LCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gaGFuZGxlIEdldEJ5SWQvR2V0QnlPZmZzZXQgb24gY2FsbGVlLgogICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMw
NzUKQEAgLTM5NSw3ICs0MzIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIApAQCAtNDAzLDYgKzQ0MCwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LCBj
YW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luKTsKICAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgYXV0byBpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uID0gWyZdIChOb2Rl
KiBjYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlk
YXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNoIGEgd2F5
IHRoYXQgd2Ugc2VlIGRvbWluYXRvcnMgb2YgYSB1c2UgYmVmb3JlIHRoZSB1c2UuCisgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3Jl
YXRlUmVzdCB8fCBjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07CiAgICAgICAgIAogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzOgpAQCAtNDExLDYgKzQ1NiwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoUGhhbnRvbURpcmVjdEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVSZXN0OgorICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b21DcmVhdGVSZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0aGlzIHBhcmFtZXRlciBmb3IgT1NSIGV4aXQsIHdlIGNhbiBmaW5kIG91dCBhbGwgdGhl
IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdmlhIHRoZSBzdGF0
aWMgcGFyYW1ldGVyIGNvdW50IGFuZCB0aGUgZHluYW1pYyBhcmd1bWVudCBjb3VudC4KKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7IAorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBD
cmVhdGVDbG9uZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRh
dGVzLmNvbnRhaW5zKG5vZGUpKQpAQCAtNDIxLDEzICs0NzYsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9u
KGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCktPm9wKCkgPT0gQ3JlYXRlRGlyZWN0QXJndW1lbnRzCi0gICAgICAgICAgICAgICAg
ICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KG5vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCkg
KyAxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuc3Rh
Y2tPZmZzZXQoKTsKQEAgLTQzOCw3ICs0OTEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRh
dGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9j
YW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5vcCgp
ICE9IFBoYW50b21DbG9uZWRBcmd1bWVudHMpCkBAIC00NTQsNyArNTA3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5z
KGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2Nh
dGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBNZWgsIHRoaXMgaXMga2luZCBv
ZiBoYWNraXNoIC0gd2UgdXNlIGFuIElkZW50aXR5IHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZQpA
QCAtNDcyLDEzICs1MjUsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3NgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250
YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFs
bG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
Y2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBub2RlLT5jaGlsZDIoKS0+YXNV
SW50MzIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2FmZVRvR2V0U3RhY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQpAQCAtNTEyLDEwICs1NzAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEdldE15QXJndW1lbnRC
eVZhbE91dE9mQm91bmRzOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBub2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmln
aW4sIE9wSW5mbyhudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBhIGRhdGEgZm9ybWF0IGNvbnZlcnNp
b24gaGVyZS4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihy
ZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUyMyw4MyArNTgxLDk1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5j
b250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRl
ZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiB2YXJhcmdzRGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAg
ICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEt
Pm9mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKwogICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpIC0gdmFyYXJnc0RhdGEtPm9mZnNldCA8PSB2YXJhcmdzRGF0YS0+bGlt
aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5l
eGl0T0spOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJn
dW1lbnRDb3VudCA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIHZhcmFyZ3NEYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJh
cmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4u
d2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVk
SW50MzIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQs
IEtub3duSW50MzJVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQg
LSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8gbm90IGluY2x1ZGUgInRoaXMiLCBzaW5jZSB0
aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxpbWl0ID0gdmFyYXJnc0RhdGEtPmxpbWl0IC0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBzdG9yZUluZGV4IDwgbGltaXQ7
ICsrc3RvcmVJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGRl
dGVybWluZSBpZiB3ZSBoYXZlIGFuIGVsZW1lbnQgd2UgY2FuIGxvYWQsIGFuZCBsb2FkIGl0IGlm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9h
ZEluZGV4ID0gc3RvcmVJbmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0g
dmFyYXJnc0RhdGEtPm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA+PSAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhp
dE9LLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNl
dCgpKSwgRWRnZShhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50
LCBGbHVzaGVkSW50MzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUsIEtub3duSW50MzJVc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2
YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGlt
aXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5j
ZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBzdG9y
ZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBs
b2FkLCBhbmQgbG9hZCBpdCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
b3NzaWJsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRT
dGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlN
aW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBoYXZlIEdldFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUg
c3RvcmVzLCB3ZSdsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGRl
Z2VuZXJhdGUgSVI6IHdlJ2xsIGhhdmUgR2V0U3RhY2tzIG9mIHNvbWV0aGluZyB0aGF0IGRpZG4n
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzQzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZh
cmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5n
ZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRT
dGFja3Mgb2Ygc29tZXRoaW5nIHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0
MzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29u
c3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwganNVbmRlZmluZWQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3Rv
cmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRh
KiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChj
YW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcu
b2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhp
dE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5vdyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSwgc3RvcmUgaXQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
cmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0so
Y2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwg
RWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5F
eGl0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdp
bi5leGl0T0sgPSBjYW5FeGl0OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEZvcndhcmRWYXJhcmdzKTsKQEAgLTYxMSwx
MCArNjgxLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOiB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMygpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2Fu
ZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9u
KGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQ
aGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAg
ICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+Y2FsbFZh
cmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5maXJzdFZhckFy
Z09mZnNldCArPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKwogICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiBhcmd1bWVudHM7CkBAIC02NzcsMTEgKzc1MiwxOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOyAvLyBSZW1vdmUgdGhl
IGNlbGwgY2hlY2sgc2luY2Ugd2UndmUgcHJvdmVuIGl0J3Mgbm90IG5lZWRlZCBhbmQgRlRMIGxv
d2VyaW5nIG1pZ2h0IGJvdGNoIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE0ICs2NCwyMyBA
QCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgREZHX0FTU0VS
VCgKICAgICAgICAgZ3JhcGgsIGFyZ3VtZW50cywKICAgICAgICAgYXJndW1lbnRzLT5vcCgpID09
IENyZWF0ZURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlU2NvcGVk
QXJndW1lbnRzCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVDbG9uZWRBcmd1
bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMKLSAgICAg
ICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpOworICAgICAg
ICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBDcmVhdGVSZXN0CisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFu
dG9tRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJn
dW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgCiAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IDA7CisgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVSZXN0IHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSBhcmd1bWVudHMtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAg
CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgeworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNTaXplID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50c1NpemUgPj0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCisgICAgICAgICAgICBhcmd1bWVudHNTaXplIC09IG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmd1bWVudHNTaXpl
ID0gMDsKICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAg
ICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1i
ZXIoYXJndW1lbnRzU2l6ZSkpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBhcmd1bWVudENvdW50
OwpAQCAtODQsMTIgKzkzLDIzIEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxl
bmd0aCgKICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgR2V0U3RhY2ssIG9y
aWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoYXJn
dW1lbnRDb3VudFJlZ2lzdGVyLCBGbHVzaGVkSW50MzIpKSk7CiAgICAgfQotICAgIAotICAgIHJl
dHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKworICAgIE5vZGUqIHJlc3VsdCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEFy
aXRoU3ViLCBvcmlnaW4sIE9wSW5mbyhBcml0aDo6VW5jaGVja2VkKSwKICAgICAgICAgRWRnZShh
cmd1bWVudENvdW50LCBJbnQzMlVzZSksCiAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25z
dGFudEZvclVzZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxKSwg
SW50MzJVc2UpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcigxICsg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLCBJbnQzMlVzZSkpOworCisgICAgaWYgKG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKSB7CisgICAgICAgIC8vIFRoZSBhYm92ZSBzdWJ0cmFjdGlvbiBtYXkg
cHJvZHVjZSBhIG5lZ2F0aXZlIG51bWJlciBpZiB0aGlzIG51bWJlciBpcyBub24temVyby4gV2Ug
Y29ycmVjdCB0aGF0IGhlcmUuCisgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aE1heCwgb3Jp
Z2luLCAKKyAgICAgICAgICAgIEVkZ2UocmVzdWx0LCBJbnQzMlVzZSksIAorICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKG5vZGVJbmRleCwgb3JpZ2luLCBqc051
bWJlcigwKSwgSW50MzJVc2UpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHQoTm9kZVJlc3Vs
dEludDMyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw2ICs0NzYsMTIgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0Ogor
ICAgICAgICAvLyBFdmVuIHRob3VnaCBpdCdzIHBoYW50b20sIGl0IHN0aWxsIGhhcyB0aGUgcHJv
cGVydHkgdGhhdCBvbmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyLgorICAgICAgICBy
ZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7Cisg
ICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgQ2FsbE9iamVjdENvbnN0cnVjdG9yOgogICAgIGNh
c2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDkgKzMxNCwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOiB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBpbmRleCA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
dmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4IHx8ICFpbmRleC5pc0ludDMyKCkp
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpbmRleFZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSB8
fCAhaW5kZXhWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleFZhbHVlLmFzVUludDMyKCkgKyBu
b2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGFyZ3VtZW50cy0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKQEAgLTMzNSwxMCArMzM3LDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFsIGluIHN1Y2ggc3Rh
dGljYWxseS1vdXQtb2YtYm91bmRzIGFjY2Vzc2VzOyB3ZSBqdXN0IGxvc2UgQ0ZBIHVubGVzcwog
ICAgICAgICAgICAgICAgIC8vIEdDU0UgcmVtb3ZlcyB0aGUgYWNjZXNzIGVudGlyZWx5LgogICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluZGV4LmFzVUludDMyKCkgPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXguYXNV
SW50MzIoKSA+PSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1i
ZXJPZkFyZ3VtZW50cygpIC0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTM0OSwxNSArMzUxLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NE
YXRhLmFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGluZGV4
LmFzSW50MzIoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoaW5kZXgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoZWRKU1Zh
bHVlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBkYXRh
ID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleC5hc0ludDMyKCkgKyAxKSwgRmx1c2hl
ZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW5kZXggKyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICYmIGluZGV4
LmFzVUludDMyKCkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSAmJiBpbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDEpIHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0U3RhY2soZGF0YSk7
CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlv
bjoKICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURp
cmVjdEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhh
bnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzk4LDYgKzEzOTgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5l
cmF0b3JGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTEsNiArNDUxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAg
ICAgLy8gVGhlc2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRo
ZSBiZW5lZml0IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSB3b3VsZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUg
YSB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDY0LDcgKzQ2NSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNDb25zdGFudCgpKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChvcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgb3AoKSA9PSBQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzKSB7CisgICAgICAgIGlmIChvcCgpID09IFBoYW50b21EaXJlY3RB
cmd1bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzIHx8IG9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QpIHsKICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUgdGhl
IGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tlbmQs
IHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkgdG8g
YSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4g
RnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCk7CkBAIC0xNzM2LDYgKzE3MzcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFBoYW50b21OZXdPYmpl
Y3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgog
ICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3
R2VuZXJhdG9yRnVuY3Rpb246CkBAIC0yMzc5LDcgKzIzODEsNyBAQCBwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCiAgICAgewotICAgICAgICBBU1NFUlQo
b3AoKSA9PSBDcmVhdGVSZXN0IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0aCk7CisgICAgICAgIEFT
U0VSVChvcCgpID09IENyZWF0ZVJlc3QgfHwgb3AoKSA9PSBHZXRSZXN0TGVuZ3RoIHx8IG9wKCkg
PT0gR2V0TXlBcmd1bWVudEJ5VmFsIHx8IG9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZC
b3VuZHMpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8dW5zaWduZWQ+KCk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAy
MDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0MSw2ICszNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgXAogICAgIG1hY3JvKENyZWF0ZURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oUGhhbnRvbURpcmVjdEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFBoYW50b21DcmVhdGVSZXN0LCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ3JlYXRlU2NvcGVkQXJndW1lbnRz
LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhDcmVhdGVDbG9uZWRBcmd1bWVudHMsIE5vZGVS
ZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21DbG9uZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAko
cmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSw3
IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNh
c2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6IHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwpAQCAtMTczLDYgKzE3NCwxMCBAQCB2b2lk
IExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgICAgICAvLyBnaXZl
biB0aGF0IHdlIGNhbiByZWFkIHRoZW0gZnJvbSB0aGUgc3RhY2suCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gMDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAg
ICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG5vZGUtPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgewogICAgICAgICAgICAgLy8gUmVjb3JkIGhvdyB0byByZWFkIGVhY2ggYXJndW1lbnQg
YW5kIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTE4OCw3ICsxOTMsNyBAQCB2b2lkIExvY2FsT1NS
QXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2hlYXAuc2V0KFByb21vdGVkSGVhcExvY2F0aW9uKEFyZ3VtZW50c0NhbGxlZVBMb2MsIG5vZGUp
LCBjYWxsZWUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsgKytpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsgKytpKSB7CiAgICAgICAgICAgICBB
dmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAog
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0KGkpKTsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzU4LDcgKzEzNTgsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
UmVzCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1
Y3R1cmUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKEpT
VmFsdWUpLCAiVGhpcyBpcyBhIHN0cm9uZyBhc3N1bXB0aW9uIGhlcmUuIik7CiAgICAgSlNWYWx1
ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gYml0d2lzZV9jYXN0PEpTVmFsdWUqPihhcmd1bWVu
dFN0YXJ0KSArIG51bWJlck9mUGFyYW1zVG9Ta2lwOwogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJh
eShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE1
ICsxMjAsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCisgICAgICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICBpZiAobV9ub2Rl
LT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb2Yg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgZ3VhcmFudGVlcyB0aGF0IEdldE15QXJndW1lbnRCeVZh
bCogd2lsbCBuZXZlcgorICAgICAgICAgICAgICAgIC8vIHJlYWQgYW55IGFyZ3VtZW50cyBiZWxv
dyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLiBGb3IgZXhhbXBsZSwgaWYgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgaXMgMiwKKyAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5ldmVy
IHJlYWQgYXJndW1lbnQgMCBvciBhcmd1bWVudCAxLgorICAgICAgICAgICAgICAgIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gbV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewogICAgICAg
ICAgICAgICAgIC8vIFJlYWQgdGhlIG91dGVybW9zdCBhcmd1bWVudHMgYW5kIGFyZ3VtZW50IGNv
dW50LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7IGkrKykKICAgICAg
ICAgICAgICAgICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKICAg
ICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDMsNiArMTAwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRv
bU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0
aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICsz
NTMsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2Fz
ZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZh
dGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9t
Q3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5
NCw2ICs1NTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVS
ZXN0OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgInVuZXhwZWN0ZWQg
bm9kZSBpbiBERkcgYmFja2VuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MTAsNiArNTgxMCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dFN0YWNrOgogICAg
IGNhc2UgS2lsbFN0YWNrOgogICAgIGNhc2UgR2V0U3RhY2s6CisgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlUmVzdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVj
dGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNzc4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODE2LDYgKzY4MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3JlYXRlUmVzdChOCiAgICAgICAgIEdQUlJlZyBhcnJheVJlc3VsdEdQUiA9IGFycmF5UmVz
dWx0LmdwcigpOwogCiAgICAgICAgIGJvb2wgc2hvdWxkQWxsb3dGb3JBcnJheVN0b3JhZ2VTdHJ1
Y3R1cmVGb3JMYXJnZUFycmF5cyA9IGZhbHNlOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZXN0UGFy
YW1ldGVyU3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMp
OwogICAgICAgICBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFycmF5UmVzdWx0R1BSLCBh
cnJheUxlbmd0aEdQUiwgQXJyYXlXaXRoQ29udGlndW91cywgc2hvdWxkQWxsb3dGb3JBcnJheVN0
b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJnZUFycmF5cyk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFy
Z3VtZW50c1N0YXJ0KHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0
cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5v
cmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91
cykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBOZXdUeXBlZEFycmF5OgogICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVy
ZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT50eXBlZEFy
cmF5U3RydWN0dXJlQ29uY3VycmVudGx5KG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcwLDYgKzY3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RB
cmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIw
Nzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNh
c2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFy
Z3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbUNs
b25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcxLDYgKzEwNzEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5l
cmF0b3JGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAg
IGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKQEAgLTM0MjksNiArMzQz
MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKICAg
ICAgICAgCiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBpZiAobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKQorICAgICAg
ICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbGlt
aXQ7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpCkBAIC00MTUyLDcgKzQxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZh
bHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwogICAgICAgICAg
ICAgQXJyYXlWYWx1ZXMgYXJyYXlWYWx1ZXMgPSBhbGxvY2F0ZVVuaW5pdGlhbGl6ZWRDb250aWd1
b3VzSlNBcnJheShhcnJheUxlbmd0aCwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIExWYWx1ZSBh
cnJheSA9IGFycmF5VmFsdWVzLmFycmF5OwogICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IGFycmF5VmFsdWVzLmJ1dHRlcmZseTsKQEAgLTYyODAsMTcgKzYyODMsNDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5l
Q2FsbEZyYW1lKS52YWx1ZTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBt
X291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdEludDMyKDEgLSBkYXRhLT5vZmZzZXQpKTsKLSAg
ICAgICAgCisKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG51bGxwdHI7IAorICAgICAgICBMVmFs
dWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG51bGxwdHI7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0
aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC5rbm93bjsKKyAgICAgICAgICAgIGlm
IChrbm93bkxlbmd0aCA+PSBkYXRhLT5vZmZzZXQpCisgICAgICAgICAgICAgICAga25vd25MZW5n
dGggPSBrbm93bkxlbmd0aCAtIGRhdGEtPm9mZnNldDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7CisgICAgICAgICAgICBsZW5ndGggPSBtX291dC5j
b25zdEludDMyKGtub3duTGVuZ3RoKTsKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMg
PSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoICsgMSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzYW1lIGFzIHRoZSBjb2RlIGFib3ZlLCBi
dXQgdGhyb3VnaCBnZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgICAgIGlmICghZGF0YS0+b2Zmc2V0
KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21h
bGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigw
KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBt
X291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2Vy
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxl
bmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVl
LCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5w
aGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0
LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOworICAgICAgICB9CisKICAgICAgICAg
c3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxw
dHIsCiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5j
b25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUz
MihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwog
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQo
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBkYXRhLT5vZmZzZXQ7CisgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3Vt
ZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAg
ICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCku
dmFsdWUoKTsKIAogICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gbV9vdXQubmV3
QmxvY2soKTsKQEAgLTYzMjMsOSArNjM1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHByZXZpb3Vz
SW5kZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgbG9vcEJvdW5kKTsKICAgICAgICAgY3Vy
cmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7CiAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgIG1fb3V0LmJh
c2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQs
Ci0gICAgICAgICAgICAgICAgbV9vdXQuYWRkKGN1cnJlbnRJbmRleCwgbV9vdXQuY29uc3RJbnRQ
dHIoZGF0YS0+b2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBz
LnZhcmlhYmxlcywgc291cmNlU3RhcnQsIGN1cnJlbnRJbmRleCkpOwogICAgICAgICBtX291dC5z
dG9yZTY0KHZhbHVlLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0
YXJ0LCBjdXJyZW50SW5kZXgpKTsKICAgICAgICAgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1
cnJlbnRJbmRleCk7CiAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRl
eCwgbmV4dEluZGV4KTsKQEAgLTgzNzEsOSArODQwMiw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAg
ICAgfQogICAgIAotICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKKyAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFz
c2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKSArIG9mZnNldDsK
ICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhcnQpLnZhbHVlKCk7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIGV4dGVybiAiQyIgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblAKICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlv
bjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xv
bmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIC8vIFRo
b3NlIGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJ
bk9TUgogICAgICAgICBicmVhazsKIApAQCAtMjM0LDYgKzIzNSw3IEBAIGV4dGVybiAiQyIgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFy
Z3VtZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6IHsKICAgICAgICAgaWYg
KCFtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGluZUNhbGxGcmFtZSkgewpAQCAtMjQyLDYg
KzI0NCwxNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMp
OwogICAgICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICAgICAg
ICAgIHJldHVybiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoZXhlYywg
ZXhlYywgQXJndW1lbnRzTW9kZTo6Q2xvbmVkKTsKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6IHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCisgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKKwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkgLSAxOworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJT
dHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKiBhcmd1bWVudHNUb0NvcHlSZWdp
b24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpICsgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlTaXplID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPyBleGVjLT5hcmd1bWVudENvdW50
KCkgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA6IDA7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVnaW9uLCBh
cnJheVNpemUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjU1LDE0ICsyNjgsMTIgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZh
bHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwogICAgICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRpb25EZXNj
cmlwdG9yKEFyZ3VtZW50Q291bnRQTG9jKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IEpTVmFs
dWU6OmRlY29kZSh2YWx1ZXNbaV0pLmFzVUludDMyKCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJndW1lbnRDb3VudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50KTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gbWF0ZXJpYWxpemF0aW9uLT5v
cmlnaW4oKS5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCku
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CkBAIC0zMzAsNiArMzQxLDU2IEBAIGV4
dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVSZXN0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMTsKKyAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJT
dHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50ID4gMCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSAoYXJndW1lbnRDb3VudCAtIDEpID4gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPyBhcmd1bWVudENvdW50IC0gMSAtIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwIDogMDsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYXJyYXkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
YXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24t
PnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24o
KS5raW5kKCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gcHJvcGVydHkubG9jYXRpb24o
KS5pbmZvKCk7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID4g
YXJnSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFycmF5SW5kZXggPSBhcmdJbmRleCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OworICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6ZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgYXJyYXlJbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgICAgIC8vIFdlIGF2b2lkIHRoaXMgTyhuXjIpIGxvb3Agd2hlbiBhc3NlcnRzIGFyZSBkaXNh
YmxlZCwgYnV0IHRoZSBjb25kaXRpb24gY2hlY2tlZCBoZXJlCisgICAgICAgICAgICAgICAgLy8g
bXVzdCBob2xkIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGFib3ZlIGxvb3AgYmVj
YXVzZSBvZiBob3cgd2UgYWxsb2NhdGUgdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOyB0YXJnZXRJbmRleCA8IGFycmF5U2l6ZTsgKyt0YXJn
ZXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVy
dGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXhp
dFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClb
aV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5k
KCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IHByb3BlcnR5
LmxvY2F0aW9uKCkuaW5mbygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID4gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUluZGV4ID0g
YXJnSW5kZXggLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID09
IHRhcmdldEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChmb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB2b2lk
IGVtaXRTZXRWYXJhcmdzRnJhbWUoQ0NhbGxIZWxwZXJzJiBqCiAgICAgaml0LmFuZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMih+KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxKSks
IHJlc3VsdEdQUik7CiAKICAgICBqaXQuYWRkUHRyKGxlbmd0aEdQUiwgcmVzdWx0R1BSKTsKLSAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhpcz8gMCA6IDEpKSwgcmVzdWx0R1BS
KTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhpcyA/IDAgOiAxKSksIHJl
c3VsdEdQUik7CiAgICAgCiAgICAgLy8gcmVzdWx0R1BSIG5vdyBoYXMgdGhlIHJlcXVpcmVkIGZy
YW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKICAgICAvLyBSb3VuZCByZXN1bHRHUFIgdG8gbmV4
dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw3ICs4NTEsNyBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfY3JlYXRlX3Jlc3QpCiAgICAgQkVHSU4oKTsKICAgICB1bnNpZ25lZCBhcnJheVNp
emUgPSBPUF9DKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwogICAgIHVu
c2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKICAgICBKU1Zh
bHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFy
dCgpICsgbnVtUGFyYW1zVG9Ta2lwOwogICAgIFJFVFVSTihjb25zdHJ1Y3RBcnJheShleGVjLCBz
dHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw2ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0
dXJlKiBjYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
YWJsZVByb3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJl
dm9rZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZUxvYWRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgU3RydWN0dXJlKiByZXN0
UGFyYW1ldGVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOyB9CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoYm9vbCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKCkgY29uc3Q7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293469</attachid>
            <date>2016-10-31 14:58:04 -0700</date>
            <delta_ts>2016-10-31 15:00:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79283</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgxNzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDc0IEBACisyMDE2LTEwLTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIGVsaW1pbmF0ZSByZXN0IHBhcmFt
ZXRlciBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzOTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGlt
aW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuYmFy
KToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKHRlc3QyLmpheik6CisgICAgICAgICh0ZXN0
Mi5qYXoyLmtheik6CisgICAgICAgICh0ZXN0Mi5qYXoyKToKKyAgICAgICAgKHRlc3QyKToKKyAg
ICAgICAgKHRlc3QzLmZvbyk6CisgICAgICAgICh0ZXN0My5iYXopOgorICAgICAgICAodGVzdDMu
amF6KToKKyAgICAgICAgKHRlc3QzKToKKyAgICAgICAgKHRlc3Q0LmJheik6CisgICAgICAgICh0
ZXN0NC5qYXopOgorICAgICAgICAodGVzdDQpOgorICAgICAgICAodGVzdDUuYmF6KToKKyAgICAg
ICAgKHRlc3Q1Lmpheik6CisgICAgICAgICh0ZXN0NSk6CisgICAgICAgICh0ZXN0Ni5iYXopOgor
ICAgICAgICAodGVzdDYuamF6KToKKyAgICAgICAgKHRlc3Q2KToKKyAgICAgICAgKHRlc3Q3LmJh
eik6CisgICAgICAgICh0ZXN0Ny5qYXopOgorICAgICAgICAodGVzdDcuY2hlY2spOgorICAgICAg
ICAodGVzdDcpOgorICAgICAgICAodGVzdDguYmF6KToKKyAgICAgICAgKHRlc3Q4Lmpheik6Cisg
ICAgICAgICh0ZXN0OC5jaGVjayk6CisgICAgICAgICh0ZXN0OCk6CisgICAgICAgICh0ZXN0OS5i
YXopOgorICAgICAgICAodGVzdDkuamF6KToKKyAgICAgICAgKHRlc3Q5LmNoZWNrKToKKyAgICAg
ICAgKHRlc3Q5KToKKyAgICAgICAgKHRlc3QxMC5iYXopOgorICAgICAgICAodGVzdDEwLmpheik6
CisgICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExLmJhcik6CisgICAgICAgICh0ZXN0
MTEuZm9vKToKKyAgICAgICAgKHRlc3QxMS5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3Qx
MS4pOgorICAgICAgICAodGVzdDEyKToKKyAgICAgICAgKHRlc3QxMi5iYXIpOgorICAgICAgICAo
dGVzdDEyLmZvbyk6CisgICAgICAgICh0ZXN0MTIubWFrZUFyZ3VtZW50cyk6CisgICAgICAgICh0
ZXN0MTIuKToKKyAgICAgICAgKHRlc3QxMy5iYXIpOgorICAgICAgICAodGVzdDEzLnRvcCk6Cisg
ICAgICAgICh0ZXN0MTMuZm9vKToKKyAgICAgICAgKHRlc3QxMy5tYWtlQXJndW1lbnRzKToKKyAg
ICAgICAgKHRlc3QxMy4pOgorICAgICAgICAodGVzdDEzKToKKyAgICAgICAgKHRlc3QxNC5iYXIp
OgorICAgICAgICAodGVzdDE0LnRvcCk6CisgICAgICAgICh0ZXN0MTQuZm9vKToKKyAgICAgICAg
KHRlc3QxNC5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3QxNC4pOgorICAgICAgICAodGVz
dDE0KToKKyAgICAgICAgKHRlc3QxNS5iYXIpOgorICAgICAgICAodGVzdDE1LnRvcCk6CisgICAg
ICAgICh0ZXN0MTUuZm9vKToKKyAgICAgICAgKHRlc3QxNS5tYWtlQXJndW1lbnRzKToKKyAgICAg
ICAgKHRlc3QxNS4pOgorICAgICAgICAodGVzdDE1KToKKwogMjAxNi0xMC0zMSAgU2FhbSBCYXJh
dGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWJ1ZyBKU0MgdGVzdCBtaWNyb2Jl
bmNobWFya3MvcHVyZS1nZXQtYnktaWQtY3NlLTIuanMgdGltaW5nIG91dApJbmRleDogSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZXN0LXBhcmFtZXRlci1h
bGxvY2F0aW9uLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYxMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsg
bSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitjb25zdCBpdGVyYXRpb25zID0gMjAwMDA7CisK
K2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGZ1bmN0aW9uIGJhcihhLCBiLCAuLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBhcmdzLmxlbmd0aDsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBhc3NlcnQo
YmFyKCkgPT09IDAsIGJhcigpKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpKSA9PT0gMCk7CisgICAg
ICAgIGFzc2VydChiYXIoaSwgaSkgPT09IDApOworICAgICAgICBhc3NlcnQoYmFyKGksIGksIGkp
ID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpLCBpLCBpLCBpLCBpKSA9PT0gMyk7CisgICAg
fQorfQorCitmdW5jdGlvbiBzaGFsbG93RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0g
Yi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citub0lu
bGluZShzaGFsbG93RXEpOworCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBqYXoo
YSwgYiwgLi4uYXJncykgeworICAgICAgICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LnB1
c2goYXJnc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZ1bmN0aW9uIGphejIoLi4uYXJncykgeworICAgICAg
ICBmdW5jdGlvbiBrYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9
IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBrYXou
YXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGphejIpOworCisgICAgZm9y
IChsZXQgZiBvZiBbamF6LCBqYXoyXSkgeworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICAgICAgbGV0IHIgPSBmKCk7CisgICAgICAgICAgICBh
c3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSk7CisgICAgICAgICAgICBh
c3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSkKKyAgICAgICAgICAg
IGFzc2VydCghci5sZW5ndGgpOworCisgICAgICAgICAgICByID0gZihpLCBpLCBpKQorICAgICAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGFzc2VydChzaGFsbG93
RXEociwgW2ldKSk7CisKKyAgICAgICAgICAgIHIgPSBmKGksIGksIGkpCisgICAgICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBb
aV0pKTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSwgaSwgaSoyLCBpKjQpCisgICAgICAgICAg
ICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaSwgaSoyLCBpKjRdKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qz
KCkgeworICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1
cm4gZm9vLmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwg
YywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4gYmF6KGEsIGIsIGMsIGQsIGUsIGYpOworICAg
IH0KKyAgICBub0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRp
b25zOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGkpOworICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFt1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSkpOworCisgICAgICAgIHIgPSBqYXooaSwgaSwg
aSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFs
bG93RXEociwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisKKyAgICAgICAg
ciA9IGpheihpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisK
KyAgICAgICAgciA9IGpheihpLCBpLCBpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgaSwgaV0pKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5hcmdzKSB7
CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4u
YXJncykgeworICAgICAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAg
ICBub0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBp
KyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09
PSAwKTsKKworICAgICAgICByID0gamF6KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09
IDApOworCisgICAgICAgIHIgPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9
PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAg
ICByID0gamF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIp
OworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxl
dCBvID0ge307CisgICAgICAgIHIgPSBqYXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFz
c2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkq
MTAsIG9dKSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgbm9JbmxpbmUo
YmF6KTsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShqYXopOworCisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBq
YXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6
KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXoo
aSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGph
eihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNz
ZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkqMTAp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIgPSBq
YXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7Cisg
ICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQorCitm
dW5jdGlvbiB0ZXN0NigpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIG5vSW5saW5lKGJheik7
CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhei5h
cHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCByID0gamF6KCk7
CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpKTsK
KyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGksIGkp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwg
aSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChz
aGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpLCBpKjEwKTsKKyAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaSwgaSoxMF0pKTsKKworICAgICAgICBsZXQgbyA9IHt9OworICAgICAgICByID0gamF6KGks
IGksIGksIGkqMTAsIG8pOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAg
ICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwLCBvXSkpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdDcoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NS
RXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwgYXJnc1sx
XSwgYXJnc1syXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJn
c1swXSwgYXJnc1sxXSwgYXJnc1syXV07CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAu
Li5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQor
ICAgIG5vSW5saW5lKGpheik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxl
dCBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheigpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAw
KTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09
PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5kZWZpbmVkKTsKKworICAgICAg
ICBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0g
MCk7CisgICAgICAgIGFzc2VydChhID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYiA9
PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAg
ICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChsZW5ndGgg
PT09IDApOworICAgICAgICBhc3NlcnQoYSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0
KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOworCisg
ICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGkpOworICAgICAgICBhc3NlcnQo
bGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGksIEpTT04uc3RyaW5naWZ5KGEp
KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09
PSB1bmRlZmluZWQpOworCisgICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGks
IGkqMTApOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KGEg
PT09IGkpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChjID09
PSB1bmRlZmluZWQpOworCisgICAgICAgIGxldCBvID0ge29vb286MjB9OworICAgICAgICBbbGVu
Z3RoLCBhLCBiLCBjXSA9IGpheihpLCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGxl
bmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIg
PT09IGkqMTApOworICAgICAgICBhc3NlcnQoYyA9PT0gbyk7CisgICAgfQorCisgICAgc2hvdWxk
RXhpdCA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAg
ICBjaGVjayhpKTsKKyAgICB9CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAg
fQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rp
b24gdGVzdDgoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NS
RXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAg
ICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGph
eik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBhcmdzID0gamF6KCk7
CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgYXJncyA9IGph
eihpKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAwKTsKKworICAgICAgICBhcmdz
ID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDApOworCisgICAg
ICAgIGFyZ3MgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0g
MSk7CisgICAgICAgIGFzc2VydChhcmdzWzBdID09PSBpKTsKKworICAgICAgICBhcmdzID0gamF6
KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDIpOworICAg
ICAgICBhc3NlcnQoYXJnc1swXSA9PT0gaSk7CisgICAgICAgIGFzc2VydChhcmdzWzFdID09PSBp
KjEwKTsKKworICAgICAgICBsZXQgbyA9IHtvb29vOjIwfTsKKyAgICAgICAgYXJncyA9IGpheihp
LCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09IGkpOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9PT0g
aSoxMCk7CisgICAgICAgIGFzc2VydChhcmdzWzJdID09PSBvKTsKKyAgICB9CisKKyAgICBzaG91
bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAg
ICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBjaGVjayhpKTsKKyAg
ICB9CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgY2hlY2soMTApOworfQorCitmdW5j
dGlvbiB0ZXN0OSgpIHsKKyAgICBsZXQgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZ1bmN0aW9u
IGJheihhLCAuLi5hcmdzKSB7CisgICAgICAgIGlmIChzaG91bGRFeGl0KSB7CisgICAgICAgICAg
ICBPU1JFeGl0KCk7CisgICAgICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBh
cmdzWzFdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBd
LCBhcmdzWzFdXTsKKyAgICB9CisgICAgZnVuY3Rpb24gamF6KC4uLmFyZ3MpIHsKKyAgICAgICAg
cmV0dXJuIGJhei5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsK
KworICAgIGZ1bmN0aW9uIGNoZWNrKGkpIHsKKyAgICAgICAgbGV0IFtsZW5ndGgsIGEsIGJdID0g
amF6KCk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDApOworCisgICAgICAgIFtsZW5ndGgs
IGEsIGJdID0gamF6KGkpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsKKyAgICAgICAg
YXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQp
OworCisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkgKyAxKTsKKyAgICAgICAgYXNz
ZXJ0KGxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBh
c3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihp
LCBpKzEsIGkrMik7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3Nl
cnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkrMik7CisKKyAgICAgICAgbGV0
IG8gPSB7b29vbzoyMH07CisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkrMSwgbyk7
CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsx
KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IG8pOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSB0
cnVlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2so
aSk7CisgICAgfQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAg
IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBjaGVjaygxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qx
MCgpIHsKKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1
cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdXTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJu
IGJheihhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCBbbGVu
Z3RoLCBhLCBiLCBjLCBkXSA9IGpheigxLCAyLCAzLCA0LCA1LCA2KTsKKyAgICAgICAgYXNzZXJ0
KGxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSA0KTsKKyAgICAgICAgYXNzZXJ0
KGIgPT09IDUpOworICAgICAgICBhc3NlcnQoYyA9PT0gNik7CisgICAgICAgIGFzc2VydChkID09
PSB1bmRlZmluZWQpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGZ1bmN0
aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lu
bGluZShiYXIpOworCisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAg
ICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1
cm4gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxv
d0VxKGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxl
dCBhID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOwor
ICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFt7Zm9vOiAyMH1dOworICAgICAgICB0ZXN0
KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBdOworICAg
ICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTIoKSB7CisgICAgInVzZSBz
dHJpY3QiOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBmdW5jdGlvbiBnZXRUaGlzVmFs
dWUoKSB7IHJldHVybiB0aGlzVmFsdWU7IH0KKyAgICBub0lubGluZShnZXRUaGlzVmFsdWUpOwor
CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHRo
aXNWYWx1ZSk7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIp
OworCisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJhci5hcHBseShnZXRUaGlzVmFsdWUoKSwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5l
KGZvbyk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIFsxLDIsMyw0LCAuLi5hcmdzXTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBp
dGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsgYXNzZXJ0KHNoYWxs
b3dFcShhLCBmb28uYXBwbHkobnVsbCwgbWFrZUFyZ3VtZW50cyhhKSkpKTsgfQorICAgICAgICBs
ZXQgYSA9IFt7fSwgMjUsIDUwXTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbXTsK
KyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbe2ZvbzogMjB9XTsKKyAgICAgICAgdGVz
dCgpOworCisgICAgICAgIGEgPSBbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAg
ICAgICAgdGVzdCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEzKCkgeworICAgICJ1c2Ug
c3RyaWN0IjsKKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJn
czsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKworICAgIGZ1bmN0aW9uIHRvcChhLCBiLCBj
LCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIuYXBwbHkobnVsbCwgYXJncyk7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIGxldCByID0gdG9wLmFw
cGx5KG51bGwsIGFyZ3MpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1
cm4gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxv
d0VxKGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxl
dCBhID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOwor
ICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3
MCwgODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTQoKSB7
CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24g
dG9wKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxs
LCBhcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs
IGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7Cisg
ICAgICAgIHJldHVybiB0b3AoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEw
LCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcpOworICAgIH0KKyAgICBub0lubGlu
ZShmb28pOworCisgICAgZnVuY3Rpb24gbWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIGxl
dCByID0gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgICAgICB3aGlsZSAoci5sZW5ndGggPCBmb28u
bGVuZ3RoKQorICAgICAgICAgICAgci5wdXNoKHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiBy
OworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IGFyZ3MgPSBt
YWtlQXJndW1lbnRzKGEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShhcmdzLnNsaWNl
KDQpLCBmb28uYXBwbHkobnVsbCwgYXJncykpKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBh
ID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAg
ICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwg
ODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTUoKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJl
dHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9w
KGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBh
cmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7CisgICAg
ICAgIGxldCByID0gdG9wKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwg
YTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KTsKKyAgICAgICAgcmV0dXJuIHI7Cisg
ICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFy
Z3MpIHsKKyAgICAgICAgbGV0IHIgPSBbMSwyLDMsNCwgLi4uYXJnc107CisgICAgICAgIHdoaWxl
IChyLmxlbmd0aCA8IGZvby5sZW5ndGgpCisgICAgICAgICAgICByLnB1c2godW5kZWZpbmVkKTsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0
aW9uczsgaSsrKSB7CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgICAgICB7CisgICAgICAg
ICAgICBsZXQgYXJncyA9IG1ha2VBcmd1bWVudHMoYSk7CisgICAgICAgICAgICBhc3NlcnQoc2hh
bGxvd0VxKGFyZ3Muc2xpY2UoNCksIGZvby5hcHBseShudWxsLCBhcmdzKSkpOworICAgICAgICB9
CisKKyAgICAgICAgbGV0IGEgPSBbe30sIDI1LCA1MF07CisgICAgICAgIHRlc3QoKTsKKworICAg
ICAgICBhID0gW107CisgICAgICAgIHRlc3QoKTsKKworICAgICAgICBhID0gWzEwLCAyMCwgMzAs
IDQwLCA1MCwgNjAsIDcwLCA4MF07CisgICAgICAgIHRlc3QoKTsKKyAgICB9Cit9CisKK2xldCBz
dGFydCA9IERhdGUubm93KCk7Cit0ZXN0MSgpOwordGVzdDIoKTsKK3Rlc3QzKCk7Cit0ZXN0NCgp
OwordGVzdDUoKTsKK3Rlc3Q2KCk7Cit0ZXN0NygpOwordGVzdDgoKTsKK3Rlc3Q5KCk7Cit0ZXN0
MTAoKTsKK3Rlc3QxMSgpOwordGVzdDEyKCk7Cit0ZXN0MTMoKTsKK3Rlc3QxNCgpOwordGVzdDE1
KCk7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmludChEYXRl
Lm5vdygpIC0gc3RhcnQpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMjUgQEAKKzIwMTYtMTAtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3Qg
cGFyYW1ldGVyIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM5MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgZWxpbWluYXRpbmcg
cmVzdCBwYXJhbWV0ZXIKKyAgICAgICAgYWxsb2NhdGlvbnMgd2hlbiB0aGV5J3JlIHNwcmVhZCB0
byBvdGhlciBmdW5jdGlvbiBjYWxsczoKKyAgICAgICAgYGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7
IGJhciguLi5hcmdzKTsgfWAKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGx5IHJl
bW92ZXMgdGhlIGFsbG9jYXRpb24gZm9yIHJlc3QgcGFyYW1ldGVyCisgICAgICAgIGFsbG9jYXRp
b25zIHVzaW5nIHRoZSBzYW1lIGVzY2FwZSBhbmFseXNpcyB0aGF0IGlzIHBlcmZvcm1lZAorICAg
ICAgICBpbiB0aGUgYXJndW1lbnQgZWxpbWluYXRpb24gcGhhc2UuIEkndmUgYWRkZWQgYSBuZXcg
cnVsZSB0bworICAgICAgICB0aGUgcGhhc2UgdG8gbWFrZSBzdXJlIHRoYXQgQ2hlY2tTdHJ1Y3R1
cmUgZG9lc24ndCBjb3VudCBhcworICAgICAgICBhbiBlc2NhcGUgZm9yIGFuIGFsbG9jYXRpb24g
c2luY2UgdGhpcyBvZnRlbiBzaG93cyB1cCBpbiBjb2RlCisgICAgICAgIGxpa2UgdGhpczoKKyAg
ICAgICAgCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAg
ICAgICAJbGV0IHIgPSBbXTsKKyAgICAgICAgCWZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5n
dGg7IGkrKykKKyAgICAgICAgCQlyLnB1c2goYXJnc1tpXSk7CisgICAgICAgIAlyZXR1cm4gcjsK
KyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoZSBhYm92ZSBwcm9n
cmFtIG5vdyBlbnRpcmVseSBlbGltaW5hdGVzIHRoZSBhbGxvY2F0aW9uIGZvciBhcmdzCisgICAg
ICAgIGNvbXBpbGVkIGluIHRoZSBGVEwuIFByb2dyYW1zIGxpa2UgdGhpcyBhbHNvIGVsaW1pbmF0
ZSB0aGUgYWxsb2NhdGlvbgorICAgICAgICBmb3IgYXJnczoKKyAgICAgICAgCisgICAgICAgIGBg
YAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeyByZXR1cm4gW2FyZ3MubGVuZ3RoLCBh
cmdzWzBdXTsgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsgcmV0
dXJuIHNvbWVPdGhlckZ1bmN0aW9uLmFwcGx5KG51bGwsIGFyZ3MpOyB9CisgICAgICAgIGBgYAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBleHRlbmRzIHRoZSBhcmd1bWVudHMgZWxpbWlu
YXRpb24gcGhhc2UgdG8gdW5kZXJzdGFuZAorICAgICAgICB0aGUgY29uY2VwdCB0aGF0IHdlIG1h
eSB3YW50IHRvIGZvcndhcmQgYXJndW1lbnRzLCBvciBnZXQgZnJvbQorICAgICAgICB0aGUgYXJn
dW1lbnRzIHJlZ2lvbiwgc3RhcnRpbmcgYXQgc29tZSBvZmZzZXQuIFRoZSBvZmZzZXQgaXMgdGhl
CisgICAgICAgIG51bWJlciBvZiBuYW1lcyBwYXJhbWV0ZXIgYmVmb3JlIHRoZSByZXN0IHBhcmFt
ZXRlci4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICBgYGAKKyAgICAgICAgZnVuY3Rp
b24gZm9vKGEsIGIsIC4uLmFyZ3MpIHsgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsgfQor
ICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFdpbGwgZm9yd2FyZCBhcmd1bWVudHMgc3Rh
cnRpbmcgYXQgdGhlICp0aGlyZCogYXJndW1lbnQuCisgICAgICAgIE91ciBhcmd1bWVudHMgZm9y
d2FyZGluZyBjb2RlIGFscmVhZHkgaGFkIHRoZSBub3Rpb24gb2Ygc3RhcnRpbmcKKyAgICAgICAg
ZnJvbSBzb21lIG9mZnNldCwgaG93ZXZlciwgSSBmb3VuZCBidWdzIGluIHRoYXQgY29kZS4gSSBl
eHRlbmRlZAorICAgICAgICBpdCB0byB3b3JrIHByb3Blcmx5IGZvciByZXN0IHBhcmFtZXRlcnMg
d2l0aCBhcmJpdHJhcnkgc2tpcCBvZmZzZXRzLgorICAgICAgICAKKyAgICAgICAgQW5kIHRoaXMg
cHJvZ3JhbToKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBjLCAuLi5h
cmdzKSB7CisgICAgICAgIAlsZXQgciA9IFtdOworICAgICAgICAJZm9yIChsZXQgaSA9IDA7IGkg
PCBhcmdzLmxlbmd0aDsgaSsrKQorICAgICAgICAJCXIucHVzaChhcmdzW2ldKTsKKyAgICAgICAg
CXJldHVybiByOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgS25v
d3MgdG8gcGVyZm9ybSB0aGUgR2V0TXlBcmd1bWVudEJ5VmFsKiB3aXRoIGFuIG9mZnNldCBvZiAz
CisgICAgICAgIGluc2lkZSB0aGUgbG9vcC4gVG8gbWFrZSB0aGlzIHdvcmssIEkgdGF1Z2h0IEdl
dE15QXJndW1lbnRCeVZhbCAKKyAgICAgICAgYW5kIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzIHRvIHRha2UgYW4gb2Zmc2V0IHJlcHJlc2VudGluZworICAgICAgICB0aGUgbnVtYmVyIG9m
IGFyZ3VtZW50cyB0byBza2lwLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAgICog
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdENv
ZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xk
aW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmlzUGhhbnRvbUFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3JlYXRlUmVzdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVJlc3QpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRm9yd2FyZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpnZXRBcmd1bWVudHNTdGFydCk6CisgICAgICAgICog
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvblBvcHVs
YXRlT2JqZWN0SW5PU1IpOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1hdGVyaWFsaXpl
T2JqZWN0SW5PU1IpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHA6CisgICAg
ICAgIChKU0M6OmVtaXRTZXRWYXJhcmdzRnJhbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUpOgorCiAyMDE2LTEwLTI0ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSlNPTlBhcnNlIHNob3VsZCBu
b3QgY3Jhc2ggd2l0aCBudWxsIFN0cmluZ3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0
Myw2ICsyMzQzLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IGluc3RydWN0aW9uc1tpICsgM10udS5vcGVyYW5kOworICAgICAgICAg
ICAgQVNTRVJUKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID49IDApOworICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9PSBudW1QYXJhbWV0ZXJz
KCkgLSAxLCAiV2UgYXNzdW1lIHRoYXQgdGhpcyBpcyB0cnVlIHdoZW4gcmVtYXRlcmlhbGl6aW5n
IHRoZSByZXN0IHBhcmFtZXRlciBkdXJpbmcgT1NSIGV4aXQgaW4gdGhlIEZUTCBKSVQuIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY1LDE2ICsxNjY1LDE3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIC8v
IHRoYXQncyB0aGUgY29uc2VydmF0aXZlIHRoaW5nIHRvIGRvLiBPdGhlcndpc2Ugd2UnZCBuZWVk
IHRvIHdyaXRlIG1vcmUgY29kZSB0byBtYXJrIHN1Y2gKICAgICAgICAgICAgIC8vIHBhdGhzIGFz
IHVucmVhY2hhYmxlLCBvciB0byByZXR1cm4gdW5kZWZpbmVkLiBXZSBjb3VsZCBpbXBsZW1lbnQg
dGhhdCBldmVudHVhbGx5LgogICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudEluZGV4ID0gaW5kZXguYXNVSW50MzIoKSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGluZGV4LmFzVUludDMyKCkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleC5hc0ludDMyKCkgKyAxKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4
LmFzVUludDMyKCkgPCBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0YXRlLnZhcmlhYmxl
cygpLmFyZ3VtZW50KGluZGV4LmFzSW50MzIoKSArIDEpOworICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudEluZGV4IDwgbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpIC0g
MSkgeworICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gbV9zdGF0ZS52YXJpYWJs
ZXMoKS5hcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KQEAgLTE2ODUsNyArMTY4Niw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBib3Vu
ZCBvbiB0aGUgdHlwZXMgZXZlbiB0aG91Z2ggaXQncyByYW5kb20gYWNjZXNzLiBUYWtlIGFkdmFu
dGFnZSBvZiB0aGlzLgogICAgICAgICAgICAgCiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJl
c3VsdDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsgaS0tID4gMTspIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDEgKyBub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOyBpIDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2Uo
CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwpAQCAtMTk1MCw2ICsxOTUxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFj
dGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhh
bnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNh
c2UgQm90dG9tVmFsdWU6CiAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8g
UHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICAvLyBUaGlzIGNsYWltcyB0byByZXR1
cm4gYm90dG9tLgpAQCAtMjg1Nyw5ICsyODU5LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENyZWF0ZVJlc3Q6
Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KG5vZGUpKSAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisg
ICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5v
ZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEg
YmFkIHRpbWUuCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwg
U3BlY0FycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoCisgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVzdFBhcmFtZXRlclN0cnVj
dHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDYgKzk3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIG1fY2FuZGlkYXRl
cy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgY2FzZSBDcmVhdGVSZXN0OgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1dh
dGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSB3YXRjaGluZyB0aGUgSGF2aW5nQUJhZFRpbWUgd2F0Y2hwb2lu
dCBpdCBtZWFucyB0aGF0IHdlIHdpbGwgYmUgaW52YWxpZGF0ZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdoZW4gaXQgZmlyZXMgKGl0IG1heSBvciBtYXkgbm90IGhhdmUgYWN0dWFsbHkg
ZmlyZWQgeWV0KS4gV2UgZG9uJ3QgdHJ5IHRvIGVsaW1pbmF0ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyBhbGxvY2F0aW9uIHdoZW4gd2UncmUgbm90IHdhdGNoaW5nIHRoZSB3YXRj
aHBvaW50IGJlY2F1c2UgaXQgY291bGQgZW50YWlsIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGluZGV4ZWQgYWNjZXNzb3JzIChhbmQgcHJvYmFibHkgbW9yZSBjcmF6eSB0aGlu
Z3MpIG9uIG91dCBvZiBib3VuZCBhY2Nlc3NlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlc3QgcGFyYW1ldGVyLiBJdCdzIGFsc28gbXVjaCBlYXNpZXIgdG8gcmVhc29uIGFi
b3V0IHRoaXMgd2F5LgorICAgICAgICAgICAgICAgICAgICAgICAgbV9jYW5kaWRhdGVzLmFkZChu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRB
cmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUg
dGhpcyBpZiBpdCB3YXNuJ3QgZm9yIHRoZSBmYWN0IHRoYXQgc2NvcGVkIGFyZ3VtZW50cyBhcmUK
QEAgLTEzNCw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzICYmIGVk
Z2UtPm9wKCkgIT0gQ3JlYXRlUmVzdCkgewogICAgICAgICAgICAgICAgICAgICBlc2NhcGUoZWRn
ZSwgc291cmNlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KQEAgLTIyMiw2ICsyMzMsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZXNj
YXBlQmFzZWRPbkFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKSwgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMu
Y29udGFpbnMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNoaWxkMSgpLm5vZGUoKS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS5ub2Rl
KCktPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmRp
cmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVu
dHNTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFt
ZXRlclN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+c3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBHZXRCeUlkL0dl
dEJ5T2Zmc2V0IG9uIGNhbGxlZS4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDc1CkBAIC0zOTUsNyArNDMyLDcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CiAg
ICAgICAgIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJ
bk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAg
ICAgICAgICAKQEAgLTQwMyw2ICs0NDAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9y
aWdpbik7CiAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gaXNFbGlt
aW5hdGVkQWxsb2NhdGlvbiA9IFsmXSAoTm9kZSogY2FuZGlkYXRlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgdHJhdmVyc2UgaW4gc3VjaCBhIHdheSB0aGF0IHdlIHNlZSBkb21pbmF0b3JzIG9mIGEg
dXNlIGJlZm9yZSB0aGUgdXNlLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0IHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzIHx8IGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6CkBAIC00MTEsNiArNDU2LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tRGlyZWN0QXJndW1lbnRzKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6
CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoaXMgcGFyYW1ldGVyIGZvciBPU1IgZXhpdCwgd2Ug
Y2FuIGZpbmQgb3V0IGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgLy8g
d2UgbmVlZCB2aWEgdGhlIHN0YXRpYyBwYXJhbWV0ZXIgY291bnQgYW5kIHRoZSBkeW5hbWljIGFy
Z3VtZW50IGNvdW50LgorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2Uo
KTsgCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCkBAIC00MjEsMTMgKzQ3Niwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IEdldEZyb21Bcmd1bWVudHM6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2Fu
ZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
RWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDcmVhdGVEaXJlY3RBcmd1bWVu
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBo
YW50b21EaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyk7CiAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPQogICAgICAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobm9kZS0+Y2FwdHVyZWRBcmd1bWVu
dHNPZmZzZXQoKS5vZmZzZXQoKSArIDEpICsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5zdGFja09mZnNldCgpOwpAQCAtNDM4LDcgKzQ5MSw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCktPm9wKCkgIT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykKQEAgLTQ1NCw3
ICs1MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRp
ZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IE1laCwgdGhpcyBpcyBraW5kIG9mIGhhY2tpc2ggLSB3ZSB1c2UgYW4gSWRlbnRpdHkgc28gdGhh
dCB3ZSBjYW4gcmV1c2UgdGhlCkBAIC00NzIsMTMgKzUyNSwxOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzMDc2CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBj
YW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQg
PSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50
MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IG5vZGUtPmNoaWxkMigpLT5hc1VJbnQzMigpOwogICAgICAgICAgICAgICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzYWZlVG9HZXRTdGFjazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCkBAIC01MTIsMTAgKzU3MCwxMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wID0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnByZWRpY3Rpb24oKSwgb3AsIG5vZGUtPm9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnByZWRpY3Rp
b24oKSwgb3AsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHdlIG1heSBoYXZlIGEg
ZGF0YSBmb3JtYXQgY29udmVyc2lvbiBoZXJlLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTIzLDgzICs1ODEsOTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIHZhcmFyZ3NEYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9t
Q3JlYXRlUmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gY2FuZGlkYXRlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAg
ICAgICAgICB2YXJhcmdzRGF0YS0+b2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwor
CiAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICYm
ICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCi0gICAgICAgICAgICAgICAgICAgICAgICAm
JiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSB2YXJhcmdzRGF0YS0+b2Zmc2V0
IDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwgc28gaXQgYmV0dGVy
IGJlIGV4aXRPSy4KLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhbkV4aXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50ID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0
YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1i
ZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gdmFyYXJnc0RhdGEtPm9mZnNl
dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1l
bnRDb3VudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0
U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdz
RGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2UoYXJndW1lbnRDb3VudCwgS25vd25JbnQzMlVzZSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBub3QgaW5j
bHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0Lgot
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSB2YXJhcmdzRGF0YS0+bGlt
aXQgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3RvcmVJbmRleCA9IDA7
IHN0b3JlSW5kZXggPCBsaW1pdDsgKytzdG9yZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4g
bG9hZCwgYW5kIGxvYWQgaXQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3Nz
aWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXggPSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID4gdmFy
YXJnc0RhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gdmFyYXJnc0RhdGEtPmxpbWl0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2FuIGV4aXQs
IHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzTm9kZSA9IGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4
aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4
aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJh
cmdzRGF0YS0+Y291bnQub2Zmc2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
Tm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJbnQzMikpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzTm9kZSwgS25vd25J
bnQzMlVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsb2FkSW5kZXggKyAxIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQobG9hZEluZGV4ICsgMSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcsIEZsdXNoZWRKU1Zh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIHZhcmFyZ3NEYXRhLT5saW1pdCAtIDEgPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8g
ZXhjbHVkZSAidGhpcyIsIHNpbmNlIHRoYXQncyBhIGJpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gdmFyYXJnc0Rh
dGEtPmxpbWl0IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmlu
ZWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3RvcmVJbmRleCA9IDA7IHN0b3JlSW5kZXggPCBsaW1pdDsgKytzdG9yZUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGRldGVybWluZSBpZiB3ZSBoYXZl
IGFuIGVsZW1lbnQgd2UgY2FuIGxvYWQsIGFuZCBsb2FkIGl0IGlmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5n
IGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlSW5kZXggPj0gdmFy
YXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3aWxsIHN0aWxsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgR2V0U3RhY2tzIGluIHRoYXQgcmFuZ2UuIFNv
IGlmIHdlIGRvbid0IGRvIHRoZSBzdG9yZXMsIHdlJ2xsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Yg
c29tZXRoaW5nIHRoYXQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgUHV0U3RhY2tzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NDM0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJh
cmdzRGF0YS0+b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmRlZmluZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGluc2VydGlvblNldC5pbnNlcnRD
b25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2FkSW5kZXggKyAxIDwgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4
ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhk
YXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUg
dG8gc3RvcmUgYW55dGhpbmcgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3ZSB3
aWxsIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdl
dFN0YWNrcyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSds
bAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBkZWdlbmVyYXRl
IElSOiB3ZSdsbCBoYXZlIEdldFN0YWNrcyBvZiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgUHV0U3RhY2tzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzQzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA9IGlu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2
ZSBhIHZhbHVlLCBzdG9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJh
cmdzRGF0YS0+c3RhcnQgKyBzdG9yZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9y
aWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywg
bm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHZhbHVlLCBzdG9yZSBpdC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmFyYXJnc0RhdGEtPnN0YXJ0ICsgc3RvcmVJbmRleDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwg
bm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyhyZWcub2Zmc2V0KCkpLCBFZGdlKHZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2Rl
LT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKGRhdGEpLCBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2Fy
ZFZhcmFyZ3MpOwpAQCAtNjExLDEwICs2ODEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnc0lubGluZWRDYWxsZXI6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gbm9kZS0+Y2hpbGQzKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2Fu
ZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
RWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogdmFyYXJn
c0RhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
YXJnc0RhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwor
CiAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFyZ3VtZW50czsK
QEAgLTY3NywxMSArNzUyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1
dHRlcmZseTogewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlu
cyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxp
bWluYXRlZEFsbG9jYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Vs
aW1pbmF0ZWRBbGxvY2F0aW9uKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBF
ZGdlKCk7IC8vIFJlbW92ZSB0aGUgY2VsbCBjaGVjayBzaW5jZSB3ZSd2ZSBwcm92ZW4gaXQncyBu
b3QgbmVlZGVkIGFuZCBGVEwgbG93ZXJpbmcgbWlnaHQgYm90Y2ggdGhpcy4KKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsMTQgKzY0LDIzIEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxl
bmd0aCgKICAgICBERkdfQVNTRVJUKAogICAgICAgICBncmFwaCwgYXJndW1lbnRzLAogICAgICAg
ICBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlRGlyZWN0QXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBDcmVhdGVTY29wZWRBcmd1bWVudHMKLSAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgp
ID09IENyZWF0ZUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURp
cmVjdEFyZ3VtZW50cwotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25l
ZEFyZ3VtZW50cyk7CisgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVDbG9uZWRB
cmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVJlc3QKKyAgICAgICAgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21D
cmVhdGVSZXN0KTsKICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGFyZ3VtZW50cy0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKworICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICBpZiAoYXJndW1lbnRzLT5vcCgp
ID09IENyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQor
ICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50cy0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICBpZiAoYXJn
dW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKKyAgICAgICAgICAgIGFyZ3Vt
ZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFyZ3VtZW50c1NpemUgPSAwOwogICAgICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmlu
c2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgIG5vZGVJ
bmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHNTaXplKSk7CiAgICAgfQogICAgIAogICAg
IE5vZGUqIGFyZ3VtZW50Q291bnQ7CkBAIC04NCwxMiArOTMsMjMgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50
MzJPbmx5LCBHZXRTdGFjaywgb3JpZ2luLAogICAgICAgICAgICAgT3BJbmZvKGdyYXBoLm1fc3Rh
Y2tBY2Nlc3NEYXRhLmFkZChhcmd1bWVudENvdW50UmVnaXN0ZXIsIEZsdXNoZWRJbnQzMikpKTsK
ICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorCisgICAg
Tm9kZSogcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNr
ZWQpLAogICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSwKICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgbm9kZUluZGV4LCBv
cmlnaW4sIGpzTnVtYmVyKDEpLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBv
cmlnaW4sIGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7
CisKKyAgICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKKyAgICAgICAgLy8gVGhlIGFi
b3ZlIHN1YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVt
YmVyIGlzIG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KKyAgICAgICAgcmVzdWx0ID0g
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQz
Mk9ubHksIEFyaXRoTWF4LCBvcmlnaW4sIAorICAgICAgICAgICAgRWRnZShyZXN1bHQsIEludDMy
VXNlKSwgCisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9k
ZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOworICAgICAgICByZXN1bHQt
PnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDYg
KzQ3NiwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIGl0J3MgcGhhbnRvbSwg
aXQgc3RpbGwgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IG9uZSBjYW4ndCBiZSByZXBsYWNlZCB3aXRo
IGFub3RoZXIuCisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUo
SGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBDYWxsT2JqZWN0
Q29uc3RydWN0b3I6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsOSAr
MzE0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0
T2ZCb3VuZHM6IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGluZGV4ID0gbV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghaW5kZXgg
fHwgIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGluZGV4VmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlIHx8ICFpbmRleFZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4
VmFsdWUuYXNVSW50MzIoKSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwpAQCAt
MzM1LDEwICszMzcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3Vt
ZW50QnlWYWwgaW4gc3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3VuZHMgYWNjZXNzZXM7IHdlIGp1
c3QgbG9zZSBDRkEgdW5sZXNzCiAgICAgICAgICAgICAgICAgLy8gR0NTRSByZW1vdmVzIHRoZSBh
Y2Nlc3MgZW50aXJlbHkuCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA+PSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbmRleC5hc1VJbnQzMigpID49IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVy
T2ZBcmd1bWVudHMoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0
YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MzQ5LDE1ICszNTEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1f
Z3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAogICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoaW5kZXguYXNJbnQzMigpKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpbmRleCkpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LmFz
SW50MzIoKSArIDEpLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCArIDEpLCBGbHVzaGVkSlNWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgaW5kZXguYXNVSW50MzIoKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYm
ICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9HZXRTdGFjayhkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRv
bU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246
CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTgsNiArMTM5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6Cisg
ICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25l
ZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw2ICs0NTEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAg
ICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNy
ZWF0ZVJlc3Q6CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2
YWx1ZSBjb25zdGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAog
ICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0
aGF0IGRvZXNuJ3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC00NjQsNyArNDY1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0NvbnN0
YW50KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpIHsKKyAgICAgICAgaWYgKG9w
KCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DbG9uZWRBcmd1
bWVudHMgfHwgb3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkgewogICAgICAgICAgICAgLy8gVGhl
c2UgcHJldGVuZCB0byBiZSB0aGUgZW1wdHkgdmFsdWUgY29uc3RhbnQgZm9yIHRoZSBiZW5lZml0
IG9mIHRoZSBERkcgYmFja2VuZCwgd2hpY2gKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3b3Vs
ZG4ndCB0YWtlIGtpbmRseSB0byBhIG5vZGUgdGhhdCBkb2Vzbid0IGNvbXB1dGUgYSB2YWx1ZS4K
ICAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKQEAgLTE3
MzYsNiArMTczNyw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAg
IGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgogICAg
ICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKQEAgLTIzNzksNyArMjM4MSw3
IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IENyZWF0ZVJlc3QgfHwgb3AoKSA9PSBHZXRSZXN0
TGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBvcCgpID09IEdl
dFJlc3RMZW5ndGggfHwgb3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWwgfHwgb3AoKSA9PSBHZXRN
eUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcyk7CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczx1
bnNpZ25lZD4oKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDYgKzM0MSw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAgICAgbWFjcm8oQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFudG9tRGlyZWN0QXJndW1lbnRz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbUNy
ZWF0ZVJlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhD
cmVhdGVTY29wZWRBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENyZWF0ZUNs
b25lZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUGhhbnRvbUNsb25lZEFy
Z3VtZW50cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNiArMTY1LDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2Ug
UGhhbnRvbUNsb25lZEFyZ3VtZW50czogewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CkBAIC0x
NzMsNiArMTc0LDEwIEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUK
ICAgICAgICAgICAgIC8vIGdpdmVuIHRoYXQgd2UgY2FuIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFj
ay4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGFu
dG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gbm9k
ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93IHRv
IHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgpAQCAtMTg4LDcgKzE5
Myw3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1faGVhcC5zZXQoUHJvbW90ZWRIZWFwTG9jYXRpb24oQXJndW1l
bnRzQ2FsbGVlUExvYywgbm9kZSksIGNhbGxlZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOyAr
K2kpIHsKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhcmd1bWVudCA9IG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpOwogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTgsNyArMTM1OCw3IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVSZXMKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVj
dC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJl
Z2lzdGVyKSA9PSBzaXplb2YoSlNWYWx1ZSksICJUaGlzIGlzIGEgc3Ryb25nIGFzc3VtcHRpb24g
aGVyZS4iKTsKICAgICBKU1ZhbHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KGFyZ3VtZW50U3RhcnQpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXA7CiAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVn
aW9uLCBhcnJheVNpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNzc4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjAsMTUgKzEyMCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAg
ICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsIHx8IG1fbm9k
ZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcykgeworICAgICAgICAgICAg
ICAgIC8vIFRoZSB2YWx1ZSBvZiBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBndWFyYW50ZWVzIHRo
YXQgR2V0TXlBcmd1bWVudEJ5VmFsKiB3aWxsIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gcmVh
ZCBhbnkgYXJndW1lbnRzIGJlbG93IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAuIEZv
ciBleGFtcGxlLCBpZiBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCBpcyAyLAorICAgICAgICAgICAg
ICAgIC8vIHdlIHdpbGwgbmV2ZXIgcmVhZCBhcmd1bWVudCAwIG9yIGFyZ3VtZW50IDEuCisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBtX25vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgb3V0ZXJtb3N0IGFyZ3Vt
ZW50cyBhbmQgYXJndW1lbnQgY291bnQuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKTsgaSsrKQogICAgICAgICAgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkpOwogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGktLSA+IDE7KQorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBpIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMyw2ICsxMDAzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDc3ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0
ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50
czoKKyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NTk0LDYgKzU1OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgorICAg
IGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgp
LCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxMCw2
ICs1ODEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgUHV0U3RhY2s6CiAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgY2FzZSBHZXRTdGFjazoK
KyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MTYsNiArNjgxNiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVSZXN0KE4KICAgICAgICAgR1BSUmVnIGFycmF5
UmVzdWx0R1BSID0gYXJyYXlSZXN1bHQuZ3ByKCk7CiAKICAgICAgICAgYm9vbCBzaG91bGRBbGxv
d0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxhcmdlQXJyYXlzID0gZmFsc2U7CisgICAgICAg
IEFTU0VSVChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0
aENvbnRpZ3VvdXMpOwogICAgICAgICBjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGFycmF5
UmVzdWx0R1BSLCBhcnJheUxlbmd0aEdQUiwgQXJyYXlXaXRoQ29udGlndW91cywgc2hvdWxkQWxs
b3dGb3JBcnJheVN0b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJnZUFycmF5cyk7CiAKICAgICAgICAgR1BS
VGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVSZXN0OiB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNo
cG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KG5vZGUt
PnR5cGVkQXJyYXlUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcwLDYgKzY3MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246
CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRB
cmd1bWVudHM6CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAg
IGNhc2UgVXBzaWxvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSw3
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9u
OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21DcmVh
dGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDYgKzEwNzEsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUHV0SGludDoKICAgICAgICAgY2FzZSBC
b3R0b21WYWx1ZToKQEAgLTM0MjksNiArMzQzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBpZiAobV9ub2RlLT5udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpKQorICAgICAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgs
IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBMVmFsdWUgbGltaXQ7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MTUyLDcgKzQxNTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291
dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFt
ZXRlclN0cnVjdHVyZSgpOwogICAgICAgICAgICAgQXJyYXlWYWx1ZXMgYXJyYXlWYWx1ZXMgPSBh
bGxvY2F0ZVVuaW5pdGlhbGl6ZWRDb250aWd1b3VzSlNBcnJheShhcnJheUxlbmd0aCwgc3RydWN0
dXJlKTsKICAgICAgICAgICAgIExWYWx1ZSBhcnJheSA9IGFycmF5VmFsdWVzLmFycmF5OwogICAg
ICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IGFycmF5VmFsdWVzLmJ1dHRlcmZseTsKQEAgLTYy
ODAsMTcgKzYyODMsNDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGgg
PSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKS52YWx1ZTsKLSAgICAgICAgTFZh
bHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5jb25zdElu
dDMyKDEgLSBkYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgCisKKyAgICAgICAgTFZhbHVlIGxlbmd0
aCA9IG51bGxwdHI7IAorICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG51bGxw
dHI7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVu
dHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aC5p
c0tub3duKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3VtZW50c0xl
bmd0aC5rbm93bjsKKyAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRhLT5vZmZzZXQp
CisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRhdGEtPm9mZnNl
dDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IDA7Cisg
ICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsKKyAgICAg
ICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3Ro
ICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZv
cm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1dCB0aHJv
dWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgIGlmICghZGF0YS0+b2Zmc2V0KQor
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc21hbGxl
ck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291
dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0
aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBt
X291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291dC5waGko
SW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1bHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFk
ZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOworICAgICAgICB9CisKICAgICAgICAgc3Bl
Y3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
CiAgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPmxpbWl0KSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSBkYXRhLT5vZmZzZXQ7CisgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50
c1N0YXJ0KGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOwogICAgICAg
ICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFs
dWUoKTsKIAogICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gbV9vdXQubmV3Qmxv
Y2soKTsKQEAgLTYzMjMsOSArNjM1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHByZXZpb3VzSW5k
ZXggPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgbG9vcEJvdW5kKTsKICAgICAgICAgY3VycmVu
dEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7CiAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJ
bmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYWRkKGN1cnJlbnRJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIo
ZGF0YS0+b2Zmc2V0KSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZh
cmlhYmxlcywgc291cmNlU3RhcnQsIGN1cnJlbnRJbmRleCkpOwogICAgICAgICBtX291dC5zdG9y
ZTY0KHZhbHVlLCBtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0
LCBjdXJyZW50SW5kZXgpKTsKICAgICAgICAgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1cnJl
bnRJbmRleCk7CiAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRleCwg
bmV4dEluZGV4KTsKQEAgLTgzNzEsOSArODQwMiw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAg
fQogICAgIAotICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKKyAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIG9mZnNldCA9IDApCiAgICAgewotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFzc2Vt
Ymx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKSArIG9mZnNldDsKICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhcnQpLnZhbHVlKCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblAKICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoK
ICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVk
QXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIC8vIFRob3Nl
IGFyZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9T
UgogICAgICAgICBicmVhazsKIApAQCAtMjM0LDYgKzIzNSw3IEBAIGV4dGVybiAiQyIgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
KyAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3Vt
ZW50czoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6IHsKICAgICAgICAgaWYgKCFt
YXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGluZUNhbGxGcmFtZSkgewpAQCAtMjQyLDYgKzI0
NCwxNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMpOwog
ICAgICAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICAgICAgICAg
IHJldHVybiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoZXhlYywgZXhl
YywgQXJndW1lbnRzTW9kZTo6Q2xvbmVkKTsKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZVJlc3Q6IHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCisgICAgICAgICAgICAgICAg
ICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVCbG9jaygpKTsKKworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkgLSAxOworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0
dXJlKCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0g
ZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID8gZXhlYy0+YXJndW1lbnRDb3VudCgpIC0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgOiAwOworICAgICAgICAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlT
aXplKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTI1NSwxNCArMjY4LDEyIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYg
cHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRv
cihBcmd1bWVudENvdW50UExvYykpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWVzW2ldKS5hc1VJbnQzMigpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFyZ3VtZW50Q291bnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IG1hdGVyaWFsaXphdGlvbi0+b3JpZ2lu
KCkuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewpAQCAtMzMwLDYgKzM0MSw1NiBAQCBleHRlcm4g
IkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
UmVzdDogeworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0
dXJlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJndW1lbnRDb3VudCA+IDApOworICAgICAgICAg
ICAgdW5zaWduZWQgYXJyYXlTaXplID0gKGFyZ3VtZW50Q291bnQgLSAxKSA+IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID8gYXJndW1lbnRDb3VudCAtIDEgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA6IDA7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQodm0sIHN0cnVjdHVyZSwgYXJyYXlTaXplKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGFycmF5KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9w
ZXJ0aWVzKClbaV07CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2lu
ZCgpICE9IEFyZ3VtZW50UExvYykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IHByb3BlcnR5LmxvY2F0aW9uKCkuaW5m
bygpOworICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA+IGFyZ0lu
ZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhcnJheUluZGV4ID0gYXJnSW5kZXggLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAg
ICAgICAgICAgICAgICBpZiAoYXJyYXlJbmRleCA+PSBhcnJheVNpemUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgo
dm0sIGFycmF5SW5kZXgsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhdm9pZCB0aGlzIE8obl4yKSBsb29wIHdoZW4gYXNzZXJ0cyBhcmUgZGlzYWJsZWQs
IGJ1dCB0aGUgY29uZGl0aW9uIGNoZWNrZWQgaGVyZQorICAgICAgICAgICAgICAgIC8vIG11c3Qg
aG9sZCB0byBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ug
b2YgaG93IHdlIGFsbG9jYXRlIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHRhcmdldEluZGV4ID0gMDsgdGFyZ2V0SW5kZXggPCBhcnJheVNpemU7ICsrdGFyZ2V0SW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMo
KS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9w
ZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9
IEFyZ3VtZW50UExvYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJnSW5kZXggPSBwcm9wZXJ0eS5sb2Nh
dGlvbigpLmluZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA+IGFyZ0luZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlJbmRleCA9IGFyZ0lu
ZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlJbmRleCA+PSBhcnJheVNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlJbmRleCA9PSB0YXJn
ZXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZm91
bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGFycmF5OworICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNw
cAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZh
cmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBlbWl0
U2V0VmFyYXJnc0ZyYW1lKENDYWxsSGVscGVycyYgagogICAgIGppdC5hbmRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIofihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSkpLCByZXN1
bHRHUFIpOwogCiAgICAgaml0LmFkZFB0cihsZW5ndGhHUFIsIHJlc3VsdEdQUik7Ci0gICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyArIChsZW5ndGhJbmNsdWRlc1RoaXM/IDAgOiAxKSksIHJlc3VsdEdQUik7Cisg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyArIChsZW5ndGhJbmNsdWRlc1RoaXMgPyAwIDogMSkpLCByZXN1bHRH
UFIpOwogICAgIAogICAgIC8vIHJlc3VsdEdQUiBub3cgaGFzIHRoZSByZXF1aXJlZCBmcmFtZSBz
aXplIGluIFJlZ2lzdGVyIHVuaXRzCiAgICAgLy8gUm91bmQgcmVzdWx0R1BSIHRvIG5leHQgbXVs
dGlwbGUgb2Ygc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2NyZWF0ZV9yZXN0KQogICAgIEJFR0lOKCk7CiAgICAgdW5zaWduZWQgYXJyYXlTaXplID0g
T1BfQygyKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKICAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBwY1szXS51LnVuc2lnbmVkVmFsdWU7CiAgICAgSlNWYWx1ZSog
YXJndW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSAr
IG51bVBhcmFtc1RvU2tpcDsKICAgICBSRVRVUk4oY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0
dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDc3
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OTYsNiArNTk2LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSog
Y2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGFibGVQ
cm94eU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcHJveHlSZXZva2VT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlLmdldCgpOyB9
CiAgICAgU3RydWN0dXJlKiBtb2R1bGVMb2FkZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogcmVzdFBhcmFt
ZXRlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsgfQogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKGJvb2wpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgcmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293470</attachid>
            <date>2016-10-31 15:00:09 -0700</date>
            <delta_ts>2016-10-31 16:55:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79351</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgxNzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDc0IEBACisyMDE2LTEwLTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIGVsaW1pbmF0ZSByZXN0IHBhcmFt
ZXRlciBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzOTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGlt
aW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuYmFy
KToKKyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKHRlc3QyLmpheik6CisgICAgICAgICh0ZXN0
Mi5qYXoyLmtheik6CisgICAgICAgICh0ZXN0Mi5qYXoyKToKKyAgICAgICAgKHRlc3QyKToKKyAg
ICAgICAgKHRlc3QzLmZvbyk6CisgICAgICAgICh0ZXN0My5iYXopOgorICAgICAgICAodGVzdDMu
amF6KToKKyAgICAgICAgKHRlc3QzKToKKyAgICAgICAgKHRlc3Q0LmJheik6CisgICAgICAgICh0
ZXN0NC5qYXopOgorICAgICAgICAodGVzdDQpOgorICAgICAgICAodGVzdDUuYmF6KToKKyAgICAg
ICAgKHRlc3Q1Lmpheik6CisgICAgICAgICh0ZXN0NSk6CisgICAgICAgICh0ZXN0Ni5iYXopOgor
ICAgICAgICAodGVzdDYuamF6KToKKyAgICAgICAgKHRlc3Q2KToKKyAgICAgICAgKHRlc3Q3LmJh
eik6CisgICAgICAgICh0ZXN0Ny5qYXopOgorICAgICAgICAodGVzdDcuY2hlY2spOgorICAgICAg
ICAodGVzdDcpOgorICAgICAgICAodGVzdDguYmF6KToKKyAgICAgICAgKHRlc3Q4Lmpheik6Cisg
ICAgICAgICh0ZXN0OC5jaGVjayk6CisgICAgICAgICh0ZXN0OCk6CisgICAgICAgICh0ZXN0OS5i
YXopOgorICAgICAgICAodGVzdDkuamF6KToKKyAgICAgICAgKHRlc3Q5LmNoZWNrKToKKyAgICAg
ICAgKHRlc3Q5KToKKyAgICAgICAgKHRlc3QxMC5iYXopOgorICAgICAgICAodGVzdDEwLmpheik6
CisgICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExLmJhcik6CisgICAgICAgICh0ZXN0
MTEuZm9vKToKKyAgICAgICAgKHRlc3QxMS5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3Qx
MS4pOgorICAgICAgICAodGVzdDEyKToKKyAgICAgICAgKHRlc3QxMi5iYXIpOgorICAgICAgICAo
dGVzdDEyLmZvbyk6CisgICAgICAgICh0ZXN0MTIubWFrZUFyZ3VtZW50cyk6CisgICAgICAgICh0
ZXN0MTIuKToKKyAgICAgICAgKHRlc3QxMy5iYXIpOgorICAgICAgICAodGVzdDEzLnRvcCk6Cisg
ICAgICAgICh0ZXN0MTMuZm9vKToKKyAgICAgICAgKHRlc3QxMy5tYWtlQXJndW1lbnRzKToKKyAg
ICAgICAgKHRlc3QxMy4pOgorICAgICAgICAodGVzdDEzKToKKyAgICAgICAgKHRlc3QxNC5iYXIp
OgorICAgICAgICAodGVzdDE0LnRvcCk6CisgICAgICAgICh0ZXN0MTQuZm9vKToKKyAgICAgICAg
KHRlc3QxNC5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3QxNC4pOgorICAgICAgICAodGVz
dDE0KToKKyAgICAgICAgKHRlc3QxNS5iYXIpOgorICAgICAgICAodGVzdDE1LnRvcCk6CisgICAg
ICAgICh0ZXN0MTUuZm9vKToKKyAgICAgICAgKHRlc3QxNS5tYWtlQXJndW1lbnRzKToKKyAgICAg
ICAgKHRlc3QxNS4pOgorICAgICAgICAodGVzdDE1KToKKwogMjAxNi0xMC0zMSAgU2FhbSBCYXJh
dGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWJ1ZyBKU0MgdGVzdCBtaWNyb2Jl
bmNobWFya3MvcHVyZS1nZXQtYnktaWQtY3NlLTIuanMgdGltaW5nIG91dApJbmRleDogSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZXN0LXBhcmFtZXRlci1h
bGxvY2F0aW9uLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYxMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsg
bSk7Cit9Citub0lubGluZShhc3NlcnQpOworCitjb25zdCBpdGVyYXRpb25zID0gMjAwMDA7CisK
K2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGZ1bmN0aW9uIGJhcihhLCBiLCAuLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBhcmdzLmxlbmd0aDsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBhc3NlcnQo
YmFyKCkgPT09IDAsIGJhcigpKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpKSA9PT0gMCk7CisgICAg
ICAgIGFzc2VydChiYXIoaSwgaSkgPT09IDApOworICAgICAgICBhc3NlcnQoYmFyKGksIGksIGkp
ID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpLCBpLCBpLCBpLCBpKSA9PT0gMyk7CisgICAg
fQorfQorCitmdW5jdGlvbiBzaGFsbG93RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0g
Yi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citub0lu
bGluZShzaGFsbG93RXEpOworCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBqYXoo
YSwgYiwgLi4uYXJncykgeworICAgICAgICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LnB1
c2goYXJnc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZ1bmN0aW9uIGphejIoLi4uYXJncykgeworICAgICAg
ICBmdW5jdGlvbiBrYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9
IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBrYXou
YXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGphejIpOworCisgICAgZm9y
IChsZXQgZiBvZiBbamF6LCBqYXoyXSkgeworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICAgICAgbGV0IHIgPSBmKCk7CisgICAgICAgICAgICBh
c3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSk7CisgICAgICAgICAgICBh
c3NlcnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSkKKyAgICAgICAgICAg
IGFzc2VydCghci5sZW5ndGgpOworCisgICAgICAgICAgICByID0gZihpLCBpLCBpKQorICAgICAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGFzc2VydChzaGFsbG93
RXEociwgW2ldKSk7CisKKyAgICAgICAgICAgIHIgPSBmKGksIGksIGkpCisgICAgICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBb
aV0pKTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSwgaSwgaSoyLCBpKjQpCisgICAgICAgICAg
ICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaSwgaSoyLCBpKjRdKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qz
KCkgeworICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1
cm4gZm9vLmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwg
YywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4gYmF6KGEsIGIsIGMsIGQsIGUsIGYpOworICAg
IH0KKyAgICBub0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRp
b25zOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIHVuZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGkpOworICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFt1bmRl
ZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSkpOworCisgICAgICAgIHIgPSBqYXooaSwgaSwg
aSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFs
bG93RXEociwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisKKyAgICAgICAg
ciA9IGpheihpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisK
KyAgICAgICAgciA9IGpheihpLCBpLCBpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgaSwgaV0pKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5hcmdzKSB7
CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4u
YXJncykgeworICAgICAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAg
ICBub0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBp
KyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09
PSAwKTsKKworICAgICAgICByID0gamF6KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09
IDApOworCisgICAgICAgIHIgPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9
PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVu
Z3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAg
ICByID0gamF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIp
OworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxl
dCBvID0ge307CisgICAgICAgIHIgPSBqYXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFz
c2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkq
MTAsIG9dKSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgbm9JbmxpbmUo
YmF6KTsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
YmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShqYXopOworCisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBq
YXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6
KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXoo
aSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGph
eihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNz
ZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkqMTAp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIgPSBq
YXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7Cisg
ICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQorCitm
dW5jdGlvbiB0ZXN0NigpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgZnVuY3Rpb24gYmF6KC4u
LmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIG5vSW5saW5lKGJheik7
CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhei5h
cHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCByID0gamF6KCk7
CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpKTsK
KyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGksIGkp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwg
aSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChz
aGFsbG93RXEociwgW2ldKSk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpLCBpKjEwKTsKKyAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShy
LCBbaSwgaSoxMF0pKTsKKworICAgICAgICBsZXQgbyA9IHt9OworICAgICAgICByID0gamF6KGks
IGksIGksIGkqMTAsIG8pOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAg
ICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwLCBvXSkpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdDcoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NS
RXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwgYXJnc1sx
XSwgYXJnc1syXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJn
c1swXSwgYXJnc1sxXSwgYXJnc1syXV07CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAu
Li5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQor
ICAgIG5vSW5saW5lKGpheik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxl
dCBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheigpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAw
KTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09
PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5kZWZpbmVkKTsKKworICAgICAg
ICBbbGVuZ3RoLCBhLCBiLCBjXSA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0g
MCk7CisgICAgICAgIGFzc2VydChhID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYiA9
PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAg
ICAgW2xlbmd0aCwgYSwgYiwgY10gPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChsZW5ndGgg
PT09IDApOworICAgICAgICBhc3NlcnQoYSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0
KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOworCisg
ICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGkpOworICAgICAgICBhc3NlcnQo
bGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGksIEpTT04uc3RyaW5naWZ5KGEp
KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09
PSB1bmRlZmluZWQpOworCisgICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGks
IGkqMTApOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KGEg
PT09IGkpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChjID09
PSB1bmRlZmluZWQpOworCisgICAgICAgIGxldCBvID0ge29vb286MjB9OworICAgICAgICBbbGVu
Z3RoLCBhLCBiLCBjXSA9IGpheihpLCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGxl
bmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIg
PT09IGkqMTApOworICAgICAgICBhc3NlcnQoYyA9PT0gbyk7CisgICAgfQorCisgICAgc2hvdWxk
RXhpdCA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAg
ICBjaGVjayhpKTsKKyAgICB9CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAg
fQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rp
b24gdGVzdDgoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBi
YXooLi4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NS
RXhpdCgpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAg
ICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGph
eik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBhcmdzID0gamF6KCk7
CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgYXJncyA9IGph
eihpKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAwKTsKKworICAgICAgICBhcmdz
ID0gamF6KGksIGkpOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDApOworCisgICAg
ICAgIGFyZ3MgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0g
MSk7CisgICAgICAgIGFzc2VydChhcmdzWzBdID09PSBpKTsKKworICAgICAgICBhcmdzID0gamF6
KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDIpOworICAg
ICAgICBhc3NlcnQoYXJnc1swXSA9PT0gaSk7CisgICAgICAgIGFzc2VydChhcmdzWzFdID09PSBp
KjEwKTsKKworICAgICAgICBsZXQgbyA9IHtvb29vOjIwfTsKKyAgICAgICAgYXJncyA9IGpheihp
LCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAzKTsKKyAg
ICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09IGkpOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9PT0g
aSoxMCk7CisgICAgICAgIGFzc2VydChhcmdzWzJdID09PSBvKTsKKyAgICB9CisKKyAgICBzaG91
bGRFeGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAg
ICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBjaGVjayhpKTsKKyAg
ICB9CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgY2hlY2soMTApOworfQorCitmdW5j
dGlvbiB0ZXN0OSgpIHsKKyAgICBsZXQgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZ1bmN0aW9u
IGJheihhLCAuLi5hcmdzKSB7CisgICAgICAgIGlmIChzaG91bGRFeGl0KSB7CisgICAgICAgICAg
ICBPU1JFeGl0KCk7CisgICAgICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBh
cmdzWzFdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBd
LCBhcmdzWzFdXTsKKyAgICB9CisgICAgZnVuY3Rpb24gamF6KC4uLmFyZ3MpIHsKKyAgICAgICAg
cmV0dXJuIGJhei5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsK
KworICAgIGZ1bmN0aW9uIGNoZWNrKGkpIHsKKyAgICAgICAgbGV0IFtsZW5ndGgsIGEsIGJdID0g
amF6KCk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDApOworCisgICAgICAgIFtsZW5ndGgs
IGEsIGJdID0gamF6KGkpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsKKyAgICAgICAg
YXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQp
OworCisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkgKyAxKTsKKyAgICAgICAgYXNz
ZXJ0KGxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBh
c3NlcnQoYiA9PT0gdW5kZWZpbmVkKTsKKworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihp
LCBpKzEsIGkrMik7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3Nl
cnQoYSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkrMik7CisKKyAgICAgICAgbGV0
IG8gPSB7b29vbzoyMH07CisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkrMSwgbyk7
CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsx
KTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IG8pOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSB0
cnVlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2so
aSk7CisgICAgfQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAg
IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBjaGVjaygxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qx
MCgpIHsKKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1
cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdXTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJu
IGJheihhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCBbbGVu
Z3RoLCBhLCBiLCBjLCBkXSA9IGpheigxLCAyLCAzLCA0LCA1LCA2KTsKKyAgICAgICAgYXNzZXJ0
KGxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSA0KTsKKyAgICAgICAgYXNzZXJ0
KGIgPT09IDUpOworICAgICAgICBhc3NlcnQoYyA9PT0gNik7CisgICAgICAgIGFzc2VydChkID09
PSB1bmRlZmluZWQpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGZ1bmN0
aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lu
bGluZShiYXIpOworCisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAg
ICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1
cm4gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxv
d0VxKGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxl
dCBhID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOwor
ICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFt7Zm9vOiAyMH1dOworICAgICAgICB0ZXN0
KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBdOworICAg
ICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTIoKSB7CisgICAgInVzZSBz
dHJpY3QiOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBmdW5jdGlvbiBnZXRUaGlzVmFs
dWUoKSB7IHJldHVybiB0aGlzVmFsdWU7IH0KKyAgICBub0lubGluZShnZXRUaGlzVmFsdWUpOwor
CisgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHRo
aXNWYWx1ZSk7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIp
OworCisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJhci5hcHBseShnZXRUaGlzVmFsdWUoKSwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5l
KGZvbyk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIFsxLDIsMyw0LCAuLi5hcmdzXTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBp
dGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsgYXNzZXJ0KHNoYWxs
b3dFcShhLCBmb28uYXBwbHkobnVsbCwgbWFrZUFyZ3VtZW50cyhhKSkpKTsgfQorICAgICAgICBs
ZXQgYSA9IFt7fSwgMjUsIDUwXTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbXTsK
KyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbe2ZvbzogMjB9XTsKKyAgICAgICAgdGVz
dCgpOworCisgICAgICAgIGEgPSBbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAg
ICAgICAgdGVzdCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEzKCkgeworICAgICJ1c2Ug
c3RyaWN0IjsKKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJn
czsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKworICAgIGZ1bmN0aW9uIHRvcChhLCBiLCBj
LCBkLCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIuYXBwbHkobnVsbCwgYXJncyk7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIGxldCByID0gdG9wLmFw
cGx5KG51bGwsIGFyZ3MpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisgICAgbm9JbmxpbmUo
Zm9vKTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1
cm4gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0
ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxv
d0VxKGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxl
dCBhID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOwor
ICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3
MCwgODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTQoKSB7
CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24g
dG9wKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxs
LCBhcmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs
IGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7Cisg
ICAgICAgIHJldHVybiB0b3AoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEw
LCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcpOworICAgIH0KKyAgICBub0lubGlu
ZShmb28pOworCisgICAgZnVuY3Rpb24gbWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIGxl
dCByID0gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgICAgICB3aGlsZSAoci5sZW5ndGggPCBmb28u
bGVuZ3RoKQorICAgICAgICAgICAgci5wdXNoKHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiBy
OworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAg
ICAgICBmdW5jdGlvbiB0ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IGFyZ3MgPSBt
YWtlQXJndW1lbnRzKGEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShhcmdzLnNsaWNl
KDQpLCBmb28uYXBwbHkobnVsbCwgYXJncykpKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBh
ID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAg
ICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwg
ODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTUoKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJl
dHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9w
KGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBh
cmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7CisgICAg
ICAgIGxldCByID0gdG9wKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwg
YTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KTsKKyAgICAgICAgcmV0dXJuIHI7Cisg
ICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFy
Z3MpIHsKKyAgICAgICAgbGV0IHIgPSBbMSwyLDMsNCwgLi4uYXJnc107CisgICAgICAgIHdoaWxl
IChyLmxlbmd0aCA8IGZvby5sZW5ndGgpCisgICAgICAgICAgICByLnB1c2godW5kZWZpbmVkKTsK
KyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0
aW9uczsgaSsrKSB7CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgICAgICB7CisgICAgICAg
ICAgICBsZXQgYXJncyA9IG1ha2VBcmd1bWVudHMoYSk7CisgICAgICAgICAgICBhc3NlcnQoc2hh
bGxvd0VxKGFyZ3Muc2xpY2UoNCksIGZvby5hcHBseShudWxsLCBhcmdzKSkpOworICAgICAgICB9
CisKKyAgICAgICAgbGV0IGEgPSBbe30sIDI1LCA1MF07CisgICAgICAgIHRlc3QoKTsKKworICAg
ICAgICBhID0gW107CisgICAgICAgIHRlc3QoKTsKKworICAgICAgICBhID0gWzEwLCAyMCwgMzAs
IDQwLCA1MCwgNjAsIDcwLCA4MF07CisgICAgICAgIHRlc3QoKTsKKyAgICB9Cit9CisKK2xldCBz
dGFydCA9IERhdGUubm93KCk7Cit0ZXN0MSgpOwordGVzdDIoKTsKK3Rlc3QzKCk7Cit0ZXN0NCgp
OwordGVzdDUoKTsKK3Rlc3Q2KCk7Cit0ZXN0NygpOwordGVzdDgoKTsKK3Rlc3Q5KCk7Cit0ZXN0
MTAoKTsKK3Rlc3QxMSgpOwordGVzdDEyKCk7Cit0ZXN0MTMoKTsKK3Rlc3QxNCgpOwordGVzdDE1
KCk7Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmludChEYXRl
Lm5vdygpIC0gc3RhcnQpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMjcgQEAKKzIwMTYtMTAtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3Qg
cGFyYW1ldGVyIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM5MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgZWxpbWluYXRpbmcg
cmVzdCBwYXJhbWV0ZXIKKyAgICAgICAgYWxsb2NhdGlvbnMgd2hlbiB0aGV5J3JlIHNwcmVhZCB0
byBvdGhlciBmdW5jdGlvbiBjYWxsczoKKyAgICAgICAgYGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7
IGJhciguLi5hcmdzKTsgfWAKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGx5IHJl
bW92ZXMgdGhlIGFsbG9jYXRpb24gZm9yIHJlc3QgcGFyYW1ldGVyCisgICAgICAgIGFsbG9jYXRp
b25zIHVzaW5nIHRoZSBzYW1lIGVzY2FwZSBhbmFseXNpcyB0aGF0IGlzIHBlcmZvcm1lZAorICAg
ICAgICBpbiB0aGUgYXJndW1lbnQgZWxpbWluYXRpb24gcGhhc2UuIEkndmUgYWRkZWQgYSBuZXcg
cnVsZSB0bworICAgICAgICB0aGUgcGhhc2UgdG8gbWFrZSBzdXJlIHRoYXQgQ2hlY2tTdHJ1Y3R1
cmUgZG9lc24ndCBjb3VudCBhcworICAgICAgICBhbiBlc2NhcGUgZm9yIGFuIGFsbG9jYXRpb24g
c2luY2UgdGhpcyBvZnRlbiBzaG93cyB1cCBpbiBjb2RlCisgICAgICAgIGxpa2UgdGhpczoKKyAg
ICAgICAgCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAg
ICAgICAJbGV0IHIgPSBbXTsKKyAgICAgICAgCWZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5n
dGg7IGkrKykKKyAgICAgICAgCQlyLnB1c2goYXJnc1tpXSk7CisgICAgICAgIAlyZXR1cm4gcjsK
KyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoZSBhYm92ZSBwcm9n
cmFtIG5vdyBlbnRpcmVseSBlbGltaW5hdGVzIHRoZSBhbGxvY2F0aW9uIGZvciBhcmdzCisgICAg
ICAgIGNvbXBpbGVkIGluIHRoZSBGVEwuIFByb2dyYW1zIGxpa2UgdGhpcyBhbHNvIGVsaW1pbmF0
ZSB0aGUgYWxsb2NhdGlvbgorICAgICAgICBmb3IgYXJnczoKKyAgICAgICAgCisgICAgICAgIGBg
YAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeyByZXR1cm4gW2FyZ3MubGVuZ3RoLCBh
cmdzWzBdXTsgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsgcmV0
dXJuIHNvbWVPdGhlckZ1bmN0aW9uLmFwcGx5KG51bGwsIGFyZ3MpOyB9CisgICAgICAgIGBgYAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBleHRlbmRzIHRoZSBhcmd1bWVudHMgZWxpbWlu
YXRpb24gcGhhc2UgdG8gdW5kZXJzdGFuZAorICAgICAgICB0aGUgY29uY2VwdCB0aGF0IHdlIG1h
eSB3YW50IHRvIGZvcndhcmQgYXJndW1lbnRzLCBvciBnZXQgZnJvbQorICAgICAgICB0aGUgYXJn
dW1lbnRzIHJlZ2lvbiwgc3RhcnRpbmcgYXQgc29tZSBvZmZzZXQuIFRoZSBvZmZzZXQgaXMgdGhl
CisgICAgICAgIG51bWJlciBvZiBuYW1lcyBwYXJhbWV0ZXIgYmVmb3JlIHRoZSByZXN0IHBhcmFt
ZXRlci4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICBgYGAKKyAgICAgICAgZnVuY3Rp
b24gZm9vKGEsIGIsIC4uLmFyZ3MpIHsgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsgfQor
ICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFdpbGwgZm9yd2FyZCBhcmd1bWVudHMgc3Rh
cnRpbmcgYXQgdGhlICp0aGlyZCogYXJndW1lbnQuCisgICAgICAgIE91ciBhcmd1bWVudHMgZm9y
d2FyZGluZyBjb2RlIGFscmVhZHkgaGFkIHRoZSBub3Rpb24gb2Ygc3RhcnRpbmcKKyAgICAgICAg
ZnJvbSBzb21lIG9mZnNldCwgaG93ZXZlciwgSSBmb3VuZCBidWdzIGluIHRoYXQgY29kZS4gSSBl
eHRlbmRlZAorICAgICAgICBpdCB0byB3b3JrIHByb3Blcmx5IGZvciByZXN0IHBhcmFtZXRlcnMg
d2l0aCBhcmJpdHJhcnkgc2tpcCBvZmZzZXRzLgorICAgICAgICAKKyAgICAgICAgQW5kIHRoaXMg
cHJvZ3JhbToKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGZvbyhhLCBiLCBjLCAuLi5h
cmdzKSB7CisgICAgICAgIAlsZXQgciA9IFtdOworICAgICAgICAJZm9yIChsZXQgaSA9IDA7IGkg
PCBhcmdzLmxlbmd0aDsgaSsrKQorICAgICAgICAJCXIucHVzaChhcmdzW2ldKTsKKyAgICAgICAg
CXJldHVybiByOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAgS25v
d3MgdG8gcGVyZm9ybSB0aGUgR2V0TXlBcmd1bWVudEJ5VmFsKiB3aXRoIGFuIG9mZnNldCBvZiAz
CisgICAgICAgIGluc2lkZSB0aGUgbG9vcC4gVG8gbWFrZSB0aGlzIHdvcmssIEkgdGF1Z2h0IEdl
dE15QXJndW1lbnRCeVZhbCAKKyAgICAgICAgYW5kIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzIHRvIHRha2UgYW4gb2Zmc2V0IHJlcHJlc2VudGluZworICAgICAgICB0aGUgbnVtYmVyIG9m
IGFyZ3VtZW50cyB0byBza2lwLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIH4y
MCUgc3BlZWR1cCBvbiBtaWNyb2JlbmNobWFya3MuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjplbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9E
RkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Rv
ZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9tQWxsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
VHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4
ZWN1dGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVj
aXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZFRvcCk6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDcmVhdGVSZXN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUmVzdCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEFyZ3VtZW50c1N0YXJ0KToK
KyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3Bl
cmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUik6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0aW9u
TWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldFZhcmFyZ3NGcmFtZSk6CisgICAgICAgICogcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6cmVzdFBhcmFtZXRlclN0cnVjdHVyZSk6CisKIDIwMTYtMTAtMjQgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBKU09OUGFy
c2Ugc2hvdWxkIG5vdCBjcmFzaCB3aXRoIG51bGwgU3RyaW5ncwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzQzLDYgKzIzNDMsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgUwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogeworICAgICAgICAgICAgaW50
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPj0gMCk7CisgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID09IG51
bVBhcmFtZXRlcnMoKSAtIDEsICJXZSBhc3N1bWUgdGhhdCB0aGlzIGlzIHRydWUgd2hlbiByZW1h
dGVyaWFsaXppbmcgdGhlIHJlc3QgcGFyYW1ldGVyIGR1cmluZyBPU1IgZXhpdCBpbiB0aGUgRlRM
IEpJVC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjUsMTYg
KzE2NjUsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAgICAgLy8gdGhhdCdzIHRoZSBjb25zZXJ2YXRpdmUgdGhpbmcgdG8gZG8uIE90aGVyd2lz
ZSB3ZSdkIG5lZWQgdG8gd3JpdGUgbW9yZSBjb2RlIHRvIG1hcmsgc3VjaAogICAgICAgICAgICAg
Ly8gcGF0aHMgYXMgdW5yZWFjaGFibGUsIG9yIHRvIHJldHVybiB1bmRlZmluZWQuIFdlIGNvdWxk
IGltcGxlbWVudCB0aGF0IGV2ZW50dWFsbHkuCiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXggPSBpbmRleC5hc1VJbnQzMigpICsgbm9kZS0+bnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpIHsKICAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LmFzSW50
MzIoKSArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1
bWVudHMoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3Rh
dGUudmFyaWFibGVzKCkuYXJndW1lbnQoaW5kZXguYXNJbnQzMigpICsgMSk7CisgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJn
dW1lbnRzKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0
YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY4NSw3ICsxNjg2LDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBhIGJvdW5kIG9uIHRoZSB0eXBlcyBldmVuIHRob3VnaCBpdCdzIHJhbmRvbSBhY2Nlc3Mu
IFRha2UgYWR2YW50YWdlIG9mIHRoaXMuCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7IGkgPCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIHJl
c3VsdC5tZXJnZSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CkBAIC0xOTUwLDYgKzE5NTEsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CiAg
ICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJl
c3Q6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVy
KHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMgY2xh
aW1zIHRvIHJldHVybiBib3R0b20uCkBAIC0yODU3LDkgKzI4NTksMTUgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q3JlYXRlUmVzdDoKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGlt
ZVdhdGNocG9pbnQobm9kZSkpIC8vIFRoaXMgbWVhbnMgd2UncmUgYWxyZWFkeSBoYXZpbmcgYSBi
YWQgdGltZS4KKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdh
dGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgYWxyZWFk
eSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KG1fZ3JhcGgsIFNwZWNBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZXN0UGFy
YW1ldGVyU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgQ2hlY2s6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
RWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAg
bV9jYW5kaWRhdGVzLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdhdGNoaW5nIHRoZSBIYXZpbmdBQmFkVGlt
ZSB3YXRjaHBvaW50IGl0IG1lYW5zIHRoYXQgd2Ugd2lsbCBiZSBpbnZhbGlkYXRlZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBmaXJlcyAoaXQgbWF5IG9yIG1heSBub3QgaGF2
ZSBhY3R1YWxseSBmaXJlZCB5ZXQpLiBXZSBkb24ndCB0cnkgdG8gZWxpbWluYXRlCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIGFsbG9jYXRpb24gd2hlbiB3ZSdyZSBub3Qgd2F0Y2hp
bmcgdGhlIHdhdGNocG9pbnQgYmVjYXVzZSBpdCBjb3VsZCBlbnRhaWwgY2FsbGluZworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaW5kZXhlZCBhY2Nlc3NvcnMgKGFuZCBwcm9iYWJseSBtb3Jl
IGNyYXp5IHRoaW5ncykgb24gb3V0IG9mIGJvdW5kIGFjY2Vzc2VzIHRvIHRoZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcmVzdCBwYXJhbWV0ZXIuIEl0J3MgYWxzbyBtdWNoIGVhc2llciB0
byByZWFzb24gYWJvdXQgdGhpcyB3YXkuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhbmRp
ZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENy
ZWF0ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhlIGZhY3QgdGhhdCBzY29wZWQgYXJn
dW1lbnRzIGFyZQpAQCAtMTM0LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKLSAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVDbG9uZWRBcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVDbG9uZWRBcmd1
bWVudHMgJiYgZWRnZS0+b3AoKSAhPSBDcmVhdGVSZXN0KSB7CiAgICAgICAgICAgICAgICAgICAg
IGVzY2FwZShlZGdlLCBzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMjIyLDYgKzIzMywzMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5vZGUtPmFycmF5TW9kZSgpLCBub2RlLT5j
aGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
Y2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURp
cmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVu
dHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmNs
b25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQo
bm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxl
IEdldEJ5SWQvR2V0QnlPZmZzZXQgb24gY2FsbGVlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzUKQEAgLTM5NSw3ICs0MzIs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2dyYXBoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OwogICAgICAgICAgICAgICAgIApAQCAtNDAzLDYgKzQ0MCwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luKTsKICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAg
YXV0byBpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5k
aWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNoIGEgd2F5IHRoYXQgd2Ugc2VlIGRvbWlu
YXRvcnMgb2YgYSB1c2UgYmVmb3JlIHRoZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21D
bG9uZWRBcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKQEAgLTQx
MSw2ICs0NTYsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21EaXJlY3RBcmd1bWVu
dHMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
Q3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFp
bnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQ3JlYXRlUmVzdCk7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhpcyBwYXJhbWV0ZXIgZm9yIE9T
UiBleGl0LCB3ZSBjYW4gZmluZCBvdXQgYWxsIHRoZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBuZWVkIHZpYSB0aGUgc3RhdGljIHBhcmFtZXRlciBjb3VudCBhbmQgdGhl
IGR5bmFtaWMgYXJndW1lbnQgY291bnQuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpID0gRWRnZSgpOyAKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKQEAgLTQy
MSwxMyArNDc2LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czogewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZURp
cmVjdEFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJn
dW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChub2RlLT5jYXB0
dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpICsgMSkgKwogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLnN0YWNrT2Zmc2V0KCk7CkBAIC00MzgsNyArNDkx
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRh
dGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2Fu
ZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+b3AoKSAhPSBQaGFudG9tQ2xvbmVkQXJndW1lbnRz
KQpAQCAtNDU0LDcgKzUwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gTWVoLCB0aGlzIGlzIGtpbmQgb2YgaGFja2lzaCAtIHdlIHVzZSBhbiBJZGVu
dGl0eSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUKQEAgLTQ3MiwxMyArNTI1LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDMwNzYKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
YW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gbm9kZS0+Y2hpbGQyKCktPmFzVUludDMyKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNhZmVUb0dldFN0YWNrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKQEAgLTUxMiwxMCArNTcwLDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+cHJlZGljdGlvbigpLCBvcCwg
bm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+cHJlZGljdGlvbigpLCBvcCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBkbyB0aGlzIGJlY2F1c2Ugd2Ug
bWF5IGhhdmUgYSBkYXRhIGZvcm1hdCBjb252ZXJzaW9uIGhlcmUuCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC01MjMsODMgKzU4MSw5NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMoY2FuZGlkYXRlKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogdmFyYXJnc0RhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgp
ID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBjYW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmFyZ3NEYXRhLT5vZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7CisKICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICYmIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIHZhcmFyZ3NE
YXRhLT5vZmZzZXQgPD0gdmFyYXJnc0RhdGEtPmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGNhbiBleGl0LCBz
byBpdCBiZXR0ZXIgYmUgZXhpdE9LLgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSB2YXJhcmdz
RGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwg
RWRnZShhcmd1bWVudENvdW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0
IHRvIG5vdCBpbmNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFz
b24gYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHZhcmFy
Z3NEYXRhLT5saW1pdCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmlu
ZWQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdG9y
ZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVt
ZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBpZgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvYWRJbmRleCA9IHN0b3JlSW5kZXggKyB2YXJh
cmdzRGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPiB2YXJhcmdzRGF0YS0+b2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gMSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdz
RGF0YS0+bGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJn
cyBjYW4gZXhpdCwgc28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9y
aWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc051bWJlcihhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4u
dGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNO
b2RlLCBLbm93bkludDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tB
Y2Nlc3NEYXRhLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZywg
Rmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFu
ZGF0b3J5TWluaW11bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5lIG91
ciBsaW1pdCB0byBleGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byBy
ZWFzb24gYWJvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQg
PSB2YXJhcmdzRGF0YS0+bGltaXQgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHVuZGVmaW5lZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBzdG9yZUluZGV4ID0gMDsgc3RvcmVJbmRleCA8IGxpbWl0OyArK3N0b3JlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgZGV0ZXJtaW5l
IGlmIHdlIGhhdmUgYW4gZWxlbWVudCB3ZSBjYW4gbG9hZCwgYW5kIGxvYWQgaXQgaWYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhp
dE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gc3Rv
cmUgYW55dGhpbmcgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmVJ
bmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgYnV0IHdlIHdpbGwgc3RpbGwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhh
dCByYW5nZS4gU28gaWYgd2UgZG9uJ3QgZG8gdGhlIHN0b3Jlcywgd2UnbGwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBkZWdlbmVyYXRlIElSOiB3ZSdsbCBoYXZlIEdl
dFN0YWNrcyBvZiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBQdXRTdGFja3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9hZEluZGV4ID0gc3RvcmVJ
bmRleCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9u
U2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRJbmRleCArIDEgPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX2dy
YXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2luLndp
dGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc3RvcmVJbmRleCA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11
bSwgYnV0IHdlIHdpbGwgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgR2V0U3RhY2tzIGluIHRoYXQgcmFuZ2UuIFNvIGlmIHdlIGRvbid0IGRvIHRoZSBz
dG9yZXMsIHdlJ2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IGRlZ2VuZXJhdGUgSVI6IHdlJ2xsIGhhdmUgR2V0U3RhY2tzIG9mIHNvbWV0aGluZyB0aGF0IGRp
ZG4ndAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBQdXRTdGFj
a3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NDM0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5k
ZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLndpdGhFeGl0
T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1
bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZs
dXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGlu
dCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgdmFsdWUs
IHN0b3JlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBz
dG9yZUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSog
ZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVkZ2UodmFsdWUp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0
U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhGb3J3YXJkVmFyYXJncyk7CkBAIC02MTEsMTAgKzY4MSwxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjogewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAg
ICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NE
YXRhKiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgKz0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7CisKICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4g
YXJndW1lbnRzOwpAQCAtNjc3LDExICs3NTIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRh
dGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJl
bW92ZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsgLy8gUmVtb3ZlIHRoZSBjZWxsIGNoZWNrIHNpbmNlIHdlJ3ZlIHBy
b3ZlbiBpdCdzIG5vdCBuZWVkZWQgYW5kIEZUTCBsb3dlcmluZyBtaWdodCBib3RjaCB0aGlzLgor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA3Nzg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCwxNCArNjQsMjMgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3Vt
ZW50c0FycmF5TGVuZ3RoKAogICAgIERGR19BU1NFUlQoCiAgICAgICAgIGdyYXBoLCBhcmd1bWVu
dHMsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVEaXJlY3RBcmd1bWVudHMgfHwg
YXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVNjb3BlZEFyZ3VtZW50cwotICAgICAgICB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IENy
ZWF0ZUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlUmVzdAorICAg
ICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50cyB8fCBhcmd1
bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgIAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwor
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAgIGlmIChhcmd1
bWVudHMtPm9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNy
ZWF0ZVJlc3QpCisgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1lbnRzLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUg
JiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CisgICAg
ICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKQorICAgICAg
ICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSA9IDA7CiAgICAgICAgIHJldHVybiBpbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwg
anNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAg
ICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50c1NpemUpKTsKICAgICB9
CiAgICAgCiAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKQEAgLTg0LDEyICs5MywyMyBAQCBOb2Rl
KiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNJbnQzMk9ubHksIEdldFN0YWNrLCBvcmlnaW4sCiAgICAgICAgICAgICBPcEluZm8o
Z3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKGFyZ3VtZW50Q291bnRSZWdpc3RlciwgRmx1c2hl
ZEludDMyKSkpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisKKyAgICBOb2RlKiByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBPcEluZm8oQXJp
dGg6OlVuY2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50MzJVc2UpLAog
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICBu
b2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMSksIEludDMyVXNlKSk7CisgICAgICAgICAgICBu
b2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwg
SW50MzJVc2UpKTsKKworICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkgeworICAgICAg
ICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2ZSBudW1iZXIg
aWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJlLgorICAgICAg
ICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCisgICAgICAgICAgICBFZGdlKHJl
c3VsdCwgSW50MzJVc2UpLCAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFu
dEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNlKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNzc4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NzYsNiArNDc2LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwog
CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgLy8gRXZlbiB0aG91Z2ggaXQn
cyBwaGFudG9tLCBpdCBzdGlsbCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNhbid0IGJlIHJl
cGxhY2VkIHdpdGggYW5vdGhlci4KKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNl
IENhbGxPYmplY3RDb25zdHJ1Y3RvcjoKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIENyZWF0
ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNCw5ICszMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczogewotICAgICAgICAgICAgICAgIEpTVmFsdWUgaW5kZXggPSBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpbmRleCB8fCAhaW5kZXguaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIEpTVmFsdWUg
aW5kZXhWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUgfHwgIWluZGV4VmFsdWUuaXNJbnQzMigpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaW5kZXhWYWx1ZS5hc1VJbnQzMigpICsgbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CkBAIC0zMzUsMTAgKzMzNywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8v
IEdldE15QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJvdW5kcyBhY2Nl
c3Nlczsgd2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAvLyBHQ1NFIHJl
bW92ZXMgdGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleC5hc1VJbnQzMigpID49IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4LmFzVUludDMyKCkgPj0gbV9zdGF0ZS52YXJpYWJs
ZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCkBAIC0zNDksMTUgKzM1MSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpbmRleC5hc0ludDMyKCkpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGluZGV4KSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaW5kZXguYXNJbnQzMigpICsgMSksIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4ICsgMSksIEZsdXNoZWRK
U1ZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KQotICAgICAgICAgICAgICAgICAgICAmJiBpbmRleC5hc1VJbnQzMigpIDwgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5kZXggPCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSB7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICBlbGlt
aW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
Nyw2ICsyNDcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRl
QWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRP
ZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OCw2ICsxMzk4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgIGNh
c2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFy
Z3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgY2FzZSBQ
aGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1
bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgY2Fz
ZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRlbmQgdG8gYmUg
dGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgREZHIGJhY2tl
bmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFrZSBraW5kbHkg
dG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ2NCw3ICs0NjUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykgeworICAg
ICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRv
bUNsb25lZEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DcmVhdGVSZXN0KSB7CiAgICAgICAg
ICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBjb25zdGFudCBmb3Ig
dGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAogICAgICAgICAgICAgLy8gb3Ro
ZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0aGF0IGRvZXNuJ3QgY29tcHV0
ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRv
bigpOwpAQCAtMTczNiw2ICsxNzM3LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVu
Y3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgpAQCAtMjM3
OSw3ICsyMzgxLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBvcCgp
ID09IEdldFJlc3RMZW5ndGgpOworICAgICAgICBBU1NFUlQob3AoKSA9PSBDcmVhdGVSZXN0IHx8
IG9wKCkgPT0gR2V0UmVzdExlbmd0aCB8fCBvcCgpID09IEdldE15QXJndW1lbnRCeVZhbCB8fCBv
cCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKTsKICAgICAgICAgcmV0dXJuIG1f
b3BJbmZvLmFzPHVuc2lnbmVkPigpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICBtYWNybyhDcmVh
dGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b21EaXJl
Y3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CiAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKQEAgLTE3Myw2ICsxNzQsMTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICAgICAgLy8gZ2l2ZW4gdGhhdCB3ZSBjYW4gcmVhZCB0aGVtIGZy
b20gdGhlIHN0YWNrLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIC8vIFJl
Y29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQgY291bnQuCkBA
IC0xODgsNyArMTkzLDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4
ZQogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhlYXBMb2Nh
dGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDE7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50ID0gbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKICAgICAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CiAgICAg
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1OCw3ICsxMzU4LDcgQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlcwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CiAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoUmVnaXN0ZXIpID09IHNpemVvZihKU1ZhbHVlKSwgIlRoaXMgaXMgYSBzdHJvbmcg
YXNzdW1wdGlvbiBoZXJlLiIpOwogICAgIEpTVmFsdWUqIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiA9
IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oYXJndW1lbnRTdGFydCkgKyBudW1iZXJPZlBhcmFtc1Rv
U2tpcDsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVu
dHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMjA3
Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNSArMTIwLDI0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsKKworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSAwOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlW
YWwgfHwgbV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGd1
YXJhbnRlZXMgdGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwgbmV2ZXIKKyAgICAgICAgICAg
ICAgICAvLyByZWFkIGFueSBhcmd1bWVudHMgYmVsb3cgdGhlIG51bWJlciBvZiBhcmd1bWVudHMg
dG8gc2tpcC4gRm9yIGV4YW1wbGUsIGlmIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwIGlzIDIsCisg
ICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBuZXZlciByZWFkIGFyZ3VtZW50IDAgb3IgYXJndW1l
bnQgMS4KKyAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fbm9kZS0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBvdXRl
cm1vc3QgYXJndW1lbnRzIGFuZCBhcmd1bWVudCBjb3VudC4KLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+
IDE7KQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dyYXBoLm1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpOyBpKyspCiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTsp
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGkrKykKICAgICAgICAg
ICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwogICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKICAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAg
ICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlz
aW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUzLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGly
ZWN0QXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFu
dG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OTQsNiArNTU5NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZC
b3VuZHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgREZHX0NSQVNIKG1f
aml0LmdyYXBoKCksIG5vZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01ODEwLDYgKzU4MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBQdXRTdGFjazoKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNl
IEdldFN0YWNrOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgxNiw2ICs2ODE2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVJlc3QoTgogICAgICAgICBH
UFJSZWcgYXJyYXlSZXN1bHRHUFIgPSBhcnJheVJlc3VsdC5ncHIoKTsKIAogICAgICAgICBib29s
IHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJheXMgPSBmYWxz
ZTsKKyAgICAgICAgQVNTRVJUKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5
V2l0aFNpemUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSwgYXJyYXlSZXN1bHRHUFIsIGFycmF5TGVuZ3RoR1BSLCBBcnJheVdpdGhDb250aWd1b3Vz
LCBzaG91bGRBbGxvd0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxhcmdlQXJyYXlzKTsKIAog
ICAgICAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRzU3RhcnQodGhpcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw2ICsxMTgsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGUoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZVJl
c3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FC
YWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6
CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzAsNiAr
NjcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0
b3JGdW5jdGlvbjoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9u
OgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAgICAgICAgIGNhc2UgUGhh
bnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAg
ICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA3Nzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjksNiArMjI5LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgIGNhc2Ug
UGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0
T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzEsNiArMTA3MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgogICAg
ICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQdXRIaW50OgogICAg
ICAgICBjYXNlIEJvdHRvbVZhbHVlOgpAQCAtMzQyOSw2ICszNDMwLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxkMSgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGlmIChtX25v
ZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpCisgICAgICAgICAgICBpbmRleCA9IG1fb3V0
LmFkZChpbmRleCwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCkpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsaW1pdDsKICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQxNTIs
NyArNDE1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BT
dGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250
aWd1b3VzKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CiAgICAgICAgICAgICBBcnJheVZhbHVlcyBhcnJh
eVZhbHVlcyA9IGFsbG9jYXRlVW5pbml0aWFsaXplZENvbnRpZ3VvdXNKU0FycmF5KGFycmF5TGVu
Z3RoLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgTFZhbHVlIGFycmF5ID0gYXJyYXlWYWx1ZXMu
YXJyYXk7CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gYXJyYXlWYWx1ZXMuYnV0dGVy
Zmx5OwpAQCAtNjI4MCwxNyArNjI4Myw0NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpLnZhbHVlOwot
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmNvbnN0SW50MzIoMSAtIGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKKworICAgICAgICBM
VmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdU
aGlzID0gbnVsbHB0cjsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50c0xlbmd0aCA9
IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBpZiAoYXJndW1l
bnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoID0g
YXJndW1lbnRzTGVuZ3RoLmtub3duOworICAgICAgICAgICAgaWYgKGtub3duTGVuZ3RoID49IGRh
dGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtub3duTGVuZ3RoIC0g
ZGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtub3duTGVu
Z3RoID0gMDsKKyAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50MzIoa25vd25MZW5n
dGgpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIo
a25vd25MZW5ndGggKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92
ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgorICAgICAgICAgICAgaWYgKCFkYXRh
LT5vZmZzZXQpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLnZhbHVl
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNMYXJn
ZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25z
dEludDMyKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
aXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5n
dGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOworICAgICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIGxlbmd0aCA9
IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0
aFJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlz
ID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7CisgICAgICAgIH0KKwog
ICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUo
KSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAogICAgICAgICBtX291
dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNv
dW50KSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVu
dHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0g
Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0KS52YWx1ZSgpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZExvb3AgPSBt
X291dC5uZXdCbG9jaygpOwpAQCAtNjMyMyw5ICs2MzU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBsb29wQm91bmQpOwogICAg
ICAgICBjdXJyZW50SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRy
T25lKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAotICAgICAgICAgICAg
bV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMudmFyaWFibGVzLCBzb3Vy
Y2VTdGFydCwKLSAgICAgICAgICAgICAgICBtX291dC5hZGQoY3VycmVudEluZGV4LCBtX291dC5j
b25zdEludFB0cihkYXRhLT5vZmZzZXQpKSkpOworICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4
KG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwgY3VycmVudEluZGV4KSk7CiAgICAgICAg
IG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
dGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwogICAgICAgICBuZXh0SW5kZXggPSBtX291dC5h
bmNob3IoY3VycmVudEluZGV4KTsKICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2
aW91c0luZGV4LCBuZXh0SW5kZXgpOwpAQCAtODM3MSw5ICs4NDAyLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKICAg
ICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFzc2VtYmx5SGVscGVyczo6YXJn
dW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0
YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpICsg
b2Zmc2V0OwogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGFydCkudmFsdWUoKTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgZXh0ZXJuICJDIiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUAogICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRv
ckZ1bmN0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAgICBjYXNlIFBo
YW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAg
ICAgLy8gVGhvc2UgYXJlIGNvbXBsZXRlbHkgaGFuZGxlZCBieSBvcGVyYXRpb25NYXRlcmlhbGl6
ZU9iamVjdEluT1NSCiAgICAgICAgIGJyZWFrOwogCkBAIC0yMzQsNiArMjM1LDcgQEAgZXh0ZXJu
ICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czogewogICAg
ICAgICBpZiAoIW1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCkuaW5saW5lQ2FsbEZyYW1lKSB7CkBA
IC0yNDIsNiArMjQ0LDE3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGkKICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlp
bmcoZXhlYyk7CiAgICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFt
ZShleGVjLCBleGVjLCBBcmd1bWVudHNNb2RlOjpDbG9uZWQpOworICAgICAgICAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlUmVzdDogeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKKyAgICAg
ICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2Nr
KCkpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAgICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJh
bWV0ZXJTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKiBhcmd1bWVudHNUb0Nv
cHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpICsgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlTaXplID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPyBleGVjLT5hcmd1bWVu
dENvdW50KCkgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA6IDA7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVn
aW9uLCBhcnJheVNpemUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjU1LDE0ICsyNjgsMTIgQEAgZXh0ZXJuICJDIiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9w
ZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwog
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRp
b25EZXNjcmlwdG9yKEFyZ3VtZW50Q291bnRQTG9jKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pLmFzVUludDMyKCk7Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50KTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gbWF0ZXJpYWxpemF0
aW9uLT5vcmlnaW4oKS5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgSlNGdW5j
dGlvbiogY2FsbGVlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1hdGVyaWFsaXphdGlvbi0+b3Jp
Z2luKCkuaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CkBAIC0zMzAsNiArMzQxLDU2
IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAg
IAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorICAgICAgICBjYXNlIFBo
YW50b21DcmVhdGVSZXN0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMTsKKyAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJh
bWV0ZXJTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENvdW50ID4gMCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSAoYXJndW1lbnRDb3VudCAtIDEpID4g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPyBhcmd1bWVudENvdW50IC0gMSAtIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwIDogMDsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6
YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkubG9j
YXRpb24oKS5raW5kKCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gcHJvcGVydHkubG9j
YXRpb24oKS5pbmZvKCk7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID4gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGFycmF5SW5kZXggPSBhcmdJbmRleCAtIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwOworICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6ZSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXJyYXktPmluaXRp
YWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAg
ICAgICAgICAgICAgIC8vIFdlIGF2b2lkIHRoaXMgTyhuXjIpIGxvb3Agd2hlbiBhc3NlcnRzIGFy
ZSBkaXNhYmxlZCwgYnV0IHRoZSBjb25kaXRpb24gY2hlY2tlZCBoZXJlCisgICAgICAgICAgICAg
ICAgLy8gbXVzdCBob2xkIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGFib3ZlIGxv
b3AgYmVjYXVzZSBvZiBob3cgd2UgYWxsb2NhdGUgdGhlIGFycmF5LgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOyB0YXJnZXRJbmRleCA8IGFycmF5U2l6ZTsg
Kyt0YXJnZXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0
aWVzKClbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRpb24o
KS5raW5kKCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IHBy
b3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID4gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUlu
ZGV4ID0gYXJnSW5kZXggLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUlu
ZGV4ID09IHRhcmdldEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChmb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJh
cmdzRnJhbWUuY3BwCShyZXZpc2lvbiAyMDc3ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QCB2b2lkIGVtaXRTZXRWYXJhcmdzRnJhbWUoQ0NhbGxIZWxwZXJzJiBqCiAgICAgaml0LmFuZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih+KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkg
LSAxKSksIHJlc3VsdEdQUik7CiAKICAgICBqaXQuYWRkUHRyKGxlbmd0aEdQUiwgcmVzdWx0R1BS
KTsKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhpcz8gMCA6IDEpKSwgcmVz
dWx0R1BSKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhpcyA/IDAgOiAx
KSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgLy8gcmVzdWx0R1BSIG5vdyBoYXMgdGhlIHJlcXVp
cmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKICAgICAvLyBSb3VuZCByZXN1bHRHUFIg
dG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw3ICs4NTEsNyBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiAgICAgQkVHSU4oKTsKICAgICB1bnNpZ25lZCBh
cnJheVNpemUgPSBPUF9DKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwog
ICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRWYWx1ZTsKICAg
ICBKU1ZhbHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVu
dHNTdGFydCgpICsgbnVtUGFyYW1zVG9Ta2lwOwogICAgIFJFVFVSTihjb25zdHJ1Y3RBcnJheShl
eGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDIwNzc4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw2ICs1OTYsNyBAQCBwdWJsaWM6CiAgICAg
U3RydWN0dXJlKiBjYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBw
cm94eVJldm9rZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZUxvYWRlclN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgU3RydWN0dXJl
KiByZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoYm9v
bCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKCkg
Y29uc3Q7Cg==
</data>
<flag name="review"
          id="316340"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293496</attachid>
            <date>2016-10-31 16:55:40 -0700</date>
            <delta_ts>2016-10-31 19:59:26 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>79759</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgxOTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDc0IEBACisyMDE2LTEwLTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIGVsaW1pbmF0ZSByZXN0IHBhcmFt
ZXRlciBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzOTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5h
dGlvbi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuYmFyKToK
KyAgICAgICAgKHRlc3QxKToKKyAgICAgICAgKHRlc3QyLmpheik6CisgICAgICAgICh0ZXN0Mi5q
YXoyLmtheik6CisgICAgICAgICh0ZXN0Mi5qYXoyKToKKyAgICAgICAgKHRlc3QyKToKKyAgICAg
ICAgKHRlc3QzLmZvbyk6CisgICAgICAgICh0ZXN0My5iYXopOgorICAgICAgICAodGVzdDMuamF6
KToKKyAgICAgICAgKHRlc3QzKToKKyAgICAgICAgKHRlc3Q0LmJheik6CisgICAgICAgICh0ZXN0
NC5qYXopOgorICAgICAgICAodGVzdDQpOgorICAgICAgICAodGVzdDUuYmF6KToKKyAgICAgICAg
KHRlc3Q1Lmpheik6CisgICAgICAgICh0ZXN0NSk6CisgICAgICAgICh0ZXN0Ni5iYXopOgorICAg
ICAgICAodGVzdDYuamF6KToKKyAgICAgICAgKHRlc3Q2KToKKyAgICAgICAgKHRlc3Q3LmJheik6
CisgICAgICAgICh0ZXN0Ny5qYXopOgorICAgICAgICAodGVzdDcuY2hlY2spOgorICAgICAgICAo
dGVzdDcpOgorICAgICAgICAodGVzdDguYmF6KToKKyAgICAgICAgKHRlc3Q4Lmpheik6CisgICAg
ICAgICh0ZXN0OC5jaGVjayk6CisgICAgICAgICh0ZXN0OCk6CisgICAgICAgICh0ZXN0OS5iYXop
OgorICAgICAgICAodGVzdDkuamF6KToKKyAgICAgICAgKHRlc3Q5LmNoZWNrKToKKyAgICAgICAg
KHRlc3Q5KToKKyAgICAgICAgKHRlc3QxMC5iYXopOgorICAgICAgICAodGVzdDEwLmpheik6Cisg
ICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExLmJhcik6CisgICAgICAgICh0ZXN0MTEu
Zm9vKToKKyAgICAgICAgKHRlc3QxMS5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3QxMS4p
OgorICAgICAgICAodGVzdDEyKToKKyAgICAgICAgKHRlc3QxMi5iYXIpOgorICAgICAgICAodGVz
dDEyLmZvbyk6CisgICAgICAgICh0ZXN0MTIubWFrZUFyZ3VtZW50cyk6CisgICAgICAgICh0ZXN0
MTIuKToKKyAgICAgICAgKHRlc3QxMy5iYXIpOgorICAgICAgICAodGVzdDEzLnRvcCk6CisgICAg
ICAgICh0ZXN0MTMuZm9vKToKKyAgICAgICAgKHRlc3QxMy5tYWtlQXJndW1lbnRzKToKKyAgICAg
ICAgKHRlc3QxMy4pOgorICAgICAgICAodGVzdDEzKToKKyAgICAgICAgKHRlc3QxNC5iYXIpOgor
ICAgICAgICAodGVzdDE0LnRvcCk6CisgICAgICAgICh0ZXN0MTQuZm9vKToKKyAgICAgICAgKHRl
c3QxNC5tYWtlQXJndW1lbnRzKToKKyAgICAgICAgKHRlc3QxNC4pOgorICAgICAgICAodGVzdDE0
KToKKyAgICAgICAgKHRlc3QxNS5iYXIpOgorICAgICAgICAodGVzdDE1LnRvcCk6CisgICAgICAg
ICh0ZXN0MTUuZm9vKToKKyAgICAgICAgKHRlc3QxNS5tYWtlQXJndW1lbnRzKToKKyAgICAgICAg
KHRlc3QxNS4pOgorICAgICAgICAodGVzdDE1KToKKwogMjAxNi0xMC0zMSAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWJ1ZyBKU0MgdGVzdCBtaWNyb2JlbmNo
bWFya3MvcHVyZS1nZXQtYnktaWQtY3NlLTIuanMgdGltaW5nIG91dApJbmRleDogSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZXN0LXBhcmFtZXRlci1hbGxv
Y2F0aW9uLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvcmVzdC1wYXJhbWV0ZXItYWxsb2NhdGlvbi1lbGltaW5hdGlvbi5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYxMyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIsIG0gPSAiIikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uOiAiICsgbSk7
Cit9Citub0lubGluZShhc3NlcnQpOworCitjb25zdCBpdGVyYXRpb25zID0gMjAwMDA7CisKK2Z1
bmN0aW9uIHRlc3QxKCkgeworICAgIGZ1bmN0aW9uIGJhcihhLCBiLCAuLi5hcmdzKSB7CisgICAg
ICAgIHJldHVybiBhcmdzLmxlbmd0aDsKKyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBhc3NlcnQoYmFy
KCkgPT09IDAsIGJhcigpKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpKSA9PT0gMCk7CisgICAgICAg
IGFzc2VydChiYXIoaSwgaSkgPT09IDApOworICAgICAgICBhc3NlcnQoYmFyKGksIGksIGkpID09
PSAxKTsKKyAgICAgICAgYXNzZXJ0KGJhcihpLCBpLCBpLCBpLCBpKSA9PT0gMyk7CisgICAgfQor
fQorCitmdW5jdGlvbiBzaGFsbG93RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0gYi5s
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Citub0lubGlu
ZShzaGFsbG93RXEpOworCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBmdW5jdGlvbiBqYXooYSwg
YiwgLi4uYXJncykgeworICAgICAgICBsZXQgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcmVzdWx0LnB1c2go
YXJnc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
bm9JbmxpbmUoamF6KTsKKworICAgIGZ1bmN0aW9uIGphejIoLi4uYXJncykgeworICAgICAgICBm
dW5jdGlvbiBrYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtd
OworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBrYXouYXBw
bHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGphejIpOworCisgICAgZm9yIChs
ZXQgZiBvZiBbamF6LCBqYXoyXSkgeworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJh
dGlvbnM7IGkrKykgeworICAgICAgICAgICAgbGV0IHIgPSBmKCk7CisgICAgICAgICAgICBhc3Nl
cnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSk7CisgICAgICAgICAgICBhc3Nl
cnQoIXIubGVuZ3RoKTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSkKKyAgICAgICAgICAgIGFz
c2VydCghci5sZW5ndGgpOworCisgICAgICAgICAgICByID0gZihpLCBpLCBpKQorICAgICAgICAg
ICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGFzc2VydChzaGFsbG93RXEo
ciwgW2ldKSk7CisKKyAgICAgICAgICAgIHIgPSBmKGksIGksIGkpCisgICAgICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0p
KTsKKworICAgICAgICAgICAgciA9IGYoaSwgaSwgaSwgaSoyLCBpKjQpCisgICAgICAgICAgICBh
c3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBb
aSwgaSoyLCBpKjRdKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkg
eworICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAg
IH0KKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
Zm9vLmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgYywg
ZCwgZSwgZikgeworICAgICAgICByZXR1cm4gYmF6KGEsIGIsIGMsIGQsIGUsIGYpOworICAgIH0K
KyAgICBub0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25z
OyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3Ro
ID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbdW5kZWZpbmVkLCB1bmRlZmlu
ZWQsIHVuZGVmaW5lZF0pKTsKKworICAgICAgICByID0gamF6KGksIGkpOworICAgICAgICBhc3Nl
cnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFt1bmRlZmlu
ZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXSkpOworCisgICAgICAgIHIgPSBqYXooaSwgaSwgaSk7
CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFsbG93
RXEociwgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisKKyAgICAgICAgciA9
IGpheihpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7CisKKyAg
ICAgICAgciA9IGpheihpLCBpLCBpLCBpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3Ro
ID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaSwgaSwgaV0pKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGZ1bmN0aW9uIGJheiguLi5hcmdzKSB7Cisg
ICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJn
cykgeworICAgICAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBu
b0lubGluZShqYXopOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKysp
IHsKKyAgICAgICAgbGV0IHIgPSBqYXooKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAw
KTsKKworICAgICAgICByID0gamF6KGkpOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDAp
OworCisgICAgICAgIHIgPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0g
MCk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3Ro
ID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICBy
ID0gamF6KGksIGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOwor
ICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBv
ID0ge307CisgICAgICAgIHIgPSBqYXooaSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2Vy
dChyLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAs
IG9dKSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBiYXoo
Li4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisgICAgbm9JbmxpbmUoYmF6
KTsKKyAgICBmdW5jdGlvbiBqYXooYSwgYiwgLi4uYXJncykgeworICAgICAgICByZXR1cm4gYmF6
LmFwcGx5KG51bGwsIGFyZ3MpOworICAgIH0KKyAgICBub0lubGluZShqYXopOworCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgbGV0IHIgPSBqYXoo
KTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGkp
OworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwg
aSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihp
LCBpLCBpKTsKKyAgICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0
KHNoYWxsb3dFcShyLCBbaV0pKTsKKworICAgICAgICByID0gamF6KGksIGksIGksIGkqMTApOwor
ICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0Vx
KHIsIFtpLCBpKjEwXSkpOworCisgICAgICAgIGxldCBvID0ge307CisgICAgICAgIHIgPSBqYXoo
aSwgaSwgaSwgaSoxMCwgbyk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMyk7CisgICAg
ICAgIGFzc2VydChzaGFsbG93RXEociwgW2ksIGkqMTAsIG9dKSk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0NigpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgZnVuY3Rpb24gYmF6KC4uLmFy
Z3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorICAgIG5vSW5saW5lKGJheik7Cisg
ICAgZnVuY3Rpb24gamF6KGEsIGIsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhei5hcHBs
eShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCByID0gamF6KCk7Cisg
ICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgciA9IGpheihpKTsKKyAg
ICAgICAgYXNzZXJ0KHIubGVuZ3RoID09PSAwKTsKKworICAgICAgICByID0gamF6KGksIGkpOwor
ICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDApOworCisgICAgICAgIHIgPSBqYXooaSwgaSwg
aSk7CisgICAgICAgIGFzc2VydChyLmxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChzaGFs
bG93RXEociwgW2ldKSk7CisKKyAgICAgICAgciA9IGpheihpLCBpLCBpLCBpKjEwKTsKKyAgICAg
ICAgYXNzZXJ0KHIubGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyLCBb
aSwgaSoxMF0pKTsKKworICAgICAgICBsZXQgbyA9IHt9OworICAgICAgICByID0gamF6KGksIGks
IGksIGkqMTAsIG8pOworICAgICAgICBhc3NlcnQoci5sZW5ndGggPT09IDMpOworICAgICAgICBh
c3NlcnQoc2hhbGxvd0VxKHIsIFtpLCBpKjEwLCBvXSkpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdDcoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBiYXoo
Li4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NSRXhp
dCgpOworICAgICAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1swXSwgYXJnc1sxXSwg
YXJnc1syXV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFthcmdzLmxlbmd0aCwgYXJnc1sw
XSwgYXJnc1sxXSwgYXJnc1syXV07CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5h
cmdzKSB7CisgICAgICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAg
IG5vSW5saW5lKGpheik7CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBb
bGVuZ3RoLCBhLCBiLCBjXSA9IGpheigpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsK
KyAgICAgICAgYXNzZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09PSB1
bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYyA9PT0gdW5kZWZpbmVkKTsKKworICAgICAgICBb
bGVuZ3RoLCBhLCBiLCBjXSA9IGpheihpKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0aCA9PT0gMCk7
CisgICAgICAgIGFzc2VydChhID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoYiA9PT0g
dW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IHVuZGVmaW5lZCk7CisKKyAgICAgICAg
W2xlbmd0aCwgYSwgYiwgY10gPSBqYXooaSwgaSk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09
IDApOworICAgICAgICBhc3NlcnQoYSA9PT0gdW5kZWZpbmVkKTsKKyAgICAgICAgYXNzZXJ0KGIg
PT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1bmRlZmluZWQpOworCisgICAg
ICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGkpOworICAgICAgICBhc3NlcnQobGVu
Z3RoID09PSAxKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09IGksIEpTT04uc3RyaW5naWZ5KGEpKTsK
KyAgICAgICAgYXNzZXJ0KGIgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjID09PSB1
bmRlZmluZWQpOworCisgICAgICAgIFtsZW5ndGgsIGEsIGIsIGNdID0gamF6KGksIGksIGksIGkq
MTApOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAyKTsKKyAgICAgICAgYXNzZXJ0KGEgPT09
IGkpOworICAgICAgICBhc3NlcnQoYiA9PT0gaSoxMCk7CisgICAgICAgIGFzc2VydChjID09PSB1
bmRlZmluZWQpOworCisgICAgICAgIGxldCBvID0ge29vb286MjB9OworICAgICAgICBbbGVuZ3Ro
LCBhLCBiLCBjXSA9IGpheihpLCBpLCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGxlbmd0
aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09
IGkqMTApOworICAgICAgICBhc3NlcnQoYyA9PT0gbyk7CisgICAgfQorCisgICAgc2hvdWxkRXhp
dCA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDA7IGkrKykgeworICAgICAgICBj
aGVjayhpKTsKKyAgICB9CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7CisgICAgfQor
CisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGNoZWNrKDEwKTsKK30KKworZnVuY3Rpb24g
dGVzdDgoKSB7CisgICAgbGV0IHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBiYXoo
Li4uYXJncykgeworICAgICAgICBpZiAoc2hvdWxkRXhpdCkgeworICAgICAgICAgICAgT1NSRXhp
dCgpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGFyZ3M7CisgICAgfQorICAgIGZ1bmN0aW9uIGpheihhLCBiLCAuLi5hcmdzKSB7CisgICAgICAg
IHJldHVybiBiYXouYXBwbHkobnVsbCwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGpheik7
CisKKyAgICBmdW5jdGlvbiBjaGVjayhpKSB7CisgICAgICAgIGxldCBhcmdzID0gamF6KCk7Cisg
ICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMCk7CisKKyAgICAgICAgYXJncyA9IGpheihp
KTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAwKTsKKworICAgICAgICBhcmdzID0g
amF6KGksIGkpOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDApOworCisgICAgICAg
IGFyZ3MgPSBqYXooaSwgaSwgaSk7CisgICAgICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgIGFzc2VydChhcmdzWzBdID09PSBpKTsKKworICAgICAgICBhcmdzID0gamF6KGks
IGksIGksIGkqMTApOworICAgICAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDIpOworICAgICAg
ICBhc3NlcnQoYXJnc1swXSA9PT0gaSk7CisgICAgICAgIGFzc2VydChhcmdzWzFdID09PSBpKjEw
KTsKKworICAgICAgICBsZXQgbyA9IHtvb29vOjIwfTsKKyAgICAgICAgYXJncyA9IGpheihpLCBp
LCBpLCBpKjEwLCBvKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3MubGVuZ3RoID09PSAzKTsKKyAgICAg
ICAgYXNzZXJ0KGFyZ3NbMF0gPT09IGkpOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9PT0gaSox
MCk7CisgICAgICAgIGFzc2VydChhcmdzWzJdID09PSBvKTsKKyAgICB9CisKKyAgICBzaG91bGRF
eGl0ID0gdHJ1ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7CisgICAgICAg
IGNoZWNrKGkpOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAgICBjaGVjayhpKTsKKyAgICB9
CisKKyAgICBzaG91bGRFeGl0ID0gZmFsc2U7CisgICAgY2hlY2soMTApOworfQorCitmdW5jdGlv
biB0ZXN0OSgpIHsKKyAgICBsZXQgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZ1bmN0aW9uIGJh
eihhLCAuLi5hcmdzKSB7CisgICAgICAgIGlmIChzaG91bGRFeGl0KSB7CisgICAgICAgICAgICBP
U1JFeGl0KCk7CisgICAgICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBhcmdz
WzFdXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBh
cmdzWzFdXTsKKyAgICB9CisgICAgZnVuY3Rpb24gamF6KC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0
dXJuIGJhei5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKwor
ICAgIGZ1bmN0aW9uIGNoZWNrKGkpIHsKKyAgICAgICAgbGV0IFtsZW5ndGgsIGEsIGJdID0gamF6
KCk7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDApOworCisgICAgICAgIFtsZW5ndGgsIGEs
IGJdID0gamF6KGkpOworICAgICAgICBhc3NlcnQobGVuZ3RoID09PSAwKTsKKyAgICAgICAgYXNz
ZXJ0KGEgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChiID09PSB1bmRlZmluZWQpOwor
CisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkgKyAxKTsKKyAgICAgICAgYXNzZXJ0
KGxlbmd0aCA9PT0gMSk7CisgICAgICAgIGFzc2VydChhID09PSBpKzEpOworICAgICAgICBhc3Nl
cnQoYiA9PT0gdW5kZWZpbmVkKTsKKworICAgICAgICBbbGVuZ3RoLCBhLCBiXSA9IGpheihpLCBp
KzEsIGkrMik7CisgICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQo
YSA9PT0gaSsxKTsKKyAgICAgICAgYXNzZXJ0KGIgPT09IGkrMik7CisKKyAgICAgICAgbGV0IG8g
PSB7b29vbzoyMH07CisgICAgICAgIFtsZW5ndGgsIGEsIGJdID0gamF6KGksIGkrMSwgbyk7Cisg
ICAgICAgIGFzc2VydChsZW5ndGggPT09IDIpOworICAgICAgICBhc3NlcnQoYSA9PT0gaSsxKTsK
KyAgICAgICAgYXNzZXJ0KGIgPT09IG8pOworICAgIH0KKworICAgIHNob3VsZEV4aXQgPSB0cnVl
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKKyAgICAgICAgY2hlY2soaSk7
CisgICAgfQorCisgICAgc2hvdWxkRXhpdCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGNoZWNrKGkpOworICAgIH0KKworICAgIHNo
b3VsZEV4aXQgPSBmYWxzZTsKKyAgICBjaGVjaygxMCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxMCgp
IHsKKyAgICBmdW5jdGlvbiBiYXooYSwgYiwgYywgLi4uYXJncykgeworICAgICAgICByZXR1cm4g
W2FyZ3MubGVuZ3RoLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdXTsKKyAgICB9
CisgICAgZnVuY3Rpb24gamF6KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJuIGJh
eihhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9CisgICAgbm9JbmxpbmUoamF6KTsKKworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisgICAgICAgIGxldCBbbGVuZ3Ro
LCBhLCBiLCBjLCBkXSA9IGpheigxLCAyLCAzLCA0LCA1LCA2KTsKKyAgICAgICAgYXNzZXJ0KGxl
bmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhID09PSA0KTsKKyAgICAgICAgYXNzZXJ0KGIg
PT09IDUpOworICAgICAgICBhc3NlcnQoYyA9PT0gNik7CisgICAgICAgIGFzc2VydChkID09PSB1
bmRlZmluZWQpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGZ1bmN0aW9u
IGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGlu
ZShiYXIpOworCisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAg
ICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdzKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9v
KTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1cm4g
WzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJh
dGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxvd0Vx
KGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxldCBh
ID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAg
ICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFt7Zm9vOiAyMH1dOworICAgICAgICB0ZXN0KCk7
CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBdOworICAgICAg
ICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTIoKSB7CisgICAgInVzZSBzdHJp
Y3QiOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBmdW5jdGlvbiBnZXRUaGlzVmFsdWUo
KSB7IHJldHVybiB0aGlzVmFsdWU7IH0KKyAgICBub0lubGluZShnZXRUaGlzVmFsdWUpOworCisg
ICAgZnVuY3Rpb24gYmFyKC4uLmFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHRoaXNW
YWx1ZSk7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOwor
CisgICAgZnVuY3Rpb24gZm9vKGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJu
IGJhci5hcHBseShnZXRUaGlzVmFsdWUoKSwgYXJncyk7CisgICAgfQorICAgIG5vSW5saW5lKGZv
byk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICAgICAgcmV0dXJu
IFsxLDIsMyw0LCAuLi5hcmdzXTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVy
YXRpb25zOyBpKyspIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsgYXNzZXJ0KHNoYWxsb3dF
cShhLCBmb28uYXBwbHkobnVsbCwgbWFrZUFyZ3VtZW50cyhhKSkpKTsgfQorICAgICAgICBsZXQg
YSA9IFt7fSwgMjUsIDUwXTsKKyAgICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbXTsKKyAg
ICAgICAgdGVzdCgpOworCisgICAgICAgIGEgPSBbe2ZvbzogMjB9XTsKKyAgICAgICAgdGVzdCgp
OworCisgICAgICAgIGEgPSBbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwXTsKKyAgICAg
ICAgdGVzdCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEzKCkgeworICAgICJ1c2Ugc3Ry
aWN0IjsKKyAgICBmdW5jdGlvbiBiYXIoLi4uYXJncykgeworICAgICAgICByZXR1cm4gYXJnczsK
KyAgICB9CisgICAgbm9JbmxpbmUoYmFyKTsKKworICAgIGZ1bmN0aW9uIHRvcChhLCBiLCBjLCBk
LCAuLi5hcmdzKSB7CisgICAgICAgIHJldHVybiBiYXIuYXBwbHkobnVsbCwgYXJncyk7CisgICAg
fQorICAgIGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7CisgICAgICAgIGxldCByID0gdG9wLmFwcGx5
KG51bGwsIGFyZ3MpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9v
KTsKKworICAgIGZ1bmN0aW9uIG1ha2VBcmd1bWVudHMoYXJncykgeworICAgICAgICByZXR1cm4g
WzEsMiwzLDQsIC4uLmFyZ3NdOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJh
dGlvbnM7IGkrKykgeworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeyBhc3NlcnQoc2hhbGxvd0Vx
KGEsIGZvby5hcHBseShudWxsLCBtYWtlQXJndW1lbnRzKGEpKSkpOyB9CisgICAgICAgIGxldCBh
ID0gW3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAg
ICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwg
ODBdOworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTQoKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJl
dHVybiBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9w
KGEsIGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBh
cmdzKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7CisgICAg
ICAgIHJldHVybiB0b3AoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLCBh
MTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcpOworICAgIH0KKyAgICBub0lubGluZShm
b28pOworCisgICAgZnVuY3Rpb24gbWFrZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgICAgIGxldCBy
ID0gWzEsMiwzLDQsIC4uLmFyZ3NdOworICAgICAgICB3aGlsZSAoci5sZW5ndGggPCBmb28ubGVu
Z3RoKQorICAgICAgICAgICAgci5wdXNoKHVuZGVmaW5lZCk7CisgICAgICAgIHJldHVybiByOwor
ICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgICAg
ICBmdW5jdGlvbiB0ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IGFyZ3MgPSBtYWtl
QXJndW1lbnRzKGEpOworICAgICAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShhcmdzLnNsaWNlKDQp
LCBmb28uYXBwbHkobnVsbCwgYXJncykpKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBhID0g
W3t9LCAyNSwgNTBdOworICAgICAgICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFtdOworICAgICAg
ICB0ZXN0KCk7CisKKyAgICAgICAgYSA9IFsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODBd
OworICAgICAgICB0ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MTUoKSB7CisgICAg
InVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIGJhciguLi5hcmdzKSB7CisgICAgICAgIHJldHVy
biBhcmdzOworICAgIH0KKyAgICBub0lubGluZShiYXIpOworCisgICAgZnVuY3Rpb24gdG9wKGEs
IGIsIGMsIGQsIC4uLmFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIGJhci5hcHBseShudWxsLCBhcmdz
KTsKKyAgICB9CisgICAgZnVuY3Rpb24gZm9vKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBh
OCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KSB7CisgICAgICAg
IGxldCByID0gdG9wKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwgYTEx
LCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3KTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAg
fQorICAgIG5vSW5saW5lKGZvbyk7CisKKyAgICBmdW5jdGlvbiBtYWtlQXJndW1lbnRzKGFyZ3Mp
IHsKKyAgICAgICAgbGV0IHIgPSBbMSwyLDMsNCwgLi4uYXJnc107CisgICAgICAgIHdoaWxlIChy
Lmxlbmd0aCA8IGZvby5sZW5ndGgpCisgICAgICAgICAgICByLnB1c2godW5kZWZpbmVkKTsKKyAg
ICAgICAgcmV0dXJuIHI7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9u
czsgaSsrKSB7CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgICAgICB7CisgICAgICAgICAg
ICBsZXQgYXJncyA9IG1ha2VBcmd1bWVudHMoYSk7CisgICAgICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKGFyZ3Muc2xpY2UoNCksIGZvby5hcHBseShudWxsLCBhcmdzKSkpOworICAgICAgICB9CisK
KyAgICAgICAgbGV0IGEgPSBbe30sIDI1LCA1MF07CisgICAgICAgIHRlc3QoKTsKKworICAgICAg
ICBhID0gW107CisgICAgICAgIHRlc3QoKTsKKworICAgICAgICBhID0gWzEwLCAyMCwgMzAsIDQw
LCA1MCwgNjAsIDcwLCA4MF07CisgICAgICAgIHRlc3QoKTsKKyAgICB9Cit9CisKK2xldCBzdGFy
dCA9IERhdGUubm93KCk7Cit0ZXN0MSgpOwordGVzdDIoKTsKK3Rlc3QzKCk7Cit0ZXN0NCgpOwor
dGVzdDUoKTsKK3Rlc3Q2KCk7Cit0ZXN0NygpOwordGVzdDgoKTsKK3Rlc3Q5KCk7Cit0ZXN0MTAo
KTsKK3Rlc3QxMSgpOwordGVzdDEyKCk7Cit0ZXN0MTMoKTsKK3Rlc3QxNCgpOwordGVzdDE1KCk7
Citjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmludChEYXRlLm5v
dygpIC0gc3RhcnQpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
ODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMjcgQEAKKzIwMTYtMTAtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3QgcGFy
YW1ldGVyIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM5MjUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKwor
ICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgZWxpbWluYXRpbmcgcmVzdCBw
YXJhbWV0ZXIKKyAgICAgICAgYWxsb2NhdGlvbnMgd2hlbiB0aGV5J3JlIHNwcmVhZCB0byBvdGhl
ciBmdW5jdGlvbiBjYWxsczoKKyAgICAgICAgYGZ1bmN0aW9uIGZvbyguLi5hcmdzKSB7IGJhcigu
Li5hcmdzKTsgfWAKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGx5IHJlbW92ZXMg
dGhlIGFsbG9jYXRpb24gZm9yIHJlc3QgcGFyYW1ldGVyCisgICAgICAgIGFsbG9jYXRpb25zIHVz
aW5nIHRoZSBzYW1lIGVzY2FwZSBhbmFseXNpcyB0aGF0IGlzIHBlcmZvcm1lZAorICAgICAgICBp
biB0aGUgYXJndW1lbnQgZWxpbWluYXRpb24gcGhhc2UuIEkndmUgYWRkZWQgYSBuZXcgcnVsZSB0
bworICAgICAgICB0aGUgcGhhc2UgdG8gbWFrZSBzdXJlIHRoYXQgQ2hlY2tTdHJ1Y3R1cmUgZG9l
c24ndCBjb3VudCBhcworICAgICAgICBhbiBlc2NhcGUgZm9yIGFuIGFsbG9jYXRpb24gc2luY2Ug
dGhpcyBvZnRlbiBzaG93cyB1cCBpbiBjb2RlCisgICAgICAgIGxpa2UgdGhpczoKKyAgICAgICAg
CisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICAg
ICAgbGV0IHIgPSBbXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5n
dGg7IGkrKykKKyAgICAgICAgICAgICAgICByLnB1c2goYXJnc1tpXSk7CisgICAgICAgICAgICBy
ZXR1cm4gcjsKKyAgICAgICAgfQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoZSBh
Ym92ZSBwcm9ncmFtIG5vdyBlbnRpcmVseSBlbGltaW5hdGVzIHRoZSBhbGxvY2F0aW9uIGZvciBh
cmdzCisgICAgICAgIGNvbXBpbGVkIGluIHRoZSBGVEwuIFByb2dyYW1zIGxpa2UgdGhpcyBhbHNv
IGVsaW1pbmF0ZSB0aGUgYWxsb2NhdGlvbgorICAgICAgICBmb3IgYXJnczoKKyAgICAgICAgCisg
ICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBmb28oLi4uYXJncykgeyByZXR1cm4gW2FyZ3Mu
bGVuZ3RoLCBhcmdzWzBdXTsgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gYmFyKC4uLmFy
Z3MpIHsgcmV0dXJuIHNvbWVPdGhlckZ1bmN0aW9uLmFwcGx5KG51bGwsIGFyZ3MpOyB9CisgICAg
ICAgIGBgYAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBleHRlbmRzIHRoZSBhcmd1bWVu
dHMgZWxpbWluYXRpb24gcGhhc2UgdG8gdW5kZXJzdGFuZAorICAgICAgICB0aGUgY29uY2VwdCB0
aGF0IHdlIG1heSB3YW50IHRvIGZvcndhcmQgYXJndW1lbnRzLCBvciBnZXQgZnJvbQorICAgICAg
ICB0aGUgYXJndW1lbnRzIHJlZ2lvbiwgc3RhcnRpbmcgYXQgc29tZSBvZmZzZXQuIFRoZSBvZmZz
ZXQgaXMgdGhlCisgICAgICAgIG51bWJlciBvZiBuYW1lcyBwYXJhbWV0ZXIgYmVmb3JlIHRoZSBy
ZXN0IHBhcmFtZXRlci4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICBgYGAKKyAgICAg
ICAgZnVuY3Rpb24gZm9vKGEsIGIsIC4uLmFyZ3MpIHsgcmV0dXJuIGJhci5hcHBseShudWxsLCBh
cmdzKTsgfQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFdpbGwgZm9yd2FyZCBhcmd1
bWVudHMgc3RhcnRpbmcgYXQgdGhlICp0aGlyZCogYXJndW1lbnQuCisgICAgICAgIE91ciBhcmd1
bWVudHMgZm9yd2FyZGluZyBjb2RlIGFscmVhZHkgaGFkIHRoZSBub3Rpb24gb2Ygc3RhcnRpbmcK
KyAgICAgICAgZnJvbSBzb21lIG9mZnNldCwgaG93ZXZlciwgSSBmb3VuZCBidWdzIGluIHRoYXQg
Y29kZS4gSSBleHRlbmRlZAorICAgICAgICBpdCB0byB3b3JrIHByb3Blcmx5IGZvciByZXN0IHBh
cmFtZXRlcnMgd2l0aCBhcmJpdHJhcnkgc2tpcCBvZmZzZXRzLgorICAgICAgICAKKyAgICAgICAg
QW5kIHRoaXMgcHJvZ3JhbToKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGZvbyguLi5h
cmdzKSB7CisgICAgICAgICAgICBsZXQgciA9IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHIucHVzaChhcmdzW2ld
KTsKKyAgICAgICAgICAgIHJldHVybiByOworICAgICAgICB9CisgICAgICAgIGBgYAorICAgICAg
ICAKKyAgICAgICAgS25vd3MgdG8gcGVyZm9ybSB0aGUgR2V0TXlBcmd1bWVudEJ5VmFsKiB3aXRo
IGFuIG9mZnNldCBvZiAzCisgICAgICAgIGluc2lkZSB0aGUgbG9vcC4gVG8gbWFrZSB0aGlzIHdv
cmssIEkgdGF1Z2h0IEdldE15QXJndW1lbnRCeVZhbCAKKyAgICAgICAgYW5kIEdldE15QXJndW1l
bnRCeVZhbE91dE9mQm91bmRzIHRvIHRha2UgYW4gb2Zmc2V0IHJlcHJlc2VudGluZworICAgICAg
ICB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhIH4yMCUgc3BlZWR1cCBvbiBtaWNyb2JlbmNobWFya3MuCisKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjplbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgpOgor
ICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJl
cml6ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAg
ICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNQaGFudG9tQWxsb2NhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0
eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZFRvcCk6CisgICAg
ICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVSZXN0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRh
dGUuY3BwOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRNeUFyZ3VtZW50QnlW
YWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRl
UmVzdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVGb3J3
YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldEFy
Z3VtZW50c1N0YXJ0KToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6b3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUik6CisgICAgICAgIChKU0M6
OkZUTDo6b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldFZhcmFyZ3NGcmFtZSk6
CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpT
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzdFBhcmFtZXRlclN0cnVjdHVyZSk6CisKIDIw
MTYtMTAtMzEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAk
dm0uY29kZUJsb2NrRm9yKCkgZGVidWdnaW5nIHV0aWxpdHkuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNjAsNiArMjM2MCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ug
b3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCA9IGluc3RydWN0aW9uc1tpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPj0g
MCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwID09IG51bVBhcmFtZXRlcnMoKSAtIDEsICJXZSBhc3N1bWUgdGhhdCB0aGlzIGlzIHRydWUg
d2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3QgcGFyYW1ldGVyIGR1cmluZyBPU1IgZXhpdCBp
biB0aGUgRlRMIEpJVC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAyMDgxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjUs
MTYgKzE2NjUsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBjb25zZXJ2YXRpdmUgdGhpbmcgdG8gZG8uIE90aGVy
d2lzZSB3ZSdkIG5lZWQgdG8gd3JpdGUgbW9yZSBjb2RlIHRvIG1hcmsgc3VjaAogICAgICAgICAg
ICAgLy8gcGF0aHMgYXMgdW5yZWFjaGFibGUsIG9yIHRvIHJldHVybiB1bmRlZmluZWQuIFdlIGNv
dWxkIGltcGxlbWVudCB0aGF0IGV2ZW50dWFsbHkuCiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXggPSBpbmRleC5hc1VJbnQzMigpICsgbm9kZS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRl
eCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LmFz
SW50MzIoKSArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsg
MSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5kZXguYXNVSW50MzIoKSA8IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZB
cmd1bWVudHMoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1f
c3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaW5kZXguYXNJbnQzMigpICsgMSk7CisgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9m
QXJndW1lbnRzKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY4NSw3ICsxNjg2LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgLy8g
V2UgaGF2ZSBhIGJvdW5kIG9uIHRoZSB0eXBlcyBldmVuIHRob3VnaCBpdCdzIHJhbmRvbSBhY2Nl
c3MuIFRha2UgYWR2YW50YWdlIG9mIHRoaXMuCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7IGkgPCBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAg
IHJlc3VsdC5tZXJnZSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CkBAIC0xOTUwLDYgKzE5NTEs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6
CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0
ZVJlc3Q6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9i
YmVyKHRydWUpOyAvLyBQcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIC8vIFRoaXMg
Y2xhaW1zIHRvIHJldHVybiBib3R0b20uCkBAIC0yODY1LDkgKzI4NjcsMTUgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ3JlYXRlUmVzdDoKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFk
VGltZVdhdGNocG9pbnQobm9kZSkpIC8vIFRoaXMgbWVhbnMgd2UncmUgYWxyZWFkeSBoYXZpbmcg
YSBiYWQgdGltZS4KKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGlt
ZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgYWxy
ZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKG1fZ3JhcGgsIFNwZWNBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZXN0
UGFyYW1ldGVyU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2s6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4MTkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAg
ICAgbV9jYW5kaWRhdGVzLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdhdGNoaW5nIHRoZSBIYXZpbmdBQmFk
VGltZSB3YXRjaHBvaW50IGl0IG1lYW5zIHRoYXQgd2Ugd2lsbCBiZSBpbnZhbGlkYXRlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBpdCBmaXJlcyAoaXQgbWF5IG9yIG1heSBub3Qg
aGF2ZSBhY3R1YWxseSBmaXJlZCB5ZXQpLiBXZSBkb24ndCB0cnkgdG8gZWxpbWluYXRlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFsbG9jYXRpb24gd2hlbiB3ZSdyZSBub3Qgd2F0
Y2hpbmcgdGhlIHdhdGNocG9pbnQgYmVjYXVzZSBpdCBjb3VsZCBlbnRhaWwgY2FsbGluZworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXhlZCBhY2Nlc3NvcnMgKGFuZCBwcm9iYWJseSBt
b3JlIGNyYXp5IHRoaW5ncykgb24gb3V0IG9mIGJvdW5kIGFjY2Vzc2VzIHRvIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVzdCBwYXJhbWV0ZXIuIEl0J3MgYWxzbyBtdWNoIGVhc2ll
ciB0byByZWFzb24gYWJvdXQgdGhpcyB3YXkuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmRpZGF0ZXMuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNl
IENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIGhhbmRsZSB0aGlzIGlmIGl0IHdhc24ndCBmb3IgdGhlIGZhY3QgdGhhdCBzY29wZWQg
YXJndW1lbnRzIGFyZQpAQCAtMTM0LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6IHsKLSAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVDbG9uZWRBcmd1
bWVudHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBDcmVhdGVDbG9uZWRB
cmd1bWVudHMgJiYgZWRnZS0+b3AoKSAhPSBDcmVhdGVSZXN0KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGVzY2FwZShlZGdlLCBzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjIyLDYgKzIzMywzMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBlc2NhcGVCYXNlZE9uQXJyYXlNb2RlKG5vZGUtPmFycmF5TW9kZSgpLCBub2Rl
LT5jaGlsZDEoKSwgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
ICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fY2FuZGlkYXRlcy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENyZWF0
ZURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGds
b2JhbE9iamVjdC0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1
bWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9p
bnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2Jq
ZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5zdHJ1Y3R1cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFu
ZGxlIEdldEJ5SWQvR2V0QnlPZmZzZXQgb24gY2FsbGVlLgogICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzUKQEAgLTM5NSw3ICs0
MzIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChtX2dyYXBoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIApAQCAtNDAzLDYgKzQ0MCwxNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3Ro
KAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJ
bmRleCwgbm9kZS0+b3JpZ2luKTsKICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAg
ICAgYXV0byBpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhj
YW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAvLyBXZSB0cmF2ZXJzZSBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgYXJlIGd1
YXJhbnRlZWQgdG8gc2VlIGEgZGVmIGJlZm9yZSBhIHVzZS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlcmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHRyYW5zZm9ybWVkIHRoZSBhbGxv
Y2F0aW9uIGJlZm9yZSB0aGUgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFuIGFsbG9j
YXRpb24uCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhh
bnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21EaXJlY3RBcmd1bWVu
dHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRBcmd1bWVudHMpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKQEAgLTQxMSw2ICs0NTgsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKFBoYW50b21EaXJlY3RBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlUmVzdDoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdGhpcyBwYXJhbWV0ZXIgZm9yIE9TUiBleGl0LCB3ZSBjYW4gZmluZCBvdXQg
YWxsIHRoZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHZpYSB0
aGUgc3RhdGljIHBhcmFtZXRlciBjb3VudCBhbmQgdGhlIGR5bmFtaWMgYXJndW1lbnQgY291bnQu
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOyAKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
Y2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKQEAgLTQyMSwxMyArNDc4LDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3Vt
ZW50czogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRh
aW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxs
b2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IENyZWF0ZURpcmVjdEFyZ3VtZW50cwotICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBub2RlLT5j
aGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzKTsKICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9CiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9m
ZnNldCgpICsgMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLnN0YWNrT2Zmc2V0KCk7CkBAIC00MzgsMTAgKzQ5MywxMCBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MigpLT5vcCgpICE9IFBoYW50b21DbG9uZWRBcmd1bWVudHMgJiYgbm9kZS0+Y2hpbGQyKCktPm9w
KCkgIT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQyKCktPm9wKCkgIT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5z
dG9yYWdlQWNjZXNzRGF0YSgpLm9mZnNldCA9PSBjbG9uZWRBcmd1bWVudHNMZW5ndGhQcm9wZXJ0
eU9mZnNldCk7CkBAIC00NTQsNyArNTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAvLyBNZWgsIHRoaXMgaXMga2luZCBvZiBoYWNraXNoIC0gd2UgdXNl
IGFuIElkZW50aXR5IHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZQpAQCAtNDcyLDEzICs1MjcsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MzA3NgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gY2FuZGlkYXRlLT5udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBub2RlLT5jaGlsZDIoKS0+YXNVSW50MzIoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlk
YXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXggKz0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2FmZVRvR2V0U3RhY2s7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQpAQCAtNTEyLDEwICs1
NzIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcCA9IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5wcmVkaWN0aW9u
KCksIG9wLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBub2RlLT5wcmVkaWN0aW9uKCksIG9wLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCksIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIHRoaXMgYmVj
YXVzZSB3ZSBtYXkgaGF2ZSBhIGRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaGVyZS4KICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUyMyw4MyArNTgzLDk1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24oY2FuZGlk
YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRh
dGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyYXJnc0RhdGEtPm9mZnNldCArPSBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsKKwogICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCi0gICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0g
dmFyYXJnc0RhdGEtPm9mZnNldCA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgY2Fu
IGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudCA9IGluc2Vy
dGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IHZhcmFyZ3NEYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zm
c2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNj
ZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEtub3duSW50MzJVc2UpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NEYXRh
LT5tYW5kYXRvcnlNaW5pbXVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZSBv
dXIgbGltaXQgdG8gbm90IGluY2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFzaWVy
IHRvIHJlYXNvbiBhYm91dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxpbWl0
ID0gdmFyYXJnc0RhdGEtPmxpbWl0IC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHVuZGVmaW5lZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN0b3JlSW5kZXggPSAwOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsrc3RvcmVJbmRleCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IGRldGVybWluZSBpZiB3ZSBoYXZl
IGFuIGVsZW1lbnQgd2UgY2FuIGxvYWQsIGFuZCBsb2FkIGl0IGlmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9hZEluZGV4ID0gc3RvcmVJbmRl
eCArIHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA+IHZhcmFyZ3NEYXRhLT5vZmZzZXQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLT0gdmFyYXJnc0RhdGEtPm9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9
IHZhcmFyZ3NEYXRhLT5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExv
YWRWYXJhcmdzIGNhbiBleGl0LCBzbyBpdCBiZXR0ZXIgYmUgZXhpdE9LLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4
aXRPSyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
bm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpzTnVtYmVyKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUt
Pm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5t
X3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpc05vZGUsIEtub3duSW50MzJVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49IHZhcmFyZ3NE
YXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE
ZWZpbmUgb3VyIGxpbWl0IHRvIGV4Y2x1ZGUgInRoaXMiLCBzaW5jZSB0aGF0J3MgYSBiaXQgZWFz
aWVyIHRvIHJlYXNvbiBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsaW1pdCA9IHZhcmFyZ3NEYXRhLT5saW1pdCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogdW5kZWZpbmVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHN0b3JlSW5kZXggPSAwOyBzdG9yZUluZGV4IDwgbGltaXQ7ICsr
c3RvcmVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBk
ZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbiBlbGVtZW50IHdlIGNhbiBsb2FkLCBhbmQgbG9hZCBpdCBp
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NzaWJsZS4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBHZXRTdGFjaywgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8oZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2
ZSB0byBzdG9yZSBhbnl0aGluZyBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCBidXQgd2Ugd2ls
bCBzdGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIEdldFN0YWNr
cyBpbiB0aGF0IHJhbmdlLiBTbyBpZiB3ZSBkb24ndCBkbyB0aGUgc3RvcmVzLCB3ZSdsbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGRlZ2VuZXJhdGUgSVI6IHdlJ2xs
IGhhdmUgR2V0U3RhY2tzIG9mIHNvbWV0aGluZyB0aGF0IGRpZG4ndAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIFB1dFN0YWNrcy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzQzNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2FkSW5kZXgg
PSBzdG9yZUluZGV4ICsgdmFyYXJnc0RhdGEtPm9mZnNldDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgPSBp
bnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwg
anNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZh
bHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEluZGV4ICsgMSA8
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0
YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5v
cmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8oZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRv
cnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBHZXRTdGFja3MgaW4gdGhhdCByYW5nZS4gU28gaWYgd2UgZG9uJ3Qg
ZG8gdGhlIHN0b3Jlcywgd2UnbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgZGVnZW5lcmF0ZSBJUjogd2UnbGwgaGF2ZSBHZXRTdGFja3Mgb2Ygc29tZXRoaW5n
IHRoYXQgZGlkbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IFB1dFN0YWNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc0MzQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmRlZmluZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgdmFsdWUsIHN0b3JlIGl0LgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3JlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFk
ZChyZWcsIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2
YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IGEgdmFsdWUsIHN0b3JlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+
c3RhcnQgKyBzdG9yZUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVk
Z2UodmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3Zl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhp
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJncyk7CkBAIC02MTEsMTAgKzY4MywxNSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICAgICAg
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjogewogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDMoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRp
ZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAgQ2Fs
bFZhcmFyZ3NEYXRhKiB2YXJhcmdzRGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICB2YXJhcmdzRGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgKz0gbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7CisKICAgICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxOb2RlKj4gYXJndW1lbnRzOwpAQCAtNjc3LDExICs3NTQsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bV9jYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzRWxpbWluYXRlZEFsbG9jYXRpb24obm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsgLy8gUmVtb3ZlIHRoZSBjZWxsIGNoZWNrIHNpbmNl
IHdlJ3ZlIHByb3ZlbiBpdCdzIG5vdCBuZWVkZWQgYW5kIEZUTCBsb3dlcmluZyBtaWdodCBib3Rj
aCB0aGlzLgorICAgICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAkocmV2aXNpb24g
MjA4MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxNCArNjQsMjMgQEAgTm9kZSogZW1pdENvZGVU
b0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAogICAgIERGR19BU1NFUlQoCiAgICAgICAgIGdyYXBo
LCBhcmd1bWVudHMsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSA9PSBDcmVhdGVEaXJlY3RBcmd1
bWVudHMgfHwgYXJndW1lbnRzLT5vcCgpID09IENyZWF0ZVNjb3BlZEFyZ3VtZW50cwotICAgICAg
ICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIHx8IGFyZ3VtZW50
cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+
b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzKTsKKyAgICAgICAgfHwgYXJndW1lbnRzLT5v
cCgpID09IENyZWF0ZUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRl
UmVzdAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50
cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCBhcmd1bWVu
dHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgIAogICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSAwOworICAg
IGlmIChhcmd1bWVudHMtPm9wKCkgPT0gQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpCisgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJn
dW1lbnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDE7CisgICAgICAgIGlmIChhcmd1bWVudHNTaXplID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KQorICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSAtPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1lbnRzU2l6ZSA9IDA7CiAgICAgICAgIHJl
dHVybiBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICBub2RlSW5kZXgs
IG9yaWdpbiwganNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
OworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50c1NpemUp
KTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogYXJndW1lbnRDb3VudDsKQEAgLTg0LDEyICs5Mywy
MyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCiAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHksIEdldFN0YWNrLCBvcmlnaW4sCiAgICAgICAgICAg
ICBPcEluZm8oZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciwgRmx1c2hlZEludDMyKSkpOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisKKyAgICBOb2RlKiByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBP
cEluZm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50
MzJVc2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMSksIEludDMyVXNlKSk7CisgICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKSwgSW50MzJVc2UpKTsKKworICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkg
eworICAgICAgICAvLyBUaGUgYWJvdmUgc3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2
ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIgaXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJl
LgorICAgICAgICByZXN1bHQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhNYXgsIG9yaWdpbiwgCisgICAgICAgICAg
ICBFZGdlKHJlc3VsdCwgSW50MzJVc2UpLCAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnRDb25zdGFudEZvclVzZShub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNl
KSk7CisgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIw
ODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzcsNiArNDc3LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAg
cmV0dXJuOwogCisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKKyAgICAgICAgLy8gRXZlbiB0
aG91Z2ggaXQncyBwaGFudG9tLCBpdCBzdGlsbCBoYXMgdGhlIHByb3BlcnR5IHRoYXQgb25lIGNh
bid0IGJlIHJlcGxhY2VkIHdpdGggYW5vdGhlci4KKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291
bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisK
ICAgICBjYXNlIENhbGxPYmplY3RDb25zdHJ1Y3RvcjoKICAgICBjYXNlIFRvVGhpczoKICAgICBj
YXNlIENyZWF0ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxNCw5ICszMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczogewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
aW5kZXggPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5kZXguaXNJbnQzMigpKQorICAgICAgICAgICAgICAg
IEpTVmFsdWUgaW5kZXhWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUgfHwgIWluZGV4VmFsdWUuaXNJ
bnQzMigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gaW5kZXhWYWx1ZS5hc1VJbnQzMigpICsgbm9kZS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlKiBh
cmd1bWVudHMgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7CkBAIC0zMzUsMTAgKzMzNywxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJv
dW5kcyBhY2Nlc3Nlczsgd2UganVzdCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAv
LyBHQ1NFIHJlbW92ZXMgdGhlIGFjY2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleC5hc1VJbnQz
MigpID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4LmFzVUludDMyKCkgPj0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID49IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKSAt
IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0zNDksMTUgKzM1MSwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBkYXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpbmRleC5hc0ludDMyKCkpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGluZGV4
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaGVkSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW5kZXguYXNJbnQzMigpICsgMSksIEZsdXNoZWRKU1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4ICsgMSks
IEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKQotICAgICAgICAgICAgICAgICAgICAmJiBpbmRleC5hc1VJbnQzMigpIDwgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkgeworICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkgJiYgaW5k
ZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKGRhdGEpOwogICAgICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDgxOTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0Niw2ICsyNDYsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6Cisg
ICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWxPdXRPZkJvdW5kczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAg
ICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgUGhhbnRv
bURpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAg
ICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDgxOTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDU4
LDYgKzQ1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50b21E
aXJlY3RBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKKyAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgICAgIC8vIFRoZXNlIHByZXRl
bmQgdG8gYmUgdGhlIGVtcHR5IHZhbHVlIGNvbnN0YW50IGZvciB0aGUgYmVuZWZpdCBvZiB0aGUg
REZHIGJhY2tlbmQsIHdoaWNoCiAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd291bGRuJ3QgdGFr
ZSBraW5kbHkgdG8gYSBub2RlIHRoYXQgZG9lc24ndCBjb21wdXRlIGEgdmFsdWUuCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3MSw3ICs0NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AoKSA9
PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50
cykgeworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1lbnRzIHx8IG9wKCkg
PT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cyB8fCBvcCgpID09IFBoYW50b21DcmVhdGVSZXN0KSB7
CiAgICAgICAgICAgICAvLyBUaGVzZSBwcmV0ZW5kIHRvIGJlIHRoZSBlbXB0eSB2YWx1ZSBjb25z
dGFudCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIERGRyBiYWNrZW5kLCB3aGljaAogICAgICAgICAg
ICAgLy8gb3RoZXJ3aXNlIHdvdWxkbid0IHRha2Uga2luZGx5IHRvIGEgbm9kZSB0aGF0IGRvZXNu
J3QgY29tcHV0ZSBhIHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0
eVNpbmdsZXRvbigpOwpAQCAtMTc0NSw2ICsxNzQ2LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0
Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQaGFu
dG9tTmV3RnVuY3Rpb246CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9u
OgpAQCAtMjM4OCw3ICsyMzkwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlUmVz
dCB8fCBvcCgpID09IEdldFJlc3RMZW5ndGgpOworICAgICAgICBBU1NFUlQob3AoKSA9PSBDcmVh
dGVSZXN0IHx8IG9wKCkgPT0gR2V0UmVzdExlbmd0aCB8fCBvcCgpID09IEdldE15QXJndW1lbnRC
eVZhbCB8fCBvcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKTsKICAgICAgICAg
cmV0dXJuIG1fb3BJbmZvLmFzPHVuc2lnbmVkPigpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA4MTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIs
NiArMzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICBt
YWNybyhDcmVhdGVEaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBo
YW50b21EaXJlY3RBcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhQaGFudG9tQ3JlYXRlUmVzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhQaGFudG9tQ2xvbmVkQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIwODE5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCB2b2lkIExvY2FsT1NS
QXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICBjYXNlIFBoYW50b21EaXJlY3RB
cmd1bWVudHM6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOiB7CiAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZTsKQEAgLTE3Myw2ICsxNzQsMTAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJp
bGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICAgICAgLy8gZ2l2ZW4gdGhhdCB3ZSBjYW4gcmVh
ZCB0aGVtIGZyb20gdGhlIHN0YWNrLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IDA7CisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KQorICAgICAgICAgICAgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPSBub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAg
ICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAg
ICAgIC8vIFJlY29yZCBob3cgdG8gcmVhZCBlYWNoIGFyZ3VtZW50IGFuZCB0aGUgYXJndW1lbnQg
Y291bnQuCkBAIC0xODgsNyArMTkzLDcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1
bGF0b3I6OmV4ZQogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDE7ICsraSkgewogICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGFyZ3Vt
ZW50ID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChp
KSk7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1OCw3ICsxMzU4LDcg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlcwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CiAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoUmVnaXN0ZXIpID09IHNpemVvZihKU1ZhbHVlKSwgIlRoaXMgaXMg
YSBzdHJvbmcgYXNzdW1wdGlvbiBoZXJlLiIpOwogICAgIEpTVmFsdWUqIGFyZ3VtZW50c1RvQ29w
eVJlZ2lvbiA9IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oYXJndW1lbnRTdGFydCkgKyBudW1iZXJP
ZlBhcmFtc1RvU2tpcDsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJl
LCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2
aXNpb24gMjA4MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNSArMTIwLDI0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5hcmd1bWVudHND
aGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZTsKKworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSAwOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBHZXRNeUFy
Z3VtZW50QnlWYWwgfHwgbV9ub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9mIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwIGd1YXJhbnRlZXMgdGhhdCBHZXRNeUFyZ3VtZW50QnlWYWwqIHdpbGwgbmV2ZXIKKyAg
ICAgICAgICAgICAgICAvLyByZWFkIGFueSBhcmd1bWVudHMgYmVsb3cgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMgdG8gc2tpcC4gRm9yIGV4YW1wbGUsIGlmIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
IGlzIDIsCisgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBuZXZlciByZWFkIGFyZ3VtZW50IDAg
b3IgYXJndW1lbnQgMS4KKyAgICAgICAgICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAvLyBSZWFk
IHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzIGFuZCBhcmd1bWVudCBjb3VudC4KLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2dyYXBoLm1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOyBpKyspCiAgICAgICAgICAgICAgICAgICAgIG1f
cmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CiAgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsg
aS0tID4gMTspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGkrKykK
ICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwog
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAg
ICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA0LDYg
KzEwMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5j
dGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2Fz
ZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0
OgogICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91
bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDcgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdP
YmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQ
aGFudG9tRGlyZWN0QXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAg
Y2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
OgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MDEsNiArNTYwMSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFN0YWNr
OgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDoKICAgICAgICAgREZH
X0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tl
bmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDgxOTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODE4LDYgKzU4MTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdGFjazoKICAgICBjYXNlIEtpbGxTdGFjazoK
ICAgICBjYXNlIEdldFN0YWNrOgorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDgxOTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg1
Miw2ICs2ODUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVJlc3QoTgog
ICAgICAgICBHUFJSZWcgYXJyYXlSZXN1bHRHUFIgPSBhcnJheVJlc3VsdC5ncHIoKTsKIAogICAg
ICAgICBib29sIHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJh
eXMgPSBmYWxzZTsKKyAgICAgICAgQVNTRVJUKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgICAgIGNvbXBpbGVBbGxvY2F0
ZU5ld0FycmF5V2l0aFNpemUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgYXJyYXlSZXN1bHRHUFIsIGFycmF5TGVuZ3RoR1BSLCBBcnJheVdpdGhD
b250aWd1b3VzLCBzaG91bGRBbGxvd0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxhcmdlQXJy
YXlzKTsKIAogICAgICAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRzU3RhcnQodGhpcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCw2ICsxMTgsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGUoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNl
IENyZWF0ZVJlc3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGlu
Z0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE5ld1R5
cGVkQXJyYXk6CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwODE5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzAsNiArNjcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21O
ZXdHZW5lcmF0b3JGdW5jdGlvbjoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVB
Y3RpdmF0aW9uOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OgogICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA4MTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzAsNiArMjMwLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlh
bGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgor
ICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1l
bnRzOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsT3V0T2ZCb3VuZHM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDgxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzQsNiAr
MTA3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0
aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICBjYXNl
IFBoYW50b21EaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6
CiAgICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBQdXRI
aW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgpAQCAtMzQzNCw2ICszNDM1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUt
PmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAKICAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
IGlmIChtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpCisgICAgICAgICAgICBpbmRl
eCA9IG1fb3V0LmFkZChpbmRleCwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsaW1pdDsKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkK
QEAgLTQxNTcsNyArNDE2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgYXJyYXlM
ZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7CiAgICAgICAgICAgICBBcnJheVZh
bHVlcyBhcnJheVZhbHVlcyA9IGFsbG9jYXRlVW5pbml0aWFsaXplZENvbnRpZ3VvdXNKU0FycmF5
KGFycmF5TGVuZ3RoLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgTFZhbHVlIGFycmF5ID0gYXJy
YXlWYWx1ZXMuYXJyYXk7CiAgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gYXJyYXlWYWx1
ZXMuYnV0dGVyZmx5OwpAQCAtNjI4NSwxNyArNjI4OCw0NyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
ID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUp
LnZhbHVlOwotICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSAtIGRhdGEtPm9mZnNldCkpOwotICAgICAgICAKKwor
ICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbnVsbHB0cjsgCisgICAgICAgIExWYWx1ZSBsZW5ndGhJ
bmNsdWRpbmdUaGlzID0gbnVsbHB0cjsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGFyZ3VtZW50
c0xlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBp
ZiAoYXJndW1lbnRzTGVuZ3RoLmlzS25vd24pIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGtub3du
TGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoLmtub3duOworICAgICAgICAgICAgaWYgKGtub3duTGVu
Z3RoID49IGRhdGEtPm9mZnNldCkKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9IGtub3du
TGVuZ3RoIC0gZGF0YS0+b2Zmc2V0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGtub3duTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmNvbnN0SW50MzIo
a25vd25MZW5ndGgpOworICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNv
bnN0SW50MzIoa25vd25MZW5ndGggKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUg
Y29kZSBhYm92ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgorICAgICAgICAgICAg
aWYgKCFkYXRhLT5vZmZzZXQpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzTGVu
Z3RoLnZhbHVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaXNMYXJnZXIsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbGFyZ2VyTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1
bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSkpOworICAg
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAg
IGxlbmd0aCA9IG1fb3V0LnBoaShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxh
cmdlckxlbmd0aFJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW5ndGhJbmNs
dWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxKSk7CisgICAg
ICAgIH0KKwogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAogICAg
ICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+
bWFjaGluZUNvdW50KSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBn
ZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKKyAgICAgICAgTFZhbHVlIHNvdXJj
ZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCk7CiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5l
ZExvb3AgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNjMyOCw5ICs2MzYxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBsb29wQm91
bmQpOwogICAgICAgICBjdXJyZW50SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9v
dXQuaW50UHRyT25lKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAotICAg
ICAgICAgICAgbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMudmFyaWFi
bGVzLCBzb3VyY2VTdGFydCwKLSAgICAgICAgICAgICAgICBtX291dC5hZGQoY3VycmVudEluZGV4
LCBtX291dC5jb25zdEludFB0cihkYXRhLT5vZmZzZXQpKSkpOworICAgICAgICAgICAgbV9vdXQu
YmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwgY3VycmVudEluZGV4KSk7
CiAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZh
cmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwogICAgICAgICBuZXh0SW5kZXgg
PSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwpAQCAtODM3Niw5ICs4NDA3LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIExWYWx1ZSBnZXRBcmd1bWVu
dHNTdGFydChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgb2Zmc2V0
ID0gMCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFzc2VtYmx5SGVs
cGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVDYWxs
RnJhbWUpICsgb2Zmc2V0OwogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGFydCkudmFsdWUo
KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgZXh0
ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUAogICAgIGNhc2UgUGhhbnRvbU5l
d0dlbmVyYXRvckZ1bmN0aW9uOgogICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoKICAg
ICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVz
dDoKICAgICAgICAgLy8gVGhvc2UgYXJlIGNvbXBsZXRlbHkgaGFuZGxlZCBieSBvcGVyYXRpb25N
YXRlcmlhbGl6ZU9iamVjdEluT1NSCiAgICAgICAgIGJyZWFrOwogCkBAIC0yMzQsNiArMjM1LDcg
QEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGNhc2UgUGhhbnRvbUNyZWF0ZVJlc3Q6CiAgICAgY2Fz
ZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50
czogewogICAgICAgICBpZiAoIW1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCkuaW5saW5lQ2FsbEZy
YW1lKSB7CkBAIC0yNDIsNiArMjQ0LDE3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGkKICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0QXJndW1lbnRzOjpjcmVh
dGVCeUNvcHlpbmcoZXhlYyk7CiAgICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1h
Y2hpbmVGcmFtZShleGVjLCBleGVjLCBBcmd1bWVudHNNb2RlOjpDbG9uZWQpOworICAgICAgICAg
ICAgY2FzZSBQaGFudG9tQ3JlYXRlUmVzdDogeworICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
aygKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+
Y29kZUJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKiBhcmd1
bWVudHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNzT2ZBcmd1bWVudHNTdGFydCgpICsgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlTaXpl
ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID4gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPyBleGVj
LT5hcmd1bWVudENvdW50KCkgLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA6IDA7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRz
VG9Db3B5UmVnaW9uLCBhcnJheVNpemUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjU1LDE0ICsyNjgsMTIgQEAgZXh0ZXJu
ICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgICAgIGNvbnN0
IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGll
cygpW2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yKEFyZ3VtZW50Q291bnRQTG9jKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYXJndW1l
bnRDb3VudCA9IEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pLmFzVUludDMyKCk7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVu
dENvdW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gbWF0
ZXJpYWxpemF0aW9uLT5vcmlnaW4oKS5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAg
ICAgSlNGdW5jdGlvbiogY2FsbGVlID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1hdGVyaWFsaXph
dGlvbi0+b3JpZ2luKCkuaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CkBAIC0zMzAs
NiArMzQxLDU2IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIFBoYW50b21DcmVhdGVSZXN0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMTsKKyAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3Qt
PnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChhcmd1bWVudENv
dW50ID4gMCk7CisgICAgICAgICAgICB1bnNpZ25lZCBhcnJheVNpemUgPSAoYXJndW1lbnRDb3Vu
dCAtIDEpID4gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPyBhcmd1bWVudENvdW50IC0gMSAtIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwIDogMDsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgc3RydWN0dXJlLCBhcnJheVNpemUp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOworCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBt
YXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gcHJv
cGVydHkubG9jYXRpb24oKS5pbmZvKCk7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID4gYXJnSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5SW5kZXggPSBhcmdJbmRleCAtIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5
U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXJy
YXktPmluaXRpYWxpemVJbmRleCh2bSwgYXJyYXlJbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
c1tpXSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGF2b2lkIHRoaXMgTyhuXjIpIGxvb3Agd2hlbiBh
c3NlcnRzIGFyZSBkaXNhYmxlZCwgYnV0IHRoZSBjb25kaXRpb24gY2hlY2tlZCBoZXJlCisgICAg
ICAgICAgICAgICAgLy8gbXVzdCBob2xkIHRvIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhl
IGFib3ZlIGxvb3AgYmVjYXVzZSBvZiBob3cgd2UgYWxsb2NhdGUgdGhlIGFycmF5LgorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOyB0YXJnZXRJbmRleCA8IGFy
cmF5U2l6ZTsgKyt0YXJnZXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFs
aXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHku
bG9jYXRpb24oKS5raW5kKCkgIT0gQXJndW1lbnRQTG9jKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJ
bmRleCA9IHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID4gYXJnSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhcnJheUluZGV4ID0gYXJnSW5kZXggLSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcnJheUluZGV4ID09IHRhcmdldEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChmb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBW
YXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAyMDgxOTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCB2b2lkIGVtaXRTZXRWYXJhcmdzRnJhbWUoQ0NhbGxIZWxwZXJzJiBqCiAgICAg
aml0LmFuZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih+KHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkgLSAxKSksIHJlc3VsdEdQUik7CiAKICAgICBqaXQuYWRkUHRyKGxlbmd0aEdQUiwg
cmVzdWx0R1BSKTsKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhpcz8gMCA6
IDEpKSwgcmVzdWx0R1BSKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgKGxlbmd0aEluY2x1ZGVzVGhp
cyA/IDAgOiAxKSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgLy8gcmVzdWx0R1BSIG5vdyBoYXMg
dGhlIHJlcXVpcmVkIGZyYW1lIHNpemUgaW4gUmVnaXN0ZXIgdW5pdHMKICAgICAvLyBSb3VuZCBy
ZXN1bHRHUFIgdG8gbmV4dCBtdWx0aXBsZSBvZiBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw3ICs4NTEsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiAgICAgQkVHSU4oKTsKICAgICB1
bnNpZ25lZCBhcnJheVNpemUgPSBPUF9DKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVj
dHVyZSgpOwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IHBjWzNdLnUudW5zaWduZWRW
YWx1ZTsKICAgICBKU1ZhbHVlKiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBleGVjLT5hZGRyZXNz
T2ZBcmd1bWVudHNTdGFydCgpICsgbnVtUGFyYW1zVG9Ta2lwOwogICAgIFJFVFVSTihjb25zdHJ1
Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXpl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDIwODE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQCBwdWJs
aWM6CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3Ry
dWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlSZXZv
a2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZUxvYWRlclN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpOyB9CisgICAg
U3RydWN0dXJlKiByZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3Vv
dXMpOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJlbW90ZURlYnVnZ2luZ0Vu
YWJsZWQoYm9vbCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZW1vdGVEZWJ1Z2dpbmdF
bmFibGVkKCkgY29uc3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>